# Generated by Django 5.2.13 on 2026-04-24 07:49

import django.db.models.deletion
import simple_history.models
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ("mel_indicators", "0001_initial"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name="HistoricalIndicatorVariance",
            fields=[
                (
                    "id",
                    models.BigIntegerField(
                        auto_created=True, blank=True, db_index=True, verbose_name="ID"
                    ),
                ),
                ("period_label", models.CharField(db_index=True, max_length=40)),
                (
                    "target_value",
                    models.DecimalField(blank=True, decimal_places=4, max_digits=18, null=True),
                ),
                (
                    "actual_value",
                    models.DecimalField(blank=True, decimal_places=4, max_digits=18, null=True),
                ),
                (
                    "variance_pct",
                    models.DecimalField(
                        blank=True,
                        decimal_places=4,
                        help_text="(actual − target) / target × 100.",
                        max_digits=9,
                        null=True,
                    ),
                ),
                ("cause_analysis", models.TextField(blank=True)),
                (
                    "adjustment",
                    models.TextField(blank=True, help_text="Corrective action summary (FRMFL031)."),
                ),
                ("computed_at", models.DateTimeField(blank=True, editable=False)),
                ("created_at", models.DateTimeField(blank=True, editable=False)),
                ("history_id", models.AutoField(primary_key=True, serialize=False)),
                ("history_date", models.DateTimeField(db_index=True)),
                ("history_change_reason", models.CharField(max_length=100, null=True)),
                (
                    "history_type",
                    models.CharField(
                        choices=[("+", "Created"), ("~", "Changed"), ("-", "Deleted")], max_length=1
                    ),
                ),
            ],
            options={
                "verbose_name": "historical indicator variance",
                "verbose_name_plural": "historical indicator variances",
                "ordering": ("-history_date", "-history_id"),
                "get_latest_by": ("history_date", "history_id"),
            },
            bases=(simple_history.models.HistoricalChanges, models.Model),
        ),
        migrations.CreateModel(
            name="IndicatorVariance",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                ("period_label", models.CharField(db_index=True, max_length=40)),
                (
                    "target_value",
                    models.DecimalField(blank=True, decimal_places=4, max_digits=18, null=True),
                ),
                (
                    "actual_value",
                    models.DecimalField(blank=True, decimal_places=4, max_digits=18, null=True),
                ),
                (
                    "variance_pct",
                    models.DecimalField(
                        blank=True,
                        decimal_places=4,
                        help_text="(actual − target) / target × 100.",
                        max_digits=9,
                        null=True,
                    ),
                ),
                ("cause_analysis", models.TextField(blank=True)),
                (
                    "adjustment",
                    models.TextField(blank=True, help_text="Corrective action summary (FRMFL031)."),
                ),
                ("computed_at", models.DateTimeField(auto_now=True)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
            ],
            options={
                "ordering": ["-computed_at"],
            },
        ),
        migrations.CreateModel(
            name="RagThreshold",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "green_min",
                    models.DecimalField(
                        decimal_places=2,
                        help_text="Minimum % of target for GREEN (default 85).",
                        max_digits=5,
                    ),
                ),
                (
                    "amber_min",
                    models.DecimalField(
                        decimal_places=2,
                        help_text="Minimum % of target for AMBER (below → RED; default 60).",
                        max_digits=5,
                    ),
                ),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
            ],
        ),
        migrations.AlterField(
            model_name="historicalindicator",
            name="calculation_method",
            field=models.TextField(
                help_text="How the value is computed or aggregated — required for SMART compliance."
            ),
        ),
        migrations.AlterField(
            model_name="historicalindicator",
            name="unit",
            field=models.CharField(
                help_text="e.g. people, %, USD — required by PRD §5.3.4.", max_length=60
            ),
        ),
        migrations.AlterField(
            model_name="indicator",
            name="calculation_method",
            field=models.TextField(
                help_text="How the value is computed or aggregated — required for SMART compliance."
            ),
        ),
        migrations.AlterField(
            model_name="indicator",
            name="unit",
            field=models.CharField(
                help_text="e.g. people, %, USD — required by PRD §5.3.4.", max_length=60
            ),
        ),
        migrations.AlterField(
            model_name="logframerow",
            name="parent",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.PROTECT,
                related_name="children",
                to="mel_indicators.logframerow",
            ),
        ),
        migrations.AddConstraint(
            model_name="logframerow",
            constraint=models.UniqueConstraint(
                condition=models.Q(("level", "impact")),
                fields=("logframe",),
                name="uniq_impact_per_logframe",
            ),
        ),
        migrations.AddField(
            model_name="historicalindicatorvariance",
            name="history_user",
            field=models.ForeignKey(
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="+",
                to=settings.AUTH_USER_MODEL,
            ),
        ),
        migrations.AddField(
            model_name="historicalindicatorvariance",
            name="indicator",
            field=models.ForeignKey(
                blank=True,
                db_constraint=False,
                null=True,
                on_delete=django.db.models.deletion.DO_NOTHING,
                related_name="+",
                to="mel_indicators.indicator",
            ),
        ),
        migrations.AddField(
            model_name="indicatorvariance",
            name="indicator",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="variances",
                to="mel_indicators.indicator",
            ),
        ),
        migrations.AddField(
            model_name="ragthreshold",
            name="logframe",
            field=models.OneToOneField(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="rag_threshold",
                to="mel_indicators.logframe",
            ),
        ),
        migrations.AddConstraint(
            model_name="indicatorvariance",
            constraint=models.UniqueConstraint(
                fields=("indicator", "period_label"), name="uniq_indicator_variance_period"
            ),
        ),
    ]
