# Generated by Django 5.2.11 on 2026-02-22 08:17

import django.db.models.deletion
import uuid
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ("pm", "0004_alter_projectmembermodel_unique_together_and_more"),
        ("tenant", "0003_tenant_locale_calendar_tenant_locale_country_and_more"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.AddField(
            model_name="taskmodel",
            name="assignment_policy",
            field=models.CharField(
                choices=[
                    ("manual", "دستی"),
                    ("auto_least_load", "خودکار — کمترین بار"),
                    ("auto_round_robin", "خودکار — چرخشی"),
                    ("self_claim", "انتخاب توسط اعضا"),
                ],
                default="manual",
                max_length=30,
                verbose_name="سیاست تخصیص",
            ),
        ),
        migrations.AddField(
            model_name="taskmodel",
            name="calendar",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="tasks",
                to="pm.calendarmodel",
                verbose_name="تقویم",
            ),
        ),
        migrations.AddField(
            model_name="taskmodel",
            name="constraint_date",
            field=models.DateField(blank=True, null=True, verbose_name="تاریخ محدودیت"),
        ),
        migrations.AddField(
            model_name="taskmodel",
            name="constraint_type",
            field=models.CharField(
                choices=[
                    ("asap", "در اولین فرصت"),
                    ("alap", "در آخرین فرصت"),
                    ("must_start_on", "باید شروع شود در"),
                    ("must_finish_on", "باید تمام شود در"),
                    ("start_no_earlier_than", "شروع نه زودتر از"),
                    ("start_no_later_than", "شروع نه دیرتر از"),
                    ("finish_no_earlier_than", "پایان نه زودتر از"),
                    ("finish_no_later_than", "پایان نه دیرتر از"),
                ],
                default="asap",
                max_length=30,
                verbose_name="نوع محدودیت",
            ),
        ),
        migrations.AddField(
            model_name="taskmodel",
            name="deadline",
            field=models.DateField(blank=True, null=True, verbose_name="ددلاین"),
        ),
        migrations.AddField(
            model_name="taskmodel",
            name="duration_type",
            field=models.CharField(
                choices=[
                    ("fixed_duration", "مدت ثابت"),
                    ("fixed_units", "واحد ثابت"),
                    ("fixed_work", "کار ثابت"),
                ],
                default="fixed_duration",
                max_length=20,
                verbose_name="نوع مدت",
            ),
        ),
        migrations.AddField(
            model_name="taskmodel",
            name="is_effort_driven",
            field=models.BooleanField(default=False, verbose_name="وابسته به تلاش"),
        ),
        migrations.AddField(
            model_name="taskmodel",
            name="percent_complete_type",
            field=models.CharField(
                choices=[("physical", "فیزیکی"), ("duration", "مدت"), ("work", "کار")],
                default="physical",
                max_length=20,
                verbose_name="نوع درصد تکمیل",
            ),
        ),
        migrations.AddField(
            model_name="taskmodel",
            name="remaining_duration",
            field=models.PositiveIntegerField(
                blank=True, null=True, verbose_name="مدت باقیمانده (روز)"
            ),
        ),
        migrations.AddField(
            model_name="taskmodel",
            name="scheduling_mode",
            field=models.CharField(
                choices=[("auto", "خودکار"), ("manual", "دستی")],
                default="auto",
                max_length=20,
                verbose_name="حالت زمان\u200cبندی",
            ),
        ),
        migrations.CreateModel(
            name="ActivityCodeTypeModel",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("name", models.CharField(max_length=200, verbose_name="نام")),
                (
                    "code",
                    models.CharField(db_index=True, max_length=50, verbose_name="کد"),
                ),
                ("description", models.TextField(blank=True, verbose_name="توضیحات")),
                (
                    "scope",
                    models.CharField(
                        choices=[("global", "سراسری"), ("project", "سطح پروژه")],
                        default="global",
                        max_length=10,
                        verbose_name="محدوده",
                    ),
                ),
                ("is_active", models.BooleanField(default=True, verbose_name="فعال")),
                ("sort_order", models.IntegerField(default=0, verbose_name="ترتیب")),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "project",
                    models.ForeignKey(
                        blank=True,
                        help_text="اگر scope=project باشد",
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="activity_code_types",
                        to="pm.projectmodel",
                        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": "pm_activity_code_type",
                "ordering": ["sort_order", "name"],
                "unique_together": {("code", "tenant_id")},
            },
        ),
        migrations.CreateModel(
            name="ActivityCodeValueModel",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("code", models.CharField(max_length=50, verbose_name="کد")),
                ("name", models.CharField(max_length=200, verbose_name="نام")),
                ("description", models.TextField(blank=True, verbose_name="توضیحات")),
                (
                    "color",
                    models.CharField(blank=True, max_length=20, verbose_name="رنگ"),
                ),
                ("sort_order", models.IntegerField(default=0, verbose_name="ترتیب")),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "code_type",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="values",
                        to="pm.activitycodetypemodel",
                        verbose_name="نوع کد",
                    ),
                ),
                (
                    "parent",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="children",
                        to="pm.activitycodevaluemodel",
                        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": "pm_activity_code_value",
                "ordering": ["sort_order", "code"],
                "unique_together": {("code_type", "code")},
            },
        ),
        migrations.CreateModel(
            name="FundingSourceModel",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("name", models.CharField(max_length=200, verbose_name="نام")),
                ("description", models.TextField(blank=True, verbose_name="توضیحات")),
                (
                    "total_amount",
                    models.DecimalField(
                        decimal_places=2,
                        default=0,
                        max_digits=18,
                        verbose_name="مبلغ کل",
                    ),
                ),
                (
                    "allocated_amount",
                    models.DecimalField(
                        decimal_places=2,
                        default=0,
                        max_digits=18,
                        verbose_name="مبلغ تخصیص\u200cیافته",
                    ),
                ),
                (
                    "remaining_amount",
                    models.DecimalField(
                        decimal_places=2,
                        default=0,
                        max_digits=18,
                        verbose_name="مبلغ باقی\u200cمانده",
                    ),
                ),
                (
                    "start_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="فعال")),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "project",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="funding_sources",
                        to="pm.projectmodel",
                        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": "pm_funding_source",
                "ordering": ["project", "name"],
            },
        ),
        migrations.CreateModel(
            name="ProjectTemplateModel",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("name", models.CharField(max_length=200, verbose_name="نام")),
                ("description", models.TextField(blank=True, verbose_name="توضیحات")),
                (
                    "category",
                    models.CharField(
                        blank=True, max_length=100, verbose_name="دسته\u200cبندی"
                    ),
                ),
                (
                    "template_data",
                    models.JSONField(
                        blank=True,
                        default=dict,
                        help_text="شامل WBS, Tasks, Dependencies, Resources, ...",
                        verbose_name="داده قالب",
                    ),
                ),
                ("is_active", models.BooleanField(default=True, verbose_name="فعال")),
                (
                    "usage_count",
                    models.IntegerField(default=0, 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": "pm_project_template",
                "ordering": ["-usage_count", "name"],
            },
        ),
        migrations.CreateModel(
            name="ResourceAvailabilityModel",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("start_date", models.DateField(verbose_name="تاریخ شروع")),
                (
                    "end_date",
                    models.DateField(blank=True, null=True, verbose_name="تاریخ پایان"),
                ),
                (
                    "available_units",
                    models.DecimalField(
                        decimal_places=2,
                        default=100,
                        max_digits=6,
                        verbose_name="واحد در دسترس (٪)",
                    ),
                ),
                ("notes", models.TextField(blank=True, verbose_name="یادداشت")),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "resource",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="availability_periods",
                        to="pm.resourcemodel",
                        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": "pm_resource_availability",
                "ordering": ["resource", "start_date"],
            },
        ),
        migrations.CreateModel(
            name="UDFDefinitionModel",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("name", models.CharField(max_length=200, verbose_name="نام")),
                (
                    "code",
                    models.CharField(db_index=True, max_length=100, verbose_name="کد"),
                ),
                ("description", models.TextField(blank=True, verbose_name="توضیحات")),
                (
                    "field_type",
                    models.CharField(
                        choices=[
                            ("text", "متنی"),
                            ("number", "عددی"),
                            ("date", "تاریخ"),
                            ("boolean", "بولی"),
                            ("select", "انتخابی"),
                            ("multi_select", "چندانتخابی"),
                        ],
                        default="text",
                        max_length=20,
                        verbose_name="نوع فیلد",
                    ),
                ),
                (
                    "entity_type",
                    models.CharField(
                        choices=[
                            ("task", "تسک"),
                            ("project", "پروژه"),
                            ("resource", "منبع"),
                        ],
                        default="task",
                        max_length=20,
                        verbose_name="نوع موجودیت",
                    ),
                ),
                (
                    "default_value",
                    models.TextField(blank=True, verbose_name="مقدار پیش\u200cفرض"),
                ),
                (
                    "options",
                    models.JSONField(
                        blank=True,
                        default=list,
                        help_text="برای فیلدهای select/multi_select",
                        verbose_name="گزینه\u200cها",
                    ),
                ),
                (
                    "is_required",
                    models.BooleanField(default=False, verbose_name="اجباری"),
                ),
                ("is_active", models.BooleanField(default=True, verbose_name="فعال")),
                ("sort_order", models.IntegerField(default=0, 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": "pm_udf_definition",
                "ordering": ["entity_type", "sort_order"],
                "unique_together": {("code", "entity_type", "tenant_id")},
            },
        ),
        migrations.CreateModel(
            name="CashFlowEntryModel",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("period_start", models.DateField(verbose_name="شروع دوره")),
                (
                    "period_end",
                    models.DateField(blank=True, null=True, verbose_name="پایان دوره"),
                ),
                (
                    "planned_income",
                    models.DecimalField(
                        decimal_places=2,
                        default=0,
                        max_digits=18,
                        verbose_name="درآمد برنامه\u200cای",
                    ),
                ),
                (
                    "planned_expense",
                    models.DecimalField(
                        decimal_places=2,
                        default=0,
                        max_digits=18,
                        verbose_name="هزینه برنامه\u200cای",
                    ),
                ),
                (
                    "actual_income",
                    models.DecimalField(
                        decimal_places=2,
                        default=0,
                        max_digits=18,
                        verbose_name="درآمد واقعی",
                    ),
                ),
                (
                    "actual_expense",
                    models.DecimalField(
                        decimal_places=2,
                        default=0,
                        max_digits=18,
                        verbose_name="هزینه واقعی",
                    ),
                ),
                ("notes", models.TextField(blank=True, verbose_name="یادداشت")),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "project",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="cash_flows",
                        to="pm.projectmodel",
                        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": "pm_cash_flow_entry",
                "ordering": ["project", "period_start"],
                "unique_together": {("project", "period_start")},
            },
        ),
        migrations.CreateModel(
            name="CostAccountModel",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "code",
                    models.CharField(db_index=True, max_length=50, verbose_name="کد"),
                ),
                ("name", models.CharField(max_length=200, verbose_name="نام")),
                ("description", models.TextField(blank=True, verbose_name="توضیحات")),
                (
                    "budget_amount",
                    models.DecimalField(
                        decimal_places=2, default=0, max_digits=18, verbose_name="بودجه"
                    ),
                ),
                (
                    "actual_amount",
                    models.DecimalField(
                        decimal_places=2,
                        default=0,
                        max_digits=18,
                        verbose_name="هزینه واقعی",
                    ),
                ),
                ("sort_order", models.IntegerField(default=0, verbose_name="ترتیب")),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "parent",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="children",
                        to="pm.costaccountmodel",
                        verbose_name="والد",
                    ),
                ),
                (
                    "project",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="cost_accounts",
                        to="pm.projectmodel",
                        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": "pm_cost_account",
                "ordering": ["sort_order", "code"],
                "unique_together": {("project", "code")},
            },
        ),
        migrations.CreateModel(
            name="ResourceCostRateModel",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("effective_date", models.DateField(verbose_name="تاریخ اعمال")),
                (
                    "standard_rate",
                    models.DecimalField(
                        decimal_places=2,
                        default=0,
                        max_digits=14,
                        verbose_name="نرخ استاندارد",
                    ),
                ),
                (
                    "overtime_rate",
                    models.DecimalField(
                        decimal_places=2,
                        default=0,
                        max_digits=14,
                        verbose_name="نرخ اضافه\u200cکار",
                    ),
                ),
                (
                    "cost_per_use",
                    models.DecimalField(
                        decimal_places=2,
                        default=0,
                        max_digits=14,
                        verbose_name="هزینه هر استفاده",
                    ),
                ),
                ("notes", models.TextField(blank=True, verbose_name="یادداشت")),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "resource",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="cost_rates",
                        to="pm.resourcemodel",
                        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": "pm_resource_cost_rate",
                "ordering": ["resource", "-effective_date"],
                "unique_together": {("resource", "effective_date")},
            },
        ),
        migrations.CreateModel(
            name="ResourceSkillModel",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "skill_name",
                    models.CharField(max_length=200, verbose_name="نام مهارت"),
                ),
                (
                    "proficiency_level",
                    models.IntegerField(
                        default=1, help_text="۱ تا ۵", verbose_name="سطح مهارت"
                    ),
                ),
                ("notes", models.TextField(blank=True, verbose_name="یادداشت")),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "resource",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="skills",
                        to="pm.resourcemodel",
                        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": "pm_resource_skill",
                "unique_together": {("resource", "skill_name")},
            },
        ),
        migrations.CreateModel(
            name="ScheduleHealthSnapshotModel",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("snapshot_date", models.DateField(verbose_name="تاریخ اسنپ\u200cشات")),
                (
                    "bei",
                    models.DecimalField(
                        blank=True,
                        decimal_places=3,
                        help_text="Baseline Execution Index",
                        max_digits=6,
                        null=True,
                        verbose_name="BEI",
                    ),
                ),
                (
                    "cpli",
                    models.DecimalField(
                        blank=True,
                        decimal_places=3,
                        help_text="Critical Path Length Index",
                        max_digits=6,
                        null=True,
                        verbose_name="CPLI",
                    ),
                ),
                (
                    "spi",
                    models.DecimalField(
                        blank=True,
                        decimal_places=3,
                        help_text="Schedule Performance Index",
                        max_digits=6,
                        null=True,
                        verbose_name="SPI",
                    ),
                ),
                (
                    "critical_tasks_count",
                    models.IntegerField(default=0, verbose_name="تسک\u200cهای بحرانی"),
                ),
                (
                    "total_tasks_count",
                    models.IntegerField(default=0, verbose_name="کل تسک\u200cها"),
                ),
                (
                    "out_of_sequence_count",
                    models.IntegerField(default=0, verbose_name="خارج از ترتیب"),
                ),
                (
                    "missing_logic_count",
                    models.IntegerField(default=0, verbose_name="بدون منطق"),
                ),
                (
                    "negative_float_count",
                    models.IntegerField(default=0, verbose_name="شناوری منفی"),
                ),
                (
                    "high_float_count",
                    models.IntegerField(default=0, verbose_name="شناوری بالا"),
                ),
                (
                    "health_score",
                    models.IntegerField(
                        default=0, help_text="0 تا 100", verbose_name="امتیاز سلامت"
                    ),
                ),
                (
                    "details",
                    models.JSONField(blank=True, default=dict, verbose_name="جزئیات"),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "project",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="health_snapshots",
                        to="pm.projectmodel",
                        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": "pm_schedule_health_snapshot",
                "ordering": ["project", "-snapshot_date"],
                "unique_together": {("project", "snapshot_date")},
            },
        ),
        migrations.CreateModel(
            name="TaskActivityCodeModel",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "code_value",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="task_assignments",
                        to="pm.activitycodevaluemodel",
                        verbose_name="مقدار کد",
                    ),
                ),
                (
                    "task",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="activity_codes",
                        to="pm.taskmodel",
                        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": "pm_task_activity_code",
                "unique_together": {("task", "code_value")},
            },
        ),
        migrations.CreateModel(
            name="TaskAssignmentModel",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "role_id",
                    models.UUIDField(
                        blank=True,
                        help_text="UUID مرجع به Role سیستم",
                        null=True,
                        verbose_name="شناسه نقش",
                    ),
                ),
                (
                    "assignment_role",
                    models.CharField(
                        choices=[
                            ("primary", "مسئول اصلی"),
                            ("secondary", "مسئول فرعی"),
                            ("reviewer", "بازبین"),
                            ("observer", "ناظر"),
                        ],
                        default="primary",
                        max_length=20,
                        verbose_name="نقش تخصیص",
                    ),
                ),
                ("is_active", models.BooleanField(default=True, verbose_name="فعال")),
                ("notes", models.TextField(blank=True, verbose_name="یادداشت")),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "task",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="task_assignments",
                        to="pm.taskmodel",
                        verbose_name="تسک",
                    ),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(class)s_set",
                        to="tenant.tenant",
                    ),
                ),
                (
                    "user",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="pm_task_assignments",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="کاربر",
                    ),
                ),
            ],
            options={
                "verbose_name": "تخصیص تسک",
                "verbose_name_plural": "تخصیص\u200cهای تسک",
                "db_table": "pm_task_assignment",
                "unique_together": {("task", "user", "assignment_role")},
            },
        ),
        migrations.CreateModel(
            name="UDFValueModel",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "entity_id",
                    models.UUIDField(db_index=True, verbose_name="شناسه موجودیت"),
                ),
                (
                    "entity_type",
                    models.CharField(max_length=20, verbose_name="نوع موجودیت"),
                ),
                ("value_text", models.TextField(blank=True, verbose_name="مقدار متنی")),
                (
                    "value_number",
                    models.DecimalField(
                        blank=True,
                        decimal_places=4,
                        max_digits=20,
                        null=True,
                        verbose_name="مقدار عددی",
                    ),
                ),
                (
                    "value_date",
                    models.DateField(blank=True, null=True, verbose_name="مقدار تاریخ"),
                ),
                (
                    "value_boolean",
                    models.BooleanField(
                        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="تاریخ بروزرسانی"),
                ),
                (
                    "definition",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="values",
                        to="pm.udfdefinitionmodel",
                        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": "pm_udf_value",
                "indexes": [
                    models.Index(
                        fields=["entity_type", "entity_id"],
                        name="pm_udf_val_entity_idx",
                    )
                ],
                "unique_together": {("definition", "entity_id")},
            },
        ),
    ]
