# Generated by Django 5.2.13 on 2026-04-26 20:51

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


class Migration(migrations.Migration):

    dependencies = [
        ("rims_operations", "0003_donor"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name="ReminderConfig",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "milestone_warn_days_before",
                    models.PositiveSmallIntegerField(
                        default=14,
                        help_text="Days before a milestone due_date to send the awardee a reminder.",
                    ),
                ),
                (
                    "agreement_chase_grace_days",
                    models.PositiveSmallIntegerField(
                        default=14,
                        help_text="Days to wait after award issue before chasing missing signed agreements.",
                    ),
                ),
                (
                    "agreement_chase_max_reminders",
                    models.PositiveSmallIntegerField(
                        default=3, help_text="Maximum agreement-chase reminder emails per award."
                    ),
                ),
                (
                    "closeout_warn_days_before",
                    models.PositiveSmallIntegerField(
                        default=7,
                        help_text="Days after close-out start before nagging for missing final reports.",
                    ),
                ),
                (
                    "award_letter_grace_days",
                    models.PositiveSmallIntegerField(
                        default=7,
                        help_text="Days to wait after award before chasing acknowledgement of the award letter.",
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "updated_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="+",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "verbose_name": "Reminder configuration",
                "verbose_name_plural": "Reminder configuration",
            },
        ),
        migrations.CreateModel(
            name="RetentionPolicy",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "funding_type",
                    models.CharField(
                        choices=[
                            ("grant", "Grant"),
                            ("scholarship", "Scholarship"),
                            ("fellowship", "Fellowship"),
                            ("challenge", "Challenge"),
                        ],
                        max_length=16,
                        unique=True,
                    ),
                ),
                (
                    "retention_years",
                    models.PositiveSmallIntegerField(
                        default=7,
                        help_text="Years the archive must be kept before deletion is permitted.",
                    ),
                ),
                (
                    "archive_after_days",
                    models.PositiveSmallIntegerField(
                        default=30,
                        help_text="Days after award closure before the bundle is moved to archive storage.",
                    ),
                ),
                ("description", models.TextField(blank=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "updated_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="+",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "verbose_name_plural": "Retention policies",
                "ordering": ["funding_type"],
            },
        ),
        migrations.CreateModel(
            name="ReviewerProfile",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "available",
                    models.BooleanField(
                        default=True,
                        help_text="When False, auto-assignment will skip this reviewer.",
                    ),
                ),
                (
                    "max_concurrent_reviews",
                    models.PositiveSmallIntegerField(
                        default=5,
                        help_text="Hard cap on simultaneously open reviews assigned to this person.",
                    ),
                ),
                (
                    "expertise_tags",
                    models.JSONField(
                        blank=True,
                        default=list,
                        help_text='List of free-text expertise tags, e.g. ["climate","gender","SME"].',
                    ),
                ),
                ("notes", models.TextField(blank=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "user",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="reviewer_profile",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "ordering": ["user__email"],
            },
        ),
        migrations.CreateModel(
            name="VarianceAlertConfig",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                ("enabled", models.BooleanField(default=True)),
                (
                    "percent_threshold",
                    models.DecimalField(
                        decimal_places=2,
                        default=20,
                        help_text="Alert when the spent-vs-elapsed-time ratio differs from 1.0 by at least this many percent.",
                        max_digits=5,
                    ),
                ),
                (
                    "period_window_days",
                    models.PositiveSmallIntegerField(
                        default=30, help_text="How many days back the alert task evaluates."
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "updated_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="+",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "verbose_name": "Variance alert configuration",
                "verbose_name_plural": "Variance alert configuration",
            },
        ),
    ]
