# Generated by Django 5.2.6 on 2026-06-13 08:20

import django.db.models.deletion
import uuid
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ("hr_core", "0002_add_tenant_scoped"),
        ("organizations", "0002_workspace_template_user_context_pref"),
        ("tenants", "0001_initial"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name="ContractType",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                ("code", models.CharField(max_length=40, verbose_name="code")),
                ("name", models.CharField(max_length=120, verbose_name="name")),
                ("is_fixed_term", models.BooleanField(default=False, verbose_name="fixed term")),
                (
                    "default_notice_days",
                    models.PositiveSmallIntegerField(
                        default=30, verbose_name="default notice days"
                    ),
                ),
                ("description", models.TextField(blank=True, verbose_name="description")),
            ],
            options={
                "verbose_name": "Contract Type",
                "verbose_name_plural": "Contract Types",
                "db_table": "hr_contract_type",
                "ordering": ["name"],
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="Dependent",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                ("first_name", models.CharField(max_length=80, verbose_name="first name")),
                ("last_name", models.CharField(max_length=80, verbose_name="last name")),
                ("relationship", models.CharField(max_length=40, verbose_name="relationship")),
                ("birth_date", models.DateField(verbose_name="birth date")),
                (
                    "national_id",
                    models.CharField(
                        blank=True,
                        help_text="Stored encrypted.",
                        max_length=512,
                        verbose_name="national ID",
                    ),
                ),
                ("is_beneficiary", models.BooleanField(default=False, verbose_name="beneficiary")),
            ],
            options={
                "verbose_name": "Dependent",
                "verbose_name_plural": "Dependents",
                "db_table": "hr_dependent",
                "ordering": ["last_name", "first_name"],
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="EmergencyContact",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                ("name", models.CharField(max_length=160, verbose_name="name")),
                ("relationship", models.CharField(max_length=80, verbose_name="relationship")),
                ("primary_phone", models.CharField(max_length=30, verbose_name="primary phone")),
                (
                    "secondary_phone",
                    models.CharField(blank=True, max_length=30, verbose_name="secondary phone"),
                ),
                ("email", models.EmailField(blank=True, max_length=254, verbose_name="email")),
                ("address", models.TextField(blank=True, verbose_name="address")),
                ("is_primary", models.BooleanField(default=False, verbose_name="primary contact")),
            ],
            options={
                "verbose_name": "Emergency Contact",
                "verbose_name_plural": "Emergency Contacts",
                "db_table": "hr_emergency_contact",
                "ordering": ["-is_primary", "name"],
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="EmployeeNumberSequence",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                ("prefix", models.CharField(max_length=20, verbose_name="prefix")),
                ("last_seq", models.PositiveIntegerField(default=0, verbose_name="last sequence")),
            ],
            options={
                "verbose_name": "Employee Number Sequence",
                "verbose_name_plural": "Employee Number Sequences",
                "db_table": "hr_employee_number_sequence",
            },
        ),
        migrations.CreateModel(
            name="Employment",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "is_deleted",
                    models.BooleanField(db_index=True, default=False, verbose_name="deleted"),
                ),
                (
                    "deleted_at",
                    models.DateTimeField(blank=True, null=True, verbose_name="deleted at"),
                ),
                ("version", models.PositiveIntegerField(default=0, verbose_name="version")),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                (
                    "employment_type",
                    models.CharField(
                        choices=[
                            ("full_time", "Full-time"),
                            ("part_time", "Part-time"),
                            ("contract", "Contract"),
                            ("intern", "Intern"),
                        ],
                        default="full_time",
                        max_length=20,
                        verbose_name="employment type",
                    ),
                ),
                ("hire_date", models.DateField(verbose_name="hire date")),
                (
                    "termination_date",
                    models.DateField(blank=True, null=True, verbose_name="termination date"),
                ),
                (
                    "probation_end_date",
                    models.DateField(blank=True, null=True, verbose_name="probation end date"),
                ),
                (
                    "notice_period_days",
                    models.PositiveSmallIntegerField(
                        default=30, verbose_name="notice period (days)"
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("active", "Active"),
                            ("on_leave", "On Leave"),
                            ("suspended", "Suspended"),
                            ("terminated", "Terminated"),
                            ("resigned", "Resigned"),
                            ("retired", "Retired"),
                        ],
                        default="active",
                        max_length=20,
                        verbose_name="status",
                    ),
                ),
                (
                    "work_location",
                    models.CharField(blank=True, max_length=200, verbose_name="work location"),
                ),
            ],
            options={
                "verbose_name": "Employment",
                "verbose_name_plural": "Employments",
                "db_table": "hr_employment",
                "ordering": ["employee__last_name", "employee__first_name"],
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="EmploymentContract",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                ("start_date", models.DateField(verbose_name="start date")),
                ("end_date", models.DateField(blank=True, null=True, verbose_name="end date")),
                (
                    "signed_date",
                    models.DateField(blank=True, null=True, verbose_name="signed date"),
                ),
                (
                    "document_reference",
                    models.CharField(
                        blank=True,
                        help_text="UUID of the signed contract in DMS.",
                        max_length=36,
                        verbose_name="document reference",
                    ),
                ),
                ("is_active", models.BooleanField(default=True, verbose_name="active")),
                ("terms", models.JSONField(blank=True, default=dict, verbose_name="terms")),
            ],
            options={
                "verbose_name": "Employment Contract",
                "verbose_name_plural": "Employment Contracts",
                "db_table": "hr_employment_contract",
                "ordering": ["-start_date"],
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="JobFamily",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                ("code", models.CharField(max_length=40, verbose_name="code")),
                ("name", models.CharField(max_length=120, verbose_name="name")),
                ("description", models.TextField(blank=True, verbose_name="description")),
            ],
            options={
                "verbose_name": "Job Family",
                "verbose_name_plural": "Job Families",
                "db_table": "hr_job_family",
                "ordering": ["name"],
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="JobGrade",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                ("code", models.CharField(max_length=40, verbose_name="code")),
                ("name", models.CharField(max_length=120, verbose_name="name")),
                (
                    "grade_level",
                    models.PositiveSmallIntegerField(
                        help_text="Numeric level for comparison. Higher = more senior.",
                        verbose_name="grade level",
                    ),
                ),
                (
                    "min_salary",
                    models.DecimalField(
                        blank=True,
                        decimal_places=2,
                        max_digits=12,
                        null=True,
                        verbose_name="min salary",
                    ),
                ),
                (
                    "max_salary",
                    models.DecimalField(
                        blank=True,
                        decimal_places=2,
                        max_digits=12,
                        null=True,
                        verbose_name="max salary",
                    ),
                ),
                (
                    "currency",
                    models.CharField(default="USD", max_length=3, verbose_name="currency"),
                ),
            ],
            options={
                "verbose_name": "Job Grade",
                "verbose_name_plural": "Job Grades",
                "db_table": "hr_job_grade",
                "ordering": ["grade_level"],
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="Position",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                ("version", models.PositiveIntegerField(default=0, verbose_name="version")),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                ("position_code", models.CharField(max_length=40, verbose_name="position code")),
                ("title", models.CharField(max_length=200, verbose_name="title")),
                ("is_budgeted", models.BooleanField(default=True, verbose_name="budgeted")),
                (
                    "fte",
                    models.DecimalField(
                        decimal_places=2,
                        default=1.0,
                        help_text="Full-time equivalent. 1.0 = full-time, 0.5 = half-time.",
                        max_digits=3,
                        verbose_name="FTE",
                    ),
                ),
                (
                    "max_headcount",
                    models.PositiveSmallIntegerField(
                        default=1,
                        help_text="Maximum number of employees that can hold this position.",
                        verbose_name="max headcount",
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("active", "Active"),
                            ("frozen", "Frozen"),
                            ("closed", "Closed"),
                            ("planned", "Planned"),
                        ],
                        default="planned",
                        max_length=20,
                        verbose_name="status",
                    ),
                ),
                ("valid_from", models.DateField(verbose_name="valid from")),
                ("valid_to", models.DateField(blank=True, null=True, verbose_name="valid to")),
                ("description", models.TextField(blank=True, verbose_name="description")),
            ],
            options={
                "verbose_name": "Position",
                "verbose_name_plural": "Positions",
                "db_table": "hr_position",
                "ordering": ["department", "title"],
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="PositionAssignment",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                ("start_date", models.DateField(verbose_name="start date")),
                ("end_date", models.DateField(blank=True, null=True, verbose_name="end date")),
                (
                    "is_primary",
                    models.BooleanField(default=True, verbose_name="primary assignment"),
                ),
                (
                    "assignment_type",
                    models.CharField(
                        choices=[
                            ("permanent", "Permanent"),
                            ("temporary", "Temporary"),
                            ("secondment", "Secondment"),
                        ],
                        default="permanent",
                        max_length=20,
                        verbose_name="type",
                    ),
                ),
            ],
            options={
                "verbose_name": "Position Assignment",
                "verbose_name_plural": "Position Assignments",
                "db_table": "hr_position_assignment",
                "ordering": ["-is_primary", "start_date"],
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="WorkLocation",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                ("code", models.CharField(max_length=40, verbose_name="code")),
                ("name", models.CharField(max_length=200, verbose_name="name")),
                (
                    "address_line1",
                    models.CharField(blank=True, max_length=200, verbose_name="address line 1"),
                ),
                (
                    "address_line2",
                    models.CharField(blank=True, max_length=200, verbose_name="address line 2"),
                ),
                ("city", models.CharField(blank=True, max_length=100, verbose_name="city")),
                (
                    "state",
                    models.CharField(blank=True, max_length=100, verbose_name="state/province"),
                ),
                (
                    "postal_code",
                    models.CharField(blank=True, max_length=20, verbose_name="postal code"),
                ),
                ("country", models.CharField(blank=True, max_length=2, verbose_name="country")),
                ("timezone", models.CharField(blank=True, max_length=50, verbose_name="timezone")),
                ("is_remote", models.BooleanField(default=False, verbose_name="remote")),
                ("is_active", models.BooleanField(default=True, verbose_name="active")),
            ],
            options={
                "verbose_name": "Work Location",
                "verbose_name_plural": "Work Locations",
                "db_table": "hr_work_location",
                "ordering": ["name"],
                "abstract": False,
            },
        ),
        migrations.AlterModelOptions(
            name="attendancerecord",
            options={
                "ordering": ["-date"],
                "verbose_name": "Attendance Record",
                "verbose_name_plural": "Attendance Records",
            },
        ),
        migrations.AlterModelOptions(
            name="employee",
            options={
                "ordering": ["last_name", "first_name"],
                "verbose_name": "Employee",
                "verbose_name_plural": "Employees",
            },
        ),
        migrations.AlterModelOptions(
            name="employeebankaccount",
            options={
                "ordering": ["-is_default", "bank_name"],
                "verbose_name": "Bank Account",
                "verbose_name_plural": "Bank Accounts",
            },
        ),
        migrations.AlterModelOptions(
            name="employeedocument",
            options={
                "ordering": ["-created_at"],
                "verbose_name": "Employee Document",
                "verbose_name_plural": "Employee Documents",
            },
        ),
        migrations.AlterModelOptions(
            name="employeeshift",
            options={
                "ordering": ["-effective_from"],
                "verbose_name": "Employee Shift",
                "verbose_name_plural": "Employee Shifts",
            },
        ),
        migrations.AlterModelOptions(
            name="jobtitle",
            options={
                "ordering": ["title"],
                "verbose_name": "Job Title",
                "verbose_name_plural": "Job Titles",
            },
        ),
        migrations.AlterModelOptions(
            name="leavebalance",
            options={
                "ordering": ["-year", "leave_type__name"],
                "verbose_name": "Leave Balance",
                "verbose_name_plural": "Leave Balances",
            },
        ),
        migrations.AlterModelOptions(
            name="leaverequest",
            options={
                "ordering": ["-created_at"],
                "verbose_name": "Leave Request",
                "verbose_name_plural": "Leave Requests",
            },
        ),
        migrations.AlterModelOptions(
            name="leavetype",
            options={
                "ordering": ["name"],
                "verbose_name": "Leave Type",
                "verbose_name_plural": "Leave Types",
            },
        ),
        migrations.AlterModelOptions(
            name="publicholiday",
            options={
                "ordering": ["date"],
                "verbose_name": "Public Holiday",
                "verbose_name_plural": "Public Holidays",
            },
        ),
        migrations.AlterModelOptions(
            name="shiftdefinition",
            options={
                "ordering": ["name"],
                "verbose_name": "Shift Definition",
                "verbose_name_plural": "Shift Definitions",
            },
        ),
        migrations.AlterField(
            model_name="attendancerecord",
            name="check_in",
            field=models.TimeField(blank=True, null=True, verbose_name="check-in time"),
        ),
        migrations.AlterField(
            model_name="attendancerecord",
            name="check_out",
            field=models.TimeField(blank=True, null=True, verbose_name="check-out time"),
        ),
        migrations.AlterField(
            model_name="attendancerecord",
            name="created_at",
            field=models.DateTimeField(auto_now_add=True, db_index=True, verbose_name="created at"),
        ),
        migrations.AlterField(
            model_name="attendancerecord",
            name="date",
            field=models.DateField(verbose_name="date"),
        ),
        migrations.AlterField(
            model_name="attendancerecord",
            name="employee",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="attendance_records",
                to="hr_core.employee",
                verbose_name="employee",
            ),
        ),
        migrations.AlterField(
            model_name="attendancerecord",
            name="id",
            field=models.BigAutoField(
                auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
            ),
        ),
        migrations.AlterField(
            model_name="attendancerecord",
            name="is_finalized",
            field=models.BooleanField(
                default=False,
                help_text="Finalized records cannot be manually edited.",
                verbose_name="finalized",
            ),
        ),
        migrations.AlterField(
            model_name="attendancerecord",
            name="note",
            field=models.TextField(blank=True, default="", verbose_name="note"),
        ),
        migrations.AlterField(
            model_name="attendancerecord",
            name="overtime_minutes",
            field=models.PositiveIntegerField(default=0, verbose_name="overtime minutes"),
        ),
        migrations.AlterField(
            model_name="attendancerecord",
            name="public_id",
            field=models.UUIDField(
                db_index=True,
                default=uuid.uuid4,
                editable=False,
                unique=True,
                verbose_name="public id",
            ),
        ),
        migrations.AlterField(
            model_name="attendancerecord",
            name="source",
            field=models.CharField(
                choices=[
                    ("manual", "Manual Entry"),
                    ("biometric", "Biometric Device"),
                    ("mobile", "Mobile App"),
                    ("system", "System"),
                ],
                default="manual",
                max_length=20,
                verbose_name="source",
            ),
        ),
        migrations.AlterField(
            model_name="attendancerecord",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="attendance_records",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AlterField(
            model_name="attendancerecord",
            name="updated_at",
            field=models.DateTimeField(auto_now=True, verbose_name="updated at"),
        ),
        migrations.AlterField(
            model_name="attendancerecord",
            name="work_minutes",
            field=models.PositiveIntegerField(
                blank=True,
                help_text="Computed: (check_out - check_in) - break_minutes.",
                null=True,
                verbose_name="work minutes",
            ),
        ),
        migrations.AlterField(
            model_name="employee",
            name="birth_date",
            field=models.DateField(blank=True, null=True, verbose_name="birth date"),
        ),
        migrations.AlterField(
            model_name="employee",
            name="created_at",
            field=models.DateTimeField(auto_now_add=True, db_index=True, verbose_name="created at"),
        ),
        migrations.AlterField(
            model_name="employee",
            name="deleted_at",
            field=models.DateTimeField(blank=True, null=True, verbose_name="deleted at"),
        ),
        migrations.AlterField(
            model_name="employee",
            name="deleted_by",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="+",
                to=settings.AUTH_USER_MODEL,
                verbose_name="deleted by",
            ),
        ),
        migrations.AlterField(
            model_name="employee",
            name="department",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="employees",
                to="organizations.organizationnode",
                verbose_name="department",
            ),
        ),
        migrations.AlterField(
            model_name="employee",
            name="display_name",
            field=models.CharField(blank=True, max_length=160, verbose_name="display name"),
        ),
        migrations.AlterField(
            model_name="employee",
            name="employee_no",
            field=models.CharField(blank=True, max_length=30, verbose_name="employee number"),
        ),
        migrations.AlterField(
            model_name="employee",
            name="employment_type",
            field=models.CharField(
                choices=[
                    ("full_time", "Full-time"),
                    ("part_time", "Part-time"),
                    ("contract", "Contract"),
                    ("intern", "Intern"),
                ],
                default="full_time",
                max_length=20,
                verbose_name="employment type",
            ),
        ),
        migrations.AlterField(
            model_name="employee",
            name="extra_data",
            field=models.JSONField(
                blank=True,
                default=dict,
                help_text="Arbitrary extensible key-value data for custom fields.",
                verbose_name="extra data",
            ),
        ),
        migrations.AlterField(
            model_name="employee",
            name="first_name",
            field=models.CharField(max_length=80, verbose_name="first name"),
        ),
        migrations.AlterField(
            model_name="employee",
            name="gender",
            field=models.CharField(
                blank=True,
                choices=[
                    ("male", "Male"),
                    ("female", "Female"),
                    ("other", "Other"),
                    ("prefer_not", "Prefer not to say"),
                ],
                max_length=20,
                verbose_name="gender",
            ),
        ),
        migrations.AlterField(
            model_name="employee",
            name="hire_date",
            field=models.DateField(verbose_name="hire date"),
        ),
        migrations.AlterField(
            model_name="employee",
            name="id",
            field=models.BigAutoField(
                auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
            ),
        ),
        migrations.AlterField(
            model_name="employee",
            name="is_deleted",
            field=models.BooleanField(db_index=True, default=False, verbose_name="deleted"),
        ),
        migrations.AlterField(
            model_name="employee",
            name="job_title",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="employees",
                to="hr_core.jobtitle",
                verbose_name="job title",
            ),
        ),
        migrations.AlterField(
            model_name="employee",
            name="last_name",
            field=models.CharField(max_length=80, verbose_name="last name"),
        ),
        migrations.AlterField(
            model_name="employee",
            name="manager",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="direct_reports",
                to="hr_core.employee",
                verbose_name="manager",
            ),
        ),
        migrations.AlterField(
            model_name="employee",
            name="mobile",
            field=models.CharField(blank=True, max_length=30, verbose_name="mobile"),
        ),
        migrations.AlterField(
            model_name="employee",
            name="national_id",
            field=models.CharField(
                blank=True,
                help_text="Stored encrypted. Requires hr.employee.sensitive.view to read.",
                max_length=512,
                verbose_name="national ID",
            ),
        ),
        migrations.AlterField(
            model_name="employee",
            name="organization_node",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.PROTECT,
                related_name="+",
                to="organizations.organizationnode",
                verbose_name="organization node",
            ),
        ),
        migrations.AlterField(
            model_name="employee",
            name="personal_email",
            field=models.EmailField(blank=True, max_length=254, verbose_name="personal email"),
        ),
        migrations.AlterField(
            model_name="employee",
            name="public_id",
            field=models.UUIDField(
                db_index=True,
                default=uuid.uuid4,
                editable=False,
                unique=True,
                verbose_name="public id",
            ),
        ),
        migrations.AlterField(
            model_name="employee",
            name="status",
            field=models.CharField(
                choices=[
                    ("active", "Active"),
                    ("on_leave", "On Leave"),
                    ("terminated", "Terminated"),
                    ("resigned", "Resigned"),
                ],
                default="active",
                max_length=20,
                verbose_name="status",
            ),
        ),
        migrations.AlterField(
            model_name="employee",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="+",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AlterField(
            model_name="employee",
            name="termination_date",
            field=models.DateField(blank=True, null=True, verbose_name="termination date"),
        ),
        migrations.AlterField(
            model_name="employee",
            name="updated_at",
            field=models.DateTimeField(auto_now=True, verbose_name="updated at"),
        ),
        migrations.AlterField(
            model_name="employee",
            name="user",
            field=models.OneToOneField(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="employee_profile",
                to=settings.AUTH_USER_MODEL,
                verbose_name="user account",
            ),
        ),
        migrations.AlterField(
            model_name="employee",
            name="version",
            field=models.PositiveIntegerField(default=0, verbose_name="version"),
        ),
        migrations.AlterField(
            model_name="employee",
            name="work_email",
            field=models.EmailField(blank=True, max_length=254, verbose_name="work email"),
        ),
        migrations.AlterField(
            model_name="employee",
            name="work_location",
            field=models.CharField(blank=True, max_length=200, verbose_name="work location"),
        ),
        migrations.AlterField(
            model_name="employeebankaccount",
            name="account_no",
            field=models.CharField(
                help_text="Stored encrypted.", max_length=512, verbose_name="account number"
            ),
        ),
        migrations.AlterField(
            model_name="employeebankaccount",
            name="bank_name",
            field=models.CharField(max_length=120, verbose_name="bank name"),
        ),
        migrations.AlterField(
            model_name="employeebankaccount",
            name="created_at",
            field=models.DateTimeField(auto_now_add=True, db_index=True, verbose_name="created at"),
        ),
        migrations.AlterField(
            model_name="employeebankaccount",
            name="employee",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="bank_accounts",
                to="hr_core.employee",
                verbose_name="employee",
            ),
        ),
        migrations.AlterField(
            model_name="employeebankaccount",
            name="iban",
            field=models.CharField(
                blank=True, help_text="Stored encrypted.", max_length=512, verbose_name="IBAN"
            ),
        ),
        migrations.AlterField(
            model_name="employeebankaccount",
            name="id",
            field=models.BigAutoField(
                auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
            ),
        ),
        migrations.AlterField(
            model_name="employeebankaccount",
            name="is_default",
            field=models.BooleanField(default=False, verbose_name="default"),
        ),
        migrations.AlterField(
            model_name="employeebankaccount",
            name="organization_node",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="+",
                to="organizations.organizationnode",
                verbose_name="organization node",
            ),
        ),
        migrations.AlterField(
            model_name="employeebankaccount",
            name="public_id",
            field=models.UUIDField(
                db_index=True,
                default=uuid.uuid4,
                editable=False,
                unique=True,
                verbose_name="public id",
            ),
        ),
        migrations.AlterField(
            model_name="employeebankaccount",
            name="tenant",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                related_name="+",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AlterField(
            model_name="employeebankaccount",
            name="updated_at",
            field=models.DateTimeField(auto_now=True, verbose_name="updated at"),
        ),
        migrations.AlterField(
            model_name="employeedocument",
            name="created_at",
            field=models.DateTimeField(auto_now_add=True, db_index=True, verbose_name="created at"),
        ),
        migrations.AlterField(
            model_name="employeedocument",
            name="dms_file_id",
            field=models.CharField(
                blank=True,
                help_text="UUID of the DMS FileRecord. Loose reference; no FK constraint.",
                max_length=36,
                verbose_name="DMS file ID",
            ),
        ),
        migrations.AlterField(
            model_name="employeedocument",
            name="doc_type",
            field=models.CharField(
                choices=[
                    ("id_card", "ID Card"),
                    ("passport", "Passport"),
                    ("contract", "Contract"),
                    ("certificate", "Certificate"),
                    ("other", "Other"),
                ],
                default="other",
                max_length=20,
                verbose_name="document type",
            ),
        ),
        migrations.AlterField(
            model_name="employeedocument",
            name="employee",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="documents",
                to="hr_core.employee",
                verbose_name="employee",
            ),
        ),
        migrations.AlterField(
            model_name="employeedocument",
            name="expiry_date",
            field=models.DateField(blank=True, null=True, verbose_name="expiry date"),
        ),
        migrations.AlterField(
            model_name="employeedocument",
            name="id",
            field=models.BigAutoField(
                auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
            ),
        ),
        migrations.AlterField(
            model_name="employeedocument",
            name="is_verified",
            field=models.BooleanField(default=False, verbose_name="verified"),
        ),
        migrations.AlterField(
            model_name="employeedocument",
            name="organization_node",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="+",
                to="organizations.organizationnode",
                verbose_name="organization node",
            ),
        ),
        migrations.AlterField(
            model_name="employeedocument",
            name="public_id",
            field=models.UUIDField(
                db_index=True,
                default=uuid.uuid4,
                editable=False,
                unique=True,
                verbose_name="public id",
            ),
        ),
        migrations.AlterField(
            model_name="employeedocument",
            name="tenant",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                related_name="+",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AlterField(
            model_name="employeedocument",
            name="title",
            field=models.CharField(blank=True, max_length=200, verbose_name="title"),
        ),
        migrations.AlterField(
            model_name="employeedocument",
            name="updated_at",
            field=models.DateTimeField(auto_now=True, verbose_name="updated at"),
        ),
        migrations.AlterField(
            model_name="employeeshift",
            name="created_at",
            field=models.DateTimeField(auto_now_add=True, db_index=True, verbose_name="created at"),
        ),
        migrations.AlterField(
            model_name="employeeshift",
            name="effective_from",
            field=models.DateField(verbose_name="effective from"),
        ),
        migrations.AlterField(
            model_name="employeeshift",
            name="effective_to",
            field=models.DateField(blank=True, null=True, verbose_name="effective to"),
        ),
        migrations.AlterField(
            model_name="employeeshift",
            name="employee",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="shift_assignments",
                to="hr_core.employee",
                verbose_name="employee",
            ),
        ),
        migrations.AlterField(
            model_name="employeeshift",
            name="id",
            field=models.BigAutoField(
                auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
            ),
        ),
        migrations.AlterField(
            model_name="employeeshift",
            name="shift",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.PROTECT,
                related_name="employee_assignments",
                to="hr_core.shiftdefinition",
                verbose_name="shift",
            ),
        ),
        migrations.AlterField(
            model_name="employeeshift",
            name="updated_at",
            field=models.DateTimeField(auto_now=True, verbose_name="updated at"),
        ),
        migrations.AlterField(
            model_name="jobtitle",
            name="created_at",
            field=models.DateTimeField(auto_now_add=True, db_index=True, verbose_name="created at"),
        ),
        migrations.AlterField(
            model_name="jobtitle",
            name="department",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="job_titles",
                to="organizations.organizationnode",
                verbose_name="department",
            ),
        ),
        migrations.AlterField(
            model_name="jobtitle",
            name="id",
            field=models.BigAutoField(
                auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
            ),
        ),
        migrations.AlterField(
            model_name="jobtitle",
            name="level",
            field=models.PositiveSmallIntegerField(
                default=1,
                help_text="Seniority level 1 (junior) – 10 (executive).",
                verbose_name="level",
            ),
        ),
        migrations.AlterField(
            model_name="jobtitle",
            name="organization_node",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="+",
                to="organizations.organizationnode",
                verbose_name="organization node",
            ),
        ),
        migrations.AlterField(
            model_name="jobtitle",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="+",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AlterField(
            model_name="jobtitle",
            name="title",
            field=models.CharField(max_length=120, verbose_name="title"),
        ),
        migrations.AlterField(
            model_name="jobtitle",
            name="updated_at",
            field=models.DateTimeField(auto_now=True, verbose_name="updated at"),
        ),
        migrations.AlterField(
            model_name="leavebalance",
            name="allocated",
            field=models.DecimalField(
                decimal_places=2, default=0, max_digits=6, verbose_name="allocated days"
            ),
        ),
        migrations.AlterField(
            model_name="leavebalance",
            name="created_at",
            field=models.DateTimeField(auto_now_add=True, db_index=True, verbose_name="created at"),
        ),
        migrations.AlterField(
            model_name="leavebalance",
            name="employee",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="leave_balances",
                to="hr_core.employee",
                verbose_name="employee",
            ),
        ),
        migrations.AlterField(
            model_name="leavebalance",
            name="id",
            field=models.BigAutoField(
                auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
            ),
        ),
        migrations.AlterField(
            model_name="leavebalance",
            name="leave_type",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="balances",
                to="hr_core.leavetype",
                verbose_name="leave type",
            ),
        ),
        migrations.AlterField(
            model_name="leavebalance",
            name="pending",
            field=models.DecimalField(
                decimal_places=2, default=0, max_digits=6, verbose_name="pending days"
            ),
        ),
        migrations.AlterField(
            model_name="leavebalance",
            name="updated_at",
            field=models.DateTimeField(auto_now=True, verbose_name="updated at"),
        ),
        migrations.AlterField(
            model_name="leavebalance",
            name="used",
            field=models.DecimalField(
                decimal_places=2, default=0, max_digits=6, verbose_name="used days"
            ),
        ),
        migrations.AlterField(
            model_name="leavebalance",
            name="year",
            field=models.PositiveSmallIntegerField(verbose_name="year"),
        ),
        migrations.AlterField(
            model_name="leaverequest",
            name="created_at",
            field=models.DateTimeField(auto_now_add=True, db_index=True, verbose_name="created at"),
        ),
        migrations.AlterField(
            model_name="leaverequest",
            name="days_requested",
            field=models.DecimalField(
                decimal_places=2, default=0, max_digits=6, verbose_name="days requested"
            ),
        ),
        migrations.AlterField(
            model_name="leaverequest",
            name="employee",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="leave_requests",
                to="hr_core.employee",
                verbose_name="employee",
            ),
        ),
        migrations.AlterField(
            model_name="leaverequest",
            name="from_date",
            field=models.DateField(verbose_name="from date"),
        ),
        migrations.AlterField(
            model_name="leaverequest",
            name="id",
            field=models.BigAutoField(
                auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
            ),
        ),
        migrations.AlterField(
            model_name="leaverequest",
            name="leave_type",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.PROTECT,
                related_name="requests",
                to="hr_core.leavetype",
                verbose_name="leave type",
            ),
        ),
        migrations.AlterField(
            model_name="leaverequest",
            name="public_id",
            field=models.UUIDField(
                db_index=True,
                default=uuid.uuid4,
                editable=False,
                unique=True,
                verbose_name="public id",
            ),
        ),
        migrations.AlterField(
            model_name="leaverequest",
            name="reason",
            field=models.TextField(blank=True, verbose_name="reason"),
        ),
        migrations.AlterField(
            model_name="leaverequest",
            name="review_note",
            field=models.TextField(blank=True, verbose_name="review note"),
        ),
        migrations.AlterField(
            model_name="leaverequest",
            name="reviewed_at",
            field=models.DateTimeField(blank=True, null=True, verbose_name="reviewed at"),
        ),
        migrations.AlterField(
            model_name="leaverequest",
            name="reviewed_by",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="reviewed_leave_requests",
                to=settings.AUTH_USER_MODEL,
                verbose_name="reviewed by",
            ),
        ),
        migrations.AlterField(
            model_name="leaverequest",
            name="status",
            field=models.CharField(
                choices=[
                    ("draft", "Draft"),
                    ("pending", "Pending Approval"),
                    ("approved", "Approved"),
                    ("rejected", "Rejected"),
                    ("cancelled", "Cancelled"),
                ],
                default="draft",
                max_length=20,
                verbose_name="status",
            ),
        ),
        migrations.AlterField(
            model_name="leaverequest",
            name="submitted_at",
            field=models.DateTimeField(blank=True, null=True, verbose_name="submitted at"),
        ),
        migrations.AlterField(
            model_name="leaverequest",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="leave_requests",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AlterField(
            model_name="leaverequest",
            name="to_date",
            field=models.DateField(verbose_name="to date"),
        ),
        migrations.AlterField(
            model_name="leaverequest",
            name="updated_at",
            field=models.DateTimeField(auto_now=True, verbose_name="updated at"),
        ),
        migrations.AlterField(
            model_name="leavetype",
            name="accrual_method",
            field=models.CharField(
                choices=[("upfront", "Upfront"), ("monthly", "Monthly"), ("none", "None")],
                default="upfront",
                max_length=20,
                verbose_name="accrual method",
            ),
        ),
        migrations.AlterField(
            model_name="leavetype",
            name="carry_forward_days",
            field=models.DecimalField(
                decimal_places=2, default=0, max_digits=6, verbose_name="carry-forward days"
            ),
        ),
        migrations.AlterField(
            model_name="leavetype",
            name="code",
            field=models.CharField(max_length=40, verbose_name="code"),
        ),
        migrations.AlterField(
            model_name="leavetype",
            name="color",
            field=models.CharField(
                blank=True, default="#4A90D9", max_length=20, verbose_name="color"
            ),
        ),
        migrations.AlterField(
            model_name="leavetype",
            name="created_at",
            field=models.DateTimeField(auto_now_add=True, db_index=True, verbose_name="created at"),
        ),
        migrations.AlterField(
            model_name="leavetype",
            name="id",
            field=models.BigAutoField(
                auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
            ),
        ),
        migrations.AlterField(
            model_name="leavetype",
            name="is_paid",
            field=models.BooleanField(default=True, verbose_name="paid"),
        ),
        migrations.AlterField(
            model_name="leavetype",
            name="max_days_per_year",
            field=models.DecimalField(
                blank=True,
                decimal_places=2,
                max_digits=6,
                null=True,
                verbose_name="max days per year",
            ),
        ),
        migrations.AlterField(
            model_name="leavetype",
            name="name",
            field=models.CharField(max_length=120, verbose_name="name"),
        ),
        migrations.AlterField(
            model_name="leavetype",
            name="requires_approval",
            field=models.BooleanField(default=True, verbose_name="requires approval"),
        ),
        migrations.AlterField(
            model_name="leavetype",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="leave_types",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AlterField(
            model_name="leavetype",
            name="updated_at",
            field=models.DateTimeField(auto_now=True, verbose_name="updated at"),
        ),
        migrations.AlterField(
            model_name="publicholiday",
            name="calendar_type",
            field=models.CharField(
                choices=[
                    ("gregorian", "Gregorian"),
                    ("jalali", "Jalali (Solar Hijri)"),
                    ("hijri", "Hijri (Lunar)"),
                ],
                default="gregorian",
                max_length=20,
                verbose_name="calendar type",
            ),
        ),
        migrations.AlterField(
            model_name="publicholiday",
            name="created_at",
            field=models.DateTimeField(auto_now_add=True, db_index=True, verbose_name="created at"),
        ),
        migrations.AlterField(
            model_name="publicholiday",
            name="date",
            field=models.DateField(verbose_name="date"),
        ),
        migrations.AlterField(
            model_name="publicholiday",
            name="id",
            field=models.BigAutoField(
                auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
            ),
        ),
        migrations.AlterField(
            model_name="publicholiday",
            name="is_recurring",
            field=models.BooleanField(
                default=False,
                help_text="If True, this holiday repeats on the same date each year.",
                verbose_name="recurring annually",
            ),
        ),
        migrations.AlterField(
            model_name="publicholiday",
            name="name",
            field=models.CharField(max_length=200, verbose_name="name"),
        ),
        migrations.AlterField(
            model_name="publicholiday",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="public_holidays",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AlterField(
            model_name="publicholiday",
            name="updated_at",
            field=models.DateTimeField(auto_now=True, verbose_name="updated at"),
        ),
        migrations.AlterField(
            model_name="shiftdefinition",
            name="break_minutes",
            field=models.PositiveSmallIntegerField(
                default=0,
                help_text="Scheduled break duration deducted from work hours.",
                verbose_name="break minutes",
            ),
        ),
        migrations.AlterField(
            model_name="shiftdefinition",
            name="created_at",
            field=models.DateTimeField(auto_now_add=True, db_index=True, verbose_name="created at"),
        ),
        migrations.AlterField(
            model_name="shiftdefinition",
            name="end_time",
            field=models.TimeField(verbose_name="end time"),
        ),
        migrations.AlterField(
            model_name="shiftdefinition",
            name="id",
            field=models.BigAutoField(
                auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
            ),
        ),
        migrations.AlterField(
            model_name="shiftdefinition",
            name="name",
            field=models.CharField(max_length=120, verbose_name="name"),
        ),
        migrations.AlterField(
            model_name="shiftdefinition",
            name="start_time",
            field=models.TimeField(verbose_name="start time"),
        ),
        migrations.AlterField(
            model_name="shiftdefinition",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="shift_definitions",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AlterField(
            model_name="shiftdefinition",
            name="updated_at",
            field=models.DateTimeField(auto_now=True, verbose_name="updated at"),
        ),
        migrations.AlterField(
            model_name="shiftdefinition",
            name="work_days",
            field=models.JSONField(
                default=list,
                help_text="List of weekday ints (0=Mon … 6=Sun).",
                verbose_name="work days",
            ),
        ),
        migrations.AddIndex(
            model_name="attendancerecord",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_attendan_tenant__3623e8_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="attendancerecord",
            index=models.Index(
                fields=["tenant", "employee", "date"], name="hr_att_tenant_emp_date"
            ),
        ),
        migrations.AddIndex(
            model_name="attendancerecord",
            index=models.Index(
                fields=["tenant", "date", "is_finalized"], name="hr_att_tenant_date_fin"
            ),
        ),
        migrations.AddIndex(
            model_name="employee",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_employee_tenant__60bfd9_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="employee",
            index=models.Index(fields=["tenant", "status"], name="hr_employee_tenant_status"),
        ),
        migrations.AddIndex(
            model_name="employee",
            index=models.Index(fields=["tenant", "department"], name="hr_employee_tenant_dept"),
        ),
        migrations.AddIndex(
            model_name="employeebankaccount",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_employee_tenant__55e44a_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="employeedocument",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_employee_tenant__a9c770_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="employeeshift",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_employee_tenant__16e590_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="employeeshift",
            index=models.Index(
                fields=["employee", "effective_from"], name="hr_empshift_employee_from"
            ),
        ),
        migrations.AddIndex(
            model_name="leavebalance",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_leavebal_tenant__83d6d4_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="leaverequest",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_leavereq_tenant__b3f1c9_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="leaverequest",
            index=models.Index(
                fields=["tenant", "employee", "status"], name="hr_leavereq_tenant_emp_status"
            ),
        ),
        migrations.AddIndex(
            model_name="leaverequest",
            index=models.Index(
                fields=["tenant", "status", "from_date"], name="hr_leavereq_tenant_status_date"
            ),
        ),
        migrations.AddIndex(
            model_name="leaverequest",
            index=models.Index(
                fields=["employee", "leave_type", "status"], name="hr_leavereq_emp_type_status"
            ),
        ),
        migrations.AddIndex(
            model_name="leavetype",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_leavetyp_tenant__b1f5a1_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="publicholiday",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_publicho_tenant__c41b86_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="shiftdefinition",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_shiftdef_tenant__d15a18_idx"
            ),
        ),
        migrations.AddField(
            model_name="contracttype",
            name="organization_node",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="+",
                to="organizations.organizationnode",
                verbose_name="organization node",
            ),
        ),
        migrations.AddField(
            model_name="contracttype",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="+",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AddField(
            model_name="dependent",
            name="employee",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="dependents",
                to="hr_core.employee",
                verbose_name="employee",
            ),
        ),
        migrations.AddField(
            model_name="dependent",
            name="organization_node",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.PROTECT,
                related_name="+",
                to="organizations.organizationnode",
                verbose_name="organization node",
            ),
        ),
        migrations.AddField(
            model_name="dependent",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="+",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AddField(
            model_name="emergencycontact",
            name="employee",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="emergency_contacts",
                to="hr_core.employee",
                verbose_name="employee",
            ),
        ),
        migrations.AddField(
            model_name="emergencycontact",
            name="organization_node",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.PROTECT,
                related_name="+",
                to="organizations.organizationnode",
                verbose_name="organization node",
            ),
        ),
        migrations.AddField(
            model_name="emergencycontact",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="+",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AddField(
            model_name="employeenumbersequence",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="employee_number_sequences",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AddField(
            model_name="employment",
            name="deleted_by",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="+",
                to=settings.AUTH_USER_MODEL,
                verbose_name="deleted by",
            ),
        ),
        migrations.AddField(
            model_name="employment",
            name="department",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="employments",
                to="organizations.organizationnode",
                verbose_name="department",
            ),
        ),
        migrations.AddField(
            model_name="employment",
            name="employee",
            field=models.OneToOneField(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="employment",
                to="hr_core.employee",
                verbose_name="employee",
            ),
        ),
        migrations.AddField(
            model_name="employment",
            name="job_title",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="employments",
                to="hr_core.jobtitle",
                verbose_name="job title",
            ),
        ),
        migrations.AddField(
            model_name="employment",
            name="manager",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="managed_employments",
                to="hr_core.employee",
                verbose_name="manager",
            ),
        ),
        migrations.AddField(
            model_name="employment",
            name="organization_node",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.PROTECT,
                related_name="+",
                to="organizations.organizationnode",
                verbose_name="organization node",
            ),
        ),
        migrations.AddField(
            model_name="employment",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="+",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AddField(
            model_name="employmentcontract",
            name="contract_type",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.PROTECT,
                related_name="contracts",
                to="hr_core.contracttype",
                verbose_name="contract type",
            ),
        ),
        migrations.AddField(
            model_name="employmentcontract",
            name="employment",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="contracts",
                to="hr_core.employment",
                verbose_name="employment",
            ),
        ),
        migrations.AddField(
            model_name="employmentcontract",
            name="organization_node",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.PROTECT,
                related_name="+",
                to="organizations.organizationnode",
                verbose_name="organization node",
            ),
        ),
        migrations.AddField(
            model_name="employmentcontract",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="+",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AddField(
            model_name="jobfamily",
            name="organization_node",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="+",
                to="organizations.organizationnode",
                verbose_name="organization node",
            ),
        ),
        migrations.AddField(
            model_name="jobfamily",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="+",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AddField(
            model_name="jobtitle",
            name="job_family",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="job_titles",
                to="hr_core.jobfamily",
                verbose_name="job family",
            ),
        ),
        migrations.AddIndex(
            model_name="jobtitle",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_jobtitle_tenant__315465_idx"
            ),
        ),
        migrations.AddField(
            model_name="jobgrade",
            name="job_family",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="grades",
                to="hr_core.jobfamily",
                verbose_name="job family",
            ),
        ),
        migrations.AddField(
            model_name="jobgrade",
            name="organization_node",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="+",
                to="organizations.organizationnode",
                verbose_name="organization node",
            ),
        ),
        migrations.AddField(
            model_name="jobgrade",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="+",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AddField(
            model_name="position",
            name="department",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.PROTECT,
                related_name="positions",
                to="organizations.organizationnode",
                verbose_name="department",
            ),
        ),
        migrations.AddField(
            model_name="position",
            name="job_grade",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="positions",
                to="hr_core.jobgrade",
                verbose_name="job grade",
            ),
        ),
        migrations.AddField(
            model_name="position",
            name="job_title",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.PROTECT,
                related_name="positions",
                to="hr_core.jobtitle",
                verbose_name="job title",
            ),
        ),
        migrations.AddField(
            model_name="position",
            name="organization_node",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.PROTECT,
                related_name="+",
                to="organizations.organizationnode",
                verbose_name="organization node",
            ),
        ),
        migrations.AddField(
            model_name="position",
            name="reports_to_position",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="subordinate_positions",
                to="hr_core.position",
                verbose_name="reports to",
            ),
        ),
        migrations.AddField(
            model_name="position",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="+",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AddField(
            model_name="employment",
            name="position",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="employments",
                to="hr_core.position",
                verbose_name="position",
            ),
        ),
        migrations.AddField(
            model_name="positionassignment",
            name="employee",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="position_assignments",
                to="hr_core.employee",
                verbose_name="employee",
            ),
        ),
        migrations.AddField(
            model_name="positionassignment",
            name="organization_node",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.PROTECT,
                related_name="+",
                to="organizations.organizationnode",
                verbose_name="organization node",
            ),
        ),
        migrations.AddField(
            model_name="positionassignment",
            name="position",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="assignments",
                to="hr_core.position",
                verbose_name="position",
            ),
        ),
        migrations.AddField(
            model_name="positionassignment",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="+",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AddField(
            model_name="worklocation",
            name="organization_node",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="+",
                to="organizations.organizationnode",
                verbose_name="organization node",
            ),
        ),
        migrations.AddField(
            model_name="worklocation",
            name="tenant",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="+",
                to="tenants.tenant",
                verbose_name="tenant",
            ),
        ),
        migrations.AddIndex(
            model_name="contracttype",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_contract_tenant__261800_idx"
            ),
        ),
        migrations.AddConstraint(
            model_name="contracttype",
            constraint=models.UniqueConstraint(
                fields=("tenant", "code"), name="hr_contracttype_unique_tenant_code"
            ),
        ),
        migrations.AddIndex(
            model_name="dependent",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_dependen_tenant__f832e3_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="emergencycontact",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_emergenc_tenant__3e0acf_idx"
            ),
        ),
        migrations.AddConstraint(
            model_name="emergencycontact",
            constraint=models.UniqueConstraint(
                condition=models.Q(("is_primary", True)),
                fields=("employee", "is_primary"),
                name="hr_emergency_one_primary_per_employee",
            ),
        ),
        migrations.AddConstraint(
            model_name="employeenumbersequence",
            constraint=models.UniqueConstraint(
                fields=("tenant", "prefix"), name="hr_empnoseq_unique_tenant_prefix"
            ),
        ),
        migrations.AddIndex(
            model_name="employmentcontract",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_employme_tenant__7dda4d_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="jobfamily",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_job_fami_tenant__ed1c25_idx"
            ),
        ),
        migrations.AddConstraint(
            model_name="jobfamily",
            constraint=models.UniqueConstraint(
                fields=("tenant", "code"), name="hr_jobfamily_unique_tenant_code"
            ),
        ),
        migrations.AddIndex(
            model_name="jobgrade",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_job_grad_tenant__1e7f73_idx"
            ),
        ),
        migrations.AddConstraint(
            model_name="jobgrade",
            constraint=models.UniqueConstraint(
                fields=("tenant", "code"), name="hr_jobgrade_unique_tenant_code"
            ),
        ),
        migrations.AddIndex(
            model_name="position",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_position_tenant__158f60_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="position",
            index=models.Index(fields=["tenant", "department"], name="hr_position_tenant_dept"),
        ),
        migrations.AddIndex(
            model_name="position",
            index=models.Index(fields=["tenant", "status"], name="hr_position_tenant_status"),
        ),
        migrations.AddConstraint(
            model_name="position",
            constraint=models.UniqueConstraint(
                fields=("tenant", "position_code"), name="hr_position_unique_tenant_code"
            ),
        ),
        migrations.AddIndex(
            model_name="employment",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_employme_tenant__6fd305_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="employment",
            index=models.Index(fields=["tenant", "status"], name="hr_employment_tenant_status"),
        ),
        migrations.AddIndex(
            model_name="employment",
            index=models.Index(fields=["tenant", "department"], name="hr_employment_tenant_dept"),
        ),
        migrations.AddIndex(
            model_name="employment",
            index=models.Index(fields=["tenant", "position"], name="hr_employment_tenant_position"),
        ),
        migrations.AddConstraint(
            model_name="employment",
            constraint=models.UniqueConstraint(
                condition=models.Q(("status", "active")),
                fields=("employee",),
                name="hr_employment_one_active_per_employee",
            ),
        ),
        migrations.AddIndex(
            model_name="positionassignment",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_position_tenant__0a5052_idx"
            ),
        ),
        migrations.AddConstraint(
            model_name="positionassignment",
            constraint=models.UniqueConstraint(
                condition=models.Q(("is_primary", True)),
                fields=("position", "employee"),
                name="hr_posassign_unique_primary_per_employee",
            ),
        ),
        migrations.AddIndex(
            model_name="worklocation",
            index=models.Index(
                fields=["tenant", "organization_node"], name="hr_work_loc_tenant__1215a8_idx"
            ),
        ),
        migrations.AddConstraint(
            model_name="worklocation",
            constraint=models.UniqueConstraint(
                fields=("tenant", "code"), name="hr_worklocation_unique_tenant_code"
            ),
        ),
    ]
