{"personas":{"gig_variable_income":{"persona_id":"gig_variable_income","name":"Priya — Gig / Variable Income","archetype":"gig_worker","default_seed":5523,"stress_coverage":["gig_irregular_inflow"],"demographics":{"nationality_pool":"expat_indian","age_band":"26-34","emirate":"dubai"},"income":{"primary_employer_pool":"platforms_gig","monthly_amount_aed":12000,"pay_day":1,"variability":"high","flag_payroll":false},"accounts":[{"type":"CurrentAccount","currency":"AED","age_months":14}],"fixed_commitments":[{"kind":"direct_debit","purpose":"utilities_dewa","amount_aed_band":[250,500],"schedule":"monthly_8"}],"spend_profile":{"groceries_aed_per_month_band":[800,1600],"fuel_aed_per_month_band":[200,500],"dining_per_month_count_band":[3,8]},"fx_activity":false,"cash_deposit_activity":false,"distress_signals":{"nsf_events_per_year_band":[1,3]},"narrative":"Priya works gig hours via delivery and rideshare platforms. Her income\narrives in irregular bursts from multiple counterparties — no single\nFlags=Payroll credit marks her salary. EXP-18's primary income formula\n(trailing-12-month average of Payroll-flagged credits) returns nothing\nfor her; the Phase 1.5 Underwriting panel must fall back to Fallback B\n(clustered counterparty inflow) to produce a usable income signal.\n"},"hnw_multicurrency":{"persona_id":"hnw_multicurrency","name":"Layla — HNW Multi-Currency Holder","archetype":"hnw","default_seed":2046,"stress_coverage":["multi_currency_accounts","fx_currency_exchange"],"demographics":{"nationality_pool":"expat_arab","age_band":"42-55","emirate":"dubai"},"income":{"primary_employer_pool":"tech_freezone","monthly_amount_aed":95000,"pay_day":25,"variability":"low","flag_payroll":true},"accounts":[{"type":"CurrentAccount","currency":"AED","age_months":120},{"type":"Savings","currency":"USD","age_months":84},{"type":"Savings","currency":"EUR","age_months":60},{"type":"Savings","currency":"GBP","age_months":48}],"fixed_commitments":[{"kind":"standing_order","purpose":"villa_rent","amount_aed":25000,"schedule":"monthly_27"},{"kind":"direct_debit","purpose":"utilities_dewa","amount_aed_band":[1500,2800],"schedule":"monthly_5"}],"spend_profile":{"groceries_aed_per_month_band":[4000,7000],"fuel_aed_per_month_band":[800,1400],"dining_per_month_count_band":[15,30]},"fx_activity":true,"fx_transactions_per_month_band":[2,6],"fx_currencies":["USD","EUR","GBP"],"cash_deposit_activity":false,"distress_signals":{"nsf_events_per_year_band":[0,0]},"narrative":"Layla holds AED current + USD/EUR/GBP savings accounts. Regular FX\ntransfers (2–6/month, in USD/EUR/GBP) exercise the v2.1 CurrencyExchange\nblock: SourceCurrency, TargetCurrency, ExchangeRate, InstructedAmount.\nPremium-product LFI configurations populate optional fields aggressively\non her bundle; sparse-LFI mode shows how thin the international-transfer\nshape can become when those optionals drop out.\n"},"joint_account_family":{"persona_id":"joint_account_family","name":"Maria & Rohan — Joint Account / Family","archetype":"joint_family","default_seed":6612,"stress_coverage":["multi_party_accounts","joint_custodian"],"demographics":{"nationality_pool":"expat_indian","age_band":"32-42","emirate":"dubai"},"income":{"primary_employer_pool":"tech_freezone","monthly_amount_aed":45000,"pay_day":25,"variability":"low","flag_payroll":true},"accounts":[{"type":"CurrentAccount","currency":"AED","age_months":60,"party_type":"Joint"},{"type":"Savings","currency":"AED","age_months":36,"custodian_for_minor":true}],"fixed_commitments":[{"kind":"standing_order","purpose":"villa_rent","amount_aed":14000,"schedule":"monthly_27"},{"kind":"direct_debit","purpose":"utilities_dewa","amount_aed_band":[900,1600],"schedule":"monthly_5"},{"kind":"direct_debit","purpose":"nursery_fees","amount_aed":3200,"schedule":"monthly_10"}],"spend_profile":{"groceries_aed_per_month_band":[3000,5000],"fuel_aed_per_month_band":[600,1100],"dining_per_month_count_band":[6,16]},"fx_activity":false,"cash_deposit_activity":false,"distress_signals":{"nsf_events_per_year_band":[0,1]},"secondary_holder":{"given":"Rohan","surname":"Patel","pool_id":"expat_indian"},"minor_dependents":[{"given":"Aanya","surname":"Patel","age_band":"4-6"},{"given":"Arjun","surname":"Patel","age_band":"7-9"}],"narrative":"Maria & Rohan are an expat couple with a joint current account and a\ncustodian-for-minor savings account for their two children. Tests the\nv2.1 multi-party shapes: PartyType=Joint, AccountRole=CustodianForMinor.\nBundle exercises /accounts/{AccountId}/parties heavily (multiple Party\nrecords per account).\n"},"mortgage_dbr_heavy":{"persona_id":"mortgage_dbr_heavy","name":"Yousef — Mortgage Holder (DBR Heavy)","archetype":"dbr_stretched","default_seed":9203,"stress_coverage":["high_dbr","mortgage_long_dated"],"demographics":{"nationality_pool":"expat_arab","age_band":"38-48","emirate":"dubai"},"income":{"primary_employer_pool":"tech_freezone","monthly_amount_aed":32000,"pay_day":25,"variability":"low","flag_payroll":true},"accounts":[{"type":"CurrentAccount","currency":"AED","age_months":60},{"type":"Mortgage","currency":"AED","age_months":84},{"type":"CreditCard","currency":"AED","credit_limit_aed":80000,"age_months":36}],"fixed_commitments":[{"kind":"standing_order","purpose":"mortgage_principal","amount_aed":13500,"schedule":"monthly_27"},{"kind":"direct_debit","purpose":"utilities_dewa","amount_aed_band":[600,1100],"schedule":"monthly_5"},{"kind":"direct_debit","purpose":"school_fees","amount_aed_band":[4500,5500],"schedule":"monthly_10"},{"kind":"direct_debit","purpose":"car_finance","amount_aed":2400,"schedule":"monthly_15"}],"spend_profile":{"groceries_aed_per_month_band":[2500,4000],"fuel_aed_per_month_band":[600,1000],"dining_per_month_count_band":[6,14]},"fx_activity":false,"cash_deposit_activity":false,"distress_signals":{"nsf_events_per_year_band":[0,2]},"narrative":"Yousef is salaried at AED 32k with a long-dated mortgage. Total fixed\ncommitments — mortgage principal, school fees, utilities, car finance —\npush his implied DBR comfortably above 60%. The Phase 1.5 Underwriting\npanel will compute Total Fixed Commitments by summing standing-order\nNextPaymentAmount + direct-debit PreviousPaymentAmount, normalised to\nmonthly via Frequency. This persona is the DBR stress case.\n"},"nsf_distressed":{"persona_id":"nsf_distressed","name":"Hadi — NSF / Distressed Borrower","archetype":"distressed","default_seed":4407,"stress_coverage":["nsf_distress"],"demographics":{"nationality_pool":"expat_arab","age_band":"30-42","emirate":"dubai"},"income":{"primary_employer_pool":"tech_freezone","monthly_amount_aed":11500,"pay_day":28,"variability":"medium","flag_payroll":true},"accounts":[{"type":"CurrentAccount","currency":"AED","age_months":36},{"type":"CreditCard","currency":"AED","credit_limit_aed":15000,"age_months":24}],"fixed_commitments":[{"kind":"standing_order","purpose":"rent","amount_aed":5500,"schedule":"monthly_27"},{"kind":"direct_debit","purpose":"utilities_dewa","amount_aed_band":[400,700],"schedule":"monthly_5"},{"kind":"direct_debit","purpose":"telco","amount_aed_band":[200,400],"schedule":"monthly_8"},{"kind":"direct_debit","purpose":"personal_loan","amount_aed":2200,"schedule":"monthly_22"}],"spend_profile":{"groceries_aed_per_month_band":[1400,2400],"fuel_aed_per_month_band":[350,600],"dining_per_month_count_band":[3,9]},"fx_activity":false,"cash_deposit_activity":false,"distress_signals":{"nsf_events_per_year_band":[4,9]},"narrative":"Hadi is salaried at AED 11.5k with rent + utilities + telco + a personal-\nloan repayment that together leave little buffer. Late-month direct-debit\nrejections are routine — Status=\"Rejected\" on roughly half the months\nin the trailing window. EXP-18's NSF / distress event count exercises\nthis persona heavily; behavioural-distress monitoring rules can use this\nshape as a positive case.\n"},"recent_graduate_thin_file":{"persona_id":"recent_graduate_thin_file","name":"Tanvi — Recent Graduate (Thin File)","archetype":"thin_file","default_seed":1117,"stress_coverage":["thin_file_short_tenure"],"demographics":{"nationality_pool":"expat_indian","age_band":"22-26","emirate":"dubai"},"income":{"primary_employer_pool":"tech_freezone","monthly_amount_aed":8500,"pay_day":25,"variability":"low","flag_payroll":true},"accounts":[{"type":"CurrentAccount","currency":"AED","age_months":8}],"fixed_commitments":[{"kind":"standing_order","purpose":"shared_rent","amount_aed":3500,"schedule":"monthly_27"}],"spend_profile":{"groceries_aed_per_month_band":[600,1200],"fuel_aed_per_month_band":[150,350],"dining_per_month_count_band":[4,10]},"fx_activity":false,"cash_deposit_activity":false,"distress_signals":{"nsf_events_per_year_band":[0,1]},"narrative":"Tanvi is a junior IT analyst, salaried at AED 8.5k, single account opened\n8 months ago. She splits rent with flatmates via a shared standing order.\nTests thin-file underwriting: short-tenure account, low-value transactions,\nlittle fixed-commitment surface. EXP-18 low-volume guard may engage at the\nmargin (8 months × ~30 tx/month ≈ 240 — above the 50-tx floor but distinct\nmonths below the 12 expected).\n"},"salaried_emirati_affluent":{"persona_id":"salaried_emirati_affluent","name":"Khalid — Salaried Emirati (Affluent)","archetype":"salaried_affluent","default_seed":8821,"stress_coverage":["mortgage_long_dated","high_dbr","sharia_compliant_product"],"demographics":{"nationality_pool":"emirati","age_band":"38-50","emirate":"abu_dhabi"},"income":{"primary_employer_pool":"tech_freezone","monthly_amount_aed":60000,"pay_day":27,"variability":"low","flag_payroll":true},"accounts":[{"type":"CurrentAccount","currency":"AED","age_months":96},{"type":"Savings","currency":"AED","age_months":60},{"type":"CreditCard","currency":"AED","credit_limit_aed":200000,"age_months":48},{"type":"Mortgage","currency":"AED","age_months":72}],"fixed_commitments":[{"kind":"standing_order","purpose":"mortgage_principal","amount_aed":18000,"schedule":"monthly_28"},{"kind":"direct_debit","purpose":"utilities_dewa","amount_aed_band":[800,1500],"schedule":"monthly_5"},{"kind":"direct_debit","purpose":"school_fees","amount_aed_band":[3500,5000],"schedule":"monthly_10"},{"kind":"direct_debit","purpose":"club_membership","amount_aed_band":[1200,1800],"schedule":"monthly_15"}],"spend_profile":{"groceries_aed_per_month_band":[3000,5500],"fuel_aed_per_month_band":[800,1300],"dining_per_month_count_band":[12,25]},"fx_activity":false,"cash_deposit_activity":false,"distress_signals":{"nsf_events_per_year_band":[0,0]},"narrative":"Khalid is a 45-year-old Emirati national in Abu Dhabi, salaried at AED\n60k/mo, with a mortgage, a savings account, a high-limit credit card,\nand several monthly commitments (school fees, club membership, utilities).\nTests multi-account stress, high-DBR commitments, and a Sharia-compliant\nmortgage product. Salary lands on the 27th, mortgage principal hits the\nnext day.\n"},"salaried_expat_mid":{"persona_id":"salaried_expat_mid","name":"Sara — Salaried Expat (Mid Tier)","archetype":"salaried_expat","default_seed":4729,"stress_coverage":["salary_payroll_flag","credit_line_block"],"demographics":{"nationality_pool":"expat_indian","age_band":"28-38","emirate":"dubai"},"income":{"primary_employer_pool":"tech_freezone","monthly_amount_aed":25000,"pay_day":25,"variability":"low","flag_payroll":true},"accounts":[{"type":"CurrentAccount","currency":"AED","age_months":24},{"type":"CreditCard","currency":"AED","credit_limit_aed":50000,"age_months":18}],"fixed_commitments":[{"kind":"standing_order","purpose":"rent","amount_aed":8000,"schedule":"monthly_27"},{"kind":"direct_debit","purpose":"utilities_dewa","amount_aed_band":[400,800],"schedule":"monthly_5"},{"kind":"direct_debit","purpose":"telco","amount_aed_band":[200,350],"schedule":"monthly_8"}],"spend_profile":{"groceries_aed_per_month_band":[1200,2200],"fuel_aed_per_month_band":[400,700],"dining_per_month_count_band":[4,12]},"fx_activity":false,"cash_deposit_activity":false,"distress_signals":{"nsf_events_per_year_band":[0,1]},"narrative":"Sara is an IT professional in Dubai, salaried at AED 25k/mo from a tech-sector\nfree-zone employer. She has a current account she has held for 2 years and one\ncredit card. Her rent direct debit hits two days after her 25th-of-the-month\nsalary; utilities and telco are predictable mid-month direct debits. No FX, no\ncash deposits — a classic \"baseline affordability case\" persona that exercises\nthe spec-clean Flags=Payroll salary marker and the optional CreditLine block.\n"},"senior_retiree":{"persona_id":"senior_retiree","name":"Hassan — Senior / Retiree","archetype":"senior_retiree","default_seed":7134,"stress_coverage":["low_volume_inference"],"demographics":{"nationality_pool":"emirati","age_band":"65-72","emirate":"sharjah"},"income":{"primary_employer_pool":"pension_gcc","monthly_amount_aed":14000,"pay_day":1,"variability":"low","flag_payroll":true},"accounts":[{"type":"CurrentAccount","currency":"AED","age_months":240},{"type":"Savings","currency":"AED","age_months":180}],"fixed_commitments":[{"kind":"direct_debit","purpose":"utilities_dewa","amount_aed_band":[400,700],"schedule":"monthly_10"}],"spend_profile":{"groceries_aed_per_month_band":[600,1400],"groceries_per_month_count_band":[0,2],"fuel_aed_per_month_band":[100,300],"fuel_per_month_count_band":[0,1],"dining_per_month_count_band":[0,1]},"fx_activity":false,"cash_deposit_activity":false,"distress_signals":{"nsf_events_per_year_band":[0,0]},"narrative":"Hassan is 68, retired, receiving a GCC pension on the 1st of each month.\nLow transaction volume by design — typically <10 transactions/month.\nTriggers EXP-18's low-volume guard under all three LFI profiles: the\ntrailing-12-month-count is below the 50-transaction floor, so the\nUnderwriting panel suppresses DBR with a tooltip explaining why. The\nSenior persona is the case study for \"off-the-shelf affordability\nformulas don't generalise to low-volume segments.\"\n"},"sme_cash_heavy":{"persona_id":"sme_cash_heavy","name":"Karim — SME Owner (Cash-Heavy Retail)","archetype":"sme_cash","default_seed":6308,"stress_coverage":["cash_dominant_flows"],"demographics":{"nationality_pool":"expat_arab","age_band":"35-50","emirate":"sharjah"},"income":{"primary_employer_pool":"tech_freezone","monthly_amount_aed":15000,"pay_day":28,"variability":"medium","flag_payroll":false},"accounts":[{"type":"CurrentAccount","currency":"AED","age_months":60}],"fixed_commitments":[{"kind":"direct_debit","purpose":"utilities_dewa","amount_aed_band":[800,1400],"schedule":"monthly_5"},{"kind":"direct_debit","purpose":"pos_terminal_lease","amount_aed":350,"schedule":"monthly_8"},{"kind":"standing_order","purpose":"shop_rent","amount_aed":12000,"schedule":"monthly_27"}],"spend_profile":{"groceries_aed_per_month_band":[400,1200],"fuel_aed_per_month_band":[200,500],"dining_per_month_count_band":[3,8]},"fx_activity":false,"cash_deposit_activity":true,"cash_deposits_per_month_band":[4,14],"cash_deposit_amount_aed_band":[800,8000],"distress_signals":{"nsf_events_per_year_band":[0,2]},"narrative":"Karim runs a retail shop in Sharjah. Most receipts are cash deposited\ninto the current account in bursts (4–14 deposits/month, AED 800–8k each).\nSparse merchant detail because the bank can't categorise teller deposits\nthe way it can POS transactions. A shop-rent standing order and a POS-\nterminal-lease direct debit are the only fixed commitments. AML stress\ncase: behavioural-monitoring rules need to handle cash-dominant accounts.\n"}},"pools":{"namesByPoolId":{"emirati":{"pool_id":"emirati","description":"Synthetic Emirati national name combinations.","given_names":["Abdullah","Ahmed","Aisha","Ali","Aliyah","Fatima","Hamdan","Hessa","Khalid","Latifa","Maitha","Mohammed","Mariam","Noura","Omar","Reem","Saeed","Salem","Salama","Yousef","Zayed","Hassan"],"surnames":["Al Falasi","Al Mansoori","Al Marri","Al Maktoum","Al Mazrouei","Al Mehairi","Al Mualla","Al Mulla","Al Nuaimi","Al Otaiba","Al Qasimi","Al Rashid","Al Romaithi","Al Shamsi","Al Suwaidi","Al Zaabi"]},"expat_arab":{"pool_id":"expat_arab","description":"Synthetic Arab-expat names — Levantine and North-African UAE residents.","given_names":["Adam","Amina","Ayman","Bassam","Dina","Faisal","Farah","Hadi","Hala","Hassan","Hossam","Ibrahim","Jamal","Karim","Layla","Leila","Marwan","Nadia","Nour","Rami","Rana","Samir","Sara","Tamer","Tarek","Wassim","Yasmin","Yousef","Zeina"],"surnames":["Abdallah","Abou Khalil","Aboud","Atallah","Azar","Bizri","Chahine","Daher","El Khoury","El Said","Farah","Fakhoury","Ghanem","Haddad","Hijazi","Khoury","Maalouf","Mansour","Nassif","Saliba","Sayegh","Sleiman","Tannous","Wakim","Younis","Zoghbi"]},"expat_indian":{"pool_id":"expat_indian","description":"South-Asian expat names typical of the UAE-resident professional tier.","given_names":["Aarav","Aanya","Aditi","Anjali","Maria","Arjun","Ashwin","Deepa","Divya","Karan","Kavya","Manish","Meera","Neha","Nikhil","Pooja","Priya","Rahul","Rajesh","Riya","Rohan","Sara","Sneha","Suresh","Tanvi","Vikram","Yash"],"surnames":["Agarwal","Bhat","Chandran","Desai","Gupta","Iyer","Jain","Kapoor","Krishnan","Mehta","Nair","Patel","Pillai","Rao","Reddy","Sharma","Shetty","Singh","Subramanian","Verma"]}},"employersByPoolId":{"pension_gcc":{"pool_id":"pension_gcc","description":"Synthetic GCC-state pension authority payer names. All fictional.","employers":["UAE Synthetic Pension Authority","Sharjah Synthetic Pension Fund","Abu Dhabi Synthetic Retirement Fund"]},"platforms_gig":{"pool_id":"platforms_gig","description":"Synthetic gig-platform employer / payer names. All fictional.","employers":["Delta Rides FZ-LLC","Swift Couriers DMCC","Marketmark Marketplace FZ-LLC","Glide Logistics FZ-LLC","Sandstone Delivery DMCC","Falcon Trips FZ-LLC"]},"tech_freezone":{"pool_id":"tech_freezone","description":"Synthetic tech-sector free-zone employers used as salary payers.","employers":["Aurora Cloud Systems FZ-LLC","Bayan Software DMCC","Cipher Labs FZ-LLC","Datapeak Analytics FZ-LLC","EmberSoft Studios FZ-LLC","Falcon Edge Networks DMCC","Glide Platforms FZ-LLC","Helix Data Group FZ-LLC","Indigo Ridge Tech FZ-LLC","Jasmine AI FZ-LLC","Kestrel Cloud FZ-LLC","Lumen Stack DMCC","Meridian Code Works FZ-LLC","Nexus Build FZ-LLC","Onyx Compute DMCC","Polaris Engineering FZ-LLC","Quartz Systems FZ-LLC","Rivermark Tech FZ-LLC","Skylane Networks DMCC","Talisman Software FZ-LLC"]}},"merchantsByCategory":{"merchants_dining":{"pool_id":"merchants_dining","description":"Synthetic dining / restaurant merchant names; all fictional.","mcc":"5812","merchants":[{"name":"Olive & Almond Kitchen","typical_amount_aed_band":[60,300]},{"name":"Marina Bistro","typical_amount_aed_band":[80,400]},{"name":"Saffron Lane","typical_amount_aed_band":[50,220]},{"name":"Cedar Plate","typical_amount_aed_band":[70,280]},{"name":"Brasserie Eight","typical_amount_aed_band":[120,500]},{"name":"Spice Route Cafe","typical_amount_aed_band":[40,150]}]},"merchants_fuel":{"pool_id":"merchants_fuel","description":"Synthetic fuel-station merchant names; all fictional.","mcc":"5541","merchants":[{"name":"Beacon Fuel Co.","typical_amount_aed_band":[80,220]},{"name":"Crestline Petroleum","typical_amount_aed_band":[80,220]},{"name":"Northstar Energy Stations","typical_amount_aed_band":[80,220]},{"name":"Ridgepoint Fuel","typical_amount_aed_band":[80,220]}]},"merchants_groceries":{"pool_id":"merchants_groceries","description":"Synthetic grocery / supermarket merchant names; all fictional.","mcc":"5411","merchants":[{"name":"Marketmark Hypermarket","typical_amount_aed_band":[80,350]},{"name":"Greenfield Grocers","typical_amount_aed_band":[40,180]},{"name":"Cedar Valley Supermart","typical_amount_aed_band":[60,250]},{"name":"Solstice Daily Mart","typical_amount_aed_band":[25,90]},{"name":"Harborway Foods","typical_amount_aed_band":[70,300]},{"name":"Saffron Market","typical_amount_aed_band":[45,200]}]},"merchants_utilities":{"pool_id":"merchants_utilities","description":"Synthetic utility-biller names (electricity/water, telco). All fictional.","mcc":"4900","merchants":[{"name":"Synthetic Power & Water Authority","type":"utilities_dewa","typical_amount_aed_band":[400,800]},{"name":"Solstice Telecom","type":"telco","typical_amount_aed_band":[200,400]},{"name":"Beacon Mobile","type":"telco","typical_amount_aed_band":[150,350]}]}},"counterpartyBanksByCategory":{"counterparty_banks_domestic":{"pool_id":"counterparty_banks_domestic","description":"Synthetic UAE counterparty bank names. All fictional — no real LFI is referenced.","banks":[{"name":"Synthetic First Bank","iban_prefix":"AE07"},{"name":"Cedar National Bank","iban_prefix":"AE19"},{"name":"Falcon Trust Bank","iban_prefix":"AE32"},{"name":"Northstar Commercial Bank","iban_prefix":"AE45"},{"name":"Marina Holdings Bank","iban_prefix":"AE51"},{"name":"Ridgepoint Bank","iban_prefix":"AE63"},{"name":"Sandstone Bank","iban_prefix":"AE74"},{"name":"Skylane Bank","iban_prefix":"AE82"}]}},"ibansByCategory":{"ibans_synthetic":{"pool_id":"ibans_synthetic","description":"IBANs in this sandbox use the AE prefix and a synthetic 21-digit body so they\nare structurally valid (length 23) but do not collide with real-world UAE\nIBANs assigned by the central bank. The body is generated deterministically\nfrom (persona_id, account_index, seed) — see src/generator/identity.js.\n","prefix_options":["AE07","AE19","AE32","AE45","AE51","AE63","AE74","AE82"]}}},"buildInfo":{"nowIso":"2026-04-01T00:00:00.000Z"}}