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> 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> 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.
>>    -
>>
>>       If it’s indeed not working, that’s a separate, high-priority
>>       discussion.
>>       -
>>
>>       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.
>>    -
>>
>>       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.
>>    -
>>
>>       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> 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
>>
>>
>>

Reply via email to