Aman-Mittal opened a new pull request, #195:
URL: https://github.com/apache/fineract-backoffice-ui/pull/195
Closes #194.
Twelve Fineract loan commands had no UI at all. The account screen offered
repayment, approval,
disbursement, waive interest, prepay, foreclosure, close and write-off — and
nothing else.
| Command | Offered when |
|---|---|
| `charge-off` | active, not already charged off |
| `undo-charge-off` | charged off |
| `merchantIssuedRefund`, `payoutRefund`, `goodwillCredit` | active |
| `downPayment` | active, progressive **and** the product enabled down
payments |
| `interestPaymentWaiver`, `reAge`, `reAmortize` | active, progressive |
| `creditBalanceRefund` | overpaid |
| `recoverypayment`, `undowriteoff` | written off |
Charge-off is the one the application had already committed to: #193 made
charge-off *behaviour*
configurable on the product, and it changed nothing, because no loan could
reach the state where it
applies.
### Contracts probed, not inferred
The generated client documents almost none of this, so I checked each
against a running Fineract
before building anything — the lesson from #193, where a control shipped
that the server rejected.
- **`undo-charge-off` takes an empty body** and rejects the `locale` and
`dateFormat` every other
command sends (*"The parameter locale is not supported"*). It therefore
cannot go through the
shared transaction form, and is a confirmation with a direct call.
- **The transaction *template* endpoint accepts fewer commands than the
transaction endpoint.**
`reAmortize` and `undowriteoff` are rejected there with *"unsupported
value"* even though the
POST works, so the form no longer asks for a template it cannot get.
- **Fineract states the gating itself.** Re-amortize answers *"only
available for progressive
repayment schedule and Advanced payment allocation strategy"*;
undo-write-off answers *"loan
status is not written off"*. Each action is offered only where it is
legal, so the menu never
invites a rejection.
### A charged-off loan looked healthy
Fineract keeps it `Active` and flags it separately, so the status badge
alone cannot tell them
apart — an officer would see a normal active loan. The screen now shows a
marker and swaps the
action for its reversal instead of offering both.
### `chargeRefund` is deliberately not here
It rejects `transactionDate` and refunds one *specific* charge. It belongs
on the Charges tab
against a charge, not in the account-level actions menu, and putting it in
this menu would mean
inventing a charge picker for it. That is the one remaining command from the
thirteen.
### Verification
| Check | Result |
|---|---|
| Unit tests | **741 passing** (735 → 741) |
| Mocked Playwright | **210/210 passing** |
| Backend Playwright | **17/18** — see below |
| `tsc` (app + spec), build, lint, format, i18n, icons, licence | all clean |
The backend spec exercises charge-off, its reversal, and a refund-style
command end to end against
real Fineract. I checked it actually guards the contract rather than merely
exercising it: making
the undo send `locale`/`dateFormat` fails the test.
**On the one backend failure** — `loan-schedule-type.spec.ts` intermittently
fails waiting for the
product-template select. It is **pre-existing and not from this branch**:
with these changes the
spec passes 4/4 in isolation, and on a stashed tree (i.e. main) it fails. It
appears to be timing
sensitive and is aggravated by accumulated state from repeated local runs
against one database. I
have not tried to fix it here; it wants its own look.
Two icons (`gift-outline`, `return-down-back-outline`) were unregistered and
would have rendered as
blank space — the icon check caught them before review.
--
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]