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

   Follow-up to #266, which closed the loan gaps that were a menu entry or a 
tab over data already fetched. What is left needs its own UI, which is why it 
was kept out of that PR rather than rushed into it.
   
   Every command below was confirmed against a running platform before this was 
written. The discriminator is reliable: an unrecognised command answers `400` 
with the message `command`, exactly as an invented name like 
`totallyNotACommand` does. Each of these answered with a specific missing 
parameter or domain rule instead, which is what "recognised" looks like.
   
   | Command / endpoint | Probe result | Why it needs UI |
   |---|---|---|
   | `POST /loans/{id}?command=disburseToSavings` | `400` — 
`actualDisbursementDate` is mandatory | needs a savings-account picker as well 
as a date |
   | `POST /loans/{id}?command=undoLastDisbursal` | `403` — 
`loan.product.does.not.support.multiple.disbursals` | only meaningful on a 
multi-tranche loan, so it has to be offered conditionally |
   | `POST /loans/{id}?command=unassignloanofficer` | `400` — `unassignedDate` 
is mandatory | needs a date form; the app has assign, but no way back |
   | `GET /external-asset-owners/transfers?loanId={id}` | `200`, page envelope 
| a tab, but a paged one — not the local-filter shape the other tabs use |
   
   None of the three commands appears anywhere in `src/app/features/loans`.
   
   ## Scope
   
   1. **Disburse to savings** — offered for an approved loan, collecting the 
disbursement date and the destination savings account.
   2. **Undo last disbursal** — offered only where the product allows multiple 
disbursals, so the user is not handed an action that can only answer 403.
   3. **Unassign loan officer** — the counterpart to the assign action already 
on the menu, collecting the unassignment date.
   4. **External asset owner transfers tab** — server-paged rather than 
filtered locally, since the endpoint returns a page envelope.
   
   New components go through the adapter boundary (ADR-0003) and hold state in 
signals.
   
   ## Not included, and not yet possible
   
   The **original schedule** tab. `GET /loans/{id}/schedule` answers **405 
Method Not Allowed**, so there is no verified way to fetch a loan's schedule as 
first generated. It stays out until someone establishes the right endpoint; 
building a tab against a guess would ship one that silently shows nothing, 
which is worse than its absence.
   
   ## Testing
   
   Mocked e2e pinning each command's request — the request body is where this 
class of work goes wrong, as #266 found when `undoapproval` turned out to 
reject the `locale` and `dateFormat` that the shared action form sends on every 
call. Real-backend coverage for unassign loan officer and disburse to savings, 
which can both be driven end to end through the UI. Undo last disbursal needs a 
multi-tranche product; if seeding one through the screens proves 
disproportionate, its coverage stays mocked and this issue says so rather than 
quietly skipping it.
   
   ## Business Value
   
   **Unassign loan officer** is the one with a daily cost. Officers leave, go 
on leave, and change branch, and their loans have to move. The app can assign 
an officer but cannot take one off, so a portfolio ends up attributed to 
someone who no longer works there — which quietly corrupts every per-officer 
report, arrears list and performance figure derived from it, and there is no 
way to correct it from this app.
   
   **Disburse to savings** is how group and savings-linked lending normally 
pays out: the money lands in the member's account rather than as cash over the 
counter, leaving a traceable transfer instead of a manual reconciliation. 
Without it those institutions cannot disburse here at all.
   
   **Undo last disbursal** matters only for tranche lending, but there it is 
the sole correction for a tranche released early or for the wrong amount — 
otherwise the whole loan has to be unwound.
   
   **External asset owner transfers** answers who currently owns a loan that 
has been sold on. An officer looking at a loan the institution no longer holds 
has no indication of it today.
   


-- 
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