# Generated by Django 5.2.13 on 2026-04-26 21:06

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


class Migration(migrations.Migration):

    dependencies = [
        ("rims_finance", "0004_budget_account_reference_budget_approved_at_and_more"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.AddField(
            model_name="budget",
            name="currency",
            field=models.CharField(
                choices=[
                    ("AED", "AED — UAE dirham"),
                    ("AFN", "AFN — Afghani"),
                    ("ALL", "ALL — Albanian lek"),
                    ("AMD", "AMD — Armenian dram"),
                    ("ANG", "ANG — Netherlands Antillean guilder"),
                    ("AOA", "AOA — Kwanza"),
                    ("ARS", "ARS — Argentine peso"),
                    ("AUD", "AUD — Australian dollar"),
                    ("AWG", "AWG — Aruban florin"),
                    ("AZN", "AZN — Azerbaijanian manat"),
                    ("BAM", "BAM — Convertible mark"),
                    ("BBD", "BBD — Barbados dollar"),
                    ("BDT", "BDT — Taka"),
                    ("BGN", "BGN — Bulgarian lev"),
                    ("BHD", "BHD — Bahraini dinar"),
                    ("BIF", "BIF — Burundi franc"),
                    ("BMD", "BMD — Bermudian dollar"),
                    ("BND", "BND — Brunei dollar"),
                    ("BOB", "BOB — Boliviano"),
                    ("BOV", "BOV — Mvdol"),
                    ("BRL", "BRL — Brazilian real"),
                    ("BSD", "BSD — Bahamian dollar"),
                    ("BTN", "BTN — Ngultrum"),
                    ("BWP", "BWP — Pula"),
                    ("BYN", "BYN — Belarusian ruble"),
                    ("BZD", "BZD — Belize dollar"),
                    ("CAD", "CAD — Canadian dollar"),
                    ("CDF", "CDF — Congolese franc"),
                    ("CHE", "CHE — WIR euro"),
                    ("CHF", "CHF — Swiss franc"),
                    ("CHW", "CHW — WIR franc"),
                    ("CLF", "CLF — Unidad de fomento"),
                    ("CLP", "CLP — Chilean peso"),
                    ("CNY", "CNY — Yuan renminbi"),
                    ("COP", "COP — Colombian peso"),
                    ("COU", "COU — Unidad de valor real"),
                    ("CRC", "CRC — Costa Rican colon"),
                    ("CUC", "CUC — Peso convertible"),
                    ("CUP", "CUP — Cuban peso"),
                    ("CVE", "CVE — Cabo Verde escudo"),
                    ("CZK", "CZK — Czech koruna"),
                    ("DJF", "DJF — Djibouti franc"),
                    ("DKK", "DKK — Danish krone"),
                    ("DOP", "DOP — Dominican peso"),
                    ("DZD", "DZD — Algerian dinar"),
                    ("EGP", "EGP — Egyptian pound"),
                    ("ERN", "ERN — Nakfa"),
                    ("ETB", "ETB — Ethiopian birr"),
                    ("EUR", "EUR — Euro"),
                    ("FJD", "FJD — Fiji dollar"),
                    ("FKP", "FKP — Falkland Islands pound"),
                    ("GBP", "GBP — Pound sterling"),
                    ("GEL", "GEL — Lari"),
                    ("GHS", "GHS — Ghana cedi"),
                    ("GIP", "GIP — Gibraltar pound"),
                    ("GMD", "GMD — Dalasi"),
                    ("GNF", "GNF — Guinean franc"),
                    ("GTQ", "GTQ — Quetzal"),
                    ("GYD", "GYD — Guyana dollar"),
                    ("HKD", "HKD — Hong Kong dollar"),
                    ("HNL", "HNL — Lempira"),
                    ("HTG", "HTG — Gourde"),
                    ("HUF", "HUF — Forint"),
                    ("IDR", "IDR — Rupiah"),
                    ("ILS", "ILS — New Israeli sheqel"),
                    ("INR", "INR — Indian rupee"),
                    ("IQD", "IQD — Iraqi dinar"),
                    ("IRR", "IRR — Iranian rial"),
                    ("ISK", "ISK — Icelandic krona"),
                    ("JMD", "JMD — Jamaican dollar"),
                    ("JOD", "JOD — Jordanian dinar"),
                    ("JPY", "JPY — Yen"),
                    ("KES", "KES — Kenyan shilling"),
                    ("KGS", "KGS — Som"),
                    ("KHR", "KHR — Riel"),
                    ("KMF", "KMF — Comorian franc"),
                    ("KPW", "KPW — North Korean won"),
                    ("KRW", "KRW — Won"),
                    ("KWD", "KWD — Kuwaiti dinar"),
                    ("KYD", "KYD — Cayman Islands dollar"),
                    ("KZT", "KZT — Tenge"),
                    ("LAK", "LAK — Kip"),
                    ("LBP", "LBP — Lebanese pound"),
                    ("LKR", "LKR — Sri Lanka rupee"),
                    ("LRD", "LRD — Liberian dollar"),
                    ("LSL", "LSL — Loti"),
                    ("LYD", "LYD — Libyan dinar"),
                    ("MAD", "MAD — Moroccan dirham"),
                    ("MDL", "MDL — Moldovan leu"),
                    ("MGA", "MGA — Malagasy ariary"),
                    ("MKD", "MKD — Denar"),
                    ("MMK", "MMK — Kyat"),
                    ("MNT", "MNT — Tugrik"),
                    ("MOP", "MOP — Pataca"),
                    ("MRU", "MRU — Ouguiya"),
                    ("MUR", "MUR — Mauritius rupee"),
                    ("MVR", "MVR — Rufiyaa"),
                    ("MWK", "MWK — Kwacha"),
                    ("MXN", "MXN — Mexican peso"),
                    ("MXV", "MXV — Mexican unidad de inversion"),
                    ("MYR", "MYR — Malaysian ringgit"),
                    ("MZN", "MZN — Mozambique metical"),
                    ("NAD", "NAD — Namibia dollar"),
                    ("NGN", "NGN — Naira"),
                    ("NIO", "NIO — Cordoba oro"),
                    ("NOK", "NOK — Norwegian krone"),
                    ("NPR", "NPR — Nepalese rupee"),
                    ("NZD", "NZD — New Zealand dollar"),
                    ("OMR", "OMR — Rial Omani"),
                    ("PAB", "PAB — Balboa"),
                    ("PEN", "PEN — Sol"),
                    ("PGK", "PGK — Kina"),
                    ("PHP", "PHP — Philippine peso"),
                    ("PKR", "PKR — Pakistan rupee"),
                    ("PLN", "PLN — Zloty"),
                    ("PYG", "PYG — Guarani"),
                    ("QAR", "QAR — Qatari riyal"),
                    ("RON", "RON — Romanian leu"),
                    ("RSD", "RSD — Serbian dinar"),
                    ("RUB", "RUB — Russian ruble"),
                    ("RWF", "RWF — Rwanda franc"),
                    ("SAR", "SAR — Saudi riyal"),
                    ("SBD", "SBD — Solomon Islands dollar"),
                    ("SCR", "SCR — Seychelles rupee"),
                    ("SDG", "SDG — Sudanese pound"),
                    ("SEK", "SEK — Swedish krona"),
                    ("SGD", "SGD — Singapore dollar"),
                    ("SHP", "SHP — Saint Helena pound"),
                    ("SLE", "SLE — Sierra Leonean leone"),
                    ("SOS", "SOS — Somali shilling"),
                    ("SRD", "SRD — Surinam dollar"),
                    ("SSP", "SSP — South Sudanese pound"),
                    ("STN", "STN — Dobra"),
                    ("SVC", "SVC — El Salvador colon"),
                    ("SYP", "SYP — Syrian pound"),
                    ("SZL", "SZL — Lilangeni"),
                    ("THB", "THB — Baht"),
                    ("TJS", "TJS — Somoni"),
                    ("TMT", "TMT — Turkmenistan new manat"),
                    ("TND", "TND — Tunisian dinar"),
                    ("TOP", "TOP — Pa'anga"),
                    ("TRY", "TRY — Turkish lira"),
                    ("TTD", "TTD — Trinidad and Tobago dollar"),
                    ("TWD", "TWD — New Taiwan dollar"),
                    ("TZS", "TZS — Tanzanian shilling"),
                    ("UAH", "UAH — Hryvnia"),
                    ("UGX", "UGX — Uganda shilling"),
                    ("USD", "USD — US dollar"),
                    ("USN", "USN — US dollar (next day)"),
                    ("UYI", "UYI — Uruguay peso en unidades indexadas"),
                    ("UYU", "UYU — Peso uruguayo"),
                    ("UYW", "UYW — Unidad previsional"),
                    ("UZS", "UZS — Uzbekistan sum"),
                    ("VES", "VES — Bolívar soberano"),
                    ("VND", "VND — Dong"),
                    ("VUV", "VUV — Vatu"),
                    ("WST", "WST — Tala"),
                    ("XAF", "XAF — CFA franc BEAC"),
                    ("XAG", "XAG — Silver"),
                    ("XAU", "XAU — Gold"),
                    ("XBA", "XBA — European Composite Unit"),
                    ("XBB", "XBB — European Monetary Unit"),
                    ("XBC", "XBC — European Unit of Account 9"),
                    ("XBD", "XBD — European Unit of Account 17"),
                    ("XCD", "XCD — East Caribbean dollar"),
                    ("XCG", "XCG — Caribbean guilder"),
                    ("XDR", "XDR — Special drawing rights"),
                    ("XOF", "XOF — CFA franc BCEAO"),
                    ("XPD", "XPD — Palladium"),
                    ("XPF", "XPF — CFP franc"),
                    ("XPT", "XPT — Platinum"),
                    ("XSU", "XSU — Sucre"),
                    ("XUA", "XUA — ADB Unit of Account"),
                    ("XXX", "XXX — No currency"),
                    ("YER", "YER — Yemeni rial"),
                    ("ZAR", "ZAR — South African rand"),
                    ("ZMW", "ZMW — Zambian kwacha"),
                    ("ZWL", "ZWL — Zimbabwe dollar"),
                ],
                default="USD",
                max_length=8,
            ),
        ),
        migrations.AddField(
            model_name="disbursementrequest",
            name="payee_email",
            field=models.EmailField(blank=True, max_length=254),
        ),
        migrations.AddField(
            model_name="paymentschedule",
            name="last_reminded_at",
            field=models.DateTimeField(blank=True, null=True),
        ),
        migrations.CreateModel(
            name="BudgetRevision",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "version",
                    models.PositiveIntegerField(
                        help_text="Sequential version number; first revision = 1, second = 2, ..."
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("requested", "Requested"),
                            ("approved", "Approved"),
                            ("rejected", "Rejected"),
                        ],
                        db_index=True,
                        default="requested",
                        max_length=16,
                    ),
                ),
                (
                    "change_summary",
                    models.TextField(
                        help_text="What is changing and why. Required for the audit trail."
                    ),
                ),
                ("requested_at", models.DateTimeField(auto_now_add=True)),
                ("decided_at", models.DateTimeField(blank=True, null=True)),
                ("decided_comment", models.TextField(blank=True)),
                (
                    "budget",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="revisions",
                        to="rims_finance.budget",
                    ),
                ),
                (
                    "decided_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="budget_revisions_decided",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "requested_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="budget_revisions_requested",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "ordering": ["-version", "-pk"],
            },
        ),
        migrations.CreateModel(
            name="BudgetRevisionLine",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                ("old_amount", models.DecimalField(decimal_places=2, max_digits=14)),
                ("new_amount", models.DecimalField(decimal_places=2, max_digits=14)),
                ("justification", models.TextField(blank=True)),
                (
                    "line",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="revision_changes",
                        to="rims_finance.budgetline",
                    ),
                ),
                (
                    "revision",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="lines",
                        to="rims_finance.budgetrevision",
                    ),
                ),
            ],
            options={
                "ordering": ["pk"],
            },
        ),
        migrations.CreateModel(
            name="ExchangeRate",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "from_currency",
                    models.CharField(
                        choices=[
                            ("AED", "AED — UAE dirham"),
                            ("AFN", "AFN — Afghani"),
                            ("ALL", "ALL — Albanian lek"),
                            ("AMD", "AMD — Armenian dram"),
                            ("ANG", "ANG — Netherlands Antillean guilder"),
                            ("AOA", "AOA — Kwanza"),
                            ("ARS", "ARS — Argentine peso"),
                            ("AUD", "AUD — Australian dollar"),
                            ("AWG", "AWG — Aruban florin"),
                            ("AZN", "AZN — Azerbaijanian manat"),
                            ("BAM", "BAM — Convertible mark"),
                            ("BBD", "BBD — Barbados dollar"),
                            ("BDT", "BDT — Taka"),
                            ("BGN", "BGN — Bulgarian lev"),
                            ("BHD", "BHD — Bahraini dinar"),
                            ("BIF", "BIF — Burundi franc"),
                            ("BMD", "BMD — Bermudian dollar"),
                            ("BND", "BND — Brunei dollar"),
                            ("BOB", "BOB — Boliviano"),
                            ("BOV", "BOV — Mvdol"),
                            ("BRL", "BRL — Brazilian real"),
                            ("BSD", "BSD — Bahamian dollar"),
                            ("BTN", "BTN — Ngultrum"),
                            ("BWP", "BWP — Pula"),
                            ("BYN", "BYN — Belarusian ruble"),
                            ("BZD", "BZD — Belize dollar"),
                            ("CAD", "CAD — Canadian dollar"),
                            ("CDF", "CDF — Congolese franc"),
                            ("CHE", "CHE — WIR euro"),
                            ("CHF", "CHF — Swiss franc"),
                            ("CHW", "CHW — WIR franc"),
                            ("CLF", "CLF — Unidad de fomento"),
                            ("CLP", "CLP — Chilean peso"),
                            ("CNY", "CNY — Yuan renminbi"),
                            ("COP", "COP — Colombian peso"),
                            ("COU", "COU — Unidad de valor real"),
                            ("CRC", "CRC — Costa Rican colon"),
                            ("CUC", "CUC — Peso convertible"),
                            ("CUP", "CUP — Cuban peso"),
                            ("CVE", "CVE — Cabo Verde escudo"),
                            ("CZK", "CZK — Czech koruna"),
                            ("DJF", "DJF — Djibouti franc"),
                            ("DKK", "DKK — Danish krone"),
                            ("DOP", "DOP — Dominican peso"),
                            ("DZD", "DZD — Algerian dinar"),
                            ("EGP", "EGP — Egyptian pound"),
                            ("ERN", "ERN — Nakfa"),
                            ("ETB", "ETB — Ethiopian birr"),
                            ("EUR", "EUR — Euro"),
                            ("FJD", "FJD — Fiji dollar"),
                            ("FKP", "FKP — Falkland Islands pound"),
                            ("GBP", "GBP — Pound sterling"),
                            ("GEL", "GEL — Lari"),
                            ("GHS", "GHS — Ghana cedi"),
                            ("GIP", "GIP — Gibraltar pound"),
                            ("GMD", "GMD — Dalasi"),
                            ("GNF", "GNF — Guinean franc"),
                            ("GTQ", "GTQ — Quetzal"),
                            ("GYD", "GYD — Guyana dollar"),
                            ("HKD", "HKD — Hong Kong dollar"),
                            ("HNL", "HNL — Lempira"),
                            ("HTG", "HTG — Gourde"),
                            ("HUF", "HUF — Forint"),
                            ("IDR", "IDR — Rupiah"),
                            ("ILS", "ILS — New Israeli sheqel"),
                            ("INR", "INR — Indian rupee"),
                            ("IQD", "IQD — Iraqi dinar"),
                            ("IRR", "IRR — Iranian rial"),
                            ("ISK", "ISK — Icelandic krona"),
                            ("JMD", "JMD — Jamaican dollar"),
                            ("JOD", "JOD — Jordanian dinar"),
                            ("JPY", "JPY — Yen"),
                            ("KES", "KES — Kenyan shilling"),
                            ("KGS", "KGS — Som"),
                            ("KHR", "KHR — Riel"),
                            ("KMF", "KMF — Comorian franc"),
                            ("KPW", "KPW — North Korean won"),
                            ("KRW", "KRW — Won"),
                            ("KWD", "KWD — Kuwaiti dinar"),
                            ("KYD", "KYD — Cayman Islands dollar"),
                            ("KZT", "KZT — Tenge"),
                            ("LAK", "LAK — Kip"),
                            ("LBP", "LBP — Lebanese pound"),
                            ("LKR", "LKR — Sri Lanka rupee"),
                            ("LRD", "LRD — Liberian dollar"),
                            ("LSL", "LSL — Loti"),
                            ("LYD", "LYD — Libyan dinar"),
                            ("MAD", "MAD — Moroccan dirham"),
                            ("MDL", "MDL — Moldovan leu"),
                            ("MGA", "MGA — Malagasy ariary"),
                            ("MKD", "MKD — Denar"),
                            ("MMK", "MMK — Kyat"),
                            ("MNT", "MNT — Tugrik"),
                            ("MOP", "MOP — Pataca"),
                            ("MRU", "MRU — Ouguiya"),
                            ("MUR", "MUR — Mauritius rupee"),
                            ("MVR", "MVR — Rufiyaa"),
                            ("MWK", "MWK — Kwacha"),
                            ("MXN", "MXN — Mexican peso"),
                            ("MXV", "MXV — Mexican unidad de inversion"),
                            ("MYR", "MYR — Malaysian ringgit"),
                            ("MZN", "MZN — Mozambique metical"),
                            ("NAD", "NAD — Namibia dollar"),
                            ("NGN", "NGN — Naira"),
                            ("NIO", "NIO — Cordoba oro"),
                            ("NOK", "NOK — Norwegian krone"),
                            ("NPR", "NPR — Nepalese rupee"),
                            ("NZD", "NZD — New Zealand dollar"),
                            ("OMR", "OMR — Rial Omani"),
                            ("PAB", "PAB — Balboa"),
                            ("PEN", "PEN — Sol"),
                            ("PGK", "PGK — Kina"),
                            ("PHP", "PHP — Philippine peso"),
                            ("PKR", "PKR — Pakistan rupee"),
                            ("PLN", "PLN — Zloty"),
                            ("PYG", "PYG — Guarani"),
                            ("QAR", "QAR — Qatari riyal"),
                            ("RON", "RON — Romanian leu"),
                            ("RSD", "RSD — Serbian dinar"),
                            ("RUB", "RUB — Russian ruble"),
                            ("RWF", "RWF — Rwanda franc"),
                            ("SAR", "SAR — Saudi riyal"),
                            ("SBD", "SBD — Solomon Islands dollar"),
                            ("SCR", "SCR — Seychelles rupee"),
                            ("SDG", "SDG — Sudanese pound"),
                            ("SEK", "SEK — Swedish krona"),
                            ("SGD", "SGD — Singapore dollar"),
                            ("SHP", "SHP — Saint Helena pound"),
                            ("SLE", "SLE — Sierra Leonean leone"),
                            ("SOS", "SOS — Somali shilling"),
                            ("SRD", "SRD — Surinam dollar"),
                            ("SSP", "SSP — South Sudanese pound"),
                            ("STN", "STN — Dobra"),
                            ("SVC", "SVC — El Salvador colon"),
                            ("SYP", "SYP — Syrian pound"),
                            ("SZL", "SZL — Lilangeni"),
                            ("THB", "THB — Baht"),
                            ("TJS", "TJS — Somoni"),
                            ("TMT", "TMT — Turkmenistan new manat"),
                            ("TND", "TND — Tunisian dinar"),
                            ("TOP", "TOP — Pa'anga"),
                            ("TRY", "TRY — Turkish lira"),
                            ("TTD", "TTD — Trinidad and Tobago dollar"),
                            ("TWD", "TWD — New Taiwan dollar"),
                            ("TZS", "TZS — Tanzanian shilling"),
                            ("UAH", "UAH — Hryvnia"),
                            ("UGX", "UGX — Uganda shilling"),
                            ("USD", "USD — US dollar"),
                            ("USN", "USN — US dollar (next day)"),
                            ("UYI", "UYI — Uruguay peso en unidades indexadas"),
                            ("UYU", "UYU — Peso uruguayo"),
                            ("UYW", "UYW — Unidad previsional"),
                            ("UZS", "UZS — Uzbekistan sum"),
                            ("VES", "VES — Bolívar soberano"),
                            ("VND", "VND — Dong"),
                            ("VUV", "VUV — Vatu"),
                            ("WST", "WST — Tala"),
                            ("XAF", "XAF — CFA franc BEAC"),
                            ("XAG", "XAG — Silver"),
                            ("XAU", "XAU — Gold"),
                            ("XBA", "XBA — European Composite Unit"),
                            ("XBB", "XBB — European Monetary Unit"),
                            ("XBC", "XBC — European Unit of Account 9"),
                            ("XBD", "XBD — European Unit of Account 17"),
                            ("XCD", "XCD — East Caribbean dollar"),
                            ("XCG", "XCG — Caribbean guilder"),
                            ("XDR", "XDR — Special drawing rights"),
                            ("XOF", "XOF — CFA franc BCEAO"),
                            ("XPD", "XPD — Palladium"),
                            ("XPF", "XPF — CFP franc"),
                            ("XPT", "XPT — Platinum"),
                            ("XSU", "XSU — Sucre"),
                            ("XUA", "XUA — ADB Unit of Account"),
                            ("XXX", "XXX — No currency"),
                            ("YER", "YER — Yemeni rial"),
                            ("ZAR", "ZAR — South African rand"),
                            ("ZMW", "ZMW — Zambian kwacha"),
                            ("ZWL", "ZWL — Zimbabwe dollar"),
                        ],
                        max_length=8,
                    ),
                ),
                (
                    "to_currency",
                    models.CharField(
                        choices=[
                            ("AED", "AED — UAE dirham"),
                            ("AFN", "AFN — Afghani"),
                            ("ALL", "ALL — Albanian lek"),
                            ("AMD", "AMD — Armenian dram"),
                            ("ANG", "ANG — Netherlands Antillean guilder"),
                            ("AOA", "AOA — Kwanza"),
                            ("ARS", "ARS — Argentine peso"),
                            ("AUD", "AUD — Australian dollar"),
                            ("AWG", "AWG — Aruban florin"),
                            ("AZN", "AZN — Azerbaijanian manat"),
                            ("BAM", "BAM — Convertible mark"),
                            ("BBD", "BBD — Barbados dollar"),
                            ("BDT", "BDT — Taka"),
                            ("BGN", "BGN — Bulgarian lev"),
                            ("BHD", "BHD — Bahraini dinar"),
                            ("BIF", "BIF — Burundi franc"),
                            ("BMD", "BMD — Bermudian dollar"),
                            ("BND", "BND — Brunei dollar"),
                            ("BOB", "BOB — Boliviano"),
                            ("BOV", "BOV — Mvdol"),
                            ("BRL", "BRL — Brazilian real"),
                            ("BSD", "BSD — Bahamian dollar"),
                            ("BTN", "BTN — Ngultrum"),
                            ("BWP", "BWP — Pula"),
                            ("BYN", "BYN — Belarusian ruble"),
                            ("BZD", "BZD — Belize dollar"),
                            ("CAD", "CAD — Canadian dollar"),
                            ("CDF", "CDF — Congolese franc"),
                            ("CHE", "CHE — WIR euro"),
                            ("CHF", "CHF — Swiss franc"),
                            ("CHW", "CHW — WIR franc"),
                            ("CLF", "CLF — Unidad de fomento"),
                            ("CLP", "CLP — Chilean peso"),
                            ("CNY", "CNY — Yuan renminbi"),
                            ("COP", "COP — Colombian peso"),
                            ("COU", "COU — Unidad de valor real"),
                            ("CRC", "CRC — Costa Rican colon"),
                            ("CUC", "CUC — Peso convertible"),
                            ("CUP", "CUP — Cuban peso"),
                            ("CVE", "CVE — Cabo Verde escudo"),
                            ("CZK", "CZK — Czech koruna"),
                            ("DJF", "DJF — Djibouti franc"),
                            ("DKK", "DKK — Danish krone"),
                            ("DOP", "DOP — Dominican peso"),
                            ("DZD", "DZD — Algerian dinar"),
                            ("EGP", "EGP — Egyptian pound"),
                            ("ERN", "ERN — Nakfa"),
                            ("ETB", "ETB — Ethiopian birr"),
                            ("EUR", "EUR — Euro"),
                            ("FJD", "FJD — Fiji dollar"),
                            ("FKP", "FKP — Falkland Islands pound"),
                            ("GBP", "GBP — Pound sterling"),
                            ("GEL", "GEL — Lari"),
                            ("GHS", "GHS — Ghana cedi"),
                            ("GIP", "GIP — Gibraltar pound"),
                            ("GMD", "GMD — Dalasi"),
                            ("GNF", "GNF — Guinean franc"),
                            ("GTQ", "GTQ — Quetzal"),
                            ("GYD", "GYD — Guyana dollar"),
                            ("HKD", "HKD — Hong Kong dollar"),
                            ("HNL", "HNL — Lempira"),
                            ("HTG", "HTG — Gourde"),
                            ("HUF", "HUF — Forint"),
                            ("IDR", "IDR — Rupiah"),
                            ("ILS", "ILS — New Israeli sheqel"),
                            ("INR", "INR — Indian rupee"),
                            ("IQD", "IQD — Iraqi dinar"),
                            ("IRR", "IRR — Iranian rial"),
                            ("ISK", "ISK — Icelandic krona"),
                            ("JMD", "JMD — Jamaican dollar"),
                            ("JOD", "JOD — Jordanian dinar"),
                            ("JPY", "JPY — Yen"),
                            ("KES", "KES — Kenyan shilling"),
                            ("KGS", "KGS — Som"),
                            ("KHR", "KHR — Riel"),
                            ("KMF", "KMF — Comorian franc"),
                            ("KPW", "KPW — North Korean won"),
                            ("KRW", "KRW — Won"),
                            ("KWD", "KWD — Kuwaiti dinar"),
                            ("KYD", "KYD — Cayman Islands dollar"),
                            ("KZT", "KZT — Tenge"),
                            ("LAK", "LAK — Kip"),
                            ("LBP", "LBP — Lebanese pound"),
                            ("LKR", "LKR — Sri Lanka rupee"),
                            ("LRD", "LRD — Liberian dollar"),
                            ("LSL", "LSL — Loti"),
                            ("LYD", "LYD — Libyan dinar"),
                            ("MAD", "MAD — Moroccan dirham"),
                            ("MDL", "MDL — Moldovan leu"),
                            ("MGA", "MGA — Malagasy ariary"),
                            ("MKD", "MKD — Denar"),
                            ("MMK", "MMK — Kyat"),
                            ("MNT", "MNT — Tugrik"),
                            ("MOP", "MOP — Pataca"),
                            ("MRU", "MRU — Ouguiya"),
                            ("MUR", "MUR — Mauritius rupee"),
                            ("MVR", "MVR — Rufiyaa"),
                            ("MWK", "MWK — Kwacha"),
                            ("MXN", "MXN — Mexican peso"),
                            ("MXV", "MXV — Mexican unidad de inversion"),
                            ("MYR", "MYR — Malaysian ringgit"),
                            ("MZN", "MZN — Mozambique metical"),
                            ("NAD", "NAD — Namibia dollar"),
                            ("NGN", "NGN — Naira"),
                            ("NIO", "NIO — Cordoba oro"),
                            ("NOK", "NOK — Norwegian krone"),
                            ("NPR", "NPR — Nepalese rupee"),
                            ("NZD", "NZD — New Zealand dollar"),
                            ("OMR", "OMR — Rial Omani"),
                            ("PAB", "PAB — Balboa"),
                            ("PEN", "PEN — Sol"),
                            ("PGK", "PGK — Kina"),
                            ("PHP", "PHP — Philippine peso"),
                            ("PKR", "PKR — Pakistan rupee"),
                            ("PLN", "PLN — Zloty"),
                            ("PYG", "PYG — Guarani"),
                            ("QAR", "QAR — Qatari riyal"),
                            ("RON", "RON — Romanian leu"),
                            ("RSD", "RSD — Serbian dinar"),
                            ("RUB", "RUB — Russian ruble"),
                            ("RWF", "RWF — Rwanda franc"),
                            ("SAR", "SAR — Saudi riyal"),
                            ("SBD", "SBD — Solomon Islands dollar"),
                            ("SCR", "SCR — Seychelles rupee"),
                            ("SDG", "SDG — Sudanese pound"),
                            ("SEK", "SEK — Swedish krona"),
                            ("SGD", "SGD — Singapore dollar"),
                            ("SHP", "SHP — Saint Helena pound"),
                            ("SLE", "SLE — Sierra Leonean leone"),
                            ("SOS", "SOS — Somali shilling"),
                            ("SRD", "SRD — Surinam dollar"),
                            ("SSP", "SSP — South Sudanese pound"),
                            ("STN", "STN — Dobra"),
                            ("SVC", "SVC — El Salvador colon"),
                            ("SYP", "SYP — Syrian pound"),
                            ("SZL", "SZL — Lilangeni"),
                            ("THB", "THB — Baht"),
                            ("TJS", "TJS — Somoni"),
                            ("TMT", "TMT — Turkmenistan new manat"),
                            ("TND", "TND — Tunisian dinar"),
                            ("TOP", "TOP — Pa'anga"),
                            ("TRY", "TRY — Turkish lira"),
                            ("TTD", "TTD — Trinidad and Tobago dollar"),
                            ("TWD", "TWD — New Taiwan dollar"),
                            ("TZS", "TZS — Tanzanian shilling"),
                            ("UAH", "UAH — Hryvnia"),
                            ("UGX", "UGX — Uganda shilling"),
                            ("USD", "USD — US dollar"),
                            ("USN", "USN — US dollar (next day)"),
                            ("UYI", "UYI — Uruguay peso en unidades indexadas"),
                            ("UYU", "UYU — Peso uruguayo"),
                            ("UYW", "UYW — Unidad previsional"),
                            ("UZS", "UZS — Uzbekistan sum"),
                            ("VES", "VES — Bolívar soberano"),
                            ("VND", "VND — Dong"),
                            ("VUV", "VUV — Vatu"),
                            ("WST", "WST — Tala"),
                            ("XAF", "XAF — CFA franc BEAC"),
                            ("XAG", "XAG — Silver"),
                            ("XAU", "XAU — Gold"),
                            ("XBA", "XBA — European Composite Unit"),
                            ("XBB", "XBB — European Monetary Unit"),
                            ("XBC", "XBC — European Unit of Account 9"),
                            ("XBD", "XBD — European Unit of Account 17"),
                            ("XCD", "XCD — East Caribbean dollar"),
                            ("XCG", "XCG — Caribbean guilder"),
                            ("XDR", "XDR — Special drawing rights"),
                            ("XOF", "XOF — CFA franc BCEAO"),
                            ("XPD", "XPD — Palladium"),
                            ("XPF", "XPF — CFP franc"),
                            ("XPT", "XPT — Platinum"),
                            ("XSU", "XSU — Sucre"),
                            ("XUA", "XUA — ADB Unit of Account"),
                            ("XXX", "XXX — No currency"),
                            ("YER", "YER — Yemeni rial"),
                            ("ZAR", "ZAR — South African rand"),
                            ("ZMW", "ZMW — Zambian kwacha"),
                            ("ZWL", "ZWL — Zimbabwe dollar"),
                        ],
                        max_length=8,
                    ),
                ),
                (
                    "rate",
                    models.DecimalField(
                        decimal_places=8,
                        help_text="Multiply a from_currency amount by this rate to get a to_currency amount.",
                        max_digits=18,
                    ),
                ),
                (
                    "effective_date",
                    models.DateField(
                        help_text="Date this rate applies from. The most recent row at-or-before the report date wins."
                    ),
                ),
                (
                    "source",
                    models.CharField(
                        blank=True,
                        help_text="Optional source / reference (e.g. 'BoU 2026-04-01').",
                        max_length=120,
                    ),
                ),
                ("created_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="exchange_rates_recorded",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "ordering": ["-effective_date", "from_currency", "to_currency"],
            },
        ),
        migrations.AddConstraint(
            model_name="budgetrevision",
            constraint=models.UniqueConstraint(
                fields=("budget", "version"), name="uniq_budget_revision_version"
            ),
        ),
        migrations.AddConstraint(
            model_name="budgetrevisionline",
            constraint=models.UniqueConstraint(
                fields=("revision", "line"), name="uniq_budget_revision_line"
            ),
        ),
        migrations.AddConstraint(
            model_name="exchangerate",
            constraint=models.UniqueConstraint(
                fields=("from_currency", "to_currency", "effective_date"),
                name="uniq_exchange_rate_per_pair_per_date",
            ),
        ),
    ]
