# Generated by Django 5.2.12 on 2026-04-21 18:01

import apps.core.storage.paths
import django.db.models.deletion
import django.utils.timezone
import django_fsm
from decimal import Decimal
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ("rims_grants", "0013_alter_award_status_max_length"),
        ("rims_projects", "0004_project_lead_assignment"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.AddField(
            model_name="application",
            name="final_decision_comment",
            field=models.TextField(blank=True),
        ),
        migrations.AddField(
            model_name="application",
            name="ranking_position",
            field=models.PositiveIntegerField(blank=True, null=True),
        ),
        migrations.AddField(
            model_name="application",
            name="ranking_score",
            field=models.DecimalField(blank=True, decimal_places=2, max_digits=8, null=True),
        ),
        migrations.AddField(
            model_name="application",
            name="shortlist_override_reason",
            field=models.TextField(blank=True),
        ),
        migrations.AddField(
            model_name="application",
            name="shortlist_recommended",
            field=models.BooleanField(default=False),
        ),
        migrations.AddField(
            model_name="application",
            name="tied_in_ranking",
            field=models.BooleanField(default=False),
        ),
        migrations.AddField(
            model_name="award",
            name="activation_date",
            field=models.DateField(blank=True, null=True),
        ),
        migrations.AddField(
            model_name="award",
            name="cancelled_at",
            field=models.DateTimeField(blank=True, null=True),
        ),
        migrations.AddField(
            model_name="award",
            name="closed_at",
            field=models.DateTimeField(blank=True, null=True),
        ),
        migrations.AddField(
            model_name="award",
            name="closeout_ready_at",
            field=models.DateTimeField(blank=True, null=True),
        ),
        migrations.AddField(
            model_name="grantcall",
            name="review_deadline_days",
            field=models.PositiveSmallIntegerField(
                default=14, help_text="Default reviewer deadline, counted from assignment."
            ),
        ),
        migrations.AddField(
            model_name="grantcall",
            name="review_score_threshold",
            field=models.DecimalField(
                blank=True,
                decimal_places=2,
                help_text="Minimum average score required before shortlist recommendation.",
                max_digits=8,
                null=True,
            ),
        ),
        migrations.AddField(
            model_name="grantcall",
            name="reviewer_pool",
            field=models.ManyToManyField(
                blank=True,
                help_text="Preferred reviewers for automatic assignment. Empty = any reviewer-capable user.",
                related_name="grant_calls_as_reviewer_pool",
                to=settings.AUTH_USER_MODEL,
            ),
        ),
        migrations.AddField(
            model_name="grantcall",
            name="reviewer_workload_mode",
            field=models.CharField(
                choices=[
                    ("balanced", "Balanced"),
                    ("round_robin", "Round robin"),
                    ("manual", "Manual"),
                ],
                default="balanced",
                max_length=24,
            ),
        ),
        migrations.AddField(
            model_name="grantcall",
            name="reviewers_per_application",
            field=models.PositiveSmallIntegerField(default=2),
        ),
        migrations.AddField(
            model_name="grantcall",
            name="tie_break_policy",
            field=models.CharField(
                choices=[
                    ("manager_review", "Manager review"),
                    ("earliest_submission", "Earliest complete submission"),
                    ("interview_score", "Interview score"),
                ],
                default="manager_review",
                max_length=32,
            ),
        ),
        migrations.AddField(
            model_name="grantcall",
            name="verification_required",
            field=models.BooleanField(default=False),
        ),
        migrations.AddField(
            model_name="grantcall",
            name="verification_score_weight",
            field=models.DecimalField(
                decimal_places=2,
                default=Decimal("0.00"),
                help_text="Optional additional score contribution from verification/interview workflow.",
                max_digits=5,
            ),
        ),
        migrations.AddField(
            model_name="grantcall",
            name="verification_type",
            field=models.CharField(
                choices=[
                    ("none", "None"),
                    ("phone", "Phone"),
                    ("household", "Household"),
                    ("institutional", "Institutional"),
                    ("other", "Other"),
                ],
                default="none",
                max_length=24,
            ),
        ),
        migrations.AddField(
            model_name="review",
            name="assigned_at",
            field=models.DateTimeField(default=django.utils.timezone.now),
        ),
        migrations.AddField(
            model_name="review",
            name="assigned_by",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="grant_reviews_assigned",
                to=settings.AUTH_USER_MODEL,
            ),
        ),
        migrations.AddField(
            model_name="review",
            name="assignment_sequence",
            field=models.PositiveIntegerField(default=0),
        ),
        migrations.AddField(
            model_name="review",
            name="due_at",
            field=models.DateTimeField(blank=True, null=True),
        ),
        migrations.AddField(
            model_name="review",
            name="recommendation_code",
            field=models.CharField(
                blank=True,
                choices=[
                    ("approve", "Approve"),
                    ("revise", "Revise"),
                    ("reject", "Reject"),
                    ("hold", "Hold for clarification"),
                ],
                max_length=16,
            ),
        ),
        migrations.AlterField(
            model_name="application",
            name="revision_requested_at",
            field=models.DateTimeField(
                blank=True,
                help_text="When set, the applicant may edit their application after it was submitted.",
                null=True,
            ),
        ),
        migrations.AlterField(
            model_name="application",
            name="status",
            field=django_fsm.FSMField(
                choices=[
                    ("draft", "Draft"),
                    ("submitted", "Submitted"),
                    ("ineligible", "Ineligible"),
                    ("under_review", "Under review"),
                    ("shortlisted", "Shortlisted"),
                    ("approved", "Approved"),
                    ("awarded", "Awarded"),
                    ("rejected", "Rejected"),
                ],
                db_index=True,
                default="draft",
                max_length=32,
                protected=True,
            ),
        ),
        migrations.AlterField(
            model_name="grantcall",
            name="funding_record",
            field=models.ForeignKey(
                blank=True,
                help_text="When set, the call draws its allocation from this approved funding record.",
                null=True,
                on_delete=django.db.models.deletion.PROTECT,
                related_name="calls",
                to="rims_grants.fundingrecord",
            ),
        ),
        migrations.AlterField(
            model_name="grantcall",
            name="max_awards",
            field=models.PositiveIntegerField(
                blank=True,
                help_text="Optional cap on how many awards this call may make.",
                null=True,
            ),
        ),
        migrations.AlterField(
            model_name="grantcall",
            name="review_starts_at",
            field=models.DateTimeField(
                blank=True,
                help_text="When set, must be after the submission deadline (closes_at).",
                null=True,
            ),
        ),
        migrations.AlterField(
            model_name="grantcalldocument",
            name="is_guideline",
            field=models.BooleanField(
                default=True,
                help_text="When checked, this file satisfies the “official guideline document” requirement for publishing.",
            ),
        ),
        migrations.CreateModel(
            name="AssetVerification",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                ("asset_name", models.CharField(max_length=255)),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("confirmed", "Confirmed"),
                            ("transferred", "Transferred"),
                            ("disposed", "Disposed"),
                            ("unaccounted", "Unaccounted"),
                        ],
                        max_length=16,
                    ),
                ),
                ("notes", models.TextField(blank=True)),
                (
                    "evidence",
                    models.FileField(
                        blank=True, null=True, upload_to=apps.core.storage.paths.upload_to_grants
                    ),
                ),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                (
                    "closeout",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="asset_verifications",
                        to="rims_grants.awardcloseoutrecord",
                    ),
                ),
                (
                    "verified_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="asset_verifications_recorded",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
        ),
        migrations.CreateModel(
            name="AwardCancellationRequest",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("requested", "Requested"),
                            ("approved", "Approved"),
                            ("rejected", "Rejected"),
                        ],
                        default="requested",
                        max_length=16,
                    ),
                ),
                ("reason", models.TextField()),
                ("decision_note", models.TextField(blank=True)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("decided_at", models.DateTimeField(blank=True, null=True)),
                (
                    "award",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="cancellation_requests",
                        to="rims_grants.award",
                    ),
                ),
                (
                    "decided_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="award_cancellations_decided",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "requested_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="award_cancellations_requested",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "ordering": ["-created_at"],
            },
        ),
        migrations.CreateModel(
            name="AwardTranche",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                ("label", models.CharField(max_length=128)),
                ("amount", models.DecimalField(decimal_places=2, max_digits=14)),
                ("due_on", models.DateField(blank=True, null=True)),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("planned", "Planned"),
                            ("requested", "Requested"),
                            ("approved", "Approved"),
                            ("disbursed", "Disbursed"),
                            ("held", "Held"),
                            ("cancelled", "Cancelled"),
                        ],
                        default="planned",
                        max_length=16,
                    ),
                ),
                ("payment_reference", models.CharField(blank=True, max_length=96)),
                ("disbursed_at", models.DateTimeField(blank=True, null=True)),
                ("sort_order", models.PositiveSmallIntegerField(default=0)),
                (
                    "award",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="tranches",
                        to="rims_grants.award",
                    ),
                ),
                (
                    "milestone",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="award_tranches",
                        to="rims_projects.milestone",
                    ),
                ),
            ],
            options={
                "ordering": ["sort_order", "pk"],
            },
        ),
        migrations.CreateModel(
            name="FinalFinancialReport",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "report",
                    models.FileField(
                        blank=True, null=True, upload_to=apps.core.storage.paths.upload_to_grants
                    ),
                ),
                ("notes", models.TextField(blank=True)),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("submitted", "Submitted"),
                            ("accepted", "Accepted"),
                            ("queries_raised", "Queries raised"),
                        ],
                        default="submitted",
                        max_length=24,
                    ),
                ),
                ("submitted_at", models.DateTimeField(auto_now_add=True)),
                ("reviewed_at", models.DateTimeField(blank=True, null=True)),
                (
                    "closeout",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="financial_reports",
                        to="rims_grants.awardcloseoutrecord",
                    ),
                ),
                (
                    "reviewed_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="final_financial_reports_reviewed",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "submitted_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="final_financial_reports_submitted",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
        ),
        migrations.CreateModel(
            name="FinalNarrativeReport",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "report",
                    models.FileField(
                        blank=True, null=True, upload_to=apps.core.storage.paths.upload_to_grants
                    ),
                ),
                ("notes", models.TextField(blank=True)),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("submitted", "Submitted"),
                            ("accepted", "Accepted"),
                            ("revision_required", "Revision required"),
                        ],
                        default="submitted",
                        max_length=24,
                    ),
                ),
                ("submitted_at", models.DateTimeField(auto_now_add=True)),
                ("reviewed_at", models.DateTimeField(blank=True, null=True)),
                (
                    "closeout",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="narrative_reports",
                        to="rims_grants.awardcloseoutrecord",
                    ),
                ),
                (
                    "reviewed_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="final_narrative_reports_reviewed",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "submitted_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="final_narrative_reports_submitted",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
        ),
        migrations.CreateModel(
            name="FundingRecordCloseout",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("ready", "Ready"),
                            ("submitted", "Submitted"),
                            ("closed", "Closed"),
                        ],
                        default="ready",
                        max_length=16,
                    ),
                ),
                ("summary", models.JSONField(blank=True, default=dict)),
                ("submitted_at", models.DateTimeField(blank=True, null=True)),
                ("closed_at", models.DateTimeField(blank=True, null=True)),
                (
                    "funding_record",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="closeout_record",
                        to="rims_grants.fundingrecord",
                    ),
                ),
                (
                    "submitted_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="funding_closeouts_submitted",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
        ),
        migrations.CreateModel(
            name="InterviewSchedule",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                ("scheduled_for", models.DateTimeField()),
                (
                    "format",
                    models.CharField(
                        choices=[
                            ("virtual", "Virtual"),
                            ("phone", "Phone"),
                            ("in_person", "In person"),
                        ],
                        default="virtual",
                        max_length=16,
                    ),
                ),
                ("venue", models.CharField(blank=True, max_length=255)),
                ("notes", models.TextField(blank=True)),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("scheduled", "Scheduled"),
                            ("completed", "Completed"),
                            ("cancelled", "Cancelled"),
                            ("rescheduled", "Rescheduled"),
                        ],
                        default="scheduled",
                        max_length=16,
                    ),
                ),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "application",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="interviews",
                        to="rims_grants.application",
                    ),
                ),
                (
                    "created_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="interviews_created",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "updated_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="interviews_updated",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "ordering": ["-scheduled_for", "-pk"],
            },
        ),
        migrations.CreateModel(
            name="InterviewOutcome",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "attendance",
                    models.CharField(
                        choices=[
                            ("attended", "Attended"),
                            ("no_show", "No show"),
                            ("rescheduled", "Rescheduled"),
                        ],
                        default="attended",
                        max_length=16,
                    ),
                ),
                (
                    "score",
                    models.DecimalField(blank=True, decimal_places=2, max_digits=8, null=True),
                ),
                (
                    "recommendation_code",
                    models.CharField(
                        blank=True,
                        choices=[
                            ("approve", "Approve"),
                            ("revise", "Revise"),
                            ("reject", "Reject"),
                            ("hold", "Hold for clarification"),
                        ],
                        max_length=16,
                    ),
                ),
                ("summary", models.TextField(blank=True)),
                ("recorded_at", models.DateTimeField(auto_now_add=True)),
                (
                    "recorded_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="interview_outcomes_recorded",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "interview",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="outcome",
                        to="rims_grants.interviewschedule",
                    ),
                ),
            ],
        ),
        migrations.CreateModel(
            name="RecoveryRequest",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                ("amount", models.DecimalField(decimal_places=2, max_digits=14)),
                ("reason", models.TextField(blank=True)),
                ("payment_reference", models.CharField(blank=True, max_length=96)),
                ("received_on", models.DateField(blank=True, null=True)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                (
                    "closeout",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="recovery_requests",
                        to="rims_grants.awardcloseoutrecord",
                    ),
                ),
            ],
        ),
        migrations.CreateModel(
            name="RecoveryWaiver",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                ("amount", models.DecimalField(decimal_places=2, max_digits=14)),
                ("justification", models.TextField()),
                ("approved_at", models.DateTimeField(auto_now_add=True)),
                (
                    "approved_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="recovery_waivers_approved",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "closeout",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="recovery_waivers",
                        to="rims_grants.awardcloseoutrecord",
                    ),
                ),
            ],
        ),
        migrations.CreateModel(
            name="VerificationRecord",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "verification_type",
                    models.CharField(
                        choices=[
                            ("none", "None"),
                            ("phone", "Phone"),
                            ("household", "Household"),
                            ("institutional", "Institutional"),
                            ("other", "Other"),
                        ],
                        default="other",
                        max_length=24,
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("pending", "Pending"),
                            ("verified", "Verified"),
                            ("flagged", "Flagged"),
                            ("failed", "Failed"),
                        ],
                        default="pending",
                        max_length=16,
                    ),
                ),
                (
                    "score",
                    models.DecimalField(blank=True, decimal_places=2, max_digits=8, null=True),
                ),
                ("summary", models.TextField(blank=True)),
                ("findings", models.JSONField(blank=True, default=dict)),
                ("verified_at", models.DateTimeField(blank=True, null=True)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                (
                    "application",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="verification_records",
                        to="rims_grants.application",
                    ),
                ),
                (
                    "verified_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="verification_records_verified",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "ordering": ["-created_at", "-pk"],
            },
        ),
        migrations.CreateModel(
            name="AwardAgreement",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                ("version_number", models.PositiveSmallIntegerField(default=1)),
                ("title", models.CharField(blank=True, max_length=255)),
                (
                    "document",
                    models.FileField(
                        blank=True, null=True, upload_to=apps.core.storage.paths.upload_to_grants
                    ),
                ),
                ("accepted", models.BooleanField(default=False)),
                ("accepted_at", models.DateTimeField(blank=True, null=True)),
                ("uploaded_at", models.DateTimeField(auto_now_add=True)),
                (
                    "accepted_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="award_agreements_accepted",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "award",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="agreements",
                        to="rims_grants.award",
                    ),
                ),
                (
                    "uploaded_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="award_agreements_uploaded",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "ordering": ["-version_number", "-pk"],
                "constraints": [
                    models.UniqueConstraint(
                        fields=("award", "version_number"), name="uniq_award_agreement_version"
                    )
                ],
            },
        ),
        migrations.CreateModel(
            name="AwardAmendment",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                ("amendment_number", models.PositiveSmallIntegerField(default=1)),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("requested", "Requested"),
                            ("approved", "Approved"),
                            ("rejected", "Rejected"),
                        ],
                        default="requested",
                        max_length=16,
                    ),
                ),
                ("change_summary", models.TextField()),
                ("justification", models.TextField(blank=True)),
                ("previous_terms", models.JSONField(blank=True, default=dict)),
                ("new_terms", models.JSONField(blank=True, default=dict)),
                ("rejection_reason", models.TextField(blank=True)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("decided_at", models.DateTimeField(blank=True, null=True)),
                (
                    "approver",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="award_amendments_approved",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "award",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="amendments",
                        to="rims_grants.award",
                    ),
                ),
                (
                    "requested_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="award_amendments_requested",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "ordering": ["-amendment_number", "-pk"],
                "constraints": [
                    models.UniqueConstraint(
                        fields=("award", "amendment_number"), name="uniq_award_amendment_number"
                    )
                ],
            },
        ),
    ]
