Aman-Mittal opened a new issue, #218:
URL: https://github.com/apache/fineract-backoffice-ui/issues/218

   Part of the savings account servicing work.
   
   ## Summary
   
   Three more groups of savings commands have no UI. Each contract below was 
probed against a running
   Fineract, not inferred from the generated client.
   
   | Command | Endpoint | Verified body |
   |---|---|---|
   | `assignSavingsOfficer` | `POST /savingsaccounts/{id}` | 
`toSavingsOfficerId`, `assignmentDate` |
   | `unassignSavingsOfficer` | `POST /savingsaccounts/{id}` | `unassignedDate` 
|
   | `reject` | `POST /savingsaccounts/{id}` | `rejectedOnDate` |
   | `withdrawnByApplicant` | `POST /savingsaccounts/{id}` | `withdrawnOnDate` |
   | `holdAmount` | `POST /savingsaccounts/{id}/transactions` | 
`transactionAmount`, `reasonForBlock` |
   | `releaseAmount` | `POST /savingsaccounts/{id}/transactions/{txnId}` | 
empty body |
   
   ## Business value
   
   **An application can be approved but never declined.** A pending savings 
application has exactly
   one outcome available in this application: approval. If the applicant fails 
KYC, withdraws, or the
   institution declines, there is no way to record it — the account sits 
pending indefinitely, or
   someone resolves it outside the system and the screens stop reflecting 
reality. `reject` and
   `withdrawnByApplicant` are different outcomes with different reporting 
treatment, and neither is
   reachable.
   
   **No account can be assigned to an officer.** Field officer assignment is 
how savings portfolios
   are divided, how collections are routed, and how performance is attributed. 
Without it, every
   account created here is unassigned, and reassignment when staff change has 
to happen elsewhere.
   
   **Funds cannot be held against a claim.** A hold earmarks part of the 
balance — against a
   court order, a disputed transaction, a pending outward payment — so it 
cannot be withdrawn while
   the rest of the account keeps working. The alternative available today is 
freezing the entire
   account, which stops the customer using money that was never in dispute. 
That is a materially
   worse outcome for the customer and a blunter instrument than the institution 
actually has.
   
   ## Two contract details that matter
   
   - **`holdAmount` takes `transactionAmount`, not `amount`.** Sending `amount` 
is rejected outright
     with *"The parameter amount is not supported"*. It also lives on the 
transactions endpoint, not
     the account endpoint.
   - **`releaseAmount` targets the hold's own transaction id** — 
`/transactions/{txnId}` — and takes
     an empty body. It is not a command on the account.
   
   Both are the kind of thing a mocked test cannot catch, since it asserts what 
the UI sends rather
   than whether Fineract accepts it.
   
   ## Comprehensibility for non-specialists
   
   "Hold amount" and "block account" sound similar and are not: a hold 
ring-fences part of the
   balance, a block stops the whole account. The labels and help should make 
the difference obvious,
   because reaching for the wrong one either over-restricts a customer or fails 
to secure the funds
   actually in dispute.
   
   ## Acceptance criteria
   
   - [ ] An officer can be assigned to and unassigned from an account.
   - [ ] A pending application can be rejected or recorded as withdrawn by the 
applicant.
   - [ ] Part of a balance can be held with a reason, and a specific hold 
released.
   - [ ] Each action appears only in the state that permits it.
   - [ ] Held funds are visible on the account, so nobody wonders where the 
balance went.
   - [ ] Unit tests cover the gating; a mocked spec covers the flows.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to