saifulhuq created FINERACT-2471:
-----------------------------------

             Summary: Implement 'Force Debit' functionality for Savings 
Accounts with Configurable Limits
                 Key: FINERACT-2471
                 URL: https://issues.apache.org/jira/browse/FINERACT-2471
             Project: Apache Fineract
          Issue Type: New Feature
            Reporter: saifulhuq


*Background:* Currently, Fineract rejects savings account withdrawals if the 
balance is insufficient. Regulatory requirements (e.g., tax levies, maintenance 
fees) often require a "Force Post" capability where the bank must debit the 
account regardless of the balance, up to a certain risk limit.

*Functional Specification:*
 # *Global Configurations:*

 ** {{allow-force-debit-on-savings-account}} (Boolean): Global switch to enable 
the feature.

 ** {{force-debit-on-savings-account-limit}} (Decimal): The maximum negative 
balance allowed (e.g., -5000).

 # *Permissions:*

 ** Introduce {{WITHDRAW_SAVINGSACCOUNT_FORCE_DEBIT}} and 
{{{}WITHDRAW_SAVINGSACCOUNT_FORCE_DEBIT_CHECKER{}}}.

 ** Only users with this specific permission can trigger the force debit API.

 # *API Implementation:*

 ** New Command: {{withdrawal-force-debit}}

 ** Endpoint: {{POST 
/savingsaccounts/\{accountId}/transactions?command=withdrawal-force-debit}}

 # *Validation Logic (Command Layer):*

 ** If {{allow-force-debit}} is FALSE -> Fail if insufficient funds (Standard 
behavior).

 ** If {{allow-force-debit}} is TRUE:

 *** Check: {{{}Current Balance - Transaction Amount >= force-debit-limit{}}}.

 *** If limit is breached -> Throw {{{}InsufficientAccountBalanceException{}}}.

 *** If within limit -> Process transaction and allow negative balance.

*Technical Implementation Plan:*
 * Modify {{GlobalConfigurationPropertyData}} to include new keys.

 * Update {{SavingsAccountWritePlatformServiceJpaRepositoryImpl}} to handle the 
new command.

 * Implement validation logic ensuring GL consistency.

 * Add Unit Tests covering:

 ** Limit breached (Fail).

 ** Limit respected (Pass).

 ** Permission denied (Fail).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to