Sonigra Bhavya Hemendrabhai created FINERACT-3019:
-----------------------------------------------------
Summary: Disallow cross-currency account transfers to prevent 1:1
arbitrage and GL desync
Key: FINERACT-3019
URL: https://issues.apache.org/jira/browse/FINERACT-3019
Project: Apache Fineract
Issue Type: Bug
Components: Accounting, Loan
Affects Versions: 1.15.0
Reporter: Sonigra Bhavya Hemendrabhai
Assignee: Sonigra Bhavya Hemendrabhai
h3. Description
In FINERACT-1355, {{DifferentCurrenciesException}} was introduced to prevent
transfers between accounts with mismatched currencies until native FX
conversion capabilities are implemented in Fineract.
However, currency parity validation was only added to direct Savings -> Savings
transfers in {{AccountTransfersWritePlatformServiceImpl}}. The check was
omitted for:
# Direct Savings -> Loan transfers (paying off loan debt from savings)
# Direct Loan -> Savings transfers (refunding loan to savings)
# Standing Instructions (recurring automated transfers executed via
{{transferFunds}})
# Loan Top-up transfers ({{repayLoanWithTopup}})
# Overpaid Loan Refund transfers ({{refundByTransfer}})
h3. Impact
Because Fineract does not perform FX conversion or accept exchange rates on
standard account transfers:
* A transfer of 100 JPY from savings to a 100 USD loan executes at 1:1 nominal
value, wiping out 100 USD of loan principal while only deducting 100 JPY
(~$0.65 USD).
* General Ledger entries post unbalanced multi-currency debits and credits
(e.g., DEBIT 100 JPY to Savings Control, CREDIT 100 USD to Loans Receivable),
corrupting the trial balance and balance sheet.
* In standing instructions, this occurs on a recurring automated schedule in
the background.
h3. Expected Behavior
All transfer operations between accounts with different currencies must be
disallowed and throw {{DifferentCurrenciesException}} before any withdrawal,
deposit, or repayment transactions are executed.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)