

  

Created 7 todos

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps)

Searched for files matching `**/settlement_core/**/*.ex`, 48 matches

Read all settlement_core files

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/switch_dump_record.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/payout_batch.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/qr_scheme_dump_record.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/eod_file_generator.ex#1-1), lines 1 to 500

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/payout_item.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/settlement_transaction.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/bin_table.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/settlement_file_audit.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/ysp_summary.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/reconciliation_exception.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/aani_settlement_audit.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/settlement_mis.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/transaction_operation.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/pos_settlement.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/refund/csv_parser.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/refund/processor.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/transaction.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/mms/mdr_template.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/mms/card_type.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/mms/mcc_mdr_rate.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/mms/merchant.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/mms/mdr_rate.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/mms/merchant_metadata.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/alipay_plus/sftp_fetcher.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/alipay_plus/csv_parser.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/alipay_plus/scheduler.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/alipay_plus/sftp_client.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/alipay_plus/processor.ex#1-1), lines 1 to 500

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/core_transaction_sync.ex#1-1), lines 1 to 500

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/core_transaction_sync.ex#500-500), lines 500 to 546

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/eod_file_generator.ex#500-500), lines 500 to 548

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/alipay_plus/processor.ex#500-500), lines 500 to 606

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/sync_log.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/settlement.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/merchant_adjustment.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/application.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/settlement_management.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/interchange_rate.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/settlement_mis_item.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/transaction_eod_generator.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/dump_file.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/core_transaction.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/context.ex#1-1), lines 1 to 700

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/schema.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/merchant_batch_number.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/settlement_file.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/alipay_plus/jobs/sftp_file_retrieval.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/alipay_plus/jobs/settlement_file_processing.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/workers/eod_file_generation_worker.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/workers/transaction_sync_worker.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/context.ex#700-700), lines 700 to 871

Read [](file:///home/prem/.vscode-server/data/User/workspaceStorage/2cbb0c24ce3ac44610ba3a4bc8066c63/GitHub.copilot-chat/chat-session-resources/7fb0f60e-9ad1-42f2-9133-bce70b943e98/toolu_bdrk_01DZAjrWtpAHCoA38J8G1k1H__vscode-1772771857839/content.txt)

Starting: *Check TID Master implementation* (4/7)

Now let me check what web/API layer exists for settlement features and look for the risk_core integration, TID master, and any missing pieces. 

Check web/API and risk layers

Searched for regex `settlement|reconciliation|payout|mis|adjustment|exception` (`**/apps/platform_web/lib/**`), 50 results

Ran terminal command: find /home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/risk_core/lib/ -type f | head -100

Searched for regex `tid_master|TidMaster`, no results

Searched for regex `merchant_bank|iban|registered_mobile|registered_email`, 30 results

Searched for text `chargeback`, 30 results

Searched for regex `bank_api|bank_sftp|payout_transmit|payment_instruction`, no results

Searched for regex `email|notification|mailer|swoosh|mpr|vat_invoice|settlement_advice` (`**/apps/**/*.ex`), 50 results

Ran terminal command: find /home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/priv/ -type f 2>/dev/null | head -50

Ran terminal command: find /home/prem/mercurypay/tms_new_version/tmsuat_apps/priv/repo/migrations/ -name "*settlement*" -o -name "*payout*" -o -name "*adjustment*" -o -name "*reconcil*" -o -name "*mis_*" -o -name "*exception*" -o -name "*core_transaction*" | sort

Ran terminal command: find /home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/ -type f | sort

Ran terminal command: find /home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/platform_web/lib/ -type f -name "*.ex" | sort

Read [](file:///home/prem/.vscode-server/data/User/workspaceStorage/2cbb0c24ce3ac44610ba3a4bc8066c63/GitHub.copilot-chat/chat-session-resources/7fb0f60e-9ad1-42f2-9133-bce70b943e98/toolu_bdrk_01YHVSzhuDJwojafs7yrqBdX__vscode-1772771857905/content.txt)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/platform_web/lib/platform_web/router.ex#1-1), lines 1 to 300

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/platform_web/lib/platform_web/controllers/settlement_controller.ex#1-1), lines 1 to 200

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/platform_web/lib/platform_web/controllers/risk_management_controller.ex#1-1), lines 1 to 200

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/platform_web/lib/platform_web/controllers/dispute_controller.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/platform_web/lib/platform_web/emails.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/risk_core/lib/risk_core.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/risk_core/lib/risk_core/context.ex#1-1), lines 1 to 200

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/platform_web/lib/platform_web/controllers/merchant_settlement_summary_controller.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/platform_web/lib/platform_web/controllers/settlement_controller.ex#200-200), lines 200 to 400

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/platform_web/lib/platform_web/controllers/settlement_webhook_controller.ex#1-1), lines 1 to 50

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/platform_web/lib/platform_web/controllers/refund_settlement_controller.ex#1-1), lines 1 to 100

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/payout_batch.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/payout_item.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/settlement_mis.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/merchant_adjustment.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/reconciliation_exception.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/settlement_mis_item.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/core_transaction.ex#1-1), lines 1 to 100

Searched for regex `mpr|vat_invoice|settlement_advice|merchant_payment_report`, 20 results

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/platform_web/lib/platform_web/live/risk_management_live/supervisor_dashboard.ex#1-1), lines 1 to 100

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/risk_core/lib/risk_core/workers/transaction_risk_evaluator.ex#1-1), lines 1 to 100

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/context.ex#1-1), lines 1 to 200

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/settlement_management.ex)

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/settlement_core/lib/settlement_core/eod_file_generator.ex#1-1), lines 1 to 80

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/risk_core/lib/risk_core/context.ex#200-200), lines 200 to 854

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/docs/settlement_recon/Settlement_reports_completion.txt#1-1), lines 1 to 100

Read [](file:///home/prem/mercurypay/tms_new_version/tmsuat_apps/apps/platform_web/lib/platform_web/controllers/settlement_controller.ex#400-400), lines 400 to 937

Read [](file:///home/prem/.vscode-server/data/User/workspaceStorage/2cbb0c24ce3ac44610ba3a4bc8066c63/GitHub.copilot-chat/chat-session-resources/7fb0f60e-9ad1-42f2-9133-bce70b943e98/toolu_bdrk_01DCZGES3xWp7cPgCgXnaWk7__vscode-1772771857894/content.txt)

Starting: *Compile gap analysis* (7/7)

Let me also check the reconciliation orchestration logic — the doc describes a "Reconciliation Engine" that runs as a daily pipeline. 

Searched for regex `reconcil|recon_engine|daily_recon|run_reconciliation|perform_reconciliation` (`**/*.ex`), 27 results

Searched for regex `def reconcile|def run_daily|def match_dump|def process_dump|def generate_mis|def generate_settlement_mis` (`**/*.ex`), no results

Completed: *Compile gap analysis* (7/7)

Here is the full gap analysis of the `feature/settlement-recon-core` branch against the Settlement_reports_completion.txt requirements:

---

## Gap Analysis: Implementation vs Requirements

### Legend
- **DONE** = Fully implemented
- **PARTIAL** = Schema/scaffolding exists, business logic incomplete
- **NOT BUILT** = No code exists

---

### A. TID Master (Requirement §1)

| Requirement | Status | Detail |
|---|---|---|
| Unified TID Master table with all onboarding fields | **NOT BUILT** | No `tid_masters` schema. Merchant data is fragmented across `shukria_mms` tables (`merchants`, `merchant_metadata`, `mdr_templates`, `mdr_rates`). Fields like **Store ID, QRID, Merchant Bank Name, Bank A/c Number, IBAN, Virtual IBAN, Registered Mobile/Email, Onboarding Source/Date, Last Transaction Date/Amount** have no dedicated schema |
| Additional blank fields for future use | **NOT BUILT** | — |

---

### B. Transaction Dump (Requirement §2)

| Requirement | Status | Detail |
|---|---|---|
| Transaction record per card/QR transaction | **DONE** | `core_transactions` table is the unified operational record with `source_type` (POS/QR) |
| Key fields (MID, TID, RRN, Auth, STAN, etc.) | **DONE** | All recon keys present |
| Switch Settled Dump Date field | **DONE** | `switch_settled_date` field on `core_transactions` |
| Reversal Status, Void, Refund tracking | **PARTIAL** | `refund_status`/`refund_date` exist; **no explicit `reversal_status` (Y/N) or Void status field** - the `transaction_type` field can hold "VOID" but there's no dedicated tracking |
| PAN, Card Holder Name, Customer Mobile, Country | **PARTIAL** | `masked_pan` exists; **no `card_holder_name`, `customer_mobile_number`, or `country` fields** |

---

### C. Switch Settled Dump / QR Schemes Dump Ingestion (Requirement §3)

| Requirement | Status | Detail |
|---|---|---|
| Daily dump file ingestion from SFTP/email | **PARTIAL** | `DumpFile` schema tracks uploads; `SwitchDumpRecord` and `QrSchemeDumpRecord` schemas model individual records. **But no SFTP client/poller to automatically retrieve YSP switch files** — only AlipayPlus SFTP is implemented |
| File parsing and import into DB | **NOT BUILT** | No CSV/file parser for YSP switch dump files (only AlipayPlus CSV parser exists) |

---

### D. Reconciliation Engine (Requirement §4) — Target: 6:00 AM daily

| Requirement | Status | Detail |
|---|---|---|
| **4.1** Consume daily switch/QR dump files | **PARTIAL** | Schemas exist (`DumpFile`, `SwitchDumpRecord`, `QrSchemeDumpRecord`) but **no orchestrator module** (`ReconciliationEngine.run_daily/1` or similar) that drives the end-to-end daily pipeline |
| **4.2** 1:1 RRN matching (RRN + TID + Amount + Date + Auth) | **PARTIAL** | Match fields defined in schemas with `match_changeset/2`, unique constraints on recon keys. **No actual matching logic implemented** — no function iterates switch dump records and queries `core_transactions` to perform the 1:1 match |
| **4.3** Update `switch_settled_date` on `core_transactions` | **PARTIAL** | Field exists, `status_changeset/2` can update it. **No code orchestrates this update after a match** |
| **4.4** Refund transaction handling (update refund status on original txn) | **PARTIAL** | `refund_status`/`refund_date` fields on `core_transactions`. Refund CSV processor exists but **doesn't update `core_transactions` refund fields** — it only creates settlement records |
| **5.1** Exception: In switch dump but not in Mercury | **PARTIAL** | `ReconciliationException` schema with `exception_type` supports this. **No code generates these exception records** |
| **5.2** Exception: Outstanding in Mercury (blank switch_settled_date) | **PARTIAL** | Same — schema ready, **no query/report generator** |
| **5.3** Exception: Void transaction matched in switch dump | **PARTIAL** | Same |
| **5.4** Exception: Duplicate transaction in switch dump | **PARTIAL** | Same |
| Exception reports on interface + cumulative MIS | **NOT BUILT** | No web UI or API for viewing exception reports |
| Finance team email notification for exceptions | **NOT BUILT** | No email module |
| "Hold" marking on exception transactions | **PARTIAL** | `core_transactions.exception_type` field exists, **no code sets it** |

---

### E. Settlement Engine (Requirement §5) — Target: 7:00 AM daily

| Requirement | Status | Detail |
|---|---|---|
| **5.1** Consume switch dump + apply Transaction Monitoring Rules | **PARTIAL** | `core_transactions` has `risk_hold`, `risk_rule_name`. Risk rules are fully implemented in `risk_core`. **No code applies risk rules during settlement MIS generation** |
| **5.1b** Check outstanding chargeback recovery per MID | **NOT BUILT** | No chargeback tracking module; only a `chargeback_hold` boolean field |
| **5.1c** Check LACR (Loan against card receivables) | **NOT BUILT** | Explicitly stated "Phase 2" in requirements |
| **5.2** Mark "Risk Hold" on flagged transactions | **PARTIAL** | Field exists; risk evaluator worker can flag. **No integration during batch settlement processing** |
| **5.3** Adjustment interface (single + bulk) | **PARTIAL** | `MerchantAdjustment` schema with approval workflow. **No web UI, no API endpoint, no bulk upload** |
| **5.4** MDR + Transaction Fee + VAT calculation | **DONE** | `CoreTransactionSync.apply_mdr_to_batch_rows/5` calculates MDR, VAT (5%), and net amount. MDR resolution chain (merchant → MCC fallback) is implemented |
| **5.5** Chargeback recovery deduction from payout | **NOT BUILT** | No code checks/deducts chargeback during payout |
| **5.6** Settlement MIS (Payment Output MIS) generation | **PARTIAL** | `SettlementMis` and `SettlementMisItem` schemas with 2-level approval workflow. **No code actually generates/populates MIS records from `core_transactions`** |
| **5.7a** Finance 2-level approval on interface | **PARTIAL** | `l1_approve_changeset`, `l2_approve_changeset`, `reject_changeset` exist in schema. **No web UI or API endpoint** to trigger approvals |
| **5.7c** Download Settlement MIS | **PARTIAL** | CSV download exists for legacy settlement data. **No MIS-specific download** |
| **5.8** Aggregated Payout File generation + bank transmission | **PARTIAL** | `PayoutBatch` + `PayoutItem` schemas exist with `transmit_changeset`. **No code generates payout files, encrypts them, or transmits via SFTP/API** |
| **5.9** Auto MPR email to merchants | **NOT BUILT** | No MPR template, no mailer module |
| **5.10** Encrypted payout file to bank | **NOT BUILT** | No encryption module |
| **5.11** Bank confirmation receipt | **NOT BUILT** | `bank_confirm_changeset` exists in `PayoutItem` but **no webhook/SFTP receiver** for bank ACK |
| **5.12** Settlement Advice email to merchants | **NOT BUILT** | No Settlement Advice template or mailer |
| **5.13** VAT invoice + VAT MIS auto-generation | **NOT BUILT** | No VAT invoice schema, template, or mailer |
| **5.14** Risk/Chargeback release → next-day settlement | **PARTIAL** | Schema supports status transitions. **No code adds released transactions to next day's MIS** |
| **5.15** Exception report release → next-day settlement | **PARTIAL** | `ReconciliationException.release_changeset` exists. **No code feeds released exceptions into settlement** |
| **5.16** Payment rejection re-initiation | **NOT BUILT** | No rejection handling or re-payout workflow |

---

### F. Reference Data

| Item | Status | Detail |
|---|---|---|
| BIN Table | **PARTIAL** | Schema exists with `bin_from_pan/1`. **No data loaded** — TODO in code: "awaiting data file from YSP" |
| Interchange Rate Table | **PARTIAL** | Schema exists with `rate_query/3`. **No data loaded** — TODO in code: "awaiting data file from YSP" |

---

### Summary Scorecard

| Component | Completion | Critical Gaps |
|---|---|---|
| **TID Master** | ~10% | No unified schema |
| **Transaction Dump** | ~85% | Missing card_holder_name, customer_mobile, country, explicit reversal_status |
| **Dump File Ingestion** | ~30% | No SFTP poller for YSP; no switch file parser |
| **Reconciliation Engine** | ~25% | Schemas ready; **no matching logic, no daily orchestrator, no exception generation** |
| **Settlement Engine (MDR/Fees)** | ~80% | MDR calculation done; VAT at 5% done |
| **Settlement MIS + Approval** | ~30% | Schema + approval workflow done; **no MIS generation logic, no UI/API** |
| **Merchant Adjustments** | ~25% | Schema done; **no UI, no API, no bulk upload** |
| **Payout Pipeline** | ~15% | Schema done; **no generation, encryption, transmission, or bank confirmation** |
| **Risk ↔ Settlement Integration** | ~40% | Risk rules implemented; **not wired into settlement batch processing** |
| **Chargeback Management** | ~10% | Only boolean flags; no lifecycle, no recovery tracking |
| **Notifications (MPR/Advice/VAT)** | ~5% | Only Swoosh dependency exists; no settlement email modules |
| **Bank Integration** | ~10% | Schema only; no actual bank SFTP/API |

### Top Priority Gaps (blocking end-to-end flow)

1. **Reconciliation Engine orchestrator** — the daily pipeline that matches switch dump records against `core_transactions` and generates exceptions (Requirement §4.2–5.4)
2. **Settlement MIS generation** — code to aggregate approved `core_transactions` into `settlement_mis` / `settlement_mis_items` (Requirement §5.6)
3. **Finance Approval UI/API** — controllers + LiveView for 2-level MIS approval (Requirement §5.7)
4. **Payout file generation + bank transmission** — end-to-end payout pipeline (Requirement §5.8–5.11)
5. **YSP Switch dump file SFTP fetch + parser** — automated daily ingestion (Requirement §3)
6. **Merchant Adjustment UI/API** — interface for debit/credit adjustments with dropdown categories (Requirement §5.3)
7. **Notification modules** — MPR, Settlement Advice, VAT Invoice emails (Requirements §5.9, 5.12, 5.13)