Hi

I'm happy to help fix issues with Collection Sheet API.

If I look at the emails that started all this, I can only see this comment:


"The Collection Sheet API in its current state appears non-functional and 
contains several logical errors"


I think it's fair to expect a bit more detailed bug report than that.

Is there any more details on this issue: how is it non-functional, and what are 
the logical errors?


Who can provide the list of JIRAs that need to be fixed? I can then have a look 
this weekend.


Regards

Petri



________________________________
From: James Dailey <jdai...@apache.org>
Sent: Saturday, August 30, 2025 3:01 AM
To: dev@fineract.apache.org <dev@fineract.apache.org>; Edward Cable 
<edca...@mifos.org>
Subject: Re: Collection Sheet Deprecation was [Re: Questions and Observations 
on FINERACT-2290 (Collection Sheet API Refactor)]

Devs -  Are we done with this?

First, I am NOT ruling out this functionality as important but if no one is 
actually demanding it, and no one is willing to maintain it, then it doesn't 
get maintained.  That is the nature of open source projects.

Second, it can happen that an outside vendor (e.g. Mifos) that relies on this 
Collection Sheet functionality (or any functionality) inadvertently drops that 
from their front end release.  Because the tests at Fineract do not cover this 
fully, no one at the Vendor and no one at the Fineract project will see the 
functionality fail in a build until a customer or implementer notices. So, 
tests are vital for ensuring ongoing maintainability.

Third, if this type of thing isn't "naturally" part of the core - then it will 
make a lot more sense to have it be an outside extension - in which case the 
tests have to be written for the API calls, and a Vendor should try to get such 
tests contributed.   I could be wrong about this, I would be happy to debate 
where this belongs.

@Edward Cable<mailto:edca...@mifos.org> - what is the assessment and status of 
needed functionality and where do you think it should live?

Thanks,
James

On Mon, Aug 18, 2025 at 8:21 AM James Dailey 
<jdai...@apache.org<mailto:jdai...@apache.org>> wrote:
Sifiso -

Do we have a way to reach the tens of thousands of institutions you believe are 
there?

My belief (just anecdotal information) is that it’s more like a few hundred 
institutions and that out of that number, less than 10% are on a recent 
release.  And, of that smaller number, few, if any, are still using Collection 
Sheets.  I could be wrong - I’d like the data!  I’d say that vendors can show 
up with their data here to help make this vendor neutral space more informed.

If group lending and group-member lending and collection sheets are still 
needed, then perhaps those project volunteers can contribute the needed updates 
to keep the functionality useful.

Thanks
Thanks


On Mon, Aug 18, 2025 at 6:48 AM Sifiso Mtetwa 
<sif...@skyburgsystems.org<mailto:sif...@skyburgsystems.org>> wrote:

Hi guys,



This is an interesting topic. I have been wondering why, in general, we seem to 
be deprecating more and more system functions. The individual collection sheet 
has served us well over the years and still does, If anything we could improve 
on its functionality by maybe adding a bulk collection sheet template with 
little detail compared to a full loan repayment bulk import template.



Fineract is used by tens of thousands of organisations throughout the world and 
most of them are not on this listing and may not have a voice to air their 
concerns. Maybe we can find a way of exposing this thread to include more 
voters.



Regards,



From: James Dailey [mailto:jdai...@apache.org<mailto:jdai...@apache.org>]
Sent: Saturday, 16 August 2025 02:53
To: dev@fineract.apache.org<mailto:dev@fineract.apache.org>
Subject: Re: Collection Sheet Deprecation was [Re: Questions and Observations 
on FINERACT-2290 (Collection Sheet API Refactor)]



Ed



I agree this needs to be discussed but it is important to acknowledge that THIS 
Fineract listserv is the only official (and required) discussion space.  It is 
not the intention to bury anything in “an email thread”.



When I started up Mifos we spent a lot of time looking at Collection Sheets and 
designing process flows around them. I fully know that this design direction 
was important back then in 2002-2006.



However if there is no one here asking for them to be retained besides you, 
then that is a sign that they have perhaps reached an end of their utility.  
Or, that the users are not actually here, which is a different problem.



So,… If there is a group using collection sheets in production AND they are not 
on some permanent forked (old) version, then now is the time to speak up.  Here.



Generally, I’m fairly certain we can refactor this with an eye toward 
extracting it from the core.  Repeating the logic in two places makes no sense 
either.  Collection sheets are kind of assembled from constituent loans and 
savings.  The balances and due payments should be calculated in the underlying 
components.



As the system gets restructured we need to decide to keep this at all, to keep 
it in a new place, or as some external concept/plug in. Why wouldn’t we want a 
separate component?



Cheers



On Thu, Aug 14, 2025 at 4:16 PM Ed Cable 
<edca...@mifos.org<mailto:edca...@mifos.org>> wrote:

I'll leave the other thread for discussion of the API versioning and 
refactoring related to Collection Sheet API but wanted to create a separate 
thread regarding the deprecation of the Collection Sheet.



In general, for this and removal of any functionality, it's something that 
needs to be discussed openly with the community and with a vote and not a 
decision buried in a mailing list thread.



For the collection sheet specifically, more thought has to be given to its 
deprecation as the centrality and highly coupled nature of the collection sheet 
is being understated as it isn't merely a report that's to be printed or a form 
filled out via a mobile application. It's a significant portion of the user 
interface and highly coupled to many of the microfinance features around 
groups/centers/meeting scheduling, staff assignment, etc.



I do agree that from a UI perspective, the collection sheet and other 
microfinance-centric functionalities and flows should be viewable based on a 
configurable setting. As it doesn't lend itself to the optimal user experience 
for a large portion of current Fineract user base.



I also am supportive of a strategy of slimming Fineract to its core services 
and functionality above core Fineract services and APIs can be extracted out.



So I do think we should give thoughtful consideration to what abstracting out 
the collection sheet and corresponding microfinance functionality would look 
like and what that effort would entail to abstract it out without adversely 
impacting the original user base of the software but it's not as simple as 
deprecating these API.



I welcome others' thoughts and inputs as I know even with microfinance itself, 
the methodology has evolved and group lending and the concept of a collection 
sheet isn't as central as it once was



Thanks,



Ed







On Wed, Aug 13, 2025 at 6:36 PM Kapil Panchal 
<kapil.panchal.developm...@gmail.com<mailto:kapil.panchal.developm...@gmail.com>>
 wrote:

Hi James,



I can proceed by marking this feature as @Deprecated and/or performing a safe 
refactor to remove the API.



For API versioning I agree to Aleksandar Vidakovic's proposal on adapting to 
the SpringBoot v7/Spring Framework v4. If I may, Aleksandar Vidakovic takes the 
lead on this project and I can help to support the conversion?



Thanks,

Kapil



On Thu, Aug 14, 2025 at 5:07 AM James Dailey 
<jdai...@apache.org<mailto:jdai...@apache.org>> wrote:

Hi Kapil



I might suggest looking at this as an opportunity to remove the collection 
sheet entirely from the Fineract namespace.  It’s a legacy concept I and others 
designed a long time ago, originally in 2002 based on collection sheets we 
gathered from a dozen countries. It is strongly tied to concepts in 
microfinance field operations, and especially when there was no data 
connectivity.



It belongs perhaps as a sort of external microservice - data loading via a bulk 
import could still be enabled.

The API versioning is a good idea but needs to be more holistic across the 
platform I think.







On Mon, Aug 11, 2025 at 4:43 AM Ádám Sághy 
<adamsa...@gmail.com<mailto:adamsa...@gmail.com>> wrote:

Hi Kapil,

Thank you for raising the concerns below. I’ll need some additional details to 
fully understand your points:

1.      Collection Sheet API – You mentioned it appears non-functional and 
contains several logical errors.

o    If it’s indeed not working, that’s a separate, high-priority discussion.

o    Could you clarify which logical errors you were referring to, and what 
specifically makes you think it’s non-functional?

2.      Service annotations – You noted that service methods are not annotated 
with @Service and that beans are defined manually.

o    Are you referring to the 
CollectionSheetWritePlatformServiceJpaRepositoryImpl bean being defined via 
configuration?

3.      Repository wrappers annotated with @Service – You mentioned that this 
mandates full unit test coverage but that they should ideally be annotated with 
@Component.

o    Could you point out the exact classes you had in mind?

As for the other points, I agree we can refactor and remove redundant 
logic—please feel free to suggest specific improvements or start work on them 
immediately!

However, be careful by moving anything into the fineract-core… We are aiming to 
keep it as small as possible as everything is built on top of this module! If 
collection sheet are used for loans and savings - for example - than the 
recommended move is NOT to move this logic into core!

Either:

- we split the logic into fineract-loan and fineract-savings

- Move the logic into a new module

- Leave it in fineract-provider for now



Shall you have any questions, please let us know!

Regards,
Adam





On 2025. Aug 11., at 12:09, Kapil Panchal 
<kapil.panchal.developm...@gmail.com<mailto:kapil.panchal.developm...@gmail.com>>
 wrote:



Hi Adam,

I’m currently working on FINERACT-2290 and have a few questions before I submit 
a pull request.

The Collection Sheet API in its current state appears non-functional and 
contains several logical errors. It seems there was an earlier attempt to 
convert from a JSON string request parameter to a class-based request object, 
but:

Certain fields are missing.

The serializer is not correctly populating the objects, which causes the 
conditional checks to be bypassed and results in incorrect (false) responses.

This change set is high risk because it touches most of the loan and savings 
product logic. I’ve had to refactor almost all major methods. Extensive 
integration and end-to-end testing will be required to ensure there are no 
regressions, especially in edge cases. At present, there are no unit or 
integration tests for this functionality, and test creation is outside the 
current ticket scope. I’ve been iterating on this for a while, and only today 
have I reached a stable state after several experimental and build-breaking 
attempts.

Key Observations:

Service methods are not annotated with @Service; instead, beans are defined 
manually.

Repository wrappers are annotated with @Service. This mandates full unit test 
coverage for these methods, but they should ideally be annotated with 
@Component.

I agree with prior discussions on separating bean validation — having a 
dedicated @Component validation class allows the request object to handle 
checks independent of database queries.

Validation components can also perform database-related validations; these can 
be injected into service classes for cleaner architecture.

Such validation components should be placed in Fineract-Core so they are 
reusable across modules, reducing future refactoring needs.

The current design of having commands in Fineract-Core and 
handlers/services/repositories in respective modules is good — it cleanly 
decouples command definition from execution.

There is extensive use of this. in singleton contexts (API, Service, 
Repository). While not harmful, it’s unnecessary boilerplate.

Multiple redundant intermediate DTOs exist where the request DTO itself could 
be reused for data transfer.

I found redundant logic — e.g., a for loop with a break statement that 
effectively executes only once; this can be simplified.

Some JDBC template queries use reserved SQL keywords, causing exceptions. 
Refactoring these queries resolves the issue and returns proper response 
objects.

Suggestions:

Where appropriate, large tickets should be broken into subtasks to manage 
complexity and reviewability.

It may help to have a dedicated developer-only Slack channel for technical 
discussions. This could complement other community spaces if there’s a need to 
keep certain conversations more focused.

What are your thoughts on the above?

Thanks,
Kapil






--

Ed Cable

President/CEO, Mifos Initiative

edca...@mifos.org<mailto:edca...@mifos.org> | Skype: edcable | Mobile: 
+1.484.477.8649



Collectively Creating a World of 3 Billion Maries | http://mifos.org 
[https://secure.plimus.com/developers/817570/Template/icon-tiny-facebook.png] 
<http://facebook.com/mifos>  
[http://organizationsandmarkets.files.wordpress.com/2010/04/icon-tiny-twitter.png]
 <http://www.twitter.com/mifos>


Reply via email to