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

   ## Summary
   
   Teller cash management stops at appointing a cashier. A user can create a 
teller and allocate a cashier to it, but there is no way to give that cashier 
cash, take it back, or see what they hold. The module therefore lets an 
operator create cashiers who can never hold or return money, which is the 
entire purpose of the role.
   
   Four operations on the generated client have no caller:
   
   | Operation | Missing capability |
   |---|---|
   | `postTellersTellerIdCashiersCashierIdAllocate` | Allocate cash from the 
vault to a cashier |
   | `postTellersTellerIdCashiersCashierIdSettle` | Settle cash from a cashier 
back to the vault |
   | `getTellersTellerIdCashiersCashierIdTransactionsTemplate` | Currencies the 
cashier may transact in |
   | `getTellersTellerIdCashiersCashierIdSummaryandtransactions` | Running 
position and transaction history |
   
   ## Defects found while implementing this
   
   Three of these are only visible against a running platform, and two are 
silent — they produce a confidently wrong screen rather than an error.
   
   ### 1. The cashiers list is always empty
   
   `CashiersListComponent` reads the top-level `/cashiers` collection. That 
endpoint answers **`204 No Content`** for every combination of `officeId` and 
`tellerId`, so the list renders empty however many cashiers have been allocated.
   
   This survived because an empty list is indistinguishable from a teller that 
genuinely has no cashiers. The correct source is `GET 
/tellers/{tellerId}/cashiers`, which returns an object describing the teller 
with a `cashiers` array inside it rather than a bare array.
   
   Related to #223 in symptom — an empty-looking list that is not empty — but a 
different root cause: this is the wrong endpoint rather than an unreported load 
failure.
   
   ### 2. The cashier summary silently reports zeros without a currency
   
   `GET /tellers/{id}/cashiers/{id}/summaryandtransactions` accepts the request 
without a `currencyCode` and answers `200` with every total set to `0` and an 
empty transaction list. A cashier holding cash is indistinguishable from one 
that never transacted. The currency has to come from the transactions template, 
which scopes it to the teller's office.
   
   ### 3. Allocation requires accounting configuration that the error does not 
name
   
   Allocation fails with `404` — *"Financial Activity account with for the 
financial Activity with Id 101 does not exist"* — until **Cash at Main Vault 
(101)** and **Cash at Teller (102)** are both mapped to GL accounts. The 
message names an activity id and never mentions tellers or cashiers, so the 
prerequisite reads as a bug in the allocation itself.
   
   ## Platform behaviour worth reporting upstream
   
   `summaryandtransactions` reports a settlement **inconsistently**. The same 
sequence — allocate then settle, same cashier, same amounts — sometimes returns 
`sumCashSettlement: 1200` with both rows and sometimes `0` with the allocation 
alone. It is not the transaction date, the cashier's date range, or the 
balance: the settlement is created either way and `POST .../settle` answers 
`200` with a `subResourceId` every time.
   
   The same endpoint also returns data for a cashier id paired with the 
**wrong** teller id in the path, which suggests it keys on the cashier alone 
and ignores the teller.
   
   Any test should assert the settlement on its response rather than on the 
rendered total, or it will fail intermittently for behaviour the UI does not 
control.
   
   ## Constraints discovered by testing against a real backend
   
   - A staff member cannot be a cashier in overlapping date ranges **on any 
teller**, not just the one being edited. Any repeatable test must create its 
own staff member per run.
   - A cashier's date range must fall inside the teller's date range.
   - Dates must be zero-padded to match the declared `dd MMMM yyyy`. An 
unpadded day fails to parse and returns `500` rather than a validation message.
   
   ## Business Value
   
   Cash management is the control that makes a branch's physical cash 
auditable. Without allocation and settlement, a cashier's drawer is tracked 
nowhere in the system: there is no record of what was issued from the vault, 
what came back, or what remains outstanding at close of day. Branches running 
on this application must reconcile cash outside it — on paper or in a 
spreadsheet — which removes the audit trail the platform exists to provide and 
leaves shortfalls undetectable until a manual count finds them.
   
   The empty cashiers list compounds it. An operator who allocates a cashier 
sees no confirmation that it worked, so the natural response is to allocate 
again, producing duplicates that the platform then rejects for overlapping date 
ranges — an error that gives no hint the first allocation succeeded.
   
   Making the cashier's position visible also closes the loop for supervisors: 
net cash held per cashier is what a branch manager checks before authorising a 
further allocation.
   
   ## Scope
   
   Self-contained. Touches only `src/app/features/tellers/cashiers/` plus its 
routes and translation keys, so it does not block or conflict with work in 
other features.
   
   ## Suggested approach
   
   - A shared allocate/settle form addressed as `.../transactions/allocate` and 
`.../transactions/settle`, so each command keeps its own URL.
   - A transactions view showing total allocated, total settled and net cash 
above the entries that produced them, reading the transactions template first 
so the summary can be requested for a currency the cashier can actually hold.
   - End-to-end coverage against a real Fineract that drives the accounting 
setup through the UI as well, since that setup is part of what an operator must 
do for the feature to work at all.
   


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