# Generated by Django 5.2.13 on 2026-05-18 09:07

import apps.core.storage.paths
import apps.core.storage.validators
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ("rims_finance", "0013_payment_failure_retry"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.AddField(
            model_name="disbursementexecution",
            name="gl_posting_status",
            field=models.CharField(
                default="pending", help_text='"pending", "posted", or "flagged".', max_length=16
            ),
        ),
        migrations.CreateModel(
            name="BankStatement",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                ("name", models.CharField(max_length=255)),
                ("period_start", models.DateField()),
                ("period_end", models.DateField()),
                (
                    "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"),
                        ],
                        default="USD",
                        max_length=8,
                    ),
                ),
                ("uploaded_at", models.DateTimeField(auto_now_add=True)),
                (
                    "file",
                    models.FileField(
                        upload_to=apps.core.storage.paths.upload_to_finance,
                        validators=[
                            apps.core.storage.validators.FileValidator(
                                allowed_categories=["document", "data", "archive"], module="rims"
                            )
                        ],
                    ),
                ),
                ("account_reference", models.CharField(max_length=96)),
                (
                    "uploaded_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="bank_statements_uploaded",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "ordering": ["-uploaded_at"],
            },
        ),
        migrations.CreateModel(
            name="GLEntry",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                ("account_code", models.CharField(max_length=32)),
                ("debit", models.DecimalField(decimal_places=2, default=0, max_digits=14)),
                ("credit", models.DecimalField(decimal_places=2, default=0, max_digits=14)),
                (
                    "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"),
                        ],
                        default="USD",
                        max_length=8,
                    ),
                ),
                ("narrative", models.CharField(blank=True, max_length=255)),
                ("posted_at", models.DateTimeField(auto_now_add=True)),
                (
                    "validation_status",
                    models.CharField(
                        choices=[
                            ("posted", "Posted"),
                            ("flagged", "Flagged"),
                            ("voided", "Voided"),
                        ],
                        default="posted",
                        max_length=12,
                    ),
                ),
                ("validation_notes", models.TextField(blank=True)),
                (
                    "execution",
                    models.ForeignKey(
                        help_text="PROTECT preserves the audit chain; void via void_gl_entry before delete.",
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="gl_entries",
                        to="rims_finance.disbursementexecution",
                    ),
                ),
                (
                    "posted_by",
                    models.ForeignKey(
                        blank=True,
                        help_text="NULL when posted by the signal (executor of the save) — see services_gl.",
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="gl_entries_posted",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "ordering": ["-posted_at"],
            },
        ),
        migrations.CreateModel(
            name="BankStatementLine",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                ("value_date", models.DateField()),
                ("description", models.CharField(max_length=512)),
                ("amount", models.DecimalField(decimal_places=2, max_digits=14)),
                (
                    "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"),
                        ],
                        default="USD",
                        max_length=8,
                    ),
                ),
                (
                    "match_status",
                    models.CharField(
                        choices=[
                            ("unmatched", "Unmatched"),
                            ("matched", "Matched"),
                            ("disputed", "Disputed"),
                        ],
                        default="unmatched",
                        max_length=12,
                    ),
                ),
                (
                    "matched_execution",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="bank_lines_matched",
                        to="rims_finance.disbursementexecution",
                    ),
                ),
                (
                    "statement",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="lines",
                        to="rims_finance.bankstatement",
                    ),
                ),
                (
                    "matched_gl_entry",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="bank_lines_matched",
                        to="rims_finance.glentry",
                    ),
                ),
            ],
            options={
                "ordering": ["value_date", "pk"],
            },
        ),
        migrations.AddIndex(
            model_name="glentry",
            index=models.Index(fields=["execution"], name="rims_financ_executi_ff273d_idx"),
        ),
        migrations.AddIndex(
            model_name="glentry",
            index=models.Index(
                fields=["validation_status", "posted_at"], name="rims_financ_validat_76749e_idx"
            ),
        ),
        migrations.AddConstraint(
            model_name="glentry",
            constraint=models.CheckConstraint(
                condition=models.Q(("debit__gt", 0), ("credit__gt", 0), _connector="OR"),
                name="gl_entry_debit_or_credit_positive",
            ),
        ),
        migrations.AddIndex(
            model_name="bankstatementline",
            index=models.Index(
                fields=["match_status", "value_date"], name="rims_financ_match_s_34035d_idx"
            ),
        ),
    ]
