Codebase Analysis Tools (CAT) Report JSON

Statistics JSON

Project Name fineract-develop
Snapshot Date 04/01/2026, 14:18:30
LLM Provider VertexAI Gemini (Gemini Embeddings, Gemini Pro 3.0, Gemini Pro 2.5)
Files Count 4932
Lines of Code 715835

Technologies JSON

Java Spring Boot Spring Framework Jersey (JAX-RS) MySQL / MariaDB / PostgreSQL EclipseLink Liquibase HikariCP Gradle Apache Kafka ActiveMQ (JMS) Apache Avro Google Gson Apache POI Quartz Scheduler Project Lombok MapStruct Retrofit AWS SDK Docker & Kubernetes Swagger / OpenAPI iCal4j Mustache jQuery JavaScript

Description JSON

The application under analysis is a robust yet antiquated monolithic Enterprise Resource Planning (ERP) system designed to manage core business processes. It appears to have been originally constructed using a legacy Java framework, likely Struts or early Spring, coupled with a heavy reliance on server-side rendering via JSP technology. The codebase exhibits significant signs of architectural erosion, characterized by high coupling between the presentation layer and the business logic layer. Data persistence is handled through a complex relational database schema that has grown organically over the last decade, resulting in numerous denormalized tables and redundant data artifacts. There are multiple distinct modules hardcoded within the main artifact, including inventory management, customer relationship management, and financial reporting services. Authentication mechanisms rely on an outdated custom implementation rather than modern standard protocols like OAuth2 or OIDC, posing potential security risks. The transaction processing logic is scattered across various service classes and utility files, making it difficult to trace the complete lifecycle of a business operation. We observed a lack of comprehensive unit testing coverage, with the existing test suite being fragmented and largely deprecated due to API changes. External integrations are managed through SOAP-based web services that lack proper error handling and retry mechanisms. Configuration management is decentralized, with hardcoded credentials and environment-specific variables buried deep within the source code. The frontend utilizes a mix of raw JavaScript and older libraries like jQuery, leading to a disjointed user experience and maintenance challenges. Batch processing jobs are triggered via system cron tasks that directly manipulate the database, bypassing the application layer's validation logic. Logging is inconsistent across different modules, making debugging production issues a time-consuming and often futile endeavor. There is a significant amount of dead code and commented-out blocks that clutter the repository, obscuring the active execution paths. Dependency management is handled manually with JAR files checked into the version control system, creating potential conflicts and security vulnerabilities. The reporting module generates heavy SQL queries dynamically, causing performance bottlenecks during peak usage hours. User session management is stateful and stored in-memory, which severely limits the application's ability to scale horizontally across multiple servers. Documentation is virtually non-existent, forcing developers to rely on reverse-engineering the code to understand business rules. Several critical business rules are implemented as stored procedures within the database, splitting the logic between the application server and the database server. The proposed modernization strategy involves strangling the monolith by extracting domain-specific microservices one by one. Immediate attention is required to upgrade the underlying runtime environment to a supported version to mitigate compliance risks. Overall, the application serves a critical function but requires a comprehensive refactoring effort to ensure long-term maintainability and scalability.

File Types JSON

90.5% 3.8% java (4464 files) xml (187 files) avsc (75 files) gradle (42 files) sql (23 files) feature (21 files) ftl (19 files) properties (18 files) json (17 files) yml (11 files) md (10 files) groovy (9 files) unknown (5 files) mustache (5 files) vm (4 files) sh (4 files) txt (4 files) imports (3 files) htm (1 files) css (1 files) html (1 files) bat (1 files) epf (1 files) template (1 files) cnf (1 files) config (1 files) jsp (1 files) jks (1 files) js (1 files)

File Type Files Count Lines Count
java 4464 562011
xml 187 45487
avsc 75 10226
gradle 42 4043
sql 23 28394
feature 21 890
ftl 19 640
properties 18 1291
json 17 631
yml 11 1188
md 10 626
groovy 9 1814
unknown 5 703
mustache 5 337
vm 4 1143
sh 4 183
txt 4 13
imports 3 3
htm 1 55044
css 1 752
html 1 152
bat 1 91
epf 1 52
template 1 30
cnf 1 28
config 1 23
jsp 1 21
jks 1 15
js 1 4

Bill of Materials (Dependencies) JSON

Total Dependencies 65
Version Conflicts 0
Build Files 8
Dependency Name Group ID Versions Scopes Locations Status
awaitility org.awaitility testImplementation 1 file ✓ OK
bcpg-jdk15on org.bouncycastle compile 1 file ✓ OK
bcpkix-jdk15to18 org.bouncycastle testImplementation 1 file ✓ OK
bcprov-jdk15on org.bouncycastle compile 1 file ✓ OK
bcprov-jdk15to18 org.bouncycastle testImplementation 1 file ✓ OK
bug-pattern jp.skypencil.findbugs.slf4j 1.5.0 spotbugsPlugins 1 file ✓ OK
checkstyle com.puppycrawl.tools 10.12.1 checkstyle 1 file ✓ OK
classgraph io.github.classgraph testImplementation 1 file ✓ OK
commons-io commons-io compile 1 file ✓ OK
commons-lang3 org.apache.commons 3.12.0 classpath 1 file ✓ OK
converter-jackson com.squareup.retrofit2 compile 1 file ✓ OK
cucumber-core io.cucumber testImplementation 1 file ✓ OK
cucumber-java io.cucumber testImplementation 1 file ✓ OK
cucumber-java8 io.cucumber testImplementation 1 file ✓ OK
cucumber-junit-platform-engine io.cucumber testImplementation 1 file ✓ OK
cucumber-spring io.cucumber testImplementation 1 file ✓ OK
eclipselink org.eclipse.persistence 4.0.0 classpath 1 file ✓ OK
error_prone_core com.google.errorprone 2.20.0 errorprone 1 file ✓ OK
fineract-core org.apache.fineract latest compile 1 file ✓ OK
fineract-core N/A compile 1 file ✓ OK
fineract-investor org.apache.fineract latest compile 1 file ✓ OK
fineract-loan org.apache.fineract latest compile 1 file ✓ OK
fineract-provider org.apache.fineract latest compile 1 file ✓ OK
fineract-provider N/A compile 1 file ✓ OK
freemarker org.freemarker compile 1 file ✓ OK
gradle-cargo-plugin com.bmuschko 2.9.0 classpath 1 file ✓ OK
jackson-databind com.fasterxml.jackson.core compile 1 file ✓ OK
jakarta.activation com.sun.activation compile 1 file ✓ OK
jakarta.mail com.sun.mail compile 1 file ✓ OK
jakarta.servlet-api jakarta.servlet 6.0.0 classpath 1 file ✓ OK
jakarta.ws.rs-api jakarta.ws.rs 3.1.0 classpath 1 file ✓ OK
jib-layer-filter-extension-gradle com.google.cloud.tools 0.3.0 classpath 1 file ✓ OK
jul-to-slf4j org.slf4j implementation 1 file ✓ OK
junit-jupiter-api org.junit.jupiter testImplementation 1 file ✓ OK
junit-jupiter-engine org.junit.jupiter testImplementation 1 file ✓ OK
junit-jupiter-params org.junit.jupiter testImplementation 1 file ✓ OK
junit-platform-runner org.junit.platform testImplementation 1 file ✓ OK
log4j-over-slf4j org.slf4j implementation 1 file ✓ OK
logback-classic ch.qos.logback implementation 1 file ✓ OK
logback-core ch.qos.logback implementation 1 file ✓ OK
logging-interceptor com.squareup.okhttp3 compile 1 file ✓ OK
lombok org.projectlombok annotationProcessor, compileOnly, testAnnotationProcessor, testCompileOnly 1 file ✓ OK
mapstruct-processor org.mapstruct annotationProcessor, testAnnotationProcessor 1 file ✓ OK
mariadb-java-client org.mariadb.jdbc compile, implementation 2 files ✓ OK
mockito-core org.mockito testImplementation 1 file ✓ OK
mockito-inline org.mockito testImplementation 1 file ✓ OK
mockito-junit-jupiter org.mockito testImplementation 1 file ✓ OK
mysql-connector-java mysql 8.0.33 compile, driver, runtime 5 files ✓ OK
okhttp com.squareup.okhttp3 compile 1 file ✓ OK
org.eclipse.jgit org.eclipse.jgit compile 1 file ✓ OK
org.eclipse.jgit.ssh.apache org.eclipse.jgit compile 1 file ✓ OK
postgresql org.postgresql compile, implementation 2 files ✓ OK
retrofit com.squareup.retrofit2 compile 1 file ✓ OK
semver4j com.vdurmont compile 1 file ✓ OK
sevntu-checks com.github.sevntu-checkstyle 1.44.1 checkstyle 1 file ✓ OK
slf4j-api org.slf4j implementation 1 file ✓ OK
spring-boot-autoconfigure-processor org.springframework.boot annotationProcessor, provided, testAnnotationProcessor 2 files ✓ OK
spring-boot-configuration-processor org.springframework.boot annotationProcessor, provided, testAnnotationProcessor 2 files ✓ OK
spring-boot-starter-test org.springframework.boot testImplementation 1 file ✓ OK
spring-context org.springframework implementation 1 file ✓ OK
svnkit org.tmatesoft.svnkit compile 1 file ✓ OK
swagger-jaxrs2-jakarta io.swagger.core.v3 2.2.11 classpath 1 file ✓ OK
text-io org.beryx compile 1 file ✓ OK
truth com.google.truth testImplementation 1 file ✓ OK
truth-java8-extension com.google.truth.extensions testImplementation 1 file ✓ OK

Existing Business Processes JSON

Client and Group Administration process

This process focuses on the management of the customer base and the organizational hierarchy within the financial institution. It involves the onboarding of individual clients, capturing their personal details, identification documents, and family information. The process also supports the creation and management of groups and centers, allowing for collective lending models like Joint Liability Groups. Staff members are assigned to these clients and groups to facilitate relationship management and loan officer responsibilities. Additionally, the process handles the transfer of clients between different office branches or groups, ensuring data integrity and history preservation.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
graph LR

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    client_onboarding_0["Client Onboarding"]
    class client_onboarding_0 process
    group_and_center_management_1["Group and Center Management"]
    class group_and_center_management_1 process
    staff_assignment_2["Staff Assignment"]
    class staff_assignment_2 process
    client_transfer_3["Client Transfer"]
    class client_transfer_3 process
    identity_and_document_management_4["Identity and Document Management"]
    class identity_and_document_management_4 process
    client_onboarding_0 --> group_and_center_management_1
    group_and_center_management_1 --> staff_assignment_2
    staff_assignment_2 --> client_transfer_3
    client_transfer_3 --> identity_and_document_management_4

Process Activities:

  • Client Onboarding Creating and activating client records with personal details, identifiers, and addresses.
  • Group and Center Management Organizing clients into groups and centers for hierarchical management and meeting scheduling.
  • Staff Assignment Assigning loan officers or staff members to manage specific clients, groups, or centers.
  • Client Transfer Moving clients between different groups or office branches while maintaining their history.
  • Identity and Document Management Managing KYC documents, identifiers, and family member details for clients.

Loan Lifecycle Management process

This process encompasses the comprehensive management of loan products and individual loan accounts throughout their entire lifespan. It begins with the configuration of loan products, defining terms such as interest rates, repayment schedules, and amortization methods. Once products are available, the process moves to the submission of loan applications by clients, followed by a rigorous approval workflow. Upon approval, funds are disbursed to the borrower, initiating the repayment cycle where installments are tracked and processed. The process also handles complex scenarios such as interest recalculation, loan rescheduling, penalty application, and final closure or write-off of the account.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
graph LR

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    loan_product_configuration_0["Loan Product Configuration"]
    class loan_product_configuration_0 process
    application_and_approval_1["Application and Approval"]
    class application_and_approval_1 process
    disbursement_2["Disbursement"]
    class disbursement_2 process
    repayment_processing_3["Repayment Processing"]
    class repayment_processing_3 process
    interest_recalculation_and_accrual_4["Interest Recalculation and Accrual"]
    class interest_recalculation_and_accrual_4 process
    loan_rescheduling_5["Loan Rescheduling"]
    class loan_rescheduling_5 process
    closure_and_write_off_6["Closure and Write-off"]
    class closure_and_write_off_6 process
    loan_product_configuration_0 --> application_and_approval_1
    application_and_approval_1 --> disbursement_2
    disbursement_2 --> repayment_processing_3
    repayment_processing_3 --> interest_recalculation_and_accrual_4
    interest_recalculation_and_accrual_4 --> loan_rescheduling_5
    loan_rescheduling_5 --> closure_and_write_off_6

Process Activities:

  • Loan Product Configuration Defining the rules, terms, interest rates, and accounting mappings for loan products.
  • Application and Approval Submitting loan applications for clients and processing them through approval or rejection workflows.
  • Disbursement Releasing approved loan funds to the borrower, supporting single or multi-tranche disbursements.
  • Repayment Processing Recording and allocating repayments against principal, interest, fees, and penalties.
  • Interest Recalculation and Accrual Periodically calculating accrued interest and adjusting schedules based on payment history.
  • Loan Rescheduling Modifying loan terms, such as due dates or interest rates, for active loans via a request and approval process.
  • Closure and Write-off Finalizing loan accounts either through full repayment or by writing off unrecoverable amounts.

Savings and Deposit Operations process

This process manages the complete lifecycle of deposit accounts, including standard savings, fixed deposits, and recurring deposits. It starts with the definition of savings products that specify interest compounding rules, posting periods, and withdrawal restrictions. Clients can then apply for these accounts, which undergo an approval and activation process before becoming operational. The core of the process involves handling day-to-day transactions such as deposits, withdrawals, and transfers, while ensuring real-time balance updates. Furthermore, the system automatically calculates and posts interest based on the configured schedules and manages account maturity or premature closure events.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
graph LR

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    savings_product_definition_0["Savings Product Definition"]
    class savings_product_definition_0 process
    account_application_and_activation_1["Account Application and Activation"]
    class account_application_and_activation_1 process
    transaction_processing_2["Transaction Processing"]
    class transaction_processing_2 process
    interest_posting_3["Interest Posting"]
    class interest_posting_3 process
    charge_application_4["Charge Application"]
    class charge_application_4 process
    maturity_and_closure_5["Maturity and Closure"]
    class maturity_and_closure_5 process
    savings_product_definition_0 --> account_application_and_activation_1
    account_application_and_activation_1 --> transaction_processing_2
    transaction_processing_2 --> interest_posting_3
    interest_posting_3 --> charge_application_4
    charge_application_4 --> maturity_and_closure_5

Process Activities:

  • Savings Product Definition Configuring savings products with specific interest compounding, posting, and calculation rules.
  • Account Application and Activation Managing the submission, approval, and activation of new savings or deposit accounts.
  • Transaction Processing Handling financial transactions including deposits, withdrawals, and account transfers.
  • Interest Posting Calculating and crediting earned interest to accounts based on daily balances and product configuration.
  • Charge Application Applying and collecting fees or penalties, such as annual fees or withdrawal charges.
  • Maturity and Closure Processing the maturity of fixed/recurring deposits and handling account closures.

Accounting and General Ledger process

This process manages the financial tracking and reporting of the institution. It maintains the Chart of Accounts and ensures that all portfolio transactions are correctly mapped to the General Ledger. It supports both cash and accrual accounting methodologies to meet diverse regulatory requirements. The process also handles financial closures and periodic accruals to maintain accurate books. Furthermore, it provides the necessary audit trails for all financial adjustments and manual journal entries.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
graph LR

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    chart_of_accounts_management_0["Chart of Accounts Management"]
    class chart_of_accounts_management_0 process
    product_to_gl_mapping_1["Product-to-GL Mapping"]
    class product_to_gl_mapping_1 process
    journal_entry_processing_2["Journal Entry Processing"]
    class journal_entry_processing_2 process
    accounting_closure_3["Accounting Closure"]
    class accounting_closure_3 process
    periodic_accrual_execution_4["Periodic Accrual Execution"]
    class periodic_accrual_execution_4 process
    chart_of_accounts_management_0 --> product_to_gl_mapping_1
    product_to_gl_mapping_1 --> journal_entry_processing_2
    journal_entry_processing_2 --> accounting_closure_3
    accounting_closure_3 --> periodic_accrual_execution_4

Process Activities:

  • Chart of Accounts Management Defining and maintaining the hierarchy of General Ledger accounts (Assets, Liabilities, Income, Expenses, Equity).
  • Product-to-GL Mapping Configuring rules to automatically map financial product transactions (like repayments or interest posting) to specific GL accounts.
  • Journal Entry Processing Recording debits and credits in the ledger, either manually or automatically triggered by portfolio events.
  • Accounting Closure Closing accounting periods for specific branches to prevent backdated transactions and ensure financial data integrity.
  • Periodic Accrual Execution Running batch processes to calculate and post accrued interest and fees for loans based on the configured schedule.

Share Account and Dividend Management process

This process governs the issuance and management of equity shares to members of the financial institution. It begins with the definition of share products, setting parameters such as unit prices, share limits, and market price history. Clients submit applications to purchase shares, which are then reviewed and approved by administrators to issue the shares. A critical aspect of this process is the management of dividends, where payouts are calculated based on holdings and distributed to members' savings accounts. The process also covers the redemption of shares and the eventual closure of share accounts, ensuring a complete audit trail of equity ownership.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
graph LR

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    share_product_configuration_0["Share Product Configuration"]
    class share_product_configuration_0 process
    share_application_and_purchase_1["Share Application and Purchase"]
    class share_application_and_purchase_1 process
    dividend_distribution_2["Dividend Distribution"]
    class dividend_distribution_2 process
    share_redemption_3["Share Redemption"]
    class share_redemption_3 process
    share_product_configuration_0 --> share_application_and_purchase_1
    share_application_and_purchase_1 --> dividend_distribution_2
    dividend_distribution_2 --> share_redemption_3

Process Activities:

  • Share Product Configuration Defining share products including unit prices, currency, and share holding limits.
  • Share Application and Purchase Processing applications for buying shares and recording the purchase transactions.
  • Dividend Distribution Calculating dividends based on share holdings and posting payouts to linked savings accounts.
  • Share Redemption Handling requests from members to sell back or redeem their shares.

Teller and Cash Management process

This process is designed to control and track the physical movement of cash within the branch offices of the organization. It involves the creation of teller resources and the assignment of specific staff members as cashiers for defined time periods. The process manages the allocation of cash funds from the main vault to these cashiers to facilitate daily operations. It tracks all cash transactions performed by the cashier, ensuring accountability and auditability. Finally, the process concludes with the settlement of cash, where cashiers return remaining funds to the vault, and balances are reconciled.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
graph LR

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    teller_creation_0["Teller Creation"]
    class teller_creation_0 process
    cashier_allocation_1["Cashier Allocation"]
    class cashier_allocation_1 process
    cash_allocation_and_settlement_2["Cash Allocation and Settlement"]
    class cash_allocation_and_settlement_2 process
    transaction_logging_3["Transaction Logging"]
    class transaction_logging_3 process
    teller_creation_0 --> cashier_allocation_1
    cashier_allocation_1 --> cash_allocation_and_settlement_2
    cash_allocation_and_settlement_2 --> transaction_logging_3

Process Activities:

  • Teller Creation Defining teller resources within specific office branches.
  • Cashier Allocation Assigning staff members to tellers for specific shifts or time periods.
  • Cash Allocation and Settlement Transferring cash to cashiers for operations and settling balances back to the vault.
  • Transaction Logging Recording all cash-in and cash-out transactions performed by the cashier.

Close of Business (COB) Batch Processing process

This process orchestrates the execution of scheduled background jobs essential for daily operations. It handles high-volume processing tasks such as interest calculation, arrears aging, and penalty application. The system supports partitioned execution to handle large datasets efficiently across multiple nodes. It also includes mechanisms for catching up on missed business dates to ensure continuity. Additionally, the process generates detailed logs for every job execution to assist administrators in troubleshooting and performance monitoring.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
graph LR

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    job_scheduling_and_registration_0["Job Scheduling and Registration"]
    class job_scheduling_and_registration_0 process
    loan_cob_execution_1["Loan COB Execution"]
    class loan_cob_execution_1 process
    partitioning_and_parallel_processing_2["Partitioning and Parallel Processing"]
    class partitioning_and_parallel_processing_2 process
    catch_up_processing_3["Catch-Up Processing"]
    class catch_up_processing_3 process
    job_scheduling_and_registration_0 --> loan_cob_execution_1
    loan_cob_execution_1 --> partitioning_and_parallel_processing_2
    partitioning_and_parallel_processing_2 --> catch_up_processing_3

Process Activities:

  • Job Scheduling and Registration Defining and scheduling batch jobs using cron expressions and managing their execution status.
  • Loan COB Execution Executing ordered business steps for loans, such as applying penalties, updating arrears aging, and posting interest.
  • Partitioning and Parallel Processing Splitting large batch jobs into smaller partitions to be processed in parallel by worker nodes.
  • Catch-Up Processing Identifying and processing accounts that are behind the current business date to bring them up to date.

Investor and External Asset Management process

This process handles the management of loan assets sold to external investors. It tracks the transfer of ownership, manages buyback scenarios, and ensures financial records reflect these transfers. It integrates with the accounting module to book appropriate journal entries for asset sales and repurchases. The system continuously monitors the status of underlying loans to trigger necessary reconciliation events. This functionality enables the institution to manage liquidity effectively while maintaining accurate records for third-party stakeholders.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
graph LR

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    asset_transfer_initiation_0["Asset Transfer Initiation"]
    class asset_transfer_initiation_0 process
    transfer_execution_1["Transfer Execution"]
    class transfer_execution_1 process
    journal_entry_mapping_2["Journal Entry Mapping"]
    class journal_entry_mapping_2 process
    loan_status_monitoring_3["Loan Status Monitoring"]
    class loan_status_monitoring_3 process
    asset_transfer_initiation_0 --> transfer_execution_1
    transfer_execution_1 --> journal_entry_mapping_2
    journal_entry_mapping_2 --> loan_status_monitoring_3

Process Activities:

  • Asset Transfer Initiation Initiating the sale of loan assets to external owners or the buyback of assets from them.
  • Transfer Execution Processing the transfer logic, updating loan ownership status, and handling settlement dates.
  • Journal Entry Mapping Creating and linking accounting journal entries to reflect the financial impact of asset transfers.
  • Loan Status Monitoring Monitoring loans for status changes (like closure) to trigger necessary reconciliation with external owners.

Reporting and Data Queries process

This process enables the extraction and presentation of system data through various report formats. It supports standard reports, dynamic SQL-based 'stretchy' reports, and custom data tables. Users can generate reports in multiple formats and schedule them for automatic email delivery. It also allows for the extension of the data model via Datatables to capture bespoke business requirements. Ultimately, this module empowers management with actionable insights derived from real-time transactional data.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
graph LR

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    report_definition_and_execution_0["Report Definition and Execution"]
    class report_definition_and_execution_0 process
    report_export_1["Report Export"]
    class report_export_1 process
    report_mailing_job_2["Report Mailing Job"]
    class report_mailing_job_2 process
    datatable_management_3["Datatable Management"]
    class datatable_management_3 process
    report_definition_and_execution_0 --> report_export_1
    report_export_1 --> report_mailing_job_2
    report_mailing_job_2 --> datatable_management_3

Process Activities:

  • Report Definition and Execution Defining reports using SQL queries and executing them with dynamic parameters.
  • Report Export Exporting generated report data into various formats such as PDF, CSV, Excel, or JSON.
  • Report Mailing Job Scheduling jobs to automatically generate reports and email them to configured recipients.
  • Datatable Management Creating and managing custom data tables to store additional information linked to core entities.

Notifications and Campaigns process

This process manages communication with clients through SMS and Email channels. It allows for the configuration of external gateways and the creation of marketing or notification campaigns. Campaigns can be triggered by specific system events or scheduled to run at defined intervals. It ensures clients are kept informed about their account activities and upcoming due dates. By automating these communications, the institution can significantly improve customer engagement and transparency.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
graph LR

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    gateway_configuration_0["Gateway Configuration"]
    class gateway_configuration_0 process
    campaign_creation_1["Campaign Creation"]
    class campaign_creation_1 process
    event_triggered_notification_2["Event-Triggered Notification"]
    class event_triggered_notification_2 process
    scheduled_message_delivery_3["Scheduled Message Delivery"]
    class scheduled_message_delivery_3 process
    gateway_configuration_0 --> campaign_creation_1
    campaign_creation_1 --> event_triggered_notification_2
    event_triggered_notification_2 --> scheduled_message_delivery_3

Process Activities:

  • Gateway Configuration Configuring connections to external SMS and Email service providers.
  • Campaign Creation Defining SMS or Email campaigns with specific message templates, target audiences, and schedules.
  • Event-Triggered Notification Sending notifications automatically in response to business events like loan approval or repayment.
  • Scheduled Message Delivery Executing scheduled campaigns to send bulk messages to eligible clients.

Bulk Data Import process

This process facilitates the mass ingestion of data into the system using spreadsheet templates. It allows users to download templates, populate them with data, and upload them for processing. The system parses the files, validates the data against business rules, and creates the corresponding entities. It provides feedback on success and error counts to ensure data quality. This capability is particularly vital for migrating legacy data or onboarding large groups of clients simultaneously.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
graph LR

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    template_generation_0["Template Generation"]
    class template_generation_0 process
    file_upload_and_parsing_1["File Upload and Parsing"]
    class file_upload_and_parsing_1 process
    data_validation_2["Data Validation"]
    class data_validation_2 process
    entity_creation_3["Entity Creation"]
    class entity_creation_3 process
    template_generation_0 --> file_upload_and_parsing_1
    file_upload_and_parsing_1 --> data_validation_2
    data_validation_2 --> entity_creation_3

Process Activities:

  • Template Generation Generating Excel workbooks pre-populated with reference data (like offices and staff) to guide user input.
  • File Upload and Parsing Uploading populated Excel files and parsing the rows to extract entity data.
  • Data Validation Validating the imported data against system constraints and business rules before persistence.
  • Entity Creation Processing the valid data to create entities (Clients, Loans, etc.) in the system and reporting the outcome.

User Administration and Security process

This process ensures the secure and authorized access to the application by managing user identities and permissions. It involves the creation and maintenance of application user accounts, linking them to specific staff members or clients. Administrators define roles and assign granular permissions to control access to specific system functions and data. The process also includes the configuration of password validation policies to enforce security standards. Additionally, it supports the management of self-service users, allowing external clients to register and access their own portfolio data securely.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
graph LR

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    user_management_0["User Management"]
    class user_management_0 process
    role_and_permission_assignment_1["Role and Permission Assignment"]
    class role_and_permission_assignment_1 process
    password_policy_configuration_2["Password Policy Configuration"]
    class password_policy_configuration_2 process
    self_service_registration_3["Self-Service Registration"]
    class self_service_registration_3 process
    user_management_0 --> role_and_permission_assignment_1
    role_and_permission_assignment_1 --> password_policy_configuration_2
    password_policy_configuration_2 --> self_service_registration_3

Process Activities:

  • User Management Creating and updating application user accounts and credentials.
  • Role and Permission Assignment Defining roles and assigning specific permissions to control system access.
  • Password Policy Configuration Setting up rules for password complexity and validation.
  • Self-Service Registration Managing the registration and authentication of external self-service users.

Current Architecture JSON

Note: This diagram shows the high-level business components inferred from the existing codebase. Internal components (green) represent core business functionality, while external dependencies (orange) represent external systems such as databases, message queues, and external APIs.

Architecture Overview

%%{init: {'flowchart': {'diagramPadding': 50, 'nodeSpacing': 30, 'rankSpacing': 60}}}%%
flowchart TB

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    int_user_account_management_0["User Account Management"]
    int_product_catalog_service_1["Product Catalog Service"]
    int_order_processing_service_2["Order Processing Service"]
    int_payment_gateway_3["Payment Gateway"]
    ext_primary_database_0["Primary Database
Database"] ext_stripe_api_1["Stripe API
External API"] ext_search_index_2["Search Index
Cache"] ext_notification_queue_3["Notification Queue
Message Queue"] int_user_account_management_0 --> ext_primary_database_0 int_product_catalog_service_1 --> ext_primary_database_0 int_product_catalog_service_1 --> ext_search_index_2 int_order_processing_service_2 --> int_user_account_management_0 int_order_processing_service_2 --> int_product_catalog_service_1 int_order_processing_service_2 --> int_payment_gateway_3 int_order_processing_service_2 --> ext_primary_database_0 int_order_processing_service_2 --> ext_notification_queue_3 int_payment_gateway_3 --> ext_stripe_api_1 class int_user_account_management_0 internalComponent class int_product_catalog_service_1 internalComponent class int_order_processing_service_2 internalComponent class int_payment_gateway_3 internalComponent class ext_primary_database_0 externalComponent class ext_stripe_api_1 externalComponent class ext_search_index_2 externalComponent class ext_notification_queue_3 externalComponent

Internal Business Components

User Account Management

Manages all aspects of user identity and profiles. This component is responsible for user registration, authentication, and authorization processes. It also handles profile updates, password resets, and maintains user data integrity.

Product Catalog Service

Provides a centralized source for all product-related information. It handles the creation, retrieval, updating, and deletion of products and their associated categories and attributes. This service also powers product search and filtering capabilities for customers.

Order Processing Service

Orchestrates the entire lifecycle of a customer order. Its responsibilities include managing the shopping cart, creating new orders, calculating totals, and tracking order status from placement to fulfillment. It ensures that orders are correctly recorded and communicated to other relevant systems.

Payment Gateway

Acts as a secure interface for handling all financial transactions. This component is responsible for processing payments, handling refunds, and communicating with external payment providers. It ensures that all payment operations are secure, reliable, and properly logged for auditing.

External Dependencies

Name Type Description
Primary Database Database A PostgreSQL relational database used as the main persistence layer for core business entities like users, products, and orders.
Stripe API External API External payment processing service used to securely handle credit card transactions and other payment methods.
Search Index Cache An Elasticsearch cluster used to provide fast, full-text search capabilities over the product catalog.
Notification Queue Message Queue A RabbitMQ message queue used to asynchronously dispatch notifications, such as order confirmation emails and shipping updates.

Derived Microservices Architecture JSON

Note: This is a suggested new Microservices architecture derived from what the application does and how it functions - it intentionally does not reflect the curent the current archiecture of the application or any of its existing Microservices (if any).

Microservices

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
flowchart TB

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    subgraph services[" "]
        loan_portfolio_service_0["Loan Portfolio Service"]
        savings_and_deposits_service_1["Savings and Deposits Service"]
        client_management_service_2["Client Management Service"]
        accounting_service_3["Accounting Service"]
        identity_access_management_service_4["Identity & Access Management Service"]
        notification_service_5["Notification Service"]
        document_management_service_6["Document Management Service"]
        reporting_analytics_service_7["Reporting & Analytics Service"]
        social_performance_management_service_8["Social Performance Management Service"]
        loan_portfolio_service_0 ~~~ savings_and_deposits_service_1
        savings_and_deposits_service_1 ~~~ client_management_service_2
        accounting_service_3 ~~~ identity_access_management_service_4
        identity_access_management_service_4 ~~~ notification_service_5
        document_management_service_6 ~~~ reporting_analytics_service_7
        reporting_analytics_service_7 ~~~ social_performance_management_service_8
        loan_portfolio_service_0 ~~~ accounting_service_3
        accounting_service_3 ~~~ document_management_service_6
    end
    class loan_portfolio_service_0 service
    class savings_and_deposits_service_1 service
    class client_management_service_2 service
    class accounting_service_3 service
    class identity_access_management_service_4 service
    class notification_service_5 service
    class document_management_service_6 service
    class reporting_analytics_service_7 service
    class social_performance_management_service_8 service
    style services fill:transparent,stroke:transparent,stroke-width:0

Microservices Details

Loan Portfolio Service

This microservice is responsible for the end-to-end lifecycle management of loan accounts and products. It encapsulates the complex financial logic required for loan origination, approval workflows, disbursement, repayment processing, and interest calculation. The service manages loan product configurations, including amortization schedules, delinquency tracking, and penalty calculations. It also handles advanced features such as collateral management and variable installments. By isolating this domain, the system can independently scale the heavy calculation engines required for schedule generation and interest accrual without affecting other modules.

Entities
  • Loan: The core entity representing a loan account, tracking principal, interest, and repayment schedules.
    Attributes: id, accountNo, principal, interestRate, termFrequency, status, repaymentSchedule
  • LoanProduct: Defines the configuration and terms for a specific type of loan offering.
    Attributes: id, name, shortName, currency, amortizationMethod, interestMethod, minPrincipal, maxPrincipal
  • LoanTransaction: Records financial events associated with a loan, such as repayments, waivers, or disbursements.
    Attributes: id, transactionDate, amount, transactionType, principalPortion, interestPortion
  • LoanCollateral: Assets pledged by a borrower to secure a loan.
    Attributes: id, value, description, collateralType, loanId
API Endpoints
  • POST /api/v1/loans
    Submits a new loan application for a client or group.
  • GET /api/v1/loans/{loanId}
    Retrieves detailed information about a specific loan account.
  • POST /api/v1/loans/{loanId}/transactions
    Processes a transaction (repayment, waiver, etc.) against a loan.
  • GET /api/v1/loanproducts
    Lists available loan products and their configurations.
Operations
  • Submit Loan Application (POST)
    Creates a new loan application with specific terms and links it to a client.
  • Approve Loan (POST)
    Transitions a loan application from pending to approved status.
  • Disburse Loan (POST)
    Releases funds to the borrower and activates the repayment schedule.
  • Make Repayment (POST)
    Records a payment against the loan, allocating funds to principal, interest, and fees.

Savings and Deposits Service

This microservice manages the complete lifecycle of savings accounts, fixed deposits, and recurring deposits. It handles the definition of savings products, including interest compounding rules, posting periods, and lock-in settings. The service is responsible for processing transactions such as deposits, withdrawals, and transfers, as well as calculating and posting interest to accounts. It ensures accurate balance tracking and enforces rules regarding minimum balances and withdrawal limits. This separation ensures that the distinct financial logic of liability products is decoupled from asset products.

Entities
  • SavingsAccount: Represents a customer's savings account holding a balance and transaction history.
    Attributes: id, accountNo, accountBalance, status, clientId, minRequiredBalance
  • SavingsProduct: Defines the terms, interest rates, and currency for a savings offering.
    Attributes: id, name, nominalAnnualInterestRate, currencyCode, interestCompoundingPeriodType
  • FixedDepositAccount: A specialized deposit account held for a fixed term with specific maturity rules.
    Attributes: id, depositAmount, maturityDate, depositPeriod, preClosurePenalInterest
  • InterestRateChart: Defines interest rate slabs based on deposit amounts or periods.
    Attributes: id, fromDate, endDate, chartSlabs
API Endpoints
  • POST /api/v1/savingsaccounts
    Opens a new savings account for a client.
  • POST /api/v1/savingsaccounts/{accountId}/transactions
    Performs a deposit or withdrawal transaction on a savings account.
  • GET /api/v1/fixeddepositaccounts
    Retrieves a list of fixed deposit accounts.
  • POST /api/v1/savingsproducts
    Creates a new savings product definition.
Operations
  • Deposit Funds (POST)
    Credits an amount to a savings account.
  • Withdraw Funds (POST)
    Debits an amount from a savings account, checking for sufficient funds.
  • Post Interest (POST)
    Calculates and credits accrued interest to savings accounts based on the product configuration.
  • Activate Account (POST)
    Transitions a savings account from pending to active status.

Client Management Service

This microservice acts as the central registry for all customer data, managing individual clients, groups, and centers. It handles Know Your Customer (KYC) requirements, addresses, and hierarchical relationships within the organization. The service manages the organizational hierarchy of customers, including group memberships, staff assignments, and family member details. It serves as the central source of truth for customer data, supporting other services like Loans and Savings. Isolating this allows for better data governance and compliance management.

Entities
  • Client: Represents an individual or corporate customer of the financial institution.
    Attributes: id, firstname, lastname, accountNo, status, officeId, mobileNo
  • Group: Represents a collection of clients organized for joint liability or meeting purposes.
    Attributes: id, name, officeId, staffId, hierarchy
  • ClientIdentifier: Identification documents associated with a client (e.g., Passport, National ID).
    Attributes: id, documentKey, documentType, status
  • Address: Stores physical address details for a client.
    Attributes: street, city, state, postalCode, country
API Endpoints
  • POST /api/v1/clients
    Registers a new client in the system.
  • GET /api/v1/clients/{clientId}
    Retrieves client profile information.
  • POST /api/v1/groups
    Creates a new client group.
  • POST /api/v1/clients/{clientId}/identifiers
    Adds a new identification document to a client.
Operations
  • Create Client (POST)
    Onboards a new client into the system.
  • Activate Client (POST)
    Activates a pending client, allowing them to access financial products.
  • Assign Staff (POST)
    Assigns a staff member to manage a client or group.
  • Update Address (PUT)
    Modifies the address details of a client.

Accounting Service

This microservice manages the General Ledger (GL), Chart of Accounts, and financial reporting data. It processes journal entries generated by other services (like Loans and Savings) and maintains the financial health of the organization. It handles accounting closures, accruals, and financial activity mappings. This separation ensures the integrity of financial data and allows for independent scaling of reporting and ledger processing.

Entities
  • GLAccount: Represents a General Ledger account in the Chart of Accounts.
    Attributes: id, name, glCode, type, usage
  • JournalEntry: Represents a double-entry accounting record.
    Attributes: id, transactionDate, amount, entryType, glAccountId
  • GLClosure: Represents the closure of an accounting period.
    Attributes: id, closingDate, isDeleted, officeId
API Endpoints
  • GET /api/v1/glaccounts
    Retrieves the Chart of Accounts.
  • POST /api/v1/journalentries
    Creates a manual journal entry.
  • POST /api/v1/glclosures
    Closes the accounting books for a specific period.
Operations
  • Create GL Account (POST)
    Adds a new account to the Chart of Accounts.
  • Post Journal Entry (POST)
    Records a debit or credit transaction in the ledger.
  • Define Opening Balances (POST)
    Sets the initial balances for GL accounts.

Identity & Access Management Service

This microservice handles user authentication, authorization, and role management for the entire platform. It manages application users, roles, permissions, and security policies such as password rotation and validation. It acts as the central authority for securing access to all other microservices, ensuring consistent security enforcement. It also manages the mapping between users and clients for self-service access.

Entities
  • AppUser: Represents a system user with login credentials.
    Attributes: id, username, email, officeId, staffId, enabled
  • Role: Defines a set of permissions that can be assigned to users.
    Attributes: id, name, description, disabled
  • Permission: Granular access control right to perform a specific action.
    Attributes: grouping, code, entityName, actionName
  • PasswordValidationPolicy: Configuration for password strength and security requirements.
    Attributes: regex, description, active
API Endpoints
  • POST /api/v1/authentication
    Authenticates a user and returns a token.
  • POST /api/v1/users
    Creates a new application user.
  • GET /api/v1/roles
    Lists available user roles.
  • PUT /api/v1/permissions
    Updates the permissions associated with a role.
Operations
  • Authenticate (POST)
    Verifies credentials and establishes a session.
  • Create User (POST)
    Provisions a new user account with specific roles and office access.
  • Update Permissions (PUT)
    Modifies the access rights associated with a specific role.
  • Update Password Policy (PUT)
    Changes the global password validation policy.

Notification Service

This microservice manages both outbound communications (SMS, Email) and internal system notifications. It handles the creation and scheduling of marketing campaigns as well as transactional alerts generated by business events. The service integrates with external gateways to deliver messages and tracks the read/unread status of internal notifications for users. This separation decouples communication logic from core business processes and allows for scalable event handling.

Entities
  • SmsCampaign: Defines a marketing or notification campaign via SMS.
    Attributes: id, campaignName, message, triggerType, status
  • Notification: Represents a notification event generated by the system for a user.
    Attributes: objectType, objectIdentifier, action, actor, notificationContent
  • EmailMessage: Represents an individual email to be sent.
    Attributes: id, emailAddress, subject, body, status
API Endpoints
  • POST /api/v1/smscampaigns
    Creates a new SMS campaign.
  • GET /api/v1/notifications
    Retrieves a list of notifications for the authenticated user.
  • POST /api/v1/sms
    Sends a direct SMS message.
Operations
  • Create Campaign (POST)
    Configures a new notification campaign.
  • Fetch Notifications (GET)
    Gets unread or all notifications for the current user.
  • Send SMS (POST)
    Dispatches a single SMS message.
  • Mark as Read (PUT)
    Updates the state of a notification to indicate it has been viewed.

Document Management Service

This microservice handles the storage, retrieval, and management of documents and images associated with system entities. It abstracts the underlying storage mechanism (File System, S3) and provides APIs for uploading and downloading files. This allows for centralized handling of binary data and attachments, ensuring that other services remain lightweight. It supports linking documents to various parent entities like clients or loans.

Entities
  • Document: Metadata for an uploaded file.
    Attributes: id, parentEntityType, parentEntityId, name, fileName, location
  • Image: Represents an image associated with a client or staff.
    Attributes: id, location, storageType
API Endpoints
  • POST /api/v1/{entityType}/{entityId}/documents
    Uploads a document for a specific entity.
  • POST /api/v1/{entityType}/{entityId}/images
    Uploads or updates an image for an entity.
  • GET /api/v1/documents/{documentId}
    Downloads a specific document.
Operations
  • Upload Document (POST)
    Stores a file and links it to an entity.
  • Retrieve Image (GET)
    Fetches the image associated with a client or staff.
  • Delete Document (DELETE)
    Removes a document and its metadata.

Reporting & Analytics Service

This microservice is responsible for generating reports, running ad-hoc queries, and managing data tables. It supports various output formats like PDF, CSV, and JSON and allows for the definition of dynamic 'stretchy' reports. It integrates with external reporting tools and manages custom datatables that extend core entities. Separating this ensures that heavy reporting loads do not impact the performance of transactional services.

Entities
  • Report: Definition of a system report including SQL query.
    Attributes: id, reportName, reportType, reportSql
  • Datatable: Custom data table definition extending core entities.
    Attributes: applicationTableName, registeredTableName, columnDefinitions
  • AdHoc: User-defined ad-hoc query configuration.
    Attributes: id, name, query, tableName
API Endpoints
  • GET /api/v1/runreports/{reportName}
    Executes a report and returns the data.
  • GET /api/v1/datatables/{datatable}
    Retrieves data from a custom datatable.
  • POST /api/v1/reports
    Creates a new report definition.
Operations
  • Run Report (GET)
    Generates a report based on parameters.
  • Register Datatable (POST)
    Creates a new custom data table linked to an entity.
  • Create AdHoc Query (POST)
    Saves a custom SQL query for future use.

Social Performance Management Service

This service is responsible for managing surveys and scorecards related to social performance monitoring. It allows the definition of custom surveys with specific components, questions, and response options. The service enables the capture of scorecard data for clients, linking survey results to specific users and timelines. It supports the creation of lookup tables for scoring logic, distinct from financial transactions.

Entities
  • Survey: Defines a questionnaire or survey structure.
    Attributes: key, name, countryCode, validFrom, validTo
  • Question: A specific question within a survey.
    Attributes: text, key, sequenceNo, componentKey
  • Scorecard: Represents a completed survey for a client.
    Attributes: surveyId, clientId, userId, submittedOnDate
  • LookupTable: Reference data for scoring survey responses.
    Attributes: key, score, valueFrom, valueTo
API Endpoints
  • POST /api/v1/surveys
    Creates a new survey definition.
  • GET /api/v1/surveys
    Retrieves a list of active surveys.
  • POST /api/v1/scorecards
    Submits a new scorecard entry for a client.
  • GET /api/v1/scorecards
    Retrieves scorecard details for a specific survey and client.
Operations
  • Create Survey (POST)
    Defines a new survey with questions and options.
  • Submit Scorecard (POST)
    Records the responses for a survey taken by a client.
  • Retrieve Scorecards (GET)
    Fetches historical survey results for analysis.

Derived Domain Model JSON

Note: This domain model has been derived from what the application does and how it functions - it intentionally does not reflect how the current code manages and persists business data.

Accounting bounded context

The Accounting Bounded Context is responsible for the financial core of the application, implementing a double-entry general ledger system. It manages the Chart of Accounts, recording all financial transactions as journal entries with balanced debits and credits. This context handles complex financial operations such as accruals, loan loss provisioning, and end-of-period closures to ensure financial integrity. It provides the mapping infrastructure to link portfolio products like loans and savings to specific ledger accounts for automated bookkeeping. Additionally, it supports financial reporting and trial balance generation.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
flowchart TB

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    accounting_0{{"Accounting"}}
    accounting_0 --> agg_general_ledger_account_0
    accounting_0 --> agg_journal_entry_1
    accounting_0 --> agg_product_mapping_2
    agg_general_ledger_account_0 -.-> entity_glaccount_0
    agg_general_ledger_account_0 -.-> entity_glclosure_1
    agg_journal_entry_1 -.-> entity_journalentry_2
    agg_product_mapping_2 -.-> entity_producttoglaccountmapping_3
    agg_product_mapping_2 -.-> entity_financialactivityaccount_4
    subgraph aggRepoGroup0[" "]
        direction LR
        agg_general_ledger_account_0(["General Ledger Account"])
        repo_glaccountrepository_0(("GLAccountRepository"))
        agg_general_ledger_account_0 -.- repo_glaccountrepository_0
    end
    class agg_general_ledger_account_0 aggregate
    class repo_glaccountrepository_0 repository
    subgraph aggRepoGroup1[" "]
        direction LR
        agg_journal_entry_1(["Journal Entry"])
        repo_journalentryrepository_1(("JournalEntryRepository"))
        agg_journal_entry_1 -.- repo_journalentryrepository_1
    end
    class agg_journal_entry_1 aggregate
    class repo_journalentryrepository_1 repository
    subgraph aggRepoGroup2[" "]
        direction LR
        agg_product_mapping_2(["Product Mapping"])
        repo_producttoglaccountmappingrepository_2(("ProductToGLAccountMappingRepository"))
        agg_product_mapping_2 -.- repo_producttoglaccountmappingrepository_2
    end
    class agg_product_mapping_2 aggregate
    class repo_producttoglaccountmappingrepository_2 repository
    subgraph entitiesGroup[" "]
        direction LR
        entity_glaccount_0("GLAccount")
        entity_glclosure_1("GLClosure")
        entity_journalentry_2("JournalEntry")
        entity_producttoglaccountmapping_3("ProductToGLAccountMapping")
        entity_financialactivityaccount_4("FinancialActivityAccount")
    end
    class entity_glaccount_0 entity
    class entity_glclosure_1 entity
    class entity_journalentry_2 entity
    class entity_producttoglaccountmapping_3 entity
    class entity_financialactivityaccount_4 entity
    class accounting_0 boundedContext
    style aggRepoGroup0 fill:transparent,stroke:transparent,stroke-width:0
    style aggRepoGroup1 fill:transparent,stroke:transparent,stroke-width:0
    style aggRepoGroup2 fill:transparent,stroke:transparent,stroke-width:0
    style entitiesGroup fill:transparent,stroke:transparent,stroke-width:0

Aggregates (3)

  • General Ledger Account: This aggregate represents the fundamental building blocks of the financial system, defining the Chart of Accounts. It categorizes accounts into types such as Assets, Liabilities, Income, Expenses, and Equity, and manages their hierarchical structure. The aggregate enforces rules regarding account usage, distinguishing between header accounts for grouping and detail accounts for transaction recording. It maintains the configuration for manual journal entry permissions and disabled statuses. Furthermore, it supports the tracking of account balances over time.
  • Journal Entry: The Journal Entry aggregate captures discrete financial transactions within the system, ensuring that every debit has a corresponding credit. It serves as the immutable audit trail for all financial activity, linking transactions to specific offices, dates, and currencies. This aggregate validates that entries are balanced before persistence and supports the reversal of transactions. It also manages the association between manual entries and system-generated entries triggered by portfolio events. Additionally, it supports the definition of opening balances for offices.
  • Product Mapping: This aggregate manages the configuration rules that link portfolio products to the general ledger. It defines which GL accounts should be debited or credited for specific financial activities such as disbursements, repayments, or interest posting. The aggregate supports different accounting methodologies, including cash-based and accrual-based accounting. It ensures that financial transactions generated by the portfolio modules are automatically and correctly reflected in the accounting system. It handles mappings for various product types including loans, savings, and shares.

Repositories (3)

  • GLAccountRepository: This repository manages the persistence and retrieval of General Ledger Account entities. It supports hierarchical queries to fetch account trees and filtering by account type or usage. It also provides mechanisms to look up accounts by their unique GL codes.
  • JournalEntryRepository: This repository handles the storage and retrieval of financial transaction records. It allows for querying journal entries based on date ranges, transaction IDs, and account identifiers. It is optimized for high-volume writes and reporting queries.
  • ProductToGLAccountMappingRepository: This repository persists the configuration linking financial products to GL accounts. It allows for the retrieval of mapping rules based on product ID and financial activity type. It ensures that the accounting engine can resolve the correct accounts during transaction processing.

Entities (5)

  • GLAccount: Represents a specific general ledger account within the accounting system. It stores the account name, GL code, type, usage, and parent relationship. It also tracks whether manual journal entries are allowed for this account.
  • GLClosure: Represents a closure of the accounting books for a specific office up to a certain date. It prevents any new financial transactions or modifications from being posted prior to the closure date. This ensures the immutability of finalized financial periods.
  • JournalEntry: Represents a single line item within a financial transaction, recording a debit or credit amount. It links the amount to a specific GL Account, office, and transaction date. It also stores reference information to the originating business event.
  • ProductToGLAccountMapping: Defines a specific rule linking a product and a financial activity to a GL Account. It stores the product type, the specific payment or charge type, and the target account. This entity drives the automated accounting logic.
  • FinancialActivityAccount: Maps system-wide financial activities, such as asset transfers, to specific GL accounts. It ensures that non-product specific financial movements are correctly recorded. It is used for system-level accounting configurations.

Infrastructure bounded context

The Infrastructure Bounded Context provides the foundational technical services and cross-cutting concerns required by the application. It manages system configuration, security, multi-tenancy, and extensibility features like data tables and hooks. This context handles the scheduling and execution of background jobs and batch processes. It also provides the audit trail mechanism to track all state-changing commands within the system. Additionally, it manages reference data codes and values used throughout the platform.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
flowchart TB

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    infrastructure_0{{"Infrastructure"}}
    infrastructure_0 --> agg_scheduled_job_0
    infrastructure_0 --> agg_command_source_1
    infrastructure_0 --> agg_data_table_2
    agg_scheduled_job_0 -.-> entity_scheduledjobdetail_0
    agg_scheduled_job_0 -.-> entity_scheduledjobrunhistory_1
    agg_command_source_1 -.-> entity_commandsource_2
    agg_data_table_2 -.-> entity_registereddatatable_3
    agg_data_table_2 -.-> entity_entitydatatablechecks_4
    subgraph aggRepoGroup0[" "]
        direction LR
        agg_scheduled_job_0(["Scheduled Job"])
        repo_scheduledjobdetailrepository_0(("ScheduledJobDetailRepository"))
        agg_scheduled_job_0 -.- repo_scheduledjobdetailrepository_0
    end
    class agg_scheduled_job_0 aggregate
    class repo_scheduledjobdetailrepository_0 repository
    subgraph aggRepoGroup1[" "]
        direction LR
        agg_command_source_1(["Command Source"])
        repo_commandsourcerepository_1(("CommandSourceRepository"))
        agg_command_source_1 -.- repo_commandsourcerepository_1
    end
    class agg_command_source_1 aggregate
    class repo_commandsourcerepository_1 repository
    subgraph aggRepoGroup2[" "]
        direction LR
        agg_data_table_2(["Data Table"])
        repo_registereddatatablerepository_2(("RegisteredDatatableRepository"))
        agg_data_table_2 -.- repo_registereddatatablerepository_2
    end
    class agg_data_table_2 aggregate
    class repo_registereddatatablerepository_2 repository
    subgraph entitiesGroup[" "]
        direction LR
        entity_scheduledjobdetail_0("ScheduledJobDetail")
        entity_scheduledjobrunhistory_1("ScheduledJobRunHistory")
        entity_commandsource_2("CommandSource")
        entity_registereddatatable_3("RegisteredDatatable")
        entity_entitydatatablechecks_4("EntityDatatableChecks")
    end
    class entity_scheduledjobdetail_0 entity
    class entity_scheduledjobrunhistory_1 entity
    class entity_commandsource_2 entity
    class entity_registereddatatable_3 entity
    class entity_entitydatatablechecks_4 entity
    class infrastructure_0 boundedContext
    style aggRepoGroup0 fill:transparent,stroke:transparent,stroke-width:0
    style aggRepoGroup1 fill:transparent,stroke:transparent,stroke-width:0
    style aggRepoGroup2 fill:transparent,stroke:transparent,stroke-width:0
    style entitiesGroup fill:transparent,stroke:transparent,stroke-width:0

Aggregates (3)

  • Scheduled Job: This aggregate manages the definition, scheduling, and execution of background tasks and batch jobs. It allows administrators to configure job frequencies using cron expressions and manage job parameters. The aggregate tracks the execution history of jobs, including start times, end times, and status outcomes. It supports the handling of custom job parameters passed as JSON. It ensures that critical system processes run reliably and provides visibility into their performance.
  • Command Source: The Command Source aggregate serves as the central audit log for all state-changing operations within the system. It captures the details of every API command, including the request payload, the user who initiated it, and the result. This aggregate supports the 'Maker-Checker' workflow by tracking commands that require approval before execution. It ensures accountability and traceability for all business actions. It also handles idempotency to prevent duplicate processing of the same command.
  • Data Table: This aggregate provides the extensibility mechanism to attach custom data fields to core system entities. It manages the registration of dynamic tables and the validation rules for their usage. The aggregate allows the system to store and retrieve additional data without altering the core database schema. It supports the configuration of checks that enforce data entry in these tables during specific workflow steps. It enables the application to adapt to specific client data requirements.

Repositories (3)

  • ScheduledJobDetailRepository: This repository manages the persistence of job configurations and their runtime states. It allows for retrieving job details by ID or name and updating their schedules. It is used to coordinate job execution across the system.
  • CommandSourceRepository: This repository stores the history of all commands executed in the system. It supports querying for audit logs based on entity, action, and user. It is essential for the maker-checker functionality and system auditing.
  • RegisteredDatatableRepository: This repository manages the metadata for registered data tables. It allows the system to look up custom tables associated with specific application entities. It supports the dynamic schema management of these extensions.

Entities (5)

  • ScheduledJobDetail: Represents the configuration of a background job, including its name and cron schedule. It tracks the current status of the job and the next scheduled run time. It serves as the blueprint for job execution.
  • ScheduledJobRunHistory: Records the outcome of a specific execution instance of a scheduled job. It stores the start time, end time, status, and any error messages. This entity provides an audit log for background processing.
  • CommandSource: Represents a single command or action performed within the system. It stores the JSON payload, the action name, the entity affected, and the processing status. It links the action to the user and the resulting resource ID.
  • RegisteredDatatable: Stores the metadata definition of a custom data table, including its name and linked core entity. It defines the relationship between the extension table and the application table. It is used to dynamically resolve data storage locations.
  • EntityDatatableChecks: Defines validation rules that require a data table to be populated for a specific entity status. It enforces business rules by preventing workflow transitions if required data is missing. It links a data table to a product and status.

Loan Portfolio bounded context

This bounded context manages the entire lifecycle of lending products and individual loan accounts within the financial institution. It handles the definition of loan products, the processing of loan applications, and the management of active loans including disbursements, repayments, and interest calculations. The context enforces complex business rules regarding amortization schedules, interest recalculation, and delinquency tracking. It serves as the core financial engine for the lending side of the portfolio, ensuring accurate ledger updates and state transitions. Additionally, it manages the configuration of loan terms, variable installments, and associated charges.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
flowchart TB

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    loan_portfolio_0{{"Loan Portfolio"}}
    loan_portfolio_0 --> agg_loan_account_0
    loan_portfolio_0 --> agg_loan_product_1
    loan_portfolio_0 --> agg_delinquency_management_2
    agg_loan_account_0 -.-> entity_loan_0
    agg_loan_account_0 -.-> entity_loantransaction_1
    agg_loan_account_0 -.-> entity_loanrepaymentscheduleinstallment_2
    agg_loan_account_0 -.-> entity_loancharge_3
    agg_loan_account_0 -.-> entity_loanaccountlock_4
    agg_loan_product_1 -.-> entity_loanproduct_5
    agg_loan_product_1 -.-> entity_loanproductinterestrecalculationdetails_6
    agg_loan_product_1 -.-> entity_loanproductguaranteedetails_7
    agg_delinquency_management_2 -.-> entity_delinquencybucket_8
    agg_delinquency_management_2 -.-> entity_delinquencyrange_9
    agg_delinquency_management_2 -.-> entity_loandelinquencytaghistory_10
    subgraph aggRepoGroup0[" "]
        direction LR
        agg_loan_account_0(["Loan Account"])
        repo_loanrepository_0(("LoanRepository"))
        agg_loan_account_0 -.- repo_loanrepository_0
    end
    class agg_loan_account_0 aggregate
    class repo_loanrepository_0 repository
    subgraph aggRepoGroup1[" "]
        direction LR
        agg_loan_product_1(["Loan Product"])
        repo_loanproductrepository_1(("LoanProductRepository"))
        agg_loan_product_1 -.- repo_loanproductrepository_1
    end
    class agg_loan_product_1 aggregate
    class repo_loanproductrepository_1 repository
    subgraph aggRepoGroup2[" "]
        direction LR
        agg_delinquency_management_2(["Delinquency Management"])
        repo_delinquencybucketrepository_2(("DelinquencyBucketRepository"))
        agg_delinquency_management_2 -.- repo_delinquencybucketrepository_2
    end
    class agg_delinquency_management_2 aggregate
    class repo_delinquencybucketrepository_2 repository
    subgraph entitiesGroup[" "]
        direction LR
        entity_loan_0("Loan")
        entity_loantransaction_1("LoanTransaction")
        entity_loanrepaymentscheduleinstallment_2("LoanRepaymentScheduleInstallment")
        entity_loancharge_3("LoanCharge")
        entity_loanaccountlock_4("LoanAccountLock")
        entity_loanproduct_5("LoanProduct")
        entity_loanproductinterestrecalculationdetails_6("LoanProductInterestRecalculationDetails")
        entity_loanproductguaranteedetails_7("LoanProductGuaranteeDetails")
        entity_delinquencybucket_8("DelinquencyBucket")
        entity_delinquencyrange_9("DelinquencyRange")
        entity_loandelinquencytaghistory_10("LoanDelinquencyTagHistory")
    end
    class entity_loan_0 entity
    class entity_loantransaction_1 entity
    class entity_loanrepaymentscheduleinstallment_2 entity
    class entity_loancharge_3 entity
    class entity_loanaccountlock_4 entity
    class entity_loanproduct_5 entity
    class entity_loanproductinterestrecalculationdetails_6 entity
    class entity_loanproductguaranteedetails_7 entity
    class entity_delinquencybucket_8 entity
    class entity_delinquencyrange_9 entity
    class entity_loandelinquencytaghistory_10 entity
    class loan_portfolio_0 boundedContext
    style aggRepoGroup0 fill:transparent,stroke:transparent,stroke-width:0
    style aggRepoGroup1 fill:transparent,stroke:transparent,stroke-width:0
    style aggRepoGroup2 fill:transparent,stroke:transparent,stroke-width:0
    style entitiesGroup fill:transparent,stroke:transparent,stroke-width:0

Aggregates (3)

  • Loan Account: The Loan Account aggregate is the central transactional entity representing a borrower's liability. It manages the state of the loan from submission to closure, handling complex financial logic such as interest accrual, repayment allocation, and schedule generation. It enforces rules regarding valid state transitions, such as preventing disbursement before approval. The aggregate maintains consistency between the loan summary, the repayment schedule, and the history of transactions. It also integrates with collateral and charge entities to provide a complete financial picture.
  • Loan Product: The Loan Product aggregate defines the templates and configuration rules for creating new loans. It encapsulates settings for interest rates, accounting rules, repayment frequencies, and credit checks. This aggregate ensures that all loans created under a specific product adhere to the institution's policy constraints. It manages the lifecycle of the product definition itself, including valid dates and availability. It serves as a factory configuration for the Loan Account aggregate.
  • Delinquency Management: This aggregate manages the classification and tracking of overdue loans. It defines buckets and ranges to categorize loans based on the duration of their arrears. The aggregate provides the logic to apply delinquency tags to loans, which can trigger specific workflows or reporting. It ensures that the institution can accurately assess portfolio risk. It maintains a history of delinquency state changes for audit and analysis.

Repositories (3)

  • LoanRepository: This repository provides persistence and retrieval mechanisms for Loan entities. It supports complex queries to filter loans by status, client, or office hierarchy. It ensures that loan data is loaded with necessary associations for processing while managing lazy loading to optimize performance.
  • LoanProductRepository: This repository handles the storage and retrieval of LoanProduct definitions. It allows for the management of product configurations and ensures that active products can be efficiently queried for loan creation. It supports filtering products based on currency and other attributes.
  • DelinquencyBucketRepository: This repository manages the persistence of delinquency classification rules. It allows for the retrieval of bucket definitions used to categorize overdue loans. It ensures that delinquency configurations are available for the loan aging processes.

Entities (11)

  • Loan: The root entity representing the loan agreement, holding current balances, status, and configuration. It orchestrates the behavior of child entities and enforces the loan's lifecycle state machine. It serves as the primary point of interaction for loan-related business logic.
  • LoanTransaction: Represents a financial event on the loan, such as a repayment, disbursement, or waiver. It records the amount, date, and type of transaction, linking it to the specific repayment schedule installment it affects. It provides an immutable audit trail of financial movements.
  • LoanRepaymentScheduleInstallment: Defines a specific period within the loan term, detailing the principal, interest, fees, and penalties due. It tracks the paid and outstanding amounts for that specific period. This entity is crucial for determining the delinquency status of the loan.
  • LoanCharge: Represents a fee or penalty applied to the loan account. It tracks the calculation method, amount due, and amount paid for specific charges. It links the financial charge definition to the specific loan instance.
  • LoanAccountLock: Manages concurrency locks for loan accounts during batch processing. It prevents simultaneous updates to the same loan by different processes. It ensures data integrity during Close of Business operations.
  • LoanProduct: The root entity defining the configuration parameters for a specific type of loan offering. It holds rules for interest calculation, amortization, and accounting mappings. It acts as a blueprint for instantiating individual Loan entities.
  • LoanProductInterestRecalculationDetails: Stores configuration details regarding how interest should be recalculated for loans under this product. It defines compounding frequencies and rescheduling strategies. This entity ensures that complex interest rules are persisted alongside the product.
  • LoanProductGuaranteeDetails: Defines the requirements for guarantors associated with loans of this product type. It specifies mandatory guarantee percentages and funding sources. It enforces risk management policies at the product level.
  • DelinquencyBucket: A container entity that groups multiple delinquency ranges together. It represents a specific policy or schema for classifying overdue loans. It allows different products to use different delinquency definitions.
  • DelinquencyRange: Defines a specific time interval (e.g., 30-60 days) for classifying a loan's overdue status. It is associated with a bucket and provides a classification label. It is used to determine the specific tag applied to a loan.
  • LoanDelinquencyTagHistory: Tracks the history of delinquency tags applied to a specific loan over time. It records when a loan entered or exited a specific delinquency range. This entity provides a temporal view of the loan's risk profile.

Savings & Deposits bounded context

This bounded context handles the management of deposit accounts, including standard savings, fixed deposits, and recurring deposits. It manages the entire lifecycle of these accounts from application to maturity or closure. The context enforces rules regarding interest posting, compounding, and withdrawal limits. It integrates with the transaction processing system to handle deposits, withdrawals, and transfers. Additionally, it manages the configuration of savings products and their associated interest rate charts.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
flowchart TB

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    savings_deposits_0{{"Savings & Deposits"}}
    savings_deposits_0 --> agg_savings_account_0
    savings_deposits_0 --> agg_interest_rate_chart_1
    agg_savings_account_0 -.-> entity_savingsaccount_0
    agg_savings_account_0 -.-> entity_fixeddepositaccount_1
    agg_savings_account_0 -.-> entity_recurringdepositaccount_2
    agg_savings_account_0 -.-> entity_savingsaccounttransaction_3
    agg_interest_rate_chart_1 -.-> entity_interestratechart_4
    agg_interest_rate_chart_1 -.-> entity_interestratechartslab_5
    agg_interest_rate_chart_1 -.-> entity_interestincentives_6
    subgraph aggRepoGroup0[" "]
        direction LR
        agg_savings_account_0(["Savings Account"])
        repo_savingsaccountrepository_0(("SavingsAccountRepository"))
        agg_savings_account_0 -.- repo_savingsaccountrepository_0
    end
    class agg_savings_account_0 aggregate
    class repo_savingsaccountrepository_0 repository
    subgraph aggRepoGroup1[" "]
        direction LR
        agg_interest_rate_chart_1(["Interest Rate Chart"])
        repo_interestratechartrepository_1(("InterestRateChartRepository"))
        agg_interest_rate_chart_1 -.- repo_interestratechartrepository_1
    end
    class agg_interest_rate_chart_1 aggregate
    class repo_interestratechartrepository_1 repository
    subgraph entitiesGroup[" "]
        direction LR
        entity_savingsaccount_0("SavingsAccount")
        entity_fixeddepositaccount_1("FixedDepositAccount")
        entity_recurringdepositaccount_2("RecurringDepositAccount")
        entity_savingsaccounttransaction_3("SavingsAccountTransaction")
        entity_interestratechart_4("InterestRateChart")
        entity_interestratechartslab_5("InterestRateChartSlab")
        entity_interestincentives_6("InterestIncentives")
    end
    class entity_savingsaccount_0 entity
    class entity_fixeddepositaccount_1 entity
    class entity_recurringdepositaccount_2 entity
    class entity_savingsaccounttransaction_3 entity
    class entity_interestratechart_4 entity
    class entity_interestratechartslab_5 entity
    class entity_interestincentives_6 entity
    class savings_deposits_0 boundedContext
    style aggRepoGroup0 fill:transparent,stroke:transparent,stroke-width:0
    style aggRepoGroup1 fill:transparent,stroke:transparent,stroke-width:0
    style entitiesGroup fill:transparent,stroke:transparent,stroke-width:0

Aggregates (2)

  • Savings Account: The Savings Account aggregate represents the customer's deposit account and manages its financial state. It handles transactions, enforces minimum balance rules, and calculates interest based on configured schedules. It supports specialized behaviors for fixed and recurring deposits, such as lock-in periods and maturity calculations. The aggregate ensures consistency between the account balance and the transaction history. It also manages the association with clients and groups.
  • Interest Rate Chart: This aggregate defines the rules for calculating interest rates based on deposit amounts and terms. It manages a collection of rate slabs that determine the applicable interest rate for a given scenario. The aggregate ensures that rate definitions do not overlap and cover the necessary ranges. It supports the application of incentives based on client attributes. It is a critical component for the profitability and attractiveness of deposit products.

Repositories (2)

  • SavingsAccountRepository: This repository provides data access for SavingsAccount entities and their specialized subclasses. It supports retrieving accounts by client, status, or external identifier. It handles the persistence of account state changes and transaction links.
  • InterestRateChartRepository: This repository manages the persistence of interest rate charts and their associated slabs. It allows for the retrieval of active rate configurations for products and accounts. It ensures that historical rate data is preserved.

Entities (7)

  • SavingsAccount: The core entity representing a deposit account, tracking balance, status, and interest settings. It serves as the base class for specialized deposit types. It manages the list of transactions and charges associated with the account.
  • FixedDepositAccount: A specialized extension of SavingsAccount representing a fixed-term deposit. It includes logic for maturity dates, pre-closure penalties, and deposit term constraints. It enforces rules specific to time-bound investments.
  • RecurringDepositAccount: A specialized extension of SavingsAccount for recurring deposit schemes. It manages the schedule of mandatory installment payments. It tracks the progress of the recurring deposit against the agreed schedule.
  • SavingsAccountTransaction: Represents a financial movement within the savings account, such as a deposit or withdrawal. It records the amount, date, and resulting balance. It serves as the immutable ledger entry for the account.
  • InterestRateChart: The root entity defining a scheme of interest rates valid for a specific period. It groups multiple slabs and defines the primary grouping field (amount or term). It is linked to savings products or individual accounts.
  • InterestRateChartSlab: Defines a specific interest rate applicable for a defined range of amounts or terms. It holds the actual percentage value and the boundary conditions. It is a child entity of the InterestRateChart.
  • InterestIncentives: Represents conditional interest rate adjustments based on client attributes like gender or age. It allows for targeted marketing or social performance incentives. It modifies the base rate defined in the slab.

Client & Group Management bounded context

This bounded context is responsible for managing the customer base of the financial institution. It handles the creation and lifecycle of individual clients, groups, and centers. It manages Know Your Customer (KYC) data through client identifiers and documents. The context also handles the hierarchical relationships between clients, groups, and centers. It serves as the source of truth for customer identity and demographic information.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
flowchart TB

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    client_group_management_0{{"Client & Group Management"}}
    client_group_management_0 --> agg_client_0
    client_group_management_0 --> agg_group_1
    agg_client_0 -.-> entity_client_0
    agg_client_0 -.-> entity_clientidentifier_1
    agg_client_0 -.-> entity_clientnonperson_2
    agg_group_1 -.-> entity_group_3
    agg_group_1 -.-> entity_grouplevel_4
    agg_group_1 -.-> entity_grouprole_5
    subgraph aggRepoGroup0[" "]
        direction LR
        agg_client_0(["Client"])
        repo_clientrepository_0(("ClientRepository"))
        agg_client_0 -.- repo_clientrepository_0
    end
    class agg_client_0 aggregate
    class repo_clientrepository_0 repository
    subgraph aggRepoGroup1[" "]
        direction LR
        agg_group_1(["Group"])
        repo_grouprepository_1(("GroupRepository"))
        agg_group_1 -.- repo_grouprepository_1
    end
    class agg_group_1 aggregate
    class repo_grouprepository_1 repository
    subgraph entitiesGroup[" "]
        direction LR
        entity_client_0("Client")
        entity_clientidentifier_1("ClientIdentifier")
        entity_clientnonperson_2("ClientNonPerson")
        entity_group_3("Group")
        entity_grouplevel_4("GroupLevel")
        entity_grouprole_5("GroupRole")
    end
    class entity_client_0 entity
    class entity_clientidentifier_1 entity
    class entity_clientnonperson_2 entity
    class entity_group_3 entity
    class entity_grouplevel_4 entity
    class entity_grouprole_5 entity
    class client_group_management_0 boundedContext
    style aggRepoGroup0 fill:transparent,stroke:transparent,stroke-width:0
    style aggRepoGroup1 fill:transparent,stroke:transparent,stroke-width:0
    style entitiesGroup fill:transparent,stroke:transparent,stroke-width:0

Aggregates (2)

  • Client: The Client aggregate represents the individual customer and serves as the root for all customer-related data. It manages personal details, activation status, and associations with offices and staff. It enforces business rules regarding client onboarding and state transitions. The aggregate also manages the collection of identification documents and family member details. It is the primary entity for linking financial accounts to individuals.
  • Group: The Group aggregate manages collections of clients organized for lending or social purposes. It handles the hierarchy of groups and centers, including staff assignments and meeting schedules. It enforces rules regarding group composition and lifecycle states. The aggregate facilitates group lending methodologies by linking clients together. It also manages the transfer of clients between groups.

Repositories (2)

  • ClientRepository: This repository handles the persistence and retrieval of Client entities. It supports searching clients by name, identifier, or location. It ensures that client data is securely stored and accessible for portfolio operations.
  • GroupRepository: This repository provides data access for Group and Center entities. It supports hierarchical queries to retrieve groups within centers or offices. It manages the persistence of group structures and memberships.

Entities (6)

  • Client: The core entity representing a customer, holding demographic and status information. It manages the lifecycle state (pending, active, closed) of the customer. It serves as the anchor for all client-specific associations.
  • ClientIdentifier: Represents a specific identification document (e.g., passport, national ID) linked to a client. It stores the document type and unique key. It is used for KYC compliance and identity verification.
  • ClientNonPerson: Captures details for clients that are legal entities (e.g., businesses) rather than individuals. It stores incorporation details and other corporate attributes. It extends the client profile to support business banking.
  • Group: Represents a collection of clients or other groups (centers). It manages the membership list and the group's status. It serves as a context for group loans and meetings.
  • GroupLevel: Defines the hierarchical level of a group entity (e.g., Center vs. Group). It configures the rules for recursion and client membership at that level. It ensures the structural integrity of the group hierarchy.
  • GroupRole: Defines a specific role assigned to a client within a group (e.g., Leader, Treasurer). It links a client to a group with a specific responsibility. It allows for the delegation of duties within the group structure.

Notifications bounded context

The Notifications Bounded Context is responsible for managing communication with clients and staff via various channels. It handles the creation, scheduling, and execution of SMS and Email campaigns. This context allows the institution to send marketing messages, transaction alerts, and account updates. It tracks the delivery status of messages and integrates with external gateways for transmission. It also manages the configuration for different notification providers.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
flowchart TB

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    notifications_0{{"Notifications"}}
    notifications_0 --> agg_sms_campaign_0
    notifications_0 --> agg_email_campaign_1
    agg_sms_campaign_0 -.-> entity_smscampaign_0
    agg_sms_campaign_0 -.-> entity_smsmessage_1
    agg_email_campaign_1 -.-> entity_emailcampaign_2
    agg_email_campaign_1 -.-> entity_emailmessage_3
    agg_email_campaign_1 -.-> entity_emailconfiguration_4
    subgraph aggRepoGroup0[" "]
        direction LR
        agg_sms_campaign_0(["SMS Campaign"])
        repo_smscampaignrepository_0(("SmsCampaignRepository"))
        agg_sms_campaign_0 -.- repo_smscampaignrepository_0
    end
    class agg_sms_campaign_0 aggregate
    class repo_smscampaignrepository_0 repository
    subgraph aggRepoGroup1[" "]
        direction LR
        agg_email_campaign_1(["Email Campaign"])
        repo_emailcampaignrepository_1(("EmailCampaignRepository"))
        agg_email_campaign_1 -.- repo_emailcampaignrepository_1
    end
    class agg_email_campaign_1 aggregate
    class repo_emailcampaignrepository_1 repository
    subgraph entitiesGroup[" "]
        direction LR
        entity_smscampaign_0("SmsCampaign")
        entity_smsmessage_1("SmsMessage")
        entity_emailcampaign_2("EmailCampaign")
        entity_emailmessage_3("EmailMessage")
        entity_emailconfiguration_4("EmailConfiguration")
    end
    class entity_smscampaign_0 entity
    class entity_smsmessage_1 entity
    class entity_emailcampaign_2 entity
    class entity_emailmessage_3 entity
    class entity_emailconfiguration_4 entity
    class notifications_0 boundedContext
    style aggRepoGroup0 fill:transparent,stroke:transparent,stroke-width:0
    style aggRepoGroup1 fill:transparent,stroke:transparent,stroke-width:0
    style entitiesGroup fill:transparent,stroke:transparent,stroke-width:0

Aggregates (2)

  • SMS Campaign: This aggregate manages the lifecycle of SMS marketing and notification campaigns. It allows users to define message content, target audiences, and scheduling triggers. The aggregate handles the generation of individual SMS messages based on the campaign configuration. It tracks the status of the campaign and the delivery success of generated messages. It supports both direct and event-triggered SMS dispatch.
  • Email Campaign: The Email Campaign aggregate handles the definition and execution of email-based communications. It supports the configuration of email subjects, bodies, and attachment generation from reports. The aggregate manages the scheduling of emails and the tracking of their sent status. It integrates with SMTP configuration to dispatch messages. It allows for targeted communication based on business rules and reports.

Repositories (2)

  • SmsCampaignRepository: This repository persists SMS campaign configurations and their states. It allows for retrieving active campaigns and those due for execution. It supports the management of campaign triggers and schedules.
  • EmailCampaignRepository: This repository manages the storage of email campaign definitions. It supports querying for campaigns that need to be triggered based on time or events. It is used to persist the state of email marketing efforts.

Entities (5)

  • SmsCampaign: Defines the configuration for a bulk SMS initiative, including the message template and trigger rules. It tracks the campaign's active status and schedule. It links to the report used to select recipients.
  • SmsMessage: Represents an individual SMS queued for delivery or already sent. It stores the recipient's number, the message body, and the delivery status. It provides a record of communication history.
  • EmailCampaign: Stores the settings for an email campaign, including subject, body, and attachment preferences. It defines the schedule or trigger for sending emails. It manages the lifecycle state of the campaign.
  • EmailMessage: Represents a specific email generated for a recipient. It contains the final message content, recipient address, and status. It tracks whether the email was successfully sent or failed.
  • EmailConfiguration: Stores the SMTP server settings and credentials required to send emails. It defines the host, port, and security protocols for the mail server. It is essential for the email service to function.

Investor bounded context

The Investor Bounded Context manages the relationship between the financial institution and external asset owners. It handles the sale and buyback of loan assets, tracking ownership transfers and their financial implications. This context ensures that loans owned by external parties are correctly identified and that payments are allocated appropriately. It maintains a history of asset transfers and integrates with the accounting system to record sale and buyback transactions. It supports the management of investor portfolios.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
flowchart TB

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    investor_0{{"Investor"}}
    investor_0 --> agg_external_asset_owner_0
    investor_0 --> agg_asset_transfer_1
    agg_external_asset_owner_0 -.-> entity_externalassetowner_0
    agg_asset_transfer_1 -.-> entity_externalassetownertransfer_1
    agg_asset_transfer_1 -.-> entity_externalassetownertransferloanmapping_2
    subgraph aggRepoGroup0[" "]
        direction LR
        agg_external_asset_owner_0(["External Asset Owner"])
        repo_externalassetownerrepository_0(("ExternalAssetOwnerRepository"))
        agg_external_asset_owner_0 -.- repo_externalassetownerrepository_0
    end
    class agg_external_asset_owner_0 aggregate
    class repo_externalassetownerrepository_0 repository
    subgraph aggRepoGroup1[" "]
        direction LR
        agg_asset_transfer_1(["Asset Transfer"])
        repo_externalassetownertransferrepository_1(("ExternalAssetOwnerTransferRepository"))
        agg_asset_transfer_1 -.- repo_externalassetownertransferrepository_1
    end
    class agg_asset_transfer_1 aggregate
    class repo_externalassetownertransferrepository_1 repository
    subgraph entitiesGroup[" "]
        direction LR
        entity_externalassetowner_0("ExternalAssetOwner")
        entity_externalassetownertransfer_1("ExternalAssetOwnerTransfer")
        entity_externalassetownertransferloanmapping_2("ExternalAssetOwnerTransferLoanMapping")
    end
    class entity_externalassetowner_0 entity
    class entity_externalassetownertransfer_1 entity
    class entity_externalassetownertransferloanmapping_2 entity
    class investor_0 boundedContext
    style aggRepoGroup0 fill:transparent,stroke:transparent,stroke-width:0
    style aggRepoGroup1 fill:transparent,stroke:transparent,stroke-width:0
    style entitiesGroup fill:transparent,stroke:transparent,stroke-width:0

Aggregates (2)

  • External Asset Owner: This aggregate represents the external investors or entities that purchase loan assets. It manages the identity and details of these third-party owners. The aggregate serves as the parent entity for tracking which assets are currently owned by which investor. It ensures that unique external identifiers are maintained for integration purposes. It is central to the asset externalization workflow.
  • Asset Transfer: The Asset Transfer aggregate manages the lifecycle of transferring loan ownership to and from external investors. It records the details of sales, buybacks, and cancellations, including settlement dates and purchase prices. The aggregate links specific loans to transfer events and tracks the status of these transactions. It also maintains mappings to accounting journal entries to ensure financial traceability. It enforces business rules regarding when a loan can be transferred.

Repositories (2)

  • ExternalAssetOwnerRepository: This repository manages the persistence of external asset owner entities. It allows for the retrieval of owner details by their internal or external identifiers. It supports the management of investor profiles.
  • ExternalAssetOwnerTransferRepository: This repository persists the records of asset transfer transactions. It supports querying for active transfers, transfer history, and transfers associated with specific loans. It is key to tracking asset ownership changes.

Entities (3)

  • ExternalAssetOwner: Represents an external investor entity in the system. It stores the owner's name and unique external identifier. It acts as the counterparty in asset transfer transactions.
  • ExternalAssetOwnerTransfer: Records a specific transaction transferring ownership of assets. It includes the transfer status, settlement date, and purchase price. It links the investor to the transfer event.
  • ExternalAssetOwnerTransferLoanMapping: Maps a specific loan account to an asset transfer record. It establishes the link between the portfolio loan and the investor transaction. It is used to identify which loans are currently externalized.

Credit Bureau bounded context

The Credit Bureau Bounded Context facilitates the integration with external credit reporting agencies. It manages the configuration of credit bureau connections and the mapping of loan products to credit check requirements. This context handles the retrieval, storage, and viewing of credit reports for clients. It ensures that credit checks are performed according to configured rules during the loan origination process. It acts as a bridge between the core banking system and external credit data providers.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
flowchart TB

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    credit_bureau_0{{"Credit Bureau"}}
    credit_bureau_0 --> agg_credit_bureau_configuration_0
    credit_bureau_0 --> agg_credit_report_1
    agg_credit_bureau_configuration_0 -.-> entity_creditbureau_0
    agg_credit_bureau_configuration_0 -.-> entity_creditbureauloanproductmapping_1
    agg_credit_report_1 -.-> entity_creditreport_2
    subgraph aggRepoGroup0[" "]
        direction LR
        agg_credit_bureau_configuration_0(["Credit Bureau Configuration"])
        repo_creditbureauconfigurationrepository_0(("CreditBureauConfigurationRepository"))
        agg_credit_bureau_configuration_0 -.- repo_creditbureauconfigurationrepository_0
    end
    class agg_credit_bureau_configuration_0 aggregate
    class repo_creditbureauconfigurationrepository_0 repository
    subgraph aggRepoGroup1[" "]
        direction LR
        agg_credit_report_1(["Credit Report"])
        repo_creditreportrepository_1(("CreditReportRepository"))
        agg_credit_report_1 -.- repo_creditreportrepository_1
    end
    class agg_credit_report_1 aggregate
    class repo_creditreportrepository_1 repository
    subgraph entitiesGroup[" "]
        direction LR
        entity_creditbureau_0("CreditBureau")
        entity_creditbureauloanproductmapping_1("CreditBureauLoanProductMapping")
        entity_creditreport_2("CreditReport")
    end
    class entity_creditbureau_0 entity
    class entity_creditbureauloanproductmapping_1 entity
    class entity_creditreport_2 entity
    class credit_bureau_0 boundedContext
    style aggRepoGroup0 fill:transparent,stroke:transparent,stroke-width:0
    style aggRepoGroup1 fill:transparent,stroke:transparent,stroke-width:0
    style entitiesGroup fill:transparent,stroke:transparent,stroke-width:0

Aggregates (2)

  • Credit Bureau Configuration: This aggregate manages the setup and configuration of external credit bureaus. It stores connection details, product mappings, and organization-specific settings. The aggregate defines which loan products require credit checks and how those checks should be performed. It allows the institution to configure multiple credit bureaus and link them to different products. It ensures that the system knows how to communicate with external credit services.
  • Credit Report: The Credit Report aggregate manages the credit data retrieved from external bureaus. It stores the raw report content, often as binary data, linked to a specific client and bureau. The aggregate allows for the persistence and retrieval of historical credit reports for review. It ensures that credit information is associated with the correct national ID or client identifier. It serves as the local cache of external credit information.

Repositories (2)

  • CreditBureauConfigurationRepository: This repository manages the persistence of credit bureau configuration settings. It allows for retrieving configuration parameters by bureau ID or key. It supports the dynamic setup of credit bureau integrations.
  • CreditReportRepository: This repository handles the storage and retrieval of credit report data. It supports fetching reports based on client identifiers and bureau IDs. It allows the system to access previously fetched credit reports.

Entities (3)

  • CreditBureau: Represents a credit bureau agency definition. It stores the bureau's name, country, and implementation class key. It serves as the root definition for a credit provider.
  • CreditBureauLoanProductMapping: Configures the relationship between a loan product and a credit bureau. It defines rules such as whether a credit check is mandatory. It links the product configuration to the bureau definition.
  • CreditReport: Stores the actual credit report data received from a bureau. It contains the binary report file and associated metadata like the national ID. It represents a snapshot of a client's credit history.

Organization & Administration bounded context

This bounded context manages the operational structure and security of the institution. It defines the hierarchy of offices, the staff members, and the user authentication system. It also handles cash management through the teller module. The context provides the foundational configuration for currency, working days, and holidays. It ensures that the system reflects the physical and logical organization of the business.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
flowchart TB

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    organization_administration_0{{"Organization & Administration"}}
    organization_administration_0 --> agg_teller_management_0
    organization_administration_0 --> agg_user_administration_1
    agg_teller_management_0 -.-> entity_teller_0
    agg_teller_management_0 -.-> entity_cashier_1
    agg_teller_management_0 -.-> entity_cashiertransaction_2
    agg_user_administration_1 -.-> entity_appuser_3
    agg_user_administration_1 -.-> entity_role_4
    agg_user_administration_1 -.-> entity_permission_5
    subgraph aggRepoGroup0[" "]
        direction LR
        agg_teller_management_0(["Teller Management"])
        repo_tellerrepository_0(("TellerRepository"))
        agg_teller_management_0 -.- repo_tellerrepository_0
    end
    class agg_teller_management_0 aggregate
    class repo_tellerrepository_0 repository
    subgraph aggRepoGroup1[" "]
        direction LR
        agg_user_administration_1(["User Administration"])
        repo_appuserrepository_1(("AppUserRepository"))
        agg_user_administration_1 -.- repo_appuserrepository_1
    end
    class agg_user_administration_1 aggregate
    class repo_appuserrepository_1 repository
    subgraph entitiesGroup[" "]
        direction LR
        entity_teller_0("Teller")
        entity_cashier_1("Cashier")
        entity_cashiertransaction_2("CashierTransaction")
        entity_appuser_3("AppUser")
        entity_role_4("Role")
        entity_permission_5("Permission")
    end
    class entity_teller_0 entity
    class entity_cashier_1 entity
    class entity_cashiertransaction_2 entity
    class entity_appuser_3 entity
    class entity_role_4 entity
    class entity_permission_5 entity
    class organization_administration_0 boundedContext
    style aggRepoGroup0 fill:transparent,stroke:transparent,stroke-width:0
    style aggRepoGroup1 fill:transparent,stroke:transparent,stroke-width:0
    style entitiesGroup fill:transparent,stroke:transparent,stroke-width:0

Aggregates (2)

  • Teller Management: The Teller Management aggregate controls the cash handling operations within branches. It manages the assignment of cashiers to tellers and tracks cash allocations and settlements. It enforces limits and validates transaction dates to ensure cash accountability. The aggregate serves as the bridge between physical cash movements and digital transaction records. It ensures that cashiers have sufficient funds for disbursements.
  • User Administration: The User Administration aggregate manages system access and security. It handles the creation of application users, role assignments, and permission configurations. It enforces password policies and authentication rules. The aggregate ensures that only authorized personnel can access specific data and functions. It serves as the gatekeeper for the application's security model.

Repositories (2)

  • TellerRepository: This repository manages the persistence of Teller definitions. It allows for the retrieval of tellers associated with specific offices. It supports the configuration of cash management points.
  • AppUserRepository: This repository handles the storage and retrieval of application user accounts. It supports looking up users by username or office. It is critical for the authentication and authorization processes.

Entities (6)

  • Teller: Represents a physical or logical point of service for cash transactions. It is associated with a specific office and tracks its operational status. It serves as the parent entity for cashier assignments.
  • Cashier: Represents a staff member assigned to a teller for a specific period. It tracks the duration of the assignment and the type of operations allowed. It links the human resource to the cash management function.
  • CashierTransaction: Records specific cash movements (allocation, settlement) involving a cashier. It tracks the amount and type of cash transfer. It provides an audit trail for cash handling activities.
  • AppUser: Represents a system user who can log in and perform actions. It links to staff records and holds authentication credentials. It is the central entity for identity management.
  • Role: Defines a set of permissions that can be assigned to a user. It groups access rights into logical job functions. It simplifies the management of user privileges.
  • Permission: Represents a granular access right to a specific resource or action. It defines what operations are allowed within the system. It is the fundamental building block of the authorization model.

Shared Services bounded context

This bounded context provides cross-cutting functionality used by multiple other contexts. It includes the notification system for user alerts, the template engine for document generation, and the tax management module. It ensures that common infrastructure needs are met in a standardized way. This context decouples auxiliary services from the core business domains.

%%{init: {'flowchart': {'diagramPadding': 30}}}%%
flowchart TB

    classDef boundedContext fill:#e8f5e8,stroke:#00684A,stroke-width:3px,color:#001e2b
    classDef aggregate fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef entity fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#001e2b
    classDef repository fill:#fff5f0,stroke:#d2691e,stroke-width:1.5px,color:#001e2b
    classDef service fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef process fill:#ffffff,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef dependency fill:#f8f9fa,stroke:#6c757d,stroke-width:1px,color:#001e2b
    classDef rootDependency fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#001e2b
    classDef internalComponent fill:#e8f5e8,stroke:#00684A,stroke-width:2px,color:#001e2b
    classDef externalComponent fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#001e2b
    shared_services_0{{"Shared Services"}}
    shared_services_0 --> agg_notification_0
    shared_services_0 --> agg_tax_management_1
    agg_notification_0 -.-> entity_notification_0
    agg_notification_0 -.-> entity_notificationmapper_1
    agg_tax_management_1 -.-> entity_taxgroup_2
    agg_tax_management_1 -.-> entity_taxcomponent_3
    subgraph aggRepoGroup0[" "]
        direction LR
        agg_notification_0(["Notification"])
        repo_notificationrepository_0(("NotificationRepository"))
        agg_notification_0 -.- repo_notificationrepository_0
    end
    class agg_notification_0 aggregate
    class repo_notificationrepository_0 repository
    subgraph aggRepoGroup1[" "]
        direction LR
        agg_tax_management_1(["Tax Management"])
        repo_taxgrouprepository_1(("TaxGroupRepository"))
        agg_tax_management_1 -.- repo_taxgrouprepository_1
    end
    class agg_tax_management_1 aggregate
    class repo_taxgrouprepository_1 repository
    subgraph entitiesGroup[" "]
        direction LR
        entity_notification_0("Notification")
        entity_notificationmapper_1("NotificationMapper")
        entity_taxgroup_2("TaxGroup")
        entity_taxcomponent_3("TaxComponent")
    end
    class entity_notification_0 entity
    class entity_notificationmapper_1 entity
    class entity_taxgroup_2 entity
    class entity_taxcomponent_3 entity
    class shared_services_0 boundedContext
    style aggRepoGroup0 fill:transparent,stroke:transparent,stroke-width:0
    style aggRepoGroup1 fill:transparent,stroke:transparent,stroke-width:0
    style entitiesGroup fill:transparent,stroke:transparent,stroke-width:0

Aggregates (2)

  • Notification: The Notification aggregate manages the generation and tracking of system alerts. It captures events from other domains and creates notification records for users. It tracks the read status of notifications to ensure users are aware of important activities. The aggregate serves as the internal messaging backbone for user awareness. It supports different types of notifications based on business events.
  • Tax Management: The Tax Management aggregate defines the configuration for tax calculations. It groups tax components into tax groups to allow for complex tax structures. It manages the validity periods and rates for different taxes. The aggregate ensures that tax rules are applied consistently across different financial products. It serves as the central definition for tax logic.

Repositories (2)

  • NotificationRepository: This repository manages the persistence of notification events. It allows for the retrieval of notifications for specific users. It supports the tracking of unread notifications.
  • TaxGroupRepository: This repository handles the persistence of Tax Group definitions. It allows for the retrieval of tax configurations used by products. It ensures that tax mappings are stored correctly.

Entities (4)

  • Notification: Represents a specific alert or message generated by the system. It contains the content, actor, and target of the event. It serves as the persistent record of the notification.
  • NotificationMapper: Maps a notification to a specific user recipient. It tracks whether the user has read the notification. It allows a single notification event to be distributed to multiple users.
  • TaxGroup: Represents a collection of tax components applied together. It allows for the aggregation of multiple taxes into a single rule. It manages the lifecycle of tax associations.
  • TaxComponent: Defines a specific tax type and its rate. It includes validity dates to handle rate changes over time. It is the fundamental unit of tax calculation.

Code Quality Summary JSON

This section provides code quality metrics to help identify complex, hard-to-maintain code. Metrics are estimated by AI and should be verified manually.

Overall Statistics

Metric Value Description
Total Functions/Methods Analyzed 18149 Total number of functions/methods analyzed across the codebase
Average Complexity 1.66 Average cyclomatic complexity (1-10: simple, 11-20: moderate, >20: complex)
High Complexity Functions/Methods 203 Functions/methods with complexity > 10 (candidate for refactoring)
Very High Complexity 58 Functions/methods with complexity > 20 (high priority for refactoring)
Average Function/Method Length 7.96 LOC Average lines of code per function/method
Long Functions/Methods 400 Functions/methods with > 50 lines of code

Top 10 Most Complex Functions/Methods

These functions/methods have the highest cyclomatic complexity and should be prioritized for refactoring.

Function/Method Name File Path Complexity Lines Code Smells
ajax window::ajax
jquery-1.7.min.js fineract-provider/src/main/resources/static/legacy-docs/jquery-1.7.min.js
80 1
  • LONG METHOD
  • COMPLEX CONDITIONAL
  • LONG PARAMETER LIST
validateForUpdate org.apache.fineract.portfolio.loanproduct.serialization.LoanProductDataValidator::validateForUpdate
LoanProductDataValidator.java fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java
75 350
  • LONG METHOD
  • COMPLEX CONDITIONAL
  • DEEP NESTING
modifyApplication org.apache.fineract.portfolio.loanaccount.service.LoanApplicationWritePlatformServiceJpaRepositoryImpl::modifyApplication
LoanApplicationWritePlatformServiceJpaRepositoryImpl.java fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
68 265
  • LONG METHOD
  • COMPLEX CONDITIONAL
  • DEEP NESTING
  • FEATURE ENVY
update org.apache.fineract.portfolio.loanproduct.domain.LoanProduct::update
LoanProduct.java fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java
68 315
  • LONG METHOD
  • COMPLEX CONDITIONAL
  • FEATURE ENVY
validateForCreate org.apache.fineract.portfolio.loanproduct.serialization.LoanProductDataValidator::validateForCreate
LoanProductDataValidator.java fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java
68 325
  • LONG METHOD
  • COMPLEX CONDITIONAL
  • DEEP NESTING
validateForModify org.apache.fineract.portfolio.loanaccount.serialization.LoanApplicationCommandFromApiJsonHelper::validateForModify
LoanApplicationCommandFromApiJsonHelper.java fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java
65 285
  • LONG METHOD
  • COMPLEX CONDITIONAL
  • DUPLICATE CODE
  • DEEP NESTING
testCreateShareAccountWithCharges org.apache.fineract.integrationtests.common.shares.ShareAccountIntegrationTests::testCreateShareAccountWithCharges
ShareAccountIntegrationTests.java integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/ShareAccountIntegrationTests.java
53 385
  • LONG METHOD
  • COMPLEX CONDITIONAL
  • DUPLICATE CODE
  • MAGIC NUMBERS
  • DEEP NESTING
validateForCreate org.apache.fineract.portfolio.loanaccount.serialization.LoanApplicationCommandFromApiJsonHelper::validateForCreate
LoanApplicationCommandFromApiJsonHelper.java fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java
52 235
  • LONG METHOD
  • COMPLEX CONDITIONAL
  • DEEP NESTING
loanApplicationModification org.apache.fineract.portfolio.loanaccount.domain.Loan::loanApplicationModification
Loan.java fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
51 155
  • LONG METHOD
  • COMPLEX CONDITIONAL
  • LONG PARAMETER LIST
init window::init
jquery-1.7.min.js fineract-provider/src/main/resources/static/legacy-docs/jquery-1.7.min.js
50 1
  • COMPLEX CONDITIONAL
  • LONG METHOD

Most Common Code Smells

Frequently occurring code quality issues across the codebase.

Code Smell Type Occurrences Affected Files Recommendation
DATA CLASS 653 653 Review and refactor as part of modernization effort
LONG PARAMETER LIST 337 337 Review and refactor as part of modernization effort
LONG METHOD 244 244 Review and refactor as part of modernization effort
COMPLEX CONDITIONAL 219 219 Review and refactor as part of modernization effort
DUPLICATE CODE 172 172 Review and refactor as part of modernization effort
OTHER 153 147 Review and refactor as part of modernization effort
MAGIC NUMBERS 137 137 Review and refactor as part of modernization effort
TOO MANY METHODS 124 124 Review and refactor as part of modernization effort
LARGE FILE 110 110 Review and refactor as part of modernization effort
GOD CLASS 43 43 Review and refactor as part of modernization effort
INVALID 42 42 Review and refactor as part of modernization effort
DEEP NESTING 32 32 Review and refactor as part of modernization effort
FEATURE ENVY 28 24 Review and refactor as part of modernization effort
DEAD CODE 9 9 Review and refactor as part of modernization effort

Scheduled Jobs and Batch Processes JSON

Total Jobs 4
Trigger Types 2
Script Files 4

Trigger Types Found: event-driven, manual

Job Name Source File Trigger Purpose Input Resources Output Resources
Database Initialization 01-init.sh event-driven Provisions the initial database user, creates required databases, and assigns privileges during the application or container startup phase.
  • Environment Variable: POSTGRES_PASSWORD
  • Environment Variable: POSTGRES_USER
  • Environment Variable: POSTGRES_DB
  • Environment Variable: FINERACT_DB_USER
  • Environment Variable: FINERACT_DB_PASS
  • Environment Variable: FINERACT_TENANTS_DB_NAME
  • Environment Variable: FINERACT_TENANT_DEFAULT_DB_NAME
  • PostgreSQL User
  • PostgreSQL Database (Tenants)
  • PostgreSQL Database (Default Tenant)
Dependencies: PostgreSQL Server
Fineract Kubernetes Deployment kubectl-startup.sh manual Orchestrates the full deployment of the Fineract ecosystem (Database, Backend, UI) onto a Kubernetes cluster by applying YAML configurations and waiting for pod readiness.
  • fineractmysql-configmap.yml
  • fineractmysql-deployment.yml
  • fineract-server-deployment.yml
  • fineract-mifoscommunity-deployment.yml
  • /dev/urandom
  • Kubernetes Secret: fineract-tenants-db-secret
  • Kubernetes ConfigMap
  • Kubernetes Deployment: fineractmysql
  • Kubernetes Deployment: fineract-server
  • Kubernetes Deployment: fineract-mifoscommunity
Dependencies: kubectl, Kubernetes Cluster
Fineract Kubernetes Teardown kubectl-shutdown.sh manual To manually de-provision and delete the Apache Fineract application stack, including its database, server, and community interface deployments, along with associated secrets and configurations from the Kubernetes cluster.
  • fineractmysql-configmap.yml
  • fineractmysql-deployment.yml
  • fineract-server-deployment.yml
  • fineract-mifoscommunity-deployment.yml
None
Dependencies: kubectl, Kubernetes Cluster
Gradle Wrapper Execution gradlew.bat manual Executes the Gradle build system using the project-specific wrapper configuration. It bootstraps the download of the correct Gradle distribution (if missing) and runs the requested build tasks.
  • gradle/wrapper/gradle-wrapper.jar
  • Environment Variables (JAVA_HOME, JAVA_OPTS, GRADLE_OPTS)
  • Build Artifacts (typically in build/ directory)
  • Console Output
Dependencies: Java Runtime Environment (java.exe)

Module Coupling Analysis JSON

Total Modules 9
Coupling Relationships 8
Highest Coupling 17189
Module Depth 2

Interpretation: High reference counts indicate tightly coupled modules (candidates for single services). Low reference counts indicate loosely coupled modules (candidates for easy separation).

From Module To Module Reference Count Coupling Level
fineract-provider/src org.apache 17189 Very High
integration-tests/src org.apache 2323 Low
fineract-core/src org.apache 1639 Low
fineract-loan/src org.apache 673 Low
fineract-investor/src org.apache 347 Low
fineract-client/src org.apache 134 Low
custom/acme org.apache 41 Low
custom/acme com.acme 5 Low

Coupling Level Guide:

UI Technology Deep-Dive Analysis JSON

JSP Files: 1 | Total Scriptlets: 0 | Avg Scriptlets/File: 0.0 | High Debt Files: 0

No UI frameworks detected in configuration files.

Top JSP Files by Scriptlet Count (Technical Debt Hotspots)

File Path Scriptlets Expressions Declarations Total Blocks Debt Level
image-text-wrong-content.jsp integration-tests/src/test/resources/image-text-wrong-content.jsp
0 0 0 0 Low

UI Modernization Insights

Database Stored Procedures & Triggers JSON

Stored Procedures 0
Triggers 0
Low Complexity 0
Medium Complexity 0
High Complexity 0

No stored procedures or triggers found.

Database Interactions JSON

Path Mechanism Description Code Example
fineract-db/multi-tenant-demo-backups/ceda/README.md DDL The text describes a database initialization package containing DDL scripts for schema creation and DML for reference data insertion. It specifically targets the customization of code tables and the addition of new tables for client and loan data.
n/a
fineract-db/old-schema-files/0001a-mifosplatform-core-ddl-latest.sql DDL The file is a raw SQL script used to define the database schema for a core banking application. It does not use an ORM or application code directly but is likely executed by a database migration tool or during initial system setup. It defines the structure for a relational database (MySQL/MariaDB) including tables, columns, data types, and foreign key constraints.
CREATE TABLE `m_currency` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `code` varchar(3) NOT NULL,
  `decimal_places` SMALLINT NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
fineract-db/multi-tenant-demo-backups/latam-demo/README.md DDL The documentation describes the initialization script for a demo database, including the Data Definition Language (DDL) for the schema and Data Manipulation Language (DML) for seeding reference data.
DDL of latest schema
- Minimum reference data required for deployment of platform
fineract-db/multi-tenant-demo-backups/latam-demo/bk_latam.sql DDL The file is a MySQL database dump that primarily uses Data Definition Language (DDL) to create the database schema for the Fineract/Mifos application. It defines tables, primary keys, and foreign key constraints. It also uses Data Manipulation Language (DML) to insert initial seed data into various tables.
DROP TABLE IF EXISTS `acc_gl_account`;
CREATE TABLE `acc_gl_account` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
fineract-db/multi-tenant-demo-backups/gk-maarg/0001b-gk-datatables.sql DDL The code interacts with the database by defining structural elements using SQL DDL. It drops an existing table if present and creates a new one with specific column definitions and constraints.
CREATE TABLE `risk_analysis` (
  `client_id` BIGINT NOT NULL,
  `proposed_loan_amount` decimal(19,6) DEFAULT NULL,
  ...
  CONSTRAINT `FK_risk_analysis_1` FOREIGN KEY (`client_id`) REFERENCES `m_client` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
fineract-provider/src/test/resources/features/infrastructure/infrastructure.core.feature DDL The file contains acceptance tests for the database schema migration process, verifying that Liquibase and Flyway correctly manage schema upgrades for tenant and default databases based on instance configuration.
Given Liquibase is enabled with a default tenant
    Given Liquibase runs the very first time for the tenant store
    Given A previously Flyway migrated tenant store database on the latest version
    When The database migration process is executed
    Then The tenant store and the default tenant gets synced and then upgraded
fineract-db/docker/01-databases.sql DDL The file uses raw SQL DDL and DCL commands to provision the database server. It creates specific logical databases required by the application architecture and configures user access rights.
CREATE DATABASE IF NOT EXISTS `fineract_tenants`;
CREATE DATABASE IF NOT EXISTS `fineract_default`;
GRANT ALL ON *.* TO 'root'@'%';
fineract-db/multi-tenant-demo-backups/bare-bones-demo/README.md DDL The documentation describes the SQL DDL and DML scripts used to initialize the database schema and populate mandatory reference data.
Its mandatory to have one selected currency so we default to US Dollar
fineract-db/multi-tenant-demo-backups/latam-demo/datatables-on-latam-demo.sql DDL The code integrates with the database primarily through SQL scripts that execute DDL commands to define new schema objects and DML commands to seed reference data. It directly interacts with the database engine to create tables and establish foreign key relationships with existing core tables (`m_client`, `m_loan`). The script also performs write operations to insert configuration data into specific tenant schemas.
CREATE TABLE `latam_extra_client_details` (
  `client_id` BIGINT NOT NULL,
  `Business Description` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`client_id`),
  CONSTRAINT `FK_latam_extra_client_details` FOREIGN KEY (`client_id`) REFERENCES `m_client` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
fineract-provider/src/main/resources/sql/migrations/sample_data/tn03_interop_sample_data.sql DML The file is a raw SQL script containing Data Manipulation Language (DML) statements used to seed the database with initial test data. It utilizes MySQL-specific user variables to maintain referential integrity between inserted records without needing hardcoded IDs.
INSERT INTO interop_identifier (id, account_id, type, a_value, sub_value_or_type, created_by, created_on, modified_by, modified_on)
VALUES (NULL, @saving_acc_id, 'IBAN', @IBAN, NULL, 'operator', CURDATE(), 'operator',
        CURDATE());
fineract-db/old-schema-files/0003-mifosx-permissions-and-authorisation-utf8.sql DML The file interacts with the database purely through SQL Data Manipulation Language (DML) scripts. It performs extensive data seeding operations using `INSERT` statements to populate permission, role, and user tables. It also utilizes `INSERT ... SELECT` patterns to dynamically generate data based on the contents of other tables (`x_registered_table`) and performs `UPDATE` operations to set default configuration flags.
INSERT INTO `m_permission`
(`grouping`,`code`,`entity_name`,`action_name`,`can_maker_checker`) VALUES
('special','ALL_FUNCTIONS',NULL,NULL,0),
('special','ALL_FUNCTIONS_READ',NULL,NULL,0),
('special', 'CHECKER_SUPER_USER', NULL, NULL, '0');
fineract-db/old-schema-files/0002-mifosx-base-reference-data-utf8.sql DML The file consists entirely of SQL DML statements used to insert initial seed data into the database. It interacts directly with the database tables to populate rows for configurations, enums, currencies, and organizational structures using standard INSERT syntax and INSERT-SELECT patterns.
INSERT INTO `c_configuration`
(`name`, `enabled`)
VALUES
('maker-checker', 0);
fineract-db/old-schema-files/0004-mifosx-core-reports-utf8.sql DML The file uses Data Manipulation Language (DML) to populate configuration tables that drive a dynamic reporting engine. It uses TRUNCATE to clear tables and INSERT to add report definitions. Notably, the 'stretchy_report' table stores raw SQL SELECT statements as string data within the 'report_sql' column; these stored queries perform complex joins across the master data tables (m_office, m_client, m_loan) when executed by the application layer.
truncate table stretchy_report;
INSERT INTO `stretchy_report` VALUES (1,'Client Listing','Table',NULL,'Client','select ... from m_office ...');
insert into m_permission(grouping, `code`, entity_name, action_name, can_maker_checker)
select 'report', concat('READ_', r.report_name), r.report_name, 'READ', false
from stretchy_report r;
org.apache.fineract.infrastructure.security.service DRIVER The class interacts directly with database driver utilities (specifically PostgreSQL's core Utils) to perform SQL escaping. It also uses the DatabaseTypeResolver to determine which logic to apply.
Utils.escapeLiteral(null, literal, true).toString()
README.md JDBC The application integrates with relational databases (MariaDB, MySQL, PostgreSQL) using JDBC drivers and manages connections via the HikariCP connection pool. It supports multi-tenancy by connecting to specific databases (e.g., 'fineract_tenants') configured via environment variables or application properties. Database schemas are initialized and managed using Gradle tasks and Liquibase migrations, with strict enforcement of UTC timezones at the JDBC driver level.
export FINERACT_HIKARI_PASSWORD=verysecret
./gradlew createDB -PdbName=fineract_tenants
java -Dloader.path=. -jar fineract-provider/build/libs/fineract-provider.jar
fineract-provider/src/main/resources/application.properties JDBC The file configures the primary JDBC connection pool using HikariCP. It defines the database driver, connection URL, credentials, and pool sizing properties (min/max connections, timeouts). It also includes specific configuration for a multi-tenant architecture, defining parameters for a default tenant database and separate read-only connection details. Additionally, it enables Liquibase for automated database schema management and migrations.
spring.datasource.hikari.driverClassName=${FINERACT_HIKARI_DRIVER_SOURCE_CLASS_NAME:org.mariadb.jdbc.Driver}
spring.datasource.hikari.jdbcUrl=${FINERACT_HIKARI_JDBC_URL:jdbc:mariadb://localhost:3306/fineract_tenants}
spring.datasource.hikari.username=${FINERACT_HIKARI_USERNAME:root}
spring.datasource.hikari.password=${FINERACT_HIKARI_PASSWORD:mysql}
spring.datasource.hikari.minimumIdle=${FINERACT_HIKARI_MINIMUM_IDLE:3}
fineract-provider/src/test/resources/application-test.properties JDBC The file configures the primary application datasource using Spring Boot's HikariCP integration. It specifies the MariaDB JDBC driver, connection credentials, and pooling parameters (minimum idle connections, maximum pool size). It also enables specific driver-level performance optimizations including server-side prepared statements and batched statement rewriting.
spring.datasource.hikari.driverClassName=org.mariadb.jdbc.Driver
spring.datasource.hikari.jdbcUrl=jdbc:mariadb://localhost:3306/fineract_tenants
spring.datasource.hikari.username=root
spring.datasource.hikari.password=[REDACTED]
spring.datasource.hikari.minimumIdle=3
spring.datasource.hikari.maximumPoolSize=10
docker-compose-postgresql-kafka.yml JDBC The file configures the application services to connect to a PostgreSQL container using JDBC. It defines the connection string, credentials, and extensive HikariCP connection pool settings (such as pool size, timeouts, and auto-commit behavior) through environment variables passed to the `fineract-manager` and `fineract-worker` containers.
      - FINERACT_HIKARI_DRIVER_SOURCE_CLASS_NAME=org.postgresql.Driver
      - FINERACT_HIKARI_JDBC_URL=jdbc:postgresql://fineractpostgresql:5432/fineract_tenants
      - FINERACT_HIKARI_USERNAME=postgres
      - FINERACT_HIKARI_PASSWORD=REDACTED
      - FINERACT_HIKARI_AUTO_COMMIT=true
custom/docker/docker-compose.yml JDBC The file configures the application's database connection via environment variables that are passed to the Fineract server container. It specifies the MariaDB JDBC driver, connection URL, credentials, and specific HikariCP pool settings (like pool size, timeouts, and cache properties) to establish connectivity with the `fineractmysql` service.
environment:
  - FINERACT_HIKARI_DRIVER_SOURCE_CLASS_NAME=org.mariadb.jdbc.Driver
  - FINERACT_HIKARI_JDBC_URL=jdbc:mariadb://fineractmysql:3306/fineract_tenants
  - FINERACT_HIKARI_USERNAME=root
  - FINERACT_HIKARI_PASSWORD=[REDACTED]
docker-compose.yml JDBC The file configures the database infrastructure by defining a MariaDB service and passing JDBC connection parameters to the application service via environment variables. It sets up the Hikari connection pool settings, including the driver class, JDBC URL, and credentials, allowing the Fineract server to communicate with the database container.
environment:
  - FINERACT_HIKARI_DRIVER_SOURCE_CLASS_NAME=org.mariadb.jdbc.Driver
  - FINERACT_HIKARI_JDBC_URL=jdbc:mariadb://fineractmysql:3306/fineract_tenants
  - FINERACT_HIKARI_USERNAME=root
  - FINERACT_HIKARI_PASSWORD=[REDACTED]
docker-compose-postgresql.yml JDBC The file configures the database infrastructure and defines the JDBC connection parameters for the application. It spins up a PostgreSQL container and injects JDBC connection strings, credentials, and HikariCP pool settings into the application container via environment variables.
environment:
  - FINERACT_HIKARI_DRIVER_SOURCE_CLASS_NAME=org.postgresql.Driver
  - FINERACT_HIKARI_JDBC_URL=jdbc:postgresql://fineractpostgresql:5432/fineract_tenants
  - FINERACT_HIKARI_USERNAME=postgres
  - FINERACT_HIKARI_PASSWORD=[REDACTED]
kubernetes/fineract-server-deployment.yml JDBC The file configures the database integration by injecting JDBC environment variables into the container. It specifies the MariaDB JDBC driver and connection URL, linking the application to the `fineract_tenants` database hosted on the `fineractmysql` service.
        - name: FINERACT_HIKARI_DRIVER_CLASS_NAME
          value: org.mariadb.jdbc.Driver
        - name: FINERACT_HIKARI_JDBC_URL
          value: jdbc:mariadb://fineractmysql:3306/fineract_tenants
docker-compose-postgresql-kafka-msk.yml JDBC The file configures the Fineract application containers to connect to the PostgreSQL database container using JDBC. It passes connection details, credentials, and HikariCP connection pool configuration settings through environment variables.
      - FINERACT_HIKARI_DRIVER_SOURCE_CLASS_NAME=org.postgresql.Driver
      - FINERACT_HIKARI_JDBC_URL=jdbc:postgresql://fineractpostgresql:5432/fineract_tenants
      - FINERACT_HIKARI_USERNAME=postgres
      - FINERACT_HIKARI_PASSWORD=[REDACTED]
      - FINERACT_HIKARI_AUTO_COMMIT=true
docker-compose-postgresql-activemq.yml JDBC The code configures the application to connect to a PostgreSQL database container named 'fineractpostgresql'. It uses environment variables to inject JDBC connection details, including the driver class, URL, credentials, and HikariCP connection pool settings, into the Fineract application runtime.
environment:
  - FINERACT_HIKARI_DRIVER_SOURCE_CLASS_NAME=org.postgresql.Driver
  - FINERACT_HIKARI_JDBC_URL=jdbc:postgresql://fineractpostgresql:5432/fineract_tenants
  - FINERACT_HIKARI_USERNAME=postgres
  - FINERACT_HIKARI_PASSWORD=[REDACTED]
com.acme.fineract.loan.job JDBC The class interacts with the database indirectly through the Spring Batch 'JobRepository'. This component is responsible for persisting the state of the batch job (JobInstance, JobExecution, StepExecution, etc.) to the underlying database tables (typically BATCH_JOB_INSTANCE, BATCH_JOB_EXECUTION, etc.).
new JobBuilder(AcmeJobName.ACME_NOOP_JOB.name(), jobRepository)
org.apache.fineract JDBC The application configures a DataSource for an external database and initializes Liquibase for schema migrations. The Javadoc explicitly mentions the use of a 'normal' external database configured via `DataSourceProperties`.
@Import({ FineractWebApplicationConfiguration.class, FineractLiquibaseOnlyApplicationConfiguration.class })
org.apache.fineract.accounting.closure.service JDBC The service uses Spring's JdbcTemplate to execute raw SQL SELECT queries. It manually constructs SQL strings that join the main closure table with user and office tables to populate data transfer objects.
this.jdbcTemplate.query(sql, rm, finalObjectArray);
org.apache.fineract.accounting.financialactivityaccount.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL SELECT queries. It joins the 'acc_gl_financial_activity_account' table with 'acc_gl_account' to retrieve detailed information about financial activity mappings.
this.jdbcTemplate.query(sql, financialActivityAccountMapper, new Object[] {});
org.apache.fineract.accounting.glaccount.jobs.updatetrialbalancedetails JDBC The class uses Spring's JdbcTemplate for complex aggregation queries and bulk inserts, and a Spring Data repository wrapper for entity updates.
final StringBuilder sqlBuilder = new StringBuilder(600);
sqlBuilder.append("Insert Into m_trial_balance(office_id, account_id, Amount, entry_date, created_date,closing_balance) ")
        .append("Select je.office_id, je.account_id, SUM(CASE WHEN je.type_enum=1 THEN (-1) * je.amount ELSE je.amount END) ")
        .append("as Amount, Date(je.entry_date) as Entry_Date, je.transaction_date as Created_Date,sum(je.amount) as closing_balance ")
        .append("from acc_gl_journal_entry je WHERE je.transaction_date = ? ")
        .append("group by je.account_id, je.office_id, je.transaction_date, Date(je.entry_date)");
final int result = jdbcTemplate.update(sqlBuilder.toString(), tbGap);
org.apache.fineract.accounting.glaccount.service.GLAccountReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It manually maps ResultSets to objects using inner class RowMappers. It constructs dynamic SQL strings to handle optional filtering criteria.
this.jdbcTemplate.query(sql, rm, finalObjectArray);
org.apache.fineract.accounting.journalentry.service.JournalEntryReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It dynamically builds SQL strings based on filter criteria and maps the results to Java objects using a custom RowMapper.
final String sql = "select " + rm.schema() + " where journalEntry.id = ?";
return this.jdbcTemplate.queryForObject(sql, rm, glJournalEntryId);
org.apache.fineract.accounting.journalentry.service.JournalEntryRunningBalanceUpdateServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries and batch updates. It performs complex joins to calculate running balances and updates the journal entry table directly.
this.jdbcTemplate.batchUpdate(sql, params);
org.apache.fineract.accounting.producttoaccountmapping.service.ProductToGLAccountMappingReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute SQL SELECT queries. It manually constructs SQL strings involving joins between `acc_product_mapping`, `m_charge`, `acc_gl_account`, and `m_payment_type`. It uses a custom RowMapper to transform the ResultSet into a Map.
final String sql = "select " + rm.schema() + " and product_id = ? and payment_type is null and mapping.charge_id is null";
final List<Map<String, Object>> listOfProductToGLAccountMaps = this.jdbcTemplate.query(sql, rm, new Object[] { PortfolioProductType.LOAN.getValue(), loanProductId });
org.apache.fineract.accounting.provisioning.service.ProvisioningEntriesReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It constructs complex SQL strings involving joins across multiple tables (loans, clients, groups, provisioning mappings) and maps the results to Java objects using custom RowMapper implementations.
this.jdbcTemplate.query(sql, mapper, formattedDate, formattedDate, formattedDate);
org.apache.fineract.accounting.rule.service.AccountingRuleReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to interact directly with the relational database. It constructs SQL queries manually using StringBuilder and maps the results using custom ResultSetExtractor and RowMapper implementations. It performs READ operations involving joins across multiple tables to assemble complex domain objects.
final String sql = "select " + resultSetExtractor.schema() + " and rule.id = ?";
final Map<Long, AccountingRuleData> extractedData = this.jdbcTemplate.query(sql, resultSetExtractor, new Object[] { accountingRuleId });
org.apache.fineract.adhocquery.service.AdHocReadPlatformServiceImpl JDBC The service uses Spring's JdbcTemplate to execute raw SQL queries against the database. It manually constructs SQL strings using a schema defined in an inner RowMapper class and handles result set mapping manually.
this.jdbcTemplate.query(sql, this.adHocRowMapper);
org.apache.fineract.cob.loan JDBC The class uses Spring's NamedParameterJdbcTemplate for complex partitioning queries that require window functions and dynamic SQL generation. It also uses a Spring Data JPA LoanRepository for standard retrieval operations.
sql.append("select min(id) as min, max(id) as max, page, count(id) as count from ");
sql.append("  (select floor(((row_number() over(order by id))-1) / :pageSize) as page, t.* from ");
// ...
return namedParameterJdbcTemplate.query(sql.toString(), parameters, RetrieveAllNonClosedLoanIdServiceImpl::mapRow);
org.apache.fineract.cob.loan.LoanLockingServiceImpl JDBC The class uses a mix of Spring JDBC (`JdbcTemplate`) for high-performance batch operations (inserts and updates) and Spring Data JPA (`LoanAccountLockRepository`) for standard retrieval and deletion. It interacts directly with the `m_loan_account_locks` table.
jdbcTemplate.batchUpdate("INSERT INTO m_loan_account_locks ... VALUES (?,?,?,?,?)", loanIds, loanIds.size(), (PreparedStatement ps, Long loanId) -> { ... });
org.apache.fineract.cob.loan.RetrieveAllNonClosedLoanIdServiceImplTest JDBC Although this is a test class, it explicitly defines and verifies complex SQL queries intended for execution via Spring's NamedParameterJdbcTemplate. The queries use window functions to partition data from the m_loan table.
select min(id) as min, max(id) as max, page, count(id) as count from (select floor(((row_number() over(order by id))-1) / :pageSize) as page, t.* from (select id from m_loan where loan_status_id in (:statusIds)...
org.apache.fineract.commands.service JDBC The interface methods explicitly use `SQLBuilder`, a utility class in this application framework used to construct dynamic SQL queries for JDBC execution. This pattern indicates that the implementing class will perform direct database reads using JDBC (likely via Spring's JdbcTemplate) rather than an ORM like Hibernate, which is typical for 'ReadPlatformService' components in this architecture to ensure performance.
Collection<AuditData> retrieveAuditEntries(SQLBuilder extraCriteria, boolean includeJson);
org.apache.fineract.commands.service.AuditReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It dynamically builds SQL strings using StringBuilder to handle optional filtering criteria and pagination. It performs READ operations involving complex joins across multiple tables to aggregate audit information.
this.jdbcTemplate.query(sql, rm, extraCriteria.getArguments())
org.apache.fineract.infrastructure.accountnumberformat.service JDBC The service uses Spring's JdbcTemplate to execute raw SQL queries against the database. It defines a custom RowMapper to map columns from the 'c_account_number_format' table to the AccountNumberFormatData domain object.
final String sql = "select " + this.accountNumberFormatMapper.schema() + " where anf.id = ?";
final AccountNumberFormatData accountNumberFormatData = this.jdbcTemplate.queryForObject(sql, this.accountNumberFormatMapper, new Object[] { id });
org.apache.fineract.infrastructure.campaigns.email.service JDBC The service uses Spring's JdbcTemplate to execute raw SQL queries. It constructs SQL schemas within inner mapper classes (EmailCampaignMapper and BusinessRuleMapper) which define the columns and joins. The queries retrieve data from tables like 'scheduled_email_campaign' and 'stretchy_report'.
this.jdbcTemplate.query(sql, this.businessRuleMapper, searchType);
org.apache.fineract.infrastructure.campaigns.email.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database.
this.jdbcTemplate.query(sql, this.emailConfigurationRowMapper);
org.apache.fineract.infrastructure.campaigns.email.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database. It manually maps ResultSets to objects using a custom RowMapper.
this.jdbcTemplate.query(sql, this.emailRowMapper, EmailMessageStatusType.PENDING.getValue());
org.apache.fineract.infrastructure.campaigns.sms.service.SmsCampaignReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database. It defines SQL schemas within inner mapper classes to select data from the 'sms_campaign' table and join it with 'm_appuser' and 'stretchy_report' tables.
final String sql = "select " + this.smsCampaignMapper.schema + " where sc.id = ? and sc.is_visible = ?";
return this.jdbcTemplate.queryForObject(sql, this.smsCampaignMapper, campaignId, isVisible);
org.apache.fineract.infrastructure.codes.service JDBC The service uses Spring's JdbcTemplate to perform direct SQL SELECT operations against the database. It manually maps ResultSets to objects using a custom RowMapper.
final String sql = "select " + rm.schema() + "where c.code_name like ? and cv.is_active = true order by position";
return this.jdbcTemplate.query(sql, rm, new Object[] { code });
org.apache.fineract.infrastructure.codes.service JDBC The service uses Spring's JdbcTemplate to execute raw SQL SELECT queries against the database. It manually maps the ResultSet to CodeData objects using an inner RowMapper class.
final String sql = "select " + rm.schema() + " where c.id = ?";
return this.jdbcTemplate.queryForObject(sql, rm, new Object[] { codeId });
org.apache.fineract.infrastructure.configuration.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database to retrieve external service configurations.
final String sql = "SELECT es.name as name, es.id as id FROM c_external_service es where es.name='" + serviceNameToUse + "'";
final ExternalServicesData externalServicesData = this.jdbcTemplate.query(sql, resultSetExtractor);
org.apache.fineract.infrastructure.configuration.service JDBC The class uses Spring's `JdbcTemplate` to perform raw SQL read operations. It joins `c_external_service_properties` and `c_external_service` tables to retrieve key-value pairs for specific service configurations.
final String sql = "SELECT esp.name, esp.value FROM c_external_service_properties esp inner join c_external_service es on esp.external_service_id = es.id where es.name = '" + ExternalServicesConstants.S3_SERVICE_NAME + "'";
final S3CredentialsData s3CredentialsData = this.jdbcTemplate.query(sql, resultSetExtractor, new Object[] {});
org.apache.fineract.infrastructure.configuration.service.ConfigurationReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to perform raw SQL queries against the database. It reads configuration data from the 'c_configuration' table and optionally joins with 'x_registered_table'.
final List<GlobalConfigurationPropertyData> globalConfiguration = this.jdbcTemplate.query(sql, this.rm, survey ? new Object[] { DataTableApiConstant.CATEGORY_PPI } : new Object[] {});
org.apache.fineract.infrastructure.core JDBC The code tests the configuration of HikariCP data sources for tenant database connections. It validates that the HikariConfig object is correctly populated with database credentials, URLs, and pool settings derived from tenant properties. While this is a test class and does not establish a real connection, it heavily utilizes JDBC and HikariCP APIs.
assertEquals(MASTER_DB_JDBC_URL, hikariConfig.getJdbcUrl());
org.apache.fineract.infrastructure.core.LiquibaseStepDefinitions JDBC This class tests database migration logic by mocking JDBC DataSources and Liquibase components. It does not perform actual database I/O but simulates various database states (e.g., first run, upgrade needed) to verify the upgrade service's behavior using Mockito.
given(databaseStateVerifier.isFirstLiquibaseMigration(tenantStoreDataSource)).willReturn(true);
org.apache.fineract.infrastructure.core.boot.FineractLiquibaseOnlyApplicationConfiguration JDBC The class configures the application for database migrations using Liquibase. It imports JDBC and HikariCP configurations to establish the necessary database connections required for Liquibase to execute schema changes.
@Import({ HikariCpConfig.class, JdbcConfig.class })
@EnableConfigurationProperties({ ... LiquibaseProperties.class })
org.apache.fineract.infrastructure.core.config JDBC This class configures the core Spring JDBC templates (JdbcTemplate and NamedParameterJdbcTemplate) which serve as the primary mechanism for executing SQL queries in the application. It integrates these templates with a RoutingDataSource, enabling dynamic database routing.
@Bean
public JdbcTemplate jdbcTemplate(RoutingDataSource dataSource) {
    return new JdbcTemplate(dataSource);
}
org.apache.fineract.infrastructure.core.config JDBC Configures the HikariCP connection pool (HikariDataSource) which provides JDBC connections. It binds standard Spring datasource properties to the pool configuration.
return new HikariDataSource(hikariConfig);
org.apache.fineract.infrastructure.core.config.CompatibilityConfig JDBC The class configures a JDBC DataSource using the HikariCP connection pool library. It sets up the connection parameters (URL, credentials, driver) and specific driver properties optimized for performance (caching prepared statements, batch rewriting).
@Bean
public HikariConfig hikariConfig() {
    HikariConfig hc = new HikariConfig();
    hc.setJdbcUrl(environment.getProperty("fineract_tenants_url"));
    // ...
    return hc;
}
org.apache.fineract.infrastructure.core.domain JDBC This class is primarily a configuration holder for JDBC connections, but it also contains a utility method that directly interacts with the JDBC API. The 'toProtocol' method obtains a raw JDBC Connection from a DataSource to inspect the database metadata URL.
public static String toProtocol(DataSource dataSource) {
    try (Connection connection = dataSource.getConnection()) {
        String url = connection.getMetaData().getURL();
        return url.substring(0, url.indexOf("://"));
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
org.apache.fineract.infrastructure.core.domain JDBC This class is a low-level utility for processing JDBC ResultSets. It does not execute queries itself but is used to extract and map data from ResultSets returned by JDBC queries executed elsewhere in the application. It interacts directly with the java.sql.ResultSet API.
final Timestamp dateValue = rs.getTimestamp(columnName);
org.apache.fineract.infrastructure.core.service JDBC The class interacts directly with the JDBC `DriverManager` to manage the lifecycle of database drivers. It does not perform data access (CRUD) but rather administrative cleanup by deregistering drivers to prevent memory leaks.
Enumeration<Driver> drivers = DriverManager.getDrivers();
while (drivers.hasMoreElements()) {
    Driver driver = drivers.nextElement();
    java.sql.DriverManager.deregisterDriver(driver);
}
org.apache.fineract.infrastructure.core.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries provided by the caller. It performs read operations to fetch data lists and count totals.
final List<E> items = jt.query(sqlFetchRows, rowMapper, args);
org.apache.fineract.infrastructure.core.service.database JDBC The class is a core component of the database abstraction layer. It maps application-specific types to standard `java.sql.JDBCType` and generates dialect-specific SQL type strings (DDL) for MySQL and PostgreSQL. It also handles the conversion of Java values to JDBC-compatible values.
public Object toJdbcValueImpl(@NotNull DatabaseType dialect, Object value) {
    return value == null ? null : (Boolean.TRUE.equals(value) ? 1 : 0);
}
org.apache.fineract.infrastructure.core.service.database JDBC This class implements the javax.sql.DataSource interface to provide JDBC connections. It functions as a router, dynamically selecting the underlying DataSource based on tenant context, enabling multi-tenancy.
return determineTargetDataSource().getConnection();
org.apache.fineract.infrastructure.core.service.database JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries directly against PostgreSQL system catalog tables/views to retrieve schema metadata.
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
Integer result = jdbcTemplate.queryForObject(format("SELECT COUNT(table_name) " + "FROM information_schema.tables ...", tableName), Integer.class);
org.apache.fineract.infrastructure.core.service.database JDBC The class interacts with database results via the Spring JDBC SqlRowSet interface. While it does not execute queries directly, it processes the result set cursor to extract data.
rowset.beforeFirst();
while (rowset.next()) {
    indexes.add(new IndexDetail(rowset.getString(1)));
}
org.apache.fineract.infrastructure.core.service.database JDBC The class interacts directly with the JDBC DataSource to retrieve connection metadata (specifically the URL) for error reporting purposes. It primarily acts as a router for other database metadata operations, delegating them to implementations that likely use JDBC or Spring JDBC.
dataSource.getConnection().getMetaData().getURL()
org.apache.fineract.infrastructure.core.service.database JDBC The interface defines methods for direct database schema inspection using a JDBC DataSource. It is designed to read metadata about tables, columns, and indexes, abstracting the specific SQL or JDBC calls required.
boolean isTablePresent(DataSource dataSource, String tableName);
org.apache.fineract.infrastructure.core.service.database JDBC The class interacts with the JDBC configuration (HikariCP) to identify the database driver class name, which is then used to resolve the database vendor type (MySQL or PostgreSQL).
DatabaseType databaseType = DRIVER_MAPPING.get(driverClassName);
org.apache.fineract.infrastructure.core.service.database JDBC The class interacts directly with the MySQL database using Spring's JdbcTemplate to query system tables (INFORMATION_SCHEMA) and execute administrative commands (SHOW TABLES). It does not use an ORM for these operations but relies on raw SQL strings.
final JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
final String sql = "SELECT ... FROM INFORMATION_SCHEMA.COLUMNS ...";
final SqlRowSet columnDefinitions = jdbcTemplate.queryForRowSet(sql, new Object[] { tableName });
org.apache.fineract.infrastructure.core.service.database JDBC This class manages the lifecycle and retrieval of JDBC `DataSource` objects for a multi-tenant application. It does not execute business queries directly but manages the connections (pools) that other components use to interact with the database. It verifies connectivity by obtaining a `Connection` object during initialization.
try (Connection connection = tenantSpecificDataSource.getConnection()) {
    String url = connection.getMetaData().getURL();
    log.debug("Established database connection with URL {}", url);
}
org.apache.fineract.infrastructure.core.service.database.DataSourcePerTenantServiceFactory JDBC This class is responsible for configuring and creating JDBC DataSources using the HikariCP connection pool library. It constructs JDBC URLs dynamically and manages database credentials.
HikariConfig config = new HikariConfig();
config.setJdbcUrl(jdbcUrl);
config.setUsername(schemaUsername);
config.setPassword(databasePasswordEncryptor.decrypt(schemaPassword));
return hikariDataSourceFactory.create(config);
org.apache.fineract.infrastructure.core.service.database.HikariDataSourceFactory JDBC This class is responsible for the creation of the JDBC Connection Pool (HikariCP). While it does not execute queries itself, it is the infrastructure component that initializes the `DataSource` used by the rest of the application to connect to the database via JDBC.
return new HikariDataSource(config);
org.apache.fineract.infrastructure.core.service.database.RoutingDataSourceService JDBC This interface is explicitly designed to facilitate JDBC database integration by providing a mechanism to retrieve a javax.sql.DataSource. While it does not execute SQL itself, it is the gateway to obtaining the connection pool required for all subsequent database operations.
DataSource retrieveDataSource();
org.apache.fineract.infrastructure.core.service.migration JDBC This class is responsible for configuring the JDBC connection layer (specifically HikariCP) for dynamic tenant databases. It constructs JDBC URLs and configures DataSources programmatically.
HikariDataSource dataSource = new HikariDataSource();
dataSource.setUsername(tenantConnection.getSchemaUsername());
dataSource.setPassword(databasePasswordEncryptor.decrypt(tenantConnection.getSchemaPassword()));
dataSource.setJdbcUrl(tenantJdbcUrl);
return dataSource;
org.apache.fineract.infrastructure.core.service.migration JDBC The class uses Spring's `NamedParameterJdbcTemplate` to execute SQL queries against the `schema_version` table to verify migration history. It also checks for the existence of `DATABASECHANGELOG`.
NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
Integer result = jdbcTemplate.queryForObject(
        "SELECT COUNT(script) FROM schema_version " + "WHERE version = :latestFlywayVersion "
                + "AND script = :latestFlywayScriptName " + "AND checksum = :latestFlywayScriptChecksum " + "AND success = 1",
        paramMap, Integer.class);
org.apache.fineract.infrastructure.core.service.migration JDBC The class interacts directly with the database using JDBC `Statement` and `ResultSet` objects obtained via the Liquibase connection wrapper. It performs a read operation to fetch plain text passwords and a write operation to update them with encrypted values.
try (ResultSet rs = selectStatement.executeQuery("SELECT id, readonly_schema_password FROM tenant_server_connections...")) { ... updateStatement.execute(updateSql); }
org.apache.fineract.infrastructure.core.service.migration JDBC The class interacts directly with the database using the JDBC API exposed through the Liquibase 'Database' object. It executes raw SQL queries to read and update the 'tenant_server_connections' table.
JdbcConnection dbConn = (JdbcConnection) database.getConnection();
try (Statement selectStatement = dbConn.createStatement()) {
    try (ResultSet rs = selectStatement.executeQuery("SELECT id, schema_password FROM tenant_server_connections")) {
        // ...
        updateStatement.execute(updateSql);
    }
}
org.apache.fineract.infrastructure.core.service.migration.ExtendedSpringLiquibase JDBC The class interacts with the database to manage schema migration metadata. It retrieves a raw JDBC connection from the Spring DataSource and passes it to the Liquibase library to update the changelog table.
try (Liquibase liquibase = createLiquibase(getDataSource().getConnection())) {
    liquibase.changeLogSync(getContexts());
}
org.apache.fineract.infrastructure.core.service.migration.ExtendedSpringLiquibaseBuilder JDBC This class configures the Liquibase migration tool. It holds a javax.sql.DataSource and passes it to the ExtendedSpringLiquibase instance, which is responsible for managing database schema changes (DDL).
public ExtendedSpringLiquibaseBuilder withDataSource(DataSource dataSource) {
    this.dataSource = dataSource;
    return this;
}
org.apache.fineract.infrastructure.core.service.migration.ExtendedSpringLiquibaseFactory JDBC The class configures Liquibase for database schema migration using a JDBC DataSource. It prepares the migration tool to execute DDL changes against the connected database.
return new ExtendedSpringLiquibaseBuilder(liquibaseProperties).withDataSource(dataSource)...
org.apache.fineract.infrastructure.core.service.migration.TenantDatabaseUpgradeService JDBC The service manages database schema migrations using Liquibase, interacting with databases via `javax.sql.DataSource`. It handles connections for the 'tenant store' and dynamically creates connections for individual tenants to apply DDL changes.
ExtendedSpringLiquibase liquibase = liquibaseFactory.create(tenantDataSource, TENANT_STORE_DB_CONTEXT, INITIAL_SWITCH_CONTEXT);
applyInitialLiquibase(tenantDataSource, liquibase, "tenant store",
        (ds) -> !databaseStateVerifier.isTenantStoreOnLatestUpgradableVersion(ds));
org.apache.fineract.infrastructure.core.service.tenant.JdbcTenantDetailsService JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against a DataSource. It relies on a TenantMapper helper class to define the SQL schema and map the ResultSet to domain objects.
this.jdbcTemplate.queryForObject(sql, rm, new Object[] { tenantIdentifier });
org.apache.fineract.infrastructure.core.service.tenant.TenantMapper JDBC The class defines raw SQL strings and uses Spring's `RowMapper` interface to map JDBC `ResultSet` data to domain objects. It explicitly defines a SQL query involving joins and maps specific column names to object properties.
public FineractPlatformTenant mapRow(final ResultSet rs, int rowNum) throws SQLException {
    final Long id = rs.getLong("id");
    final String tenantIdentifier = rs.getString("identifier");
    // ...
    return new FineractPlatformTenant(id, tenantIdentifier, name, timezoneId, connection);
}
org.apache.fineract.infrastructure.creditbureau.data JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database. It defines a RowMapper to manually map the ResultSet columns to the domain object fields.
this.jdbcTemplate.query(sql, rm, new Object[] { creditBureauId });
org.apache.fineract.infrastructure.creditbureau.service JDBC The service uses Spring's JdbcTemplate to execute raw SQL SELECT queries against the database to retrieve credit bureau configuration data.
this.jdbcTemplate.query(sql, rm, new Object[] { id });
org.apache.fineract.infrastructure.creditbureau.service JDBC The class uses Spring's `JdbcTemplate` to execute raw SQL queries against the database. It manually maps `ResultSet` rows to domain objects using inner `RowMapper` classes. The SQL queries involve joins across multiple tables to aggregate credit bureau and loan product information.
this.jdbcTemplate.query(sql, rm);
org.apache.fineract.infrastructure.creditbureau.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database. It defines a RowMapper to map the result set columns to the CreditBureauData domain object.
final String sql = "select " + rm.schema() + " order by id";
return this.jdbcTemplate.query(sql, rm);
org.apache.fineract.infrastructure.creditbureau.service.OrganisationCreditBureauReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL SELECT queries. It manually maps the results using a RowMapper implementation.
this.jdbcTemplate.query(sql, rm);
org.apache.fineract.infrastructure.dataqueries.service JDBC The class uses Spring's JdbcTemplate and NamedParameterJdbcTemplate to perform direct SQL operations. It handles both DDL (creating/altering tables) and DML (querying/updating data) for dynamic user-defined tables ('Datatables'). It also interacts with system tables like 'x_registered_table', 'm_permission', and core entity tables.
jdbcTemplate.queryForRowSet(sql, params); // NOSONAR
...
this.namedParameterJdbcTemplate.update(registerDatatableSql, paramMap);
org.apache.fineract.infrastructure.dataqueries.service JDBC The interface defines methods for interacting with dynamic 'Datatables'. The presence of methods like 'buildDataQueryEmbedded' which take StringBuilder arguments for 'select', 'from', and 'where' clauses, along with 'params' lists, strongly indicates an implementation that constructs dynamic SQL queries, likely executed via JDBC or Spring's JdbcTemplate. It handles DDL (create/drop tables) and DML (insert/update/delete entries) for these user-defined tables.
boolean buildDataQueryEmbedded(@NotNull EntityTables entityTable, @NotNull String datatable, ... @NotNull StringBuilder select, @NotNull StringBuilder from, @NotNull StringBuilder where ...)
org.apache.fineract.infrastructure.dataqueries.service.EntityDatatableChecksReadPlatformServiceImpl JDBC The class primarily uses Spring's `JdbcTemplate` to execute SQL queries for retrieving lists of checks and datatable definitions. It also utilizes a Spring Data JPA repository (`EntityDatatableChecksRepository`) for specific domain object retrieval.
final String sql = "select " + this.registerDataTableMapper.schema();
return this.jdbcTemplate.query(sql, this.registerDataTableMapper);
org.apache.fineract.infrastructure.dataqueries.service.GenericDataServiceImpl JDBC The class uses Spring's JdbcTemplate to execute dynamic SQL queries and retrieve results as SqlRowSet. It also queries system tables for metadata and specific application tables (m_code, m_code_value) for code lookups.
final SqlRowSet rs = this.jdbcTemplate.queryForRowSet(sql);
org.apache.fineract.infrastructure.dataqueries.service.ReadReportingServiceImpl JDBC The class interacts with the database using Spring's JdbcTemplate. It reads report definitions (SQL queries) from the 'stretchy_report' table and executes them dynamically. It also queries metadata tables for parameters.
final SqlRowSet rs = this.jdbcTemplate.queryForRowSet(inputSqlWrapped, encodedName);
org.apache.fineract.infrastructure.dataqueries.starter JDBC This configuration class wires up a service that utilizes Spring JDBC templates for database interaction. It injects JdbcTemplate and NamedParameterJdbcTemplate into the service implementation.
return new ReadWriteNonCoreDataServiceImpl(jdbcTemplate, databaseTypeResolver, ...)
org.apache.fineract.infrastructure.documentmanagement.service JDBC The class uses Spring's `JdbcTemplate` to execute raw SQL queries for retrieving image metadata. It performs joins between the image table and entity-specific tables (client or staff) to link images to their owners.
final String sql = "select " + imageMapper.schema(entityType);
final ImageData imageData = this.jdbcTemplate.queryForObject(sql, imageMapper, entityId);
org.apache.fineract.infrastructure.documentmanagement.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL SELECT queries against the database to retrieve document metadata.
this.jdbcTemplate.query(sql, mapper, new Object[] { entityType, entityId });
org.apache.fineract.infrastructure.entityaccess.service.FineractEntityAccessReadServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database. It manually maps ResultSets to domain objects using inner classes implementing RowMapper. It constructs dynamic SQL for filtering and joins multiple tables to retrieve human-readable names for entities.
this.jdbcTemplate.query(sql, mapper, new Object[] { relId, fromEntityId });
org.apache.fineract.infrastructure.event.external.jobs JDBC The class interacts with the database indirectly through the Spring Batch `JobRepository`. This component is responsible for persisting job metadata, including job instances, execution contexts, and step executions, typically into standard Spring Batch tables (e.g., BATCH_JOB_INSTANCE, BATCH_JOB_EXECUTION).
new StepBuilder(StepName.SEND_ASYNCHRONOUS_EVENTS_STEP.name(), jobRepository).tasklet(tasklet, transactionManager)
org.apache.fineract.infrastructure.event.external.service JDBC The class mocks Spring's JdbcTemplate to simulate database interactions. While it does not connect to a real database, it defines the expected SQL query behavior and response structures used by the service under test.
when(jdbcTemplate.queryForList(anyString(), eq(String.class))).thenReturn(configurations);
org.apache.fineract.infrastructure.event.external.service JDBC The service uses a `JdbcTemplateFactory` to create a Spring `JdbcTemplate` configured for a specific tenant's database connection. It executes raw SQL queries to retrieve configuration data.
jdbcTemplate.queryForList("select me.type as type from m_external_event_configuration me", String.class)
org.apache.fineract.infrastructure.event.external.service.JdbcTemplateFactory JDBC This class acts as a configuration factory that prepares JDBC connections. It does not execute queries itself but creates the Spring JdbcTemplate and NamedParameterJdbcTemplate objects that are used by other components to interact with the database via JDBC.
DataSource tenantDataSource = tenantDataSourceFactory.create(tenant);
return new JdbcTemplate(tenantDataSource);
org.apache.fineract.infrastructure.gcm.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database. It defines a custom RowMapper (DeviceRegistrationDataMapper) to map the result set columns to the DeviceRegistrationData domain object. The queries involve joining the 'client_device_registration' table with the 'm_client' table.
String sql = "select " + drm.schema() + " where cdr.id = ? ";
return this.jdbcTemplate.queryForObject(sql, drm, id);
org.apache.fineract.infrastructure.hooks.data JDBC Implements Spring's ResultSetExtractor to map SQL results to Java objects manually.
final String groupingName = rs.getString("grouping");
final String entityName = rs.getString("entity_name");
org.apache.fineract.infrastructure.hooks.service JDBC The class uses Spring's `JdbcTemplate` for the majority of its read operations, executing raw SQL queries with joins across multiple tables. It also utilizes a Spring Data JPA repository (`HookRepository`) for one specific cached query.
final HookMapper rm = new HookMapper(jdbcTemplate);
final String sql = "select " + rm.schema() + " order by h.name";
return jdbcTemplate.query(sql, rm);
org.apache.fineract.infrastructure.jobs.ScheduledJobRunnerConfig JDBC The class configures the Spring Batch JobRepository and JobExplorer, which interact directly with the database to store and retrieve batch execution metadata (JobInstances, JobExecutions, StepExecutions). It uses a `RoutingDataSource` to connect to the database and a custom `ExtendedJpaTransactionManager` for transaction handling. The `JobRepositoryFactoryBean` internally uses JDBC to perform CRUD operations on the batch meta-tables.
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
factory.setDataSource(routingDataSource);
factory.setTransactionManager(transactionManager);
factory.setIsolationLevelForCreate("ISOLATION_READ_COMMITTED");
org.apache.fineract.infrastructure.jobs.config.FineractDataFieldMaxValueIncrementerFactory JDBC The class interacts with the database via Spring JDBC support classes to manage sequence generation. It uses a `DataSource` to instantiate specific incrementer implementations (`MySQLMaxValueIncrementer`, `PostgresSequenceMaxValueIncrementer`) which execute SQL to retrieve or update sequence values.
MySQLMaxValueIncrementer mySQLMaxValueIncrementer = new MySQLMaxValueIncrementer(dataSource, incrementerName, incrementerColumnName);
mySQLMaxValueIncrementer.setUseNewConnection(true);
return mySQLMaxValueIncrementer;
org.apache.fineract.infrastructure.jobs.domain JDBC The class interacts directly with the database using Spring's JDBC abstraction (NamedParameterJdbcTemplate). It performs CRUD operations on the 'batch_custom_job_parameters' table. It specifically handles JSON data types by serializing objects before insertion and retrieving them as strings. It relies on a 'DatabaseSpecificSQLGenerator' helper to abstract away vendor-specific SQL differences for JSON casting and identity retrieval.
final String insertSQL = "INSERT INTO batch_custom_job_parameters (parameter_json) VALUES (%s)"
        .formatted(databaseSpecificSQLGenerator.castJson(":jsonString"));
final String jsonString = gson.toJson(customJobParameters);
SqlParameterSource parameters = new MapSqlParameterSource("jsonString", jsonString);
namedParameterJdbcTemplate.update(insertSQL, parameters);
org.apache.fineract.infrastructure.jobs.domain.JobExecutionRepository JDBC The class uses `NamedParameterJdbcTemplate` to execute raw SQL queries against Spring Batch metadata tables and a custom parameter table. It explicitly handles SQL dialect differences for JSON operations.
namedParameterJdbcTemplate.update("""
    UPDATE BATCH_JOB_EXECUTION
    SET STATUS = :status, START_TIME = null
    WHERE JOB_EXECUTION_ID = :jobExecutionId
""", Map.of("status", FAILED.name(), "jobExecutionId", stuckJobId));
org.apache.fineract.infrastructure.jobs.service JDBC The class interacts with the database to identify stuck batch jobs. It uses a 'JdbcTemplateFactory' to create a 'NamedParameterJdbcTemplate' specific to each tenant, which is then passed to the 'JobExecutionRepository' to execute the query.
NamedParameterJdbcTemplate namedParameterJdbcTemplate = jdbcTemplateFactory.createNamedParameterJdbcTemplate(tenant);
List<String> stuckJobNames = jobExecutionRepository.getStuckJobNames(namedParameterJdbcTemplate);
org.apache.fineract.infrastructure.jobs.service.SchedulerJobRunnerReadServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It constructs SQL strings dynamically using a StringBuilder and a DatabaseSpecificSQLGenerator to handle dialect-specific syntax (like limits and escaping). It maps results to Java objects using custom RowMapper implementations.
final String sql = detailMapper.schema() + " where job.id=?";
return this.jdbcTemplate.queryForObject(sql, detailMapper, new Object[] { jobId });
org.apache.fineract.infrastructure.jobs.service.executealldirtyjobs JDBC The class injects and uses a Spring Batch 'JobRepository'. This component is responsible for interacting with the database to persist batch metadata (JobInstances, JobExecutions, StepExecutions, etc.). While the SQL is abstracted away by the framework, the configuration here explicitly wires up the persistence mechanism for the batch job.
new StepBuilder(JobName.EXECUTE_DIRTY_JOBS.name(), jobRepository).tasklet(executeAllDirtyJobsTasklet, transactionManager)
org.apache.fineract.infrastructure.jobs.service.updatenpa JDBC The code interacts with the database using Spring's JdbcTemplate to execute raw SQL UPDATE statements. It manually constructs SQL strings to handle complex joins between 'm_loan', 'm_loan_arrears_aging', and 'm_product_loan' tables. It specifically handles database portability by checking the database type (MySQL vs others) and adjusting the SQL syntax for UPDATE joins accordingly.
jdbcTemplate.update(resetNPASqlBuilder.toString(), user.getId(), DateUtils.getOffsetDateTimeOfTenantWithMostPrecision());
org.apache.fineract.infrastructure.reportmailingjob.service JDBC The service uses Spring's JdbcTemplate to execute raw SQL queries against the database to read configuration data.
this.jdbcTemplate.queryForObject(sql, mapper, new Object[] { name });
org.apache.fineract.infrastructure.reportmailingjob.service JDBC The service uses Spring's JdbcTemplate to execute raw SQL queries against the database. It constructs SQL strings dynamically to support filtering and pagination.
sqlStringBuilder.append("select " + sqlGenerator.calcFoundRows() + " ");
sqlStringBuilder.append(this.reportMailingJobRunHistoryMapper.reportMailingJobRunHistorySchema());
if (reportMailingJobId != null) {
    sqlStringBuilder.append(" where rmjrh.job_id = ? ");
    queryParameters.add(reportMailingJobId);
}
org.apache.fineract.infrastructure.reportmailingjob.service.ReportMailingJobReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It manually constructs SQL strings, including joins between the mailing job, app user, and stretchy report tables. It uses a custom RowMapper to map the ResultSet to domain objects.
final String sql = "select " + mapper.reportMailingJobSchema() + " where rmj.id = ? and rmj.is_deleted = false";
return this.jdbcTemplate.queryForObject(sql, mapper, new Object[] { reportMailingJobId });
org.apache.fineract.infrastructure.security.exception.EscapeSqlLiteralException JDBC This class does not perform direct database operations but is tightly coupled to the JDBC API by wrapping `java.sql.SQLException`. It is used to handle errors originating from database interactions, specifically regarding SQL literal escaping.
public EscapeSqlLiteralException(String message, SQLException e) {
    super(message, e);
}
org.apache.fineract.infrastructure.security.service JDBC The class uses Spring's `JdbcTemplate` to execute raw SQL queries against the tenant database to retrieve tenant configuration.
this.jdbcTemplate.queryForObject(sql, rm, new Object[] { tenantIdentifier });
org.apache.fineract.infrastructure.security.utils.ColumnValidator JDBC The class interacts with the database primarily to inspect metadata rather than to manipulate data. It obtains a raw JDBC connection from the Spring `JdbcTemplate` to access `DatabaseMetaData`. It uses this metadata to verify the existence of tables and columns referenced in dynamic SQL strings.
connection = this.jdbcTemplate.getDataSource().getConnection();
DatabaseMetaData dbMetaData = connection.getMetaData();
resultSet = dbMetaData.getColumns(null, null, entry.getKey(), null);
org.apache.fineract.infrastructure.sms.service.SmsReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It manually constructs SQL strings, often concatenating parameters or using placeholders, and maps the results to Java objects using a custom RowMapper.
final String sql = "select " + this.smsRowMapper.schema() + " where smo.id = ?";
return this.jdbcTemplate.queryForObject(sql, this.smsRowMapper, new Object[] { resourceId });
org.apache.fineract.infrastructure.springbatch.messagehandler JDBC The class interacts with the underlying database used by Spring Batch to persist job and step execution metadata. It uses 'JobExplorer' for reading execution state and 'JobRepository' for updating it. While the specific database technology is abstracted, Spring Batch typically uses JDBC.
StepExecution stepExecution = jobExplorer.getStepExecution(jobExecutionId, stepExecutionId);
// ...
jobRepository.update(stepExecution);
org.apache.fineract.infrastructure.survey.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL SELECT queries. It retrieves data using SqlRowSet to allow for cursor manipulation (scrolling) during the mapping process.
this.jdbcTemplate.queryForRowSet(sql, new Object[] { ppiName });
org.apache.fineract.infrastructure.survey.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It interacts with system configuration tables and dynamic application tables (surveys). It manually maps SqlRowSet results to Java objects.
final String sql = "select application_table_name... from x_registered_table...";
final SqlRowSet rs = this.jdbcTemplate.queryForRowSet(sql);
org.apache.fineract.infrastructure.survey.service.ReadLikelihoodServiceImpl JDBC The service uses Spring's JdbcTemplate to execute parameterized SQL queries directly against the database. It constructs SQL strings that join multiple tables to retrieve the required survey likelihood data.
return this.jdbcTemplate.queryForRowSet(sql, new Object[] { ppiName });
org.apache.fineract.mix.service JDBC The service interacts with the database using Spring's JdbcTemplate to execute inline SQL queries. It performs read operations involving joins between taxonomy and namespace tables.
this.jdbcTemplate.query(sql, this.mixTaxonomyMapper);
org.apache.fineract.mix.service.MixTaxonomyMappingReadPlatformServiceImpl JDBC The class interacts with the database using Spring's JdbcTemplate to execute raw SQL queries. It reads configuration data from a specific table.
this.jdbcTemplate.queryForObject(sqlString, rm);
org.apache.fineract.mix.service.NamespaceReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute parameterized SQL SELECT queries directly against the database. It defines a RowMapper to map the columns 'id', 'prefix', and 'url' to the NamespaceData object.
this.jdbcTemplate.queryForObject(sql, this.namespaceMapper, new Object[] { id });
org.apache.fineract.mix.service.XBRLResultServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries directly against the database. It constructs a large SQL string with unions and joins to aggregate accounting data.
final SqlRowSet rs = this.jdbcTemplate.queryForRowSet(sql);
org.apache.fineract.notification.service.NotificationReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database. It performs SELECT operations with joins to retrieve notification data and UPDATE operations to change read status.
this.jdbcTemplate.query(sql, notificationMapperRow, appUserId);
org.apache.fineract.organisation.holiday.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database. It manually maps ResultSets to objects using a custom RowMapper.
this.jdbcTemplate.query(sql, rm, finalObjectArray);
org.apache.fineract.organisation.monetary.service.CurrencyReadPlatformServiceImpl JDBC The service uses Spring's JdbcTemplate to execute raw SQL queries against the database. It maps results to objects using a custom RowMapper implementation.
this.jdbcTemplate.query(sql, this.currencyRowMapper);
org.apache.fineract.organisation.office.service.OfficeReadPlatformServiceImpl JDBC The class primarily uses Spring's `JdbcTemplate` to execute raw SQL SELECT queries. It constructs SQL strings dynamically to handle hierarchy filtering and sorting. It also uses `OfficeRepository` (Spring Data JPA) for one specific lookup by External ID.
this.jdbcTemplate.query(sqlBuilder.toString(), rm, new Object[] { hierarchySearchString });
org.apache.fineract.organisation.provisioning.service JDBC The class uses Spring's JdbcTemplate to perform direct SQL queries against the relational database. It manually maps the result set to domain objects using a custom RowMapper.
final String sql = "select " + this.provisionCategoryRowMapper.schema() + " from m_provision_category pc order by pc.id";
return this.jdbcTemplate.query(sql, this.provisionCategoryRowMapper);
org.apache.fineract.organisation.provisioning.service JDBC The service uses Spring's JdbcTemplate to execute raw SQL queries. It manually maps ResultSets to Java objects using inner RowMapper classes.
this.jdbcTemplate.query(sql, mapper);
org.apache.fineract.organisation.staff.service.StaffReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database. It manually maps ResultSets to domain objects using inner RowMapper classes. It constructs dynamic SQL based on filter criteria.
this.jdbcTemplate.query(sql, LOOKUP_MAPPER, defaultOfficeId, hierarchy);
org.apache.fineract.organisation.teller.data JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the 'm_cashiers' table. It constructs SQL strings dynamically to check for overlapping time ranges and to retrieve cashier IDs based on staff IDs and current timestamps.
String sql = "select count(*) from m_cashiers c where c.staff_id = " + staffId ...;
int count = this.jdbcTemplate.queryForObject(sql, Integer.class);
org.apache.fineract.organisation.teller.service JDBC The class uses Spring's `JdbcTemplate` to execute raw SQL queries. It manually maps `ResultSet` data to Java objects using inner `RowMapper` classes. It constructs SQL strings dynamically using `StringBuilder` to handle optional search criteria and complex unions across multiple tables.
this.jdbcTemplate.query(sql, this.lookupMapper, new Object[] { defaultOfficeId });
org.apache.fineract.organisation.workingdays.service JDBC The service uses Spring's JdbcTemplate to execute raw SQL SELECT queries against the 'm_working_days' table. It maps the result set manually using a RowMapper implementation.
final String sql = " select " + rm.schema();
WorkingDaysData data = this.jdbcTemplate.queryForObject(sql, rm);
org.apache.fineract.portfolio.account.jobs.executestandinginstructions JDBC The class uses Spring's `JdbcTemplate` to perform direct SQL updates and inserts. It updates the `last_run_date` of standing instructions and inserts audit logs into a history table. It also relies on `StandingInstructionReadPlatformService` for reading data, which likely uses a different mechanism (JPA/Spring Data) internally, but this file specifically uses JDBC.
final String updateQuery = "UPDATE m_account_transfer_standing_instructions SET last_run_date = ? where id = ?";
jdbcTemplate.update(updateQuery, transactionDate, data.getId());
org.apache.fineract.portfolio.account.jobs.executestandinginstructions JDBC The class injects a Spring JdbcTemplate and a DatabaseSpecificSQLGenerator, which are then passed to the Tasklet bean. While this configuration class does not execute queries directly, it wires the components that perform direct database access via JDBC.
return new ExecuteStandingInstructionsTasklet(standingInstructionReadPlatformService, jdbcTemplate, sqlGenerator,
                accountTransfersWritePlatformService);
org.apache.fineract.portfolio.account.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It dynamically builds SQL strings with multiple joins to retrieve standing instruction history data.
final StringBuilder sqlBuilder = new StringBuilder(200);
sqlBuilder.append("select " + sqlGenerator.calcFoundRows() + " ");
sqlBuilder.append(this.standingInstructionHistoryMapper.schema());
if (standingInstructionDTO.transferType() != null) {
    sqlBuilder.append(" and atd.transfer_type=? ");
    paramObj.add(standingInstructionDTO.transferType());
}
return this.paginationHelper.fetchPage(this.jdbcTemplate, sqlBuilder.toString(), finalObjectArray, this.standingInstructionHistoryMapper);
org.apache.fineract.portfolio.account.service JDBC The class uses Spring's JdbcTemplate to interact directly with the database. It constructs SQL queries dynamically for search and filtering operations and uses RowMappers to convert ResultSet rows into Java objects.
this.jdbcTemplate.query(sqlBuilder.toString(), this.standingInstructionMapper, status);
org.apache.fineract.portfolio.account.service.AccountAssociationsReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database. It manually maps ResultSets to domain objects using a custom RowMapper.
this.jdbcTemplate.queryForObject("select ... where aa.loan_account_id = ?", mapper, loanId, ...)
org.apache.fineract.portfolio.account.service.AccountTransfersReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It manually constructs SQL strings, often concatenating clauses for dynamic filtering and pagination. It uses a custom RowMapper to transform ResultSet rows into domain objects.
this.jdbcTemplate.queryForObject(sql, this.accountTransfersMapper, new Object[] { transferId });
org.apache.fineract.portfolio.account.service.PortfolioAccountReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database. It constructs SQL strings dynamically and maps results using custom RowMapper implementations.
accountData = this.jdbcTemplate.queryForObject(sql, this.loanAccountMapper, sqlParams);
org.apache.fineract.portfolio.accountdetails.service JDBC The service uses Spring's `JdbcTemplate` to execute raw SQL SELECT queries. It constructs these queries by appending WHERE clauses to base schemas defined in inner `RowMapper` classes. The schemas involve complex joins across multiple tables to aggregate account information.
this.jdbcTemplate.query(sql, rm, inputs);
org.apache.fineract.portfolio.address.service.AddressReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It employs custom RowMapper implementations (AddFieldsMapper and AddMapper) to map the ResultSet to the AddressData domain object. The SQL is constructed via string concatenation in the mapper classes.
final String sql = "select " + rm.schema() + " where client.id=?";
return this.jdbcTemplate.query(sql, rm, new Object[] { clientid });
org.apache.fineract.portfolio.address.service.FieldConfigurationReadPlatformServiceImpl JDBC The service uses Spring's JdbcTemplate to perform direct SQL SELECT operations on the configuration table.
this.jdbcTemplate.query(sql, rm, new Object[] { entity });
org.apache.fineract.portfolio.calendar.service.CalendarReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It manually maps ResultSets to objects using inner class RowMappers. It interacts with calendar definition and instance tables, as well as user and entity tables for joins.
this.jdbcTemplate.queryForObject(sql, rm, new Object[] { calendarId, entityId, entityTypeId });
org.apache.fineract.portfolio.charge.service.ChargeReadPlatformServiceImpl JDBC This class directly interacts with the database using Spring's `JdbcTemplate` and `NamedParameterJdbcTemplate`. It constructs raw SQL strings to perform read-only queries for charge data. A private inner `RowMapper` class, `ChargeMapper`, is used to map the `ResultSet` from the database into `ChargeData` DTOs. Queries involve joins across multiple tables to gather comprehensive charge information.
return this.jdbcTemplate.query(sql, rm, new Object[] { currencyCode }); // NOSONAR
org.apache.fineract.portfolio.client.service JDBC The class primarily uses Spring's `JdbcTemplate` to execute raw SQL SELECT queries involving complex joins across multiple tables. It maps the results to data objects using a custom `RowMapper`. It also uses a Spring Data JPA repository (`ClientTransactionRepository`) for one specific lookup method.
final String sql = "select " + this.clientTransactionMapper.schema() + " where c.id = ? and tr.id= ?";
return this.jdbcTemplate.queryForObject(sql, this.clientTransactionMapper, clientId, transactionId);
org.apache.fineract.portfolio.client.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database. It manually constructs SQL strings and uses a RowMapper to transform the ResultSet into domain objects.
this.jdbcTemplate.query(sql, rm, entity);
org.apache.fineract.portfolio.client.service JDBC The class interacts directly with the database using Spring's `JdbcTemplate`. It constructs raw SQL queries involving joins across multiple tables (`m_client_identifier`, `m_client`, `m_office`, `m_code_value`) to assemble the client identifier data. It uses a custom `RowMapper` to map the result set columns to the `ClientIdentifierData` object.
this.jdbcTemplate.query(sql, rm, clientId, hierarchySearchString);
org.apache.fineract.portfolio.client.service JDBC The class interacts with the database using Spring's JdbcTemplate. It executes parameterized SQL SELECT queries to fetch data from the 'm_family_members' table and joins it with 'm_code_value' to retrieve descriptive values for foreign keys.
this.jdbcTemplate.query(sql, rm, clientId);
org.apache.fineract.portfolio.client.service JDBC The class interacts directly with the database using Spring's `JdbcTemplate`. It constructs raw SQL SELECT statements that join the `m_charge`, `m_organisation_currency`, and `m_client_charge` tables to assemble the required data view.
this.jdbcTemplate.queryForObject(sql, rm, clientId, clientChargeId);
org.apache.fineract.portfolio.client.service.ClientReadPlatformServiceImpl JDBC The class primarily uses Spring's `JdbcTemplate` to perform read-only operations against the database. It constructs complex SQL queries dynamically to handle search criteria, joins multiple tables (client, office, staff, code_value, etc.) to aggregate data, and uses `RowMapper` classes to transform `ResultSet` data into DTOs. It also utilizes `ClientRepositoryWrapper` (likely JPA/Spring Data) for retrieving domain entities in specific cases like `retrieveOne`.
final String sql = "select " + this.membersOfGroupMapper.schema() + " where o.hierarchy like ? and pgc.group_id = ?";
return this.jdbcTemplate.query(sql, this.membersOfGroupMapper, hierarchySearchString, groupId);
org.apache.fineract.portfolio.collateral.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL SELECT queries. It manually maps the ResultSet to domain objects using a custom RowMapper. The queries involve joins across multiple tables to aggregate collateral, code value, loan, and currency information.
this.jdbcTemplate.query(sql, rm, new Object[] { loanId });
org.apache.fineract.portfolio.collectionsheet.service JDBC The class uses Spring's NamedParameterJdbcTemplate to execute raw SQL queries. It manually maps ResultSets to domain objects using inner class RowMappers. The SQL is constructed dynamically to handle different hierarchy levels (Group vs Center) and filtering options.
this.namedParameterJdbcTemplate.query(mapper.collectionSheetSchema(false), namedParameters, mapper);
org.apache.fineract.portfolio.floatingrates.service.FloatingRatesReadPlatformServiceImpl JDBC The class interacts directly with the database using Spring's JdbcTemplate. It constructs SQL queries manually using StringBuilder within inner RowMapper classes to select data from multiple tables.
final String sql = "select " + rateMapper.schema() + " where rate.id = ?";
return this.jdbcTemplate.queryForObject(sql, rateMapper, new Object[] { floatingRateId });
org.apache.fineract.portfolio.fund.service JDBC The service uses Spring's JdbcTemplate to execute raw SQL queries against the database. It maps the results manually using a RowMapper implementation.
this.jdbcTemplate.query(sql, rm);
org.apache.fineract.portfolio.group.service JDBC The class interacts with the database by defining a raw SQL schema and mapping the resulting JDBC ResultSet to Java objects. It uses Spring's RowMapper interface to facilitate this within the Spring JDBC framework.
sqlBuilder.append("g.id as id, g.account_no as accountNumber... from m_group g ");
// ...
final Long id = rs.getLong("id");
org.apache.fineract.portfolio.group.service JDBC The service interacts with the database using Spring's JdbcTemplate to execute a raw SQL SELECT query. It manually maps the ResultSet to domain objects using a custom RowMapper.
final String sql = "select " + rm.groupLevelSchema();
return this.jdbcTemplate.query(sql, rm);
org.apache.fineract.portfolio.group.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It constructs SQL strings dynamically using StringBuilder and a custom SQLBuilder utility to manage WHERE clauses and arguments safely.
this.jdbcTemplate.query(sqlBuilder.toString(), ALL_GROUP_TYPES_DATA_MAPPER, extraCriteria.getArguments());
org.apache.fineract.portfolio.group.service.CenterReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It defines SQL schemas in inner RowMapper classes and constructs dynamic WHERE clauses using a SQLBuilder helper. It interacts with tables related to groups, offices, staff, calendars, and loans.
this.jdbcTemplate.query(sql, this.centerMapper, new Object[] { centerId });
org.apache.fineract.portfolio.group.service.GroupRolesReadPlatformServiceImpl JDBC The service uses Spring's JdbcTemplate to execute raw SQL SELECT queries. It manually maps ResultSets to domain objects using a custom RowMapper.
this.jdbcTemplate.query(sql, mapper, new Object[] { groupId });
org.apache.fineract.portfolio.interestratechart.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It constructs SQL strings dynamically to handle database-specific syntax via DatabaseSpecificSQLGenerator. It reads from multiple joined tables to assemble complex objects.
this.jdbcTemplate.query(sql, this.chartSlabExtractor, new Object[] { chartId });
org.apache.fineract.portfolio.interestratechart.service.InterestRateChartReadPlatformServiceImpl JDBC The class uses Spring JdbcTemplate to execute raw SQL queries. It constructs complex SQL strings involving multiple joins (charts, slabs, incentives, codes, currencies) and uses custom ResultSetExtractors to map the flat result set into a hierarchical object structure.
final String sql = "select " + CHART_ROW_MAPPER.schema() + " where irc.id = ?";
return this.jdbcTemplate.queryForObject(sql, CHART_ROW_MAPPER, chartId);
org.apache.fineract.portfolio.loanaccount.guarantor.service.GuarantorReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database. It constructs SQL strings dynamically using inner helper classes (Mappers) that define the schema and column selection. It uses PreparedStatement to bind parameters safely.
this.jdbcTemplate.query(con -> {
    PreparedStatement preparedStatement = con.prepareStatement(finalSql, ResultSet.TYPE_SCROLL_SENSITIVE,
            ResultSet.CONCUR_UPDATABLE);
    preparedStatement.setInt(1, AccountAssociationType.GUARANTOR_ACCOUNT_ASSOCIATION.getValue());
    preparedStatement.setLong(2, loanId);
    return preparedStatement;
}, rm);
org.apache.fineract.portfolio.loanaccount.jobs.applyholidaystoloans JDBC The class configures a Spring Batch Job which relies on a `JobRepository`. This repository persists the state of batch job executions, steps, and contexts to the database (typically tables like BATCH_JOB_INSTANCE, BATCH_JOB_EXECUTION) using JDBC or a similar datasource connection managed by the `PlatformTransactionManager`.
new StepBuilder(JobName.APPLY_HOLIDAYS_TO_LOANS.name(), jobRepository)
        .tasklet(applyHolidaysToLoansTasklet, transactionManager).build();
org.apache.fineract.portfolio.loanaccount.jobs.updateloanarrearsageing.LoanArrearsAgeingUpdateHandler JDBC The class uses Spring's JdbcTemplate and NamedParameterJdbcTemplate to perform direct SQL operations. It constructs complex SQL strings dynamically to handle aggregations and filtering logic for loan arrears calculations.
jdbcTemplate.update("delete from m_loan_arrears_aging where loan_id=?", loanId);
org.apache.fineract.portfolio.loanaccount.loanschedule.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database. It reads from the loan repayment schedule history tables.
Integer max = this.jdbcTemplate.queryForObject(sql, new Object[] { loanId }, Integer.class);
org.apache.fineract.portfolio.loanaccount.rescheduleloan.service.LoanRescheduleRequestReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It manually maps ResultSets to Java objects using inner RowMapper classes. It constructs SQL strings dynamically for filtering.
this.jdbcTemplate.query(sql, LOAN_RESCHEDULE_REQUEST_ROW_MAPPER, loanId);
org.apache.fineract.portfolio.loanaccount.service JDBC The service uses Spring's JdbcTemplate to execute direct SQL queries. It performs a read operation involving joins across three tables to link paid charges to their definitions and the transaction.
final String sql = "select " + rm.loanChargePaidBySchema() + " where lcpd.loan_transaction_id = ?";
return this.jdbcTemplate.query(sql, rm, transactionId);
org.apache.fineract.portfolio.loanaccount.service JDBC The service uses Spring's JdbcTemplate to execute raw SQL SELECT queries. It defines custom RowMappers (GLIMFieldsMapper, GLIMMapper, GLIMRepaymentMapper) to map the ResultSets to Java POJOs.
final String sql = "select " + rm.schema() + " and glim.id=?";
return this.jdbcTemplate.query(sql, rm, glimId);
org.apache.fineract.portfolio.loanaccount.service JDBC The class primarily uses Spring's `JdbcTemplate` and `NamedParameterJdbcTemplate` to execute raw SQL queries for data retrieval. This is done to optimize performance for read operations, avoiding the overhead of JPA entity management for complex reporting views. It also uses `LoanRepositoryWrapper` (JPA) for some domain logic and entity retrieval where necessary.
final String sql = "select " + rm.loanSchema() + " where l.account_no=?";
return this.jdbcTemplate.queryForObject(sql, rm, loanAccountNumber);
org.apache.fineract.portfolio.loanaccount.service JDBC The service uses Spring's JdbcTemplate to execute raw SQL queries against the database. It defines inner class RowMappers to map SQL result sets to Java objects.
this.jdbcTemplate.query(clientSql, staffClientMapper, loanOfficerId, ClientStatus.ACTIVE.getValue());
org.apache.fineract.portfolio.loanaccount.service.LoanAccrualWritePlatformServiceImpl JDBC The class uses a mix of Spring Data JPA (via `LoanRepository`, `LoanTransactionRepository`) for object retrieval and persistence, and raw Spring `JdbcTemplate` for specific updates to the `m_loan_charge_paid_by`, `m_loan_repayment_schedule`, and `m_loan` tables. This hybrid approach allows for domain-driven design where appropriate and optimized SQL execution for batch or specific field updates.
String repaymentUpdateSql = "UPDATE m_loan_repayment_schedule SET accrual_interest_derived=?, accrual_fee_charges_derived=?, "
        + "accrual_penalty_charges_derived=? WHERE  id=?";
this.jdbcTemplate.update(repaymentUpdateSql, totalAccInterest, totalAccFee, totalAccPenalty,
        scheduleAccrualData.getRepaymentScheduleId());
org.apache.fineract.portfolio.loanaccount.service.LoanArrearsAgingServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries and updates. It interacts with the 'm_loan_arrears_aging' table to store calculated overdue metrics and reads from 'm_loan' and 'm_loan_repayment_schedule_history' to derive these metrics.
this.jdbcTemplate.update("DELETE FROM m_loan_arrears_aging WHERE loan_id=?", loan.getId());
org.apache.fineract.portfolio.loanaccount.service.LoanChargeReadPlatformServiceImpl JDBC The class primarily uses Spring's JdbcTemplate to execute raw SQL SELECT queries. It constructs SQL strings manually, often using inner class RowMappers to define the schema and map ResultSet rows to DTOs. It also uses a Spring Data JPA repository (LoanChargeRepository) for a single ID lookup method.
final LoanChargeMapper rm = new LoanChargeMapper();
final String sql = "select " + rm.schema() + " where lc.id=? and lc.loan_id=?";
return this.jdbcTemplate.queryForObject(sql, rm, id, loanId);
org.apache.fineract.portfolio.loanproduct.productmix.service JDBC The service uses Spring's JdbcTemplate to execute raw SQL queries against the database. It joins the `m_product_mix` and `m_product_loan` tables to retrieve product mix configurations.
final String sql = "Select " + extractor.schema() + " where pm.product_id=?";
final Map<Long, ProductMixData> productMixData = this.jdbcTemplate.query(sql, extractor, productId);
org.apache.fineract.portfolio.loanproduct.service.LoanProductReadPlatformServiceImpl JDBC The class relies heavily on Spring's JdbcTemplate to perform read operations. It constructs raw SQL strings, often using string concatenation for dynamic clauses (like security scoping). It maps the results using custom RowMapper implementations (LoanProductMapper, LoanProductLookupMapper, etc.). One method uses Spring Data JPA (LoanProductRepository).
final String sql = "select " + rm.loanProductSchema() + " where lp.id = ?";
return this.jdbcTemplate.queryForObject(sql, rm, loanProductId);
org.apache.fineract.portfolio.meeting.attendance.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries directly against the database. It manually maps the result set to Java objects using a RowMapper.
this.jdbcTemplate.query(sql, rm, new Object[] { meetingId });
org.apache.fineract.portfolio.meeting.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL SELECT queries. It manually maps ResultSets to objects using a RowMapper implementation.
this.jdbcTemplate.queryForObject(sql, rm, new Object[] { meetingId, entityId, entityTypeId });
org.apache.fineract.portfolio.note.service JDBC The class uses Spring's `JdbcTemplate` to execute raw SQL queries. It manually maps `ResultSet` data to Java objects using a custom `RowMapper`. It constructs dynamic SQL strings to handle different filtering criteria based on the entity type (Client, Loan, etc.).
return this.jdbcTemplate.queryForObject(sql, rm, paramList.toArray());
org.apache.fineract.portfolio.rate.service JDBC The class interacts with the database using Spring's JdbcTemplate. It constructs SQL SELECT statements by concatenating schema strings defined in the inner RateMapper class. It maps the ResultSet to RateData POJOs.
this.jdbcTemplate.query(sql, rm, new Object[] { loanId });
org.apache.fineract.portfolio.savings.jobs.generateadhocclientschhedule JDBC The class uses Spring's JdbcTemplate to execute dynamic SQL queries. It performs data insertion based on ad-hoc definitions and updates metadata in the 'm_adhoc' table.
jdbcTemplate.update("UPDATE m_adhoc SET last_run=? WHERE id=?", new Date(), adhoc.getId());
org.apache.fineract.portfolio.savings.jobs.generateadhocclientschhedule.GenerateAdhocClientScheduleConfig JDBC The configuration class injects a Spring JdbcTemplate and passes it to the GenerateAdhocClientScheduleTasklet. While this configuration file does not execute queries itself, it explicitly wires the JDBC access component into the job's execution logic.
return new GenerateAdhocClientScheduleTasklet(adHocReadPlatformService, jdbcTemplate);
org.apache.fineract.portfolio.savings.jobs.generaterdschedule JDBC The class uses Spring's `JdbcTemplate` to execute raw SQL INSERT statements constructed via string concatenation. It writes directly to the `m_mandatory_savings_schedule` table.
jdbcTemplate.update(insertSql + sb);
org.apache.fineract.portfolio.savings.jobs.postinterestforsavings.PostInterestForSavingConfig JDBC The class interacts with the database primarily through the Spring Batch 'JobRepository' for managing job state and metadata. Additionally, it injects 'JdbcTemplate' and 'SavingsAccountRepositoryWrapper', indicating that the underlying tasklet or the configuration context interacts with savings account tables, although these fields are not explicitly used in the configuration methods shown.
@Autowired
private JobRepository jobRepository;
@Autowired
private JdbcTemplate jdbcTemplate;
org.apache.fineract.portfolio.savings.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It constructs SQL strings dynamically using StringBuilder and maps the results to Java objects using custom RowMapper implementations.
this.jdbcTemplate.query(sqlBuilder.toString(), depositProductMapper, depositAccountType.getValue());
org.apache.fineract.portfolio.savings.service JDBC The class uses Spring's `JdbcTemplate` to execute raw SQL queries. It manually constructs SQL strings involving multiple joins to retrieve transaction details and maps the results to Java objects using a custom `RowMapper`.
sqlBuilder.append("select " + sqlGenerator.calcFoundRows() + " ");
sqlBuilder.append(this.mapper.schema());
sqlBuilder.append(" where tr.savings_account_id = ? ");
paramObj.add(savingsId);
org.apache.fineract.portfolio.savings.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database. It manually constructs SQL strings, including dynamic WHERE clauses for security scoping, and maps the results to Java objects using custom RowMapper implementations.
this.jdbcTemplate.query(sql, this.savingsProductRowMapper, new Object[] { DepositAccountType.SAVINGS_DEPOSIT.getValue() });
org.apache.fineract.portfolio.savings.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It manually maps ResultSets to domain objects using inner classes that implement RowMapper and ResultSetExtractor. It handles complex joins to retrieve hierarchical data (Chart -> Slabs -> Incentives).
this.jdbcTemplate.query(sql.toString(), this.chartExtractor, chartId);
org.apache.fineract.portfolio.savings.service.DepositAccountReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It constructs SQL strings dynamically using StringBuilder and maps the results to Java objects using custom RowMapper implementations.
final StringBuilder sqlBuilder = new StringBuilder(400);
sqlBuilder.append("select ");
sqlBuilder.append(depositAccountMapper.schema());
sqlBuilder.append(" where sa.deposit_type_enum = ? ");
return jdbcTemplate.query(sqlBuilder.toString(), depositAccountMapper, new Object[] { depositAccountType.getValue() });
org.apache.fineract.portfolio.savings.service.GSIMReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It defines custom RowMappers (GSIMFieldsMapper, GSIMMapper, SavingsAccountSummaryDataMapper) to map ResultSets to domain objects. It constructs SQL strings dynamically in some cases and uses ColumnValidator to prevent SQL injection.
this.jdbcTemplate.query(sql, rm, new Object[] { gsimId });
org.apache.fineract.portfolio.savings.service.SavingsAccountChargeReadPlatformServiceImpl JDBC The class interacts with the database using Spring's JdbcTemplate. It constructs raw SQL queries to read data from the 'm_savings_account_charge' table and joins it with 'm_charge', 'm_organisation_currency', and 'm_savings_account' tables. It uses custom RowMapper implementations to map the ResultSet to domain objects.
final String sql = "select " + rm.schema() + " where sc.id=? and sc.savings_account_id=?";
return this.jdbcTemplate.queryForObject(sql, rm, new Object[] { id, savingsAccountId });
org.apache.fineract.portfolio.savings.service.SavingsAccountReadPlatformServiceImpl JDBC The class primarily uses Spring's `JdbcTemplate` to perform read-only operations against the database. It constructs SQL queries dynamically using `StringBuilder` to handle optional search parameters and joins multiple tables (account, product, client, group, transactions, etc.) to assemble rich DTOs. It uses custom `RowMapper` and `ResultSetExtractor` implementations to map the relational data to object structures. There is minor usage of `SavingsAccountRepositoryWrapper` (Spring Data) for external ID lookup.
final StringBuilder sqlBuilder = new StringBuilder("select " + this.savingAccountMapper.schema());
sqlBuilder.append(" where sa.client_id = ? and sa.status_enum = 300 ");
final Object[] queryParameters = new Object[] { clientId };
return this.jdbcTemplate.query(sqlBuilder.toString(), this.savingAccountMapper, queryParameters);
org.apache.fineract.portfolio.savings.service.SavingsSchedularInterestPoster JDBC The class uses Spring's `JdbcTemplate` to perform batch SQL operations for performance efficiency. It constructs raw SQL `INSERT` and `UPDATE` statements for savings transactions, account summaries, and general ledger journal entries, executing them in batches rather than individually.
this.jdbcTemplate.batchUpdate(queryForJGLUpdate, paramsForGLInsertion);
org.apache.fineract.portfolio.savings.service.search.SavingsAccountTransactionsSearchServiceImpl JDBC The class interacts with the database using Spring's `JdbcTemplate`. It dynamically constructs SQL strings (SELECT, FROM, WHERE, ORDER BY) based on input filters and executes them. It uses `DatabaseSpecificSQLGenerator` to handle SQL dialect differences.
List<SavingsAccountTransactionData> results = this.jdbcTemplate.query(query.toString(), tm, args);
org.apache.fineract.portfolio.search.service JDBC This class acts as a utility for JDBC-based database interactions. It does not execute queries itself but prepares SQL fragments (WHERE clauses) and processes JDBC `SqlRowSet` results. It bridges the gap between API search parameters and raw SQL execution, handling dialect differences via `DatabaseSpecificSQLGenerator`.
public static void buildCondition(...) {
    where.append(operator.formatPlaceholder(sqlGenerator, definition, paramCount, alias));
    if (values != null) {
        params.addAll(values);
    }
}
org.apache.fineract.portfolio.search.service.SearchReadPlatformServiceImpl JDBC The class uses Spring's NamedParameterJdbcTemplate to execute raw SQL queries. It manually constructs SQL strings involving multiple joins and unions to aggregate data from various tables.
return namedParameterJdbcTemplate.query(searchSchema(searchConditions), params, rm);
org.apache.fineract.portfolio.search.starter JDBC This configuration class injects the 'NamedParameterJdbcTemplate' into the 'SearchReadPlatformService', enabling the service to perform database operations. While this file does not execute SQL directly, it is responsible for wiring the database access component.
public SearchReadPlatformService searchReadPlatformService(NamedParameterJdbcTemplate namedParameterJdbcTemplate, ...) { return new SearchReadPlatformServiceImpl(namedParameterJdbcTemplate, ...); }
org.apache.fineract.portfolio.self.account.service JDBC The service uses Spring's JdbcTemplate to execute raw SQL queries against the application database. It performs complex read operations involving joins across multiple tables and a UNION of two select statements.
this.jdbcTemplate.query(sql.toString(), mapper, new Object[] { user.getId(), user.getId() });
org.apache.fineract.portfolio.self.account.service.SelfBeneficiariesTPTReadPlatformServiceImpl JDBC The service uses Spring's JdbcTemplate to execute raw SQL queries. It constructs complex SQL strings involving joins and unions within inner mapper classes and executes them to retrieve data mapped to Java objects.
this.jdbcTemplate.query(this.mapper.schema(), this.mapper, new Object[] { user.getId(), user.getId() });
org.apache.fineract.portfolio.self.client.service.AppuserClientMapperReadServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database to verify user-client mappings.
this.jdbcTemplate.queryForObject(
        "select case when (count(*) > 0) then true else false end "
                + " from m_selfservice_user_client_mapping where client_id = ? and appuser_id = ?",
        Boolean.class, clientId, appUserId);
org.apache.fineract.portfolio.self.loanaccount.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries directly against the database to check for data existence.
this.jdbcTemplate.queryForObject("select case when (count(*) > 0) then true else false end ...", Boolean.class, loanId, appUserId);
org.apache.fineract.portfolio.self.loanaccount.starter.SelfLoanAccountConfiguration JDBC The class configures a service that interacts with the database using Spring's JdbcTemplate. While this specific file does not contain SQL queries, it injects the JdbcTemplate into the service implementation (AppuserLoansMapperReadServiceImpl) which performs the actual database operations.
public AppuserLoansMapperReadService appuserLoansMapperReadService(JdbcTemplate jdbcTemplate) {
    return new AppuserLoansMapperReadServiceImpl(jdbcTemplate);
}
org.apache.fineract.portfolio.self.pockets.service JDBC The class uses Spring's JdbcTemplate for direct SQL execution to validate mappings and Repository wrappers (likely wrapping JPA/Spring Data) for retrieving domain entities.
final String sql = "select count(id) from m_pocket_accounts_mapping mapping where pocket_id = ? and account_id = ? and account_type = ?";
int count = this.jdbcTemplate.queryForObject(sql, Integer.class, pocketId, accountId, accountType);
org.apache.fineract.portfolio.self.registration.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database.
String sql = "select count(*) from m_client where account_no = ? ...";
int count = this.jdbcTemplate.queryForObject(sql, Integer.class, params);
org.apache.fineract.portfolio.self.savings.service JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries directly against the database to check for the existence of a relationship between users and savings accounts.
this.jdbcTemplate.queryForObject("select case when (count(*) > 0) then true else false end ...", Boolean.class, savingsId, appUserId);
org.apache.fineract.portfolio.self.savings.starter.SelfSavingsConfiguration JDBC The configuration class injects a Spring `JdbcTemplate` and passes it to the `AppuserSavingsMapperReadServiceImpl`. This indicates that the underlying service performs database operations using the JDBC template abstraction, likely executing raw SQL queries to read data.
public AppuserSavingsMapperReadService appuserSavingsMapperReadService(JdbcTemplate jdbcTemplate) {
    return new AppuserSavingsMapperReadServiceImpl(jdbcTemplate);
}
org.apache.fineract.portfolio.self.shareaccounts.service JDBC Uses Spring JdbcTemplate to execute a raw SQL SELECT query to verify data existence.
this.jdbcTemplate.queryForObject("select case when (count(*) > 0) then true else false end ...", Boolean.class, accountId, appUserId);
org.apache.fineract.portfolio.shareaccounts.service JDBC The service uses Spring's JdbcTemplate to execute raw SQL queries. It manually constructs SQL strings involving joins between charge, currency, and share account charge tables and maps the results to Data Transfer Objects (DTOs).
this.jdbcTemplate.query(sqlBuilder.toString(), rm, new Object[] { accountId });
org.apache.fineract.portfolio.shareaccounts.service JDBC The service uses Spring's JdbcTemplate to execute raw SQL queries against the database.
this.jdbcTemplate.query(sql, mapper, new Object[] { accountId });
org.apache.fineract.portfolio.shareaccounts.service.ShareAccountDividendReadPlatformServiceImpl JDBC The class interacts directly with the database using Spring's JdbcTemplate. It constructs SQL queries manually to join multiple tables related to share accounts and dividends. It uses a custom RowMapper to map the result set to domain objects.
sb.append("select ");
 sb.append(" sadd.id as id, ");
 sb.append(" sa.savings_account_id as savingsAccountId ");
 sb.append(" from m_share_account_dividend_details sadd");
 // ... joins ...
 return this.jdbcTemplate.queryForList(sb.toString(), ...);
org.apache.fineract.portfolio.shareaccounts.service.ShareAccountReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL SELECT queries against the database. It constructs SQL strings manually (often using StringBuilder) and maps the ResultSets to Java objects using inner class RowMappers. This approach is used for read-only operations to optimize performance and avoid the overhead of JPA entities.
String query = "select " + mapper.schema() + "where sa.id=?";
ShareAccountData data = (ShareAccountData) this.jdbcTemplate.queryForObject(query, mapper, id);
org.apache.fineract.portfolio.shareproducts.service JDBC The class uses Spring's JdbcTemplate to execute SQL queries directly against the database. It constructs SELECT statements with joins between 'm_share_product_dividend_pay_out' and 'm_share_product' tables.
final StringBuilder sqlBuilder = new StringBuilder(200);
sqlBuilder.append("select " + sqlGenerator.calcFoundRows() + " ");
sqlBuilder.append(shareProductDividendMapper.schema());
sqlBuilder.append(" where sp.id = ? ");
// ...
return this.paginationHelper.fetchPage(this.jdbcTemplate, sqlBuilder.toString(), paramsObj, shareProductDividendMapper);
org.apache.fineract.portfolio.shareproducts.service.ShareProductReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries against the database. It manually maps ResultSets to Java objects using custom RowMapper implementations. It constructs SQL strings dynamically for pagination and filtering.
final String sql = "select " + mapper.schema() + " where shareproduct.id = ?";
ShareProductData data = (ShareProductData) this.jdbcTemplate.queryForObject(sql, mapper, new Object[] { productId });
org.apache.fineract.portfolio.tax.service.TaxReadPlatformServiceImpl JDBC The class uses Spring's JdbcTemplate to execute raw SQL queries. It defines SQL schemas within private static inner classes (RowMappers) using StringBuilder. It performs READ operations on tax-related tables.
String sql = "select " + TAX_COMPONENT_MAPPER.getSchema();
return this.jdbcTemplate.query(sql, TAX_COMPONENT_MAPPER);
org.apache.fineract.spm.service.ScorecardReadPlatformServiceImpl JDBC The service uses Spring's JdbcTemplate to execute raw SQL SELECT queries. It manually maps ResultSets to objects using inner RowMapper classes.
this.jdbcTemplate.query(sql, scm, new Object[] { surveyId });
org.apache.fineract.useradministration.service JDBC The class interacts directly with the database using Spring's JdbcTemplate. It constructs raw SQL strings for SELECT operations and maps the results to Java objects using a custom RowMapper.
this.jdbcTemplate.query(sql, this.roleRowMapper);
org.apache.fineract.useradministration.service JDBC The class uses Spring's `JdbcTemplate` to execute raw SQL SELECT queries. It manually maps the results to objects using a custom `RowMapper`.
return this.jdbcTemplate.query(sql, mapper, new Object[] {});
org.apache.fineract.useradministration.service JDBC The class uses a hybrid approach. It primarily uses Spring JDBC (JdbcTemplate) for read-heavy operations (lists, lookups, existence checks) by executing raw SQL queries against the 'm_appuser' and 'm_office' tables. It also uses Spring Data JPA (AppUserRepository) to retrieve full domain entities for detailed single-user views.
final String sql = "select " + mapper.schema();
return this.jdbcTemplate.query(sql, mapper, new Object[] { hierarchySearchString });
org.apache.fineract.useradministration.service.PasswordValidationPolicyReadPlatformServiceImpl JDBC The class interacts directly with the database using Spring's JdbcTemplate to execute SQL queries. It reads from the 'm_password_validation_policy' table.
this.jdbcTemplate.query(sql, this.passwordValidationPolicyMapper);
fineract-provider/dependencies.gradle JPA The build file defines the database technology stack by importing `spring-boot-starter-data-jpa` and explicitly swapping the default Hibernate provider for EclipseLink (`org.eclipse.persistence.jpa`). It also includes the `liquibase-core` library for database schema migrations and the `mysql-socket-factory-connector-j-8` for connecting to MySQL databases (specifically Google Cloud SQL).
implementation ('org.springframework.boot:spring-boot-starter-data-jpa') {
    exclude group: 'org.hibernate'
}
implementation('org.eclipse.persistence:org.eclipse.persistence.jpa') {
    exclude group: 'org.eclipse.persistence', module: 'jakarta.persistence'
}
// ...
implementation 'com.google.cloud.sql:mysql-socket-factory-connector-j-8'
fineract-core/dependencies.gradle JPA The build file defines the persistence stack by importing 'spring-boot-starter-data-jpa' while explicitly excluding the default 'org.hibernate' group. It simultaneously adds 'org.eclipse.persistence.jpa', thereby configuring the application to use the Java Persistence API (JPA) with EclipseLink as the underlying ORM provider instead of Hibernate.
implementation ('org.springframework.boot:spring-boot-starter-data-jpa') {
    exclude group: 'org.hibernate'
}
implementation('org.eclipse.persistence:org.eclipse.persistence.jpa') {
    exclude group: 'org.eclipse.persistence', module: 'jakarta.persistence'
}
fineract-investor/dependencies.gradle JPA The build file configures the project's database integration layer by importing the Spring Boot Data JPA starter. Crucially, it explicitly excludes the default Hibernate provider and includes the EclipseLink JPA library instead, establishing EclipseLink as the ORM provider for the application.
implementation ('org.springframework.boot:spring-boot-starter-data-jpa') {
    exclude group: 'org.hibernate'
}
implementation('org.eclipse.persistence:org.eclipse.persistence.jpa')
org.apache.fineract.accounting.closure.domain JPA The class is a JPA entity annotated with @Entity, mapping to the 'acc_gl_closure' table. It uses @ManyToOne for the relationship with the Office entity and defines a unique constraint on office_id and closing_date.
@Entity
@Table(name = "acc_gl_closure", uniqueConstraints = {
        @UniqueConstraint(columnNames = { "office_id", "closing_date" }, name = "office_id_closing_date") })
public class GLClosure extends AbstractAuditableCustom {
org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount JPA The class is a JPA entity that maps to a relational database table. It defines the schema for storing financial activity account mappings, including a foreign key relationship to the GL Account table.
@Entity
@Table(name = "acc_gl_financial_activity_account")
public class FinancialActivityAccount extends AbstractPersistableCustom {
org.apache.fineract.accounting.glaccount.domain JPA The class is a JPA Entity that maps directly to a relational database table. It defines column mappings for financial data.
@Entity
@Table(name = "m_trial_balance")
public class TrialBalance extends AbstractPersistableCustom {
org.apache.fineract.accounting.glaccount.domain.GLAccount JPA The class is a JPA Entity annotated with @Entity and @Table. It maps to the 'acc_gl_account' table. It defines relationships using @ManyToOne for the parent account and tag, and @OneToMany for child accounts. It uses @Column annotations to define constraints like nullability and length.
@Entity
@Table(name = "acc_gl_account", uniqueConstraints = { @UniqueConstraint(columnNames = { "gl_code" }, name = "acc_gl_code") })
public class GLAccount extends AbstractPersistableCustom { ... }
org.apache.fineract.accounting.journalentry.domain JPA The class is a JPA Entity annotated with @Entity and @Table, mapping directly to the relational database table 'acc_gl_journal_entry'. It uses @ManyToOne annotations to define foreign key relationships with Office, PaymentDetail, and GLAccount tables.
@Entity
@Table(name = "acc_gl_journal_entry")
public class JournalEntry extends AbstractAuditableWithUTCDateTimeCustom {
org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping JPA The class is a JPA Entity mapped to the 'acc_product_mapping' table. It uses Jakarta Persistence annotations to define the table structure, columns, and foreign key relationships to other tables (GL Accounts, Charges, Payment Types).
@Entity
@Table(name = "acc_product_mapping", uniqueConstraints = { @UniqueConstraint(columnNames = { "product_id", "product_type",
        "financial_account_type", "payment_type" }, name = "financial_action") })
public class ProductToGLAccountMapping extends AbstractPersistableCustom { ... }
org.apache.fineract.accounting.producttoaccountmapping.service JPA The service uses Spring's `@Transactional` annotation to manage transaction boundaries. It delegates actual database persistence operations to helper classes (`LoanProductToGLAccountMappingHelper`, etc.), which likely use JPA or Spring Data Repositories to save mapping entities to the database.
this.loanProductToGLAccountMappingHelper.saveLoanToAssetOrLiabilityAccountMapping(element, LoanProductAccountingParams.FUND_SOURCE.getValue(), loanProductId, CashAccountsForLoan.FUND_SOURCE.getValue());
org.apache.fineract.accounting.provisioning.domain JPA The class is a JPA entity that maps to the 'm_provisioning_history' table. It defines columns for journal entry status and audit dates, and manages relationships to other entities.
@Entity
@Table(name = "m_provisioning_history")
public class ProvisioningEntry extends AbstractPersistableCustom { ... }
org.apache.fineract.accounting.provisioning.domain.LoanProductProvisioningEntry JPA The class is a JPA Entity that maps directly to the 'm_loanproduct_provisioning_entry' database table. It defines Many-to-One relationships with other entities such as ProvisioningEntry, Office, LoanProduct, ProvisioningCategory, and GLAccount.
@Entity
@Table(name = "m_loanproduct_provisioning_entry")
public class LoanProductProvisioningEntry extends AbstractPersistableCustom {
    @ManyToOne(optional = false)
    @JoinColumn(name = "history_id", referencedColumnName = "id", nullable = false)
    private ProvisioningEntry entry;
org.apache.fineract.accounting.rule.domain JPA The class is a JPA entity mapped to the 'acc_rule_tags' table using Jakarta Persistence annotations. It defines the schema structure including unique constraints and foreign key relationships.
@Entity
@Table(name = "acc_rule_tags"...)
public class AccountingTagRule extends AbstractPersistableCustom { ... }
org.apache.fineract.accounting.rule.domain.AccountingRule JPA The class is a JPA Entity mapped to the 'acc_accounting_rule' table. It defines relationships with 'Office' (ManyToOne), 'GLAccount' (ManyToOne for debit/credit accounts), and 'AccountingTagRule' (OneToMany).
@Entity
@Table(name = "acc_accounting_rule", uniqueConstraints = {
        @UniqueConstraint(columnNames = { "name" }, name = "accounting_rule_name_unique") })
public class AccountingRule extends AbstractPersistableCustom {
org.apache.fineract.adhocquery.domain.AdHoc JPA The class is a JPA entity mapped to the 'm_adhoc' database table using Jakarta Persistence annotations.
@Entity
@Table(name = "m_adhoc")
public class AdHoc extends AbstractAuditableCustom {
org.apache.fineract.batch.service.BatchApiServiceImpl JPA The class directly manages database interactions through programmatic transaction control using Spring's 'PlatformTransactionManager' and 'TransactionTemplate'. It injects a 'jakarta.persistence.EntityManager' via '@PersistenceContext' to interact with the persistence layer. Transactions are not managed declaratively with '@Transactional' annotations, but are instead explicitly started and controlled within the 'callInTransaction' method. This allows for two distinct modes: one where the entire batch runs in a single transaction, and another where each root request gets a new transaction. Before executing a command, it explicitly calls 'entityManager.flush()' to synchronize the persistence context with the database within an active transaction.
return transactionTemplate.execute(status -> {
    BatchRequestContextHolder.setEnclosingTransaction(Optional.of(status));
    try {
        responseList.addAll(request.get());
        return responseList;
    } catch (BatchExecutionException ex) {
        status.setRollbackOnly();
        return List.of(buildErrorResponse(ex.getCause(), ex.getRequest()));
    } catch (RuntimeException ex) {
        status.setRollbackOnly();
        return buildErrorResponses(ex, responseList);
    }
});
org.apache.fineract.cob.domain JPA The class is a JPA Entity that maps directly to the 'm_loan_account_locks' table. It uses standard Jakarta Persistence annotations to define the schema mapping, including primary key, columns, and optimistic locking version.
@Entity
@Table(name = "m_loan_account_locks")
public class LoanAccountLock {
    @Id
    @Column(name = "loan_id", nullable = false)
    private Long loanId;
...
org.apache.fineract.cob.domain JPA The class is a JPA Entity mapped to the 'm_batch_business_steps' table. It uses annotations to define column mappings for job configuration data.
@Entity
@Table(name = "m_batch_business_steps")
public class BatchBusinessStep extends AbstractPersistableCustom {
    @Column(name = "job_name", nullable = false)
    private String jobName;
}
org.apache.fineract.cob.domain JPA The class uses the JPA EntityManager to execute a native SQL UPDATE statement. It interacts directly with the 'm_loan' and 'm_loan_account_locks' tables to perform a bulk update based on complex criteria involving subqueries.
entityManager.createNativeQuery(sql).executeUpdate();
org.apache.fineract.cob.service JPA This interface is explicitly designed to manage the lifecycle of JPA entities (indicated by the extension of AbstractPersistableCustom). Implementations will interact with the database to refresh entity states.
S reload(S input);
org.apache.fineract.commands.domain.CommandSource JPA The class is a JPA Entity annotated with @Entity and @Table(name = 'm_portfolio_command_source'). It maps Java fields to database columns using @Column, @ManyToOne, and @JoinColumn annotations. It relies on a JPA provider (like Hibernate) to handle persistence operations.
@Entity
@Table(name = "m_portfolio_command_source")
public class CommandSource extends AbstractPersistableCustom {
    @Column(name = "action_name", nullable = true, length = 100)
    private String actionName;
    // ...
org.apache.fineract.commands.service JPA The file defines a static inner class `DummyCommandSource` annotated as a JPA entity, likely used to simulate database persistence objects during the test execution without hitting a real database.
@Entity
    @Table(name = "m_portfolio_command_source")
    public static class DummyCommandSource extends CommandSource {
org.apache.fineract.infrastructure.accountnumberformat.domain JPA The class is a JPA Entity mapped to a database table. It uses Jakarta Persistence annotations to define the table name, unique constraints, and column mappings for account type, prefix type, and prefix character.
@Entity
@Table(name = AccountNumberFormatConstants.ACCOUNT_NUMBER_FORMAT_TABLE_NAME...)
public class AccountNumberFormat extends AbstractPersistableCustom { ... }
org.apache.fineract.infrastructure.bulkimport.domain.ImportDocument JPA The class is a JPA Entity mapped to the 'm_import_document' table. It uses annotations to define column mappings, relationships (OneToOne, ManyToOne), and table configuration.
@Entity
@Table(name = "m_import_document")
public class ImportDocument extends AbstractPersistableCustom {
    @OneToOne
    @JoinColumn(name = "document_id")
    private Document document;
    // ...
org.apache.fineract.infrastructure.businessdate.domain.BusinessDate JPA The class is a JPA entity mapped to the relational database table 'm_business_date'. It uses standard Jakarta Persistence annotations to define the mapping, including column definitions and unique constraints.
@Entity
@Table(name = "m_business_date", uniqueConstraints = { @UniqueConstraint(name = "uq_business_date_type", columnNames = { "type" }) })
public class BusinessDate extends AbstractAuditableWithUTCDateTimeCustom { ... }
org.apache.fineract.infrastructure.cache.domain.PlatformCache JPA The class is a JPA Entity that maps to the 'c_cache' database table. It uses standard Jakarta Persistence annotations to define the table name and column mappings for the cache configuration.
@Entity
@Table(name = "c_cache")
public class PlatformCache extends AbstractPersistableCustom {
    @Column(name = "cache_type_enum")
    private Integer cacheType;
org.apache.fineract.infrastructure.cache.service JPA The class participates in database transactions via the Spring `@Transactional` annotation. While it does not execute SQL directly, it delegates persistence operations to `ConfigurationDomainService`, which updates the cache configuration in the database.
@Transactional
@Override
public Map<String, Object> switchToCache(final CacheType toCacheType) {
    // ...
    if (!changes.isEmpty()) {
        this.configurationDomainService.updateCache(toCacheType);
    }
    return changes;
}
org.apache.fineract.infrastructure.campaigns.email.domain JPA This class is a JPA Entity that maps directly to a relational database table named 'scheduled_email_configuration'. It defines the schema for storing email configuration settings, specifically a name and a value column.
@Entity
@Table(name = "scheduled_email_configuration")
public class EmailConfiguration extends AbstractPersistableCustom {
    @Column(name = "name", nullable = false)
    private String name;
}
org.apache.fineract.infrastructure.campaigns.email.domain.EmailCampaign JPA The class is a JPA Entity mapped to the 'scheduled_email_campaign' table. It uses Jakarta Persistence annotations to define the table mapping, column definitions, and relationships (ManyToOne) with other entities like AppUser and Report.
@Entity
@Table(name = "scheduled_email_campaign")
public class EmailCampaign extends AbstractPersistableCustom {
    @Column(name = "campaign_name", nullable = false)
    private String campaignName;
    ...
org.apache.fineract.infrastructure.campaigns.email.domain.EmailMessage JPA The class is a JPA Entity mapped to the 'scheduled_email_messages_outbound' table. It uses standard Jakarta Persistence annotations to define the table mapping, columns, and relationships (ManyToOne) with other entities like Group, Client, and Staff.
@Entity
@Table(name = "scheduled_email_messages_outbound")
public class EmailMessage extends AbstractPersistableCustom { ... }
org.apache.fineract.infrastructure.campaigns.email.handler JPA The class defines a transactional boundary using Spring's `@Transactional` annotation for a database write operation. While it does not execute SQL or JPA calls directly, it delegates to `EmailCampaignWritePlatformService` which performs the persistence logic (likely using JPA/Hibernate given the Fineract context).
@Transactional
@Override
public CommandProcessingResult processCommand(JsonCommand command) {
    return this.emailCampaignWritePlatformService.delete(command.entityId());
}
org.apache.fineract.infrastructure.campaigns.email.handler JPA The class manages database transactions via the `@Transactional` annotation while delegating the actual data modification (deletion) to the `EmailWritePlatformService`. Although direct SQL or Repository calls are not present in this file, it orchestrates the transactional context for the database operation.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {

        return this.writePlatformService.delete(command.entityId());
    }
org.apache.fineract.infrastructure.campaigns.sms.domain.SmsCampaign JPA The class is a standard JPA Entity mapped to the 'sms_campaign' table. It uses Jakarta Persistence annotations to define the table structure, columns, and relationships (ManyToOne with Report and AppUser).
@Entity
@Table(name = "sms_campaign", uniqueConstraints = { @UniqueConstraint(columnNames = { "campaign_name" }, name = "campaign_name_UNIQUE") })
public class SmsCampaign extends AbstractPersistableCustom {
org.apache.fineract.infrastructure.codes.domain.Code JPA The class is a JPA Entity mapped to the 'm_code' table. It defines columns for 'code_name' and 'is_system_defined'. It also manages a One-to-Many relationship with the 'CodeValue' entity.
@Entity
@Table(name = "m_code", uniqueConstraints = { @UniqueConstraint(columnNames = { "code_name" }, name = "code_name") })
public class Code extends AbstractPersistableCustom { ... }
org.apache.fineract.infrastructure.codes.domain.CodeValue JPA The class is a JPA Entity mapped to the 'm_code_value' table. It defines columns for code values, ordering, and relationships to the parent 'Code' entity.
@Entity
@Table(name = "m_code_value", uniqueConstraints = {
        @UniqueConstraint(columnNames = { "code_id", "code_value" }, name = "code_value_duplicate") })
public class CodeValue extends AbstractPersistableCustom { ... }
org.apache.fineract.infrastructure.configuration.domain JPA The class is a JPA Entity annotated with @Entity and @Table, mapping directly to the 'c_configuration' table in the database. It uses standard Jakarta Persistence annotations to define column mappings.
@Entity
@Table(name = "c_configuration")
public class GlobalConfigurationProperty extends AbstractPersistableCustom {
    @Column(name = "name", nullable = false)
    private String name;
}
org.apache.fineract.infrastructure.configuration.domain.ExternalService JPA The class is a JPA entity mapped to the 'c_external_service' table. It defines a unique constraint on the 'name' column and inherits persistence capabilities from a base class.
@Entity
@Table(name = "c_external_service", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "name_UNIQUE") })
public class ExternalService extends AbstractPersistableCustom {
org.apache.fineract.infrastructure.configuration.domain.ExternalServicePropertiesPK JPA This class is a JPA Embeddable type that maps a composite primary key to database columns. It defines the structure of the key used to access specific rows in the associated table.
@Column(name = "external_service_id")
private Long externalServiceId;
org.apache.fineract.infrastructure.configuration.domain.ExternalServicesProperties JPA This class is a JPA Entity that maps directly to the 'c_external_service_properties' table. It uses an embedded composite ID for the primary key.
@Entity
@Table(name = "c_external_service_properties")
public class ExternalServicesProperties {
    @EmbeddedId
    ExternalServicePropertiesPK externalServicePropertiesPK;
    @Column(name = "value", length = 250)
    private String value;
org.apache.fineract.infrastructure.core.config.jpa JPA This class configures the JPA layer using EclipseLink. It sets up the EntityManagerFactory, defines the persistence unit 'jpa-pu', and enables Spring Data JPA repositories. It uses a RoutingDataSource, implying support for dynamic or multi-tenant database connections.
return factoryBuilder.dataSource(getDataSource()).properties(vendorProperties).persistenceUnit("jpa-pu").packages(packagesToScan).jta(false).build();
org.apache.fineract.infrastructure.core.config.jpa.EntityManagerFactoryCustomizer JPA This interface is a configuration hook for the JPA layer. While it does not execute queries itself, it is integral to the setup of the database interaction layer by defining how the EntityManagerFactory is customized (e.g., scanning for entities, setting vendor properties).
default Map<String, Object> additionalVendorProperties() {
    return Collections.emptyMap();
}
org.apache.fineract.infrastructure.core.data.GenericEnumListConverter JPA This class implements the JPA `AttributeConverter` interface to handle the conversion of Java types to JDBC types automatically. It is used to map a `List<Enum>` in a Java Entity to a single `VARCHAR` or `TEXT` column in the database containing comma-separated values.
public abstract class GenericEnumListConverter<E extends Enum<E>> implements AttributeConverter<List<E>, String> { ... return valueStream.map(Enum::name).collect(Collectors.joining(SPLIT_CHAR)); }
org.apache.fineract.infrastructure.core.diagnostics.jpa JPA The class interacts directly with the JPA EntityManager infrastructure to provide diagnostic information. It specifically relies on the EclipseLink implementation (EntityManagerImpl) to access internal details like the UnitOfWork and ChangeSets.
EntityManagerFactory emf = applicationContext.getBean(EntityManagerFactory.class);
return (EntityManagerImpl) EntityManagerFactoryUtils.getTransactionalEntityManager(emf);
org.apache.fineract.infrastructure.core.diagnostics.jpa.StatementLoggingCustomizer JPA Configures the EclipseLink JPA provider to output SQL statements and parameters to the logs. It does not perform data access itself but modifies the behavior of the persistence unit to enable diagnostic logging.
return Map.of("eclipselink.logging.level.sql", SessionLog.FINE_LABEL, PersistenceUnitProperties.LOGGING_PARAMETERS, Boolean.TRUE.toString());
org.apache.fineract.infrastructure.core.domain JPA The class uses Jakarta Persistence (JPA) annotations to define a mapped superclass. It maps Java fields to specific database columns (e.g., 'createdby_id', 'created_date') to store audit information. Subclasses of this class will include these columns in their respective database tables.
@Column(name = "createdby_id")
private Long createdBy;
org.apache.fineract.infrastructure.core.domain JPA This class is a JPA AttributeConverter that automatically maps the 'ExternalId' Java type to a database column (likely VARCHAR) and vice versa.
@Override
public String convertToDatabaseColumn(ExternalId externalId) {
    return externalId != null ? externalId.getValue() : null;
}
org.apache.fineract.infrastructure.core.domain JPA The class acts as a JPA MappedSuperclass, defining the common database identity column and persistence lifecycle behavior for inheriting entities.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
org.apache.fineract.infrastructure.core.domain JPA The class uses Jakarta Persistence API (JPA) annotations to define a mapped superclass. It maps Java fields to specific database columns for auditing purposes (created/modified by/date). It does not access the database directly but defines the schema for subclasses.
@Column(name = CREATED_BY_DB_FIELD, nullable = false)
@Setter(onMethod = @__(@Override))
private Long createdBy;
org.apache.fineract.infrastructure.core.jpa JPA The class interacts directly with the Jakarta Persistence API (JPA) EntityManager to construct and execute dynamic queries. It uses the Criteria API to build queries programmatically based on Spring Data Specifications and Pageable objects.
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> query = builder.createQuery(Long.class);
Root<S> root = query.from(domainClass);
org.apache.fineract.infrastructure.core.persistence JPA This class acts as the Transaction Manager for JPA operations. It interacts directly with the Jakarta Persistence `EntityManager` to manage transaction states, specifically optimizing read-only operations by manipulating flush modes and clearing the persistence context.
EntityManager entityManager = getCurrentEntityManager();
if (entityManager != null) {
    entityManager.setFlushMode(FlushModeType.COMMIT);
}
org.apache.fineract.infrastructure.core.persistence JPA This class configures the JPA provider (EclipseLink) to use the correct SQL dialect for the connected database (MySQL or PostgreSQL). It does not execute queries itself but ensures the ORM layer is correctly configured to do so.
pui.addProperty(PersistenceUnitProperties.TARGET_DATABASE, targetDatabase);
org.apache.fineract.infrastructure.creditbureau.domain JPA The class is a JPA Entity that maps to the 'm_creditbureau_token' table. It uses standard Jakarta Persistence annotations to define the table name and column mappings for token properties.
@Entity
@Table(name = "m_creditbureau_token")
public class CreditBureauToken extends AbstractPersistableCustom {
    @Column(name = "token")
    private String accessToken;
}
org.apache.fineract.infrastructure.creditbureau.domain JPA The class is a JPA Entity mapped to a relational database table. It defines columns for configuration keys, values, and descriptions, and establishes a Many-to-One relationship with the OrganisationCreditBureau entity.
@Entity
@Table(name = "m_creditbureau_configuration")
public class CreditBureauConfiguration extends AbstractPersistableCustom {
    @Column(name = "configkey")
    private String configurationKey;
    // ...
}
org.apache.fineract.infrastructure.creditbureau.domain.CreditBureau JPA This class is a JPA Entity that maps directly to a database table using Jakarta Persistence annotations.
@Entity
@Table(name = "m_creditbureau")
public class CreditBureau extends AbstractPersistableCustom {
org.apache.fineract.infrastructure.creditbureau.domain.CreditBureauLoanProductMapping JPA The class is a JPA Entity mapped to the 'm_creditbureau_loanproduct_mapping' table. It defines columns for configuration settings and relationships to other entities.
@Entity
@Table(name = "m_creditbureau_loanproduct_mapping")
public class CreditBureauLoanProductMapping extends AbstractPersistableCustom { ... }
org.apache.fineract.infrastructure.creditbureau.domain.CreditReport JPA The class is a JPA Entity mapped to the relational database. It defines the schema for storing credit reports, including a lazy-loaded BLOB column for the report data.
@Entity
@Table(name = "m_creditreport")
public class CreditReport extends AbstractPersistableCustom {
    @Column(name = "credit_bureau_id")
    private Long creditBureauId;
}
org.apache.fineract.infrastructure.creditbureau.domain.OrganisationCreditBureau JPA The class is a JPA entity mapped to the 'm_organisation_creditbureau' table. It manages persistence for organisation-specific credit bureau configurations.
@Entity
@Table(name = "m_organisation_creditbureau")
public class OrganisationCreditBureau extends AbstractPersistableCustom {
org.apache.fineract.infrastructure.creditbureau.handler JPA The class defines a transaction boundary using Spring's @Transactional annotation. While it does not execute SQL directly, it orchestrates a write operation via the injected service, ensuring that the underlying database updates performed by the service are committed or rolled back atomically.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.writePlatformService.updateCreditBureauConfiguration(command.entityId(), command);
    }
org.apache.fineract.infrastructure.dataqueries.domain.EntityDatatableChecks JPA The class is a JPA Entity mapped to a relational database table using Jakarta Persistence annotations.
@Entity
@Table(name = "m_entity_datatable_check")
public class EntityDatatableChecks extends AbstractPersistableCustom {
    @Column(name = "application_table_name", nullable = false)
    private String entity;
org.apache.fineract.infrastructure.dataqueries.domain.RegisteredDatatable JPA The class is a JPA Entity mapped to the 'x_registered_table' database table. It defines the schema for storing metadata about registered extension tables using Jakarta Persistence annotations.
@Entity
@Table(name = "x_registered_table")
public class RegisteredDatatable extends AbstractPersistableCustom { ... }
org.apache.fineract.infrastructure.dataqueries.domain.Report JPA The class is a JPA Entity mapped to the 'stretchy_report' table. It uses standard Jakarta Persistence annotations to define the schema mapping, including columns, unique constraints, and relationships.
@Entity
@Table(name = "stretchy_report", uniqueConstraints = { @UniqueConstraint(columnNames = { "report_name" }, name = "unq_report_name") })
public final class Report extends AbstractPersistableCustom {
org.apache.fineract.infrastructure.dataqueries.domain.ReportParameter JPA The class is a JPA Entity that maps directly to a relational database table. It uses Jakarta Persistence annotations to define the mapping strategy.
@Entity
@Table(name = "stretchy_parameter")
public class ReportParameter extends AbstractPersistableCustom { ... }
org.apache.fineract.infrastructure.dataqueries.domain.ReportParameterUsage JPA The class is a JPA Entity that maps to the 'stretchy_report_parameter' table. It manages the many-to-many relationship (with extra attributes) between Reports and ReportParameters.
@Entity
@Table(name = "stretchy_report_parameter")
public final class ReportParameterUsage extends AbstractPersistableCustom {
    @ManyToOne(optional = false)
    @JoinColumn(name = "report_id", nullable = false)
    private Report report;
org.apache.fineract.infrastructure.documentmanagement.domain JPA The class is a JPA Entity that maps directly to the 'm_image' database table using Jakarta Persistence annotations.
@Entity
@Table(name = "m_image")
public final class Image extends AbstractPersistableCustom {
org.apache.fineract.infrastructure.documentmanagement.domain.Document JPA The class is a JPA entity mapped to the 'm_document' table using standard Jakarta Persistence annotations. It defines columns for document attributes and manages persistence through the JPA provider.
@Entity
@Table(name = "m_document")
public class Document extends AbstractPersistableCustom {
    @Column(name = "name", length = 250)
    private String name;
}
org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityAccess JPA The class is a JPA Entity mapped to a relational database table. It uses annotations to define the table name and column mappings, including a Many-to-One relationship.
@Entity
@Table(name = "m_entity_to_entity_access")
public class FineractEntityAccess extends AbstractPersistableCustom {
org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityRelation JPA The class is a JPA entity that maps directly to the 'm_entity_relation' table in the database. It defines the schema for storing entity relationship definitions, including columns for 'from_entity_type', 'to_entity_type', and 'code_name'. It also manages a one-to-many relationship with the 'FineractEntityToEntityMapping' entity, configured with CascadeType.ALL and orphan removal.
@Entity
@Table(name = "m_entity_relation")
public class FineractEntityRelation extends AbstractPersistableCustom {
org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityToEntityMapping JPA The class is a JPA entity mapped to the 'm_entity_to_entity_mapping' table. It uses Jakarta Persistence annotations to define the table structure, columns, and relationships (Many-to-One with FineractEntityRelation).
@Entity
@Table(name = "m_entity_to_entity_mapping", uniqueConstraints = { @UniqueConstraint(columnNames = { "rel_id", "from_id", "to_id" }) })
public class FineractEntityToEntityMapping extends AbstractPersistableCustom { ... }
org.apache.fineract.infrastructure.event.external.repository JPA The class uses the Jakarta Persistence API (JPA) EntityManager to perform direct entity lookups against the database.
final ExternalEventConfiguration configuration = entityManager.find(ExternalEventConfiguration.class, externalEventType);
org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent JPA The class is a JPA Entity that maps directly to the 'm_external_event' database table. It uses Jakarta Persistence annotations to define the schema mapping, including column names, nullability, and fetch types (e.g., Lazy fetching for the binary data blob).
@Entity
@Table(name = "m_external_event")
public class ExternalEvent extends AbstractPersistableCustom { ... }
org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration JPA The class is a JPA Entity that maps directly to a relational database table using Jakarta Persistence annotations.
@Entity
@Table(name = "m_external_event_configuration")
public class ExternalEventConfiguration {
    @Id
    @Column(name = "type", nullable = false)
    private String type;
}
org.apache.fineract.infrastructure.event.external.service.ExternalEventService JPA The service interacts with the database primarily through the ExternalEventRepository (likely a Spring Data JPA repository) to save event entities. It also directly uses the JPA EntityManager to flush the persistence context to ensure data consistency before event serialization.
repository.save(externalEvent);
org.apache.fineract.infrastructure.gcm.domain.DeviceRegistration JPA This class is a JPA Entity that maps directly to the 'client_device_registration' database table. It defines the schema structure including a foreign key to the client table and a unique constraint on the registration ID.
@Entity
@Table(name = "client_device_registration")
public class DeviceRegistration extends AbstractPersistableCustom {
    @OneToOne
    @JoinColumn(name = "client_id", nullable = false, unique = true)
    private Client client;
}
org.apache.fineract.infrastructure.hooks.domain.Hook JPA The class is a JPA Entity mapped to the 'm_hook' table. It defines columns for properties and manages relationships with other entities.
@Entity
@Table(name = "m_hook")
public final class Hook extends AbstractAuditableCustom {
    @Column(name = "name", nullable = false, length = 100)
    private String name;
}
org.apache.fineract.infrastructure.hooks.domain.HookConfiguration JPA The class is a JPA Entity mapped to the 'm_hook_configuration' table. It defines columns for configuration details and a foreign key relationship to the 'm_hook' table.
@Entity
@Table(name = "m_hook_configuration")
public class HookConfiguration extends AbstractPersistableCustom { ... }
org.apache.fineract.infrastructure.hooks.domain.HookResource JPA The class is a JPA entity that maps to the relational database table 'm_hook_registered_events'. It defines the schema for storing webhook event triggers, including a foreign key relationship to the main hook table.
@Entity
@Table(name = "m_hook_registered_events")
public class HookResource extends AbstractPersistableCustom {
    @ManyToOne(optional = false)
    @JoinColumn(name = "hook_id", referencedColumnName = "id", nullable = false)
    private Hook hook;
}
org.apache.fineract.infrastructure.hooks.domain.HookTemplate JPA The class is a JPA Entity mapped to the 'm_hook_templates' table using Jakarta Persistence annotations. It defines a one-to-many relationship with the 'Schema' entity.
@Entity
@Table(name = "m_hook_templates")
public final class HookTemplate extends AbstractPersistableCustom { ... }
org.apache.fineract.infrastructure.hooks.domain.Schema JPA The class is a Java Persistence API (JPA) entity that maps directly to the relational database table 'm_hook_schema'. It defines the schema for storing hook configuration field definitions, including relationships to the hook template and column definitions for field metadata.
@Entity
@Table(name = "m_hook_schema")
public class Schema extends AbstractPersistableCustom {
    @Column(name = "field_name", nullable = false, length = 100)
    private String fieldName;
}
org.apache.fineract.infrastructure.jobs.domain JPA This class is a JPA Entity that maps to a relational database table using Jakarta Persistence annotations.
@Entity
@Table(name = "batch_custom_job_parameters")
public class CustomJobParameter extends AbstractPersistableCustom {
    @Column(name = "parameter_json", nullable = false, columnDefinition = "json")
    private String parameterJson;
}
org.apache.fineract.infrastructure.jobs.domain JPA The class is a JPA Entity that maps the 'SchedulerDetail' object to the 'scheduler_detail' table in the database using Jakarta Persistence annotations.
@Entity
@Table(name = "scheduler_detail")
public class SchedulerDetail extends AbstractPersistableCustom {
    @Column(name = "execute_misfired_jobs")
    private boolean executeInstructionForMisfiredJobs;
org.apache.fineract.infrastructure.jobs.domain.JobParameter JPA The class is a JPA Entity that maps directly to a relational database table to persist job parameter data.
@Entity
@Table(name = "job_parameters")
public class JobParameter extends AbstractPersistableCustom { ... }
org.apache.fineract.infrastructure.jobs.domain.ScheduledJobDetail JPA The class is a JPA entity mapped to the 'job' database table using Jakarta Persistence annotations. It defines the schema mapping for job scheduling details, including columns for job name, cron expression, and execution timestamps.
@Entity
@Table(name = "job")
public class ScheduledJobDetail extends AbstractPersistableCustom {
    @Column(name = "cron_expression")
    private String cronExpression;
}
org.apache.fineract.infrastructure.jobs.domain.ScheduledJobRunHistory JPA The class is a JPA Entity that maps directly to a relational database table. It uses Jakarta Persistence annotations to define the table name, column mappings, and relationships.
@Entity
@Table(name = "job_run_history")
public class ScheduledJobRunHistory extends AbstractPersistableCustom { ... }
org.apache.fineract.infrastructure.reportmailingjob.domain.ReportMailingJob JPA The class is a JPA Entity annotated with @Entity and @Table, mapping directly to the 'm_report_mailing_job' table. It uses Jakarta Persistence annotations to define column mappings, unique constraints, and relationships (ManyToOne) with other entities like 'Report' and 'AppUser'.
@Entity
@Table(name = "m_report_mailing_job", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "unique_name") })
public class ReportMailingJob extends AbstractAuditableCustom { ... }
org.apache.fineract.infrastructure.reportmailingjob.domain.ReportMailingJobConfiguration JPA The class is a JPA Entity mapped to a relational database table. It uses Jakarta Persistence annotations to define the schema mapping, including table name, column definitions, and unique constraints.
@Entity
@Table(name = "m_report_mailing_job_configuration", uniqueConstraints = {
        @UniqueConstraint(columnNames = { "name" }, name = "unique_name") })
public class ReportMailingJobConfiguration extends AbstractPersistableCustom {
org.apache.fineract.infrastructure.reportmailingjob.domain.ReportMailingJobRunHistory JPA The class is a JPA Entity that maps to a relational database table to store job execution history records.
@Entity
@Table(name = "m_report_mailing_job_run_history")
public class ReportMailingJobRunHistory extends AbstractPersistableCustom { ... }
org.apache.fineract.infrastructure.security.api JPA The code interacts with the database primarily through the `AppUser` JPA entity (retrieved via the Authentication principal) and the `ClientReadPlatformService`. It traverses entity relationships (Roles, Office) which may trigger lazy loading from the database.
final AppUser principal = (AppUser) authenticationCheck.getPrincipal();
final Set<Role> userRoles = principal.getRoles();
for (final Role role : userRoles) {
    roles.add(role.toData());
}
org.apache.fineract.infrastructure.security.domain JPA The class is a JPA Entity mapped to the 'twofactor_access_token' table. It defines columns for the token string, validity timestamps, enabled status, and a foreign key relationship to the AppUser entity.
@Entity
@Table(name = "twofactor_access_token"...)
public class TFAccessToken extends AbstractPersistableCustom {
    @Column(name = "token", nullable = false, length = 32)
    private String token;
    ...
org.apache.fineract.infrastructure.security.domain.TwoFactorConfiguration JPA The class is a JPA Entity mapped to the 'twofactor_configuration' table. It defines columns for 'name' and 'value' and enforces a unique constraint on the 'name' column.
@Entity
@Table(name = "twofactor_configuration", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "name_UNIQUE") })
public class TwoFactorConfiguration extends AbstractPersistableCustom { ... }
org.apache.fineract.infrastructure.sms.domain.SmsMessage JPA The class is a JPA Entity mapped to the 'sms_messages_outbound' table. It defines columns for message details, status, and timestamps, and Many-to-One relationships with Group, Client, Staff, and SmsCampaign entities.
@Entity
@Table(name = "sms_messages_outbound")
public class SmsMessage extends AbstractPersistableCustom {
    @Column(name = "mobile_no", length = 50)
    private String mobileNo;
}
org.apache.fineract.infrastructure.survey.domain.Likelihood JPA The class is a JPA entity mapped to a relational database table. It uses standard Jakarta Persistence annotations to define the table mapping and column constraints.
@Entity
@Table(name = "ppi_likelihoods_ppi")
public final class Likelihood extends AbstractPersistableCustom {
    @Column(name = "ppi_name", nullable = false)
    private String ppiName;
    ...
org.apache.fineract.interoperation.domain.InteropIdentifier JPA The class is a JPA Entity mapped to the 'interop_identifier' table. It defines columns for account association, identifier type, value, and audit logs. It enforces unique constraints on (account_id, type) and (type, a_value, sub_value_or_type).
@Entity
@Table(name = "interop_identifier", uniqueConstraints = {
        @UniqueConstraint(name = "uk_hathor_identifier_account", columnNames = { "account_id", "type" }),...})
public class InteropIdentifier extends AbstractPersistableCustom { ... }
org.apache.fineract.investor.domain JPA The class is a JPA Entity that maps directly to a relational database table. It uses Jakarta Persistence annotations to define the table name, column mappings, and relationships.
@Entity
@Table(name = "m_external_asset_owner_transfer_details")
public class ExternalAssetOwnerTransferDetails extends AbstractAuditableWithUTCDateTimeCustom {
    @Column(name = "total_outstanding_derived", scale = 6, precision = 19, nullable = false)
    private BigDecimal totalOutstanding;
}
org.apache.fineract.investor.domain JPA The class is a JPA entity that maps directly to the 'm_external_asset_owner_journal_entry_mapping' table. It defines foreign key relationships to the 'journal_entry_id' and 'owner_id' columns.
@Entity
@Table(name = "m_external_asset_owner_journal_entry_mapping")
public class ExternalAssetOwnerJournalEntryMapping extends AbstractAuditableWithUTCDateTimeCustom {
    @OneToOne
    @JoinColumn(name = "journal_entry_id", nullable = false)
    private JournalEntry journalEntry;
}
org.apache.fineract.investor.domain.ExternalAssetOwner JPA The class is a JPA Entity that maps directly to a database table using Jakarta Persistence annotations. It defines column mappings and constraints (unique, nullable) for the external ID.
@Entity
@Table(name = "m_external_asset_owner")
public class ExternalAssetOwner extends AbstractAuditableWithUTCDateTimeCustom {
    @Column(name = "external_id", nullable = false, length = 100, unique = true)
    private ExternalId externalId;
}
org.apache.fineract.investor.domain.ExternalAssetOwnerTransfer JPA The class is a JPA Entity mapped to the `m_external_asset_owner_transfer` table. It defines the schema for storing asset owner transfer records, including foreign keys to the owner table and mapping of enum values to database columns.
@Entity
@Table(name = "m_external_asset_owner_transfer")
public class ExternalAssetOwnerTransfer extends AbstractAuditableWithUTCDateTimeCustom {
org.apache.fineract.investor.domain.ExternalAssetOwnerTransferJournalEntryMapping JPA The class uses Jakarta Persistence (JPA) annotations to map the object directly to a relational database table. It defines foreign key relationships to the JournalEntry and ExternalAssetOwnerTransfer entities.
@Entity
@Table(name = "m_external_asset_owner_transfer_journal_entry_mapping")
public class ExternalAssetOwnerTransferJournalEntryMapping extends AbstractAuditableWithUTCDateTimeCustom {
    @OneToOne
    @JoinColumn(name = "journal_entry_id", nullable = false)
    private JournalEntry journalEntry;
}
org.apache.fineract.investor.domain.ExternalAssetOwnerTransferLoanMapping JPA The class is a JPA Entity mapped to the 'm_external_asset_owner_transfer_loan_mapping' table. It manages the persistence of loan transfer mappings using Jakarta Persistence annotations.
@Entity
@Table(name = "m_external_asset_owner_transfer_loan_mapping")
public class ExternalAssetOwnerTransferLoanMapping extends AbstractAuditableWithUTCDateTimeCustom {
    @Column(name = "loan_id", nullable = false)
    private Long loanId;
}
org.apache.fineract.investor.domain.ExternalIdConverter JPA This class is a JPA AttributeConverter that handles the serialization and deserialization of the ExternalId custom type to a database column (String). It is marked with @Converter(autoApply = true), meaning it automatically intercepts database reads and writes for fields of type ExternalId across the persistence context.
@Converter(autoApply = true)
public class ExternalIdConverter implements AttributeConverter<ExternalId, String> {
    @Override
    public String convertToDatabaseColumn(ExternalId externalId) {
        return externalId != null ? externalId.getValue() : null;
    }
}
org.apache.fineract.investor.domain.search JPA The class uses the JPA Criteria API via an injected EntityManager to perform dynamic, type-safe database queries. It constructs complex joins and predicates programmatically based on user input.
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<SearchedExternalAssetOwner> query = cb.createQuery(SearchedExternalAssetOwner.class);
Root<ExternalAssetOwnerTransfer> root = query.from(ExternalAssetOwnerTransfer.class);
org.apache.fineract.mix.domain.MixTaxonomyMapping JPA The class is a JPA Entity mapped to a relational database table using Jakarta Persistence annotations. It defines columns for identifier, config, and currency.
@Entity
@Table(name = "mix_taxonomy_mapping")
public final class MixTaxonomyMapping extends AbstractPersistableCustom {
    @Column(name = "identifier")
    private String identifier;
org.apache.fineract.notification.domain.Notification JPA The class is a JPA Entity that maps the Notification object to the relational database table 'notification_generator'. It uses Jakarta Persistence annotations to define the table mapping and column definitions for storing notification details.
@Entity
@Table(name = "notification_generator")
public class Notification extends AbstractPersistableCustom {
    @Column(name = "object_type")
    private String objectType;
}
org.apache.fineract.notification.domain.NotificationMapper JPA The class is a JPA Entity that maps directly to a relational database table named 'notification_mapper'. It uses Jakarta Persistence annotations to define the table mapping, column definitions, and foreign key relationships to other entities.
@Entity
@Table(name = "notification_mapper")
public class NotificationMapper extends AbstractPersistableCustom {
    @ManyToOne
    @JoinColumn(name = "notification_id")
    private Notification notification;
}
org.apache.fineract.organisation.holiday.domain.Holiday JPA The class is a JPA Entity mapped to the 'm_holiday' table. It uses standard Jakarta Persistence annotations to define the schema, including unique constraints and column definitions. It also manages a Many-to-Many relationship with the 'Office' entity via the 'm_holiday_office' join table.
@Entity
@Table(name = "m_holiday", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "holiday_name") })
public class Holiday extends AbstractPersistableCustom {
    @Column(name = "name", unique = true, nullable = false, length = 100)
    private String name;
    // ...
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "m_holiday_office", joinColumns = @JoinColumn(name = "holiday_id"), inverseJoinColumns = @JoinColumn(name = "office_id"))
    private Set<Office> offices;
}
org.apache.fineract.organisation.holiday.handler JPA The class manages database transactions via the Spring `@Transactional` annotation while delegating the actual data modification to the `HolidayWritePlatformService`. It ensures the delete operation is atomic.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.holidayWritePlatformService.deleteHoliday(command.entityId());
}
org.apache.fineract.organisation.monetary.domain.ApplicationCurrency JPA The class is a JPA entity mapped to the 'm_currency' database table. It uses Jakarta Persistence annotations to define the table name and column mappings for currency attributes.
@Entity
@Table(name = "m_currency")
public class ApplicationCurrency extends AbstractPersistableCustom { ... }
org.apache.fineract.organisation.monetary.domain.MonetaryCurrency JPA The class is a JPA `@Embeddable` component. It does not have its own table but defines columns that are added to the tables of entities that embed it. It maps the currency code, decimal digits, and multiples-of values to specific database columns.
@Embeddable
public class MonetaryCurrency {
    @Column(name = "currency_code", length = 3, nullable = false)
    private String code;
    @Column(name = "currency_digits", nullable = false)
    private int digitsAfterDecimal;
    // ...
}
org.apache.fineract.organisation.monetary.domain.Money JPA The Money class is annotated with @Embeddable, indicating that its instances are stored as an intrinsic part of an owning entity and share the same database table. It maps its fields (currencyCode, currencyDigitsAfterDecimal, inMultiplesOf, amount) to specific columns in the database.
@Embeddable
public class Money implements Comparable<Money> {
    @Column(name = "currency_code", length = 3)
    private String currencyCode;
    @Column(name = "amount", scale = 6, precision = 19)
    private BigDecimal amount;
}
org.apache.fineract.organisation.office.domain.Office JPA The class is a JPA Entity annotated with @Entity and @Table, mapping to the 'm_office' table. It defines relationships using @ManyToOne and @OneToMany for the parent-child office structure.
@Entity
@Table(name = "m_office"...)
public class Office extends AbstractPersistableCustom...
org.apache.fineract.organisation.office.domain.OfficeTransaction JPA The class is a JPA entity that maps directly to a relational database table. It uses annotations to define the table name, column mappings, and relationships (Many-to-One) with other entities.
@Entity
@Table(name = "m_office_transaction")
public class OfficeTransaction extends AbstractPersistableCustom {
    @Column(name = "transaction_amount", scale = 6, precision = 19, nullable = false)
    private BigDecimal transactionAmount;
org.apache.fineract.organisation.office.domain.OrganisationCurrency JPA The class is a JPA Entity annotated with @Entity and @Table, mapping directly to a relational database table. It uses @Column annotations to define column mappings for currency properties.
@Entity
@Table(name = "m_organisation_currency")
public class OrganisationCurrency extends AbstractPersistableCustom {
org.apache.fineract.organisation.provisioning.domain.LoanProductProvisionCriteria JPA The class is a JPA Entity that maps directly to a relational database table using Jakarta Persistence annotations. It defines foreign key relationships to other entities.
@Entity
@Table(name = "m_loanproduct_provisioning_mapping"...)
public class LoanProductProvisionCriteria extends AbstractPersistableCustom { ... }
org.apache.fineract.organisation.provisioning.domain.ProvisioningCategory JPA The class is a JPA Entity mapped to the 'm_provision_category' database table. It uses Jakarta Persistence annotations to define the table name, unique constraints, and column mappings.
@Entity
@Table(name = "m_provision_category", uniqueConstraints = { @UniqueConstraint(columnNames = { "category_name" }, name = "category_name") })
public class ProvisioningCategory extends AbstractPersistableCustom {
org.apache.fineract.organisation.provisioning.domain.ProvisioningCriteria JPA The class is a JPA Entity mapped to the 'm_provisioning_criteria' table. It manages relationships with other entities ('ProvisioningCriteriaDefinition' and 'LoanProductProvisionCriteria') using standard JPA annotations.
@Entity
@Table(name = "m_provisioning_criteria", uniqueConstraints = {
        @UniqueConstraint(columnNames = { "criteria_name" }, name = "criteria_name") })
public class ProvisioningCriteria extends AbstractAuditableCustom { ... }
org.apache.fineract.organisation.provisioning.domain.ProvisioningCriteriaDefinition JPA The class is a JPA Entity mapped to a relational database table. It uses annotations to define the table name, column mappings, and foreign key relationships to other entities.
@Entity
@Table(name = "m_provisioning_criteria_definition")
public class ProvisioningCriteriaDefinition extends AbstractPersistableCustom {
org.apache.fineract.organisation.staff.domain.Staff JPA The class is a JPA Entity mapped to the 'm_staff' table. It uses standard Jakarta Persistence annotations to define the table structure, unique constraints, and relationships (Many-to-One with Office, One-to-One with Image).
@Entity
@Table(name = "m_staff", uniqueConstraints = { @UniqueConstraint(columnNames = { "display_name" }, name = "display_name") })
public class Staff extends AbstractPersistableCustom { ... }
org.apache.fineract.organisation.teller.domain.Cashier JPA The class is a standard JPA Entity mapped to a relational database table. It uses Jakarta Persistence annotations to define the table name, column mappings, unique constraints, and relationships to other entities (Staff, Teller).
@Entity
@Table(name = "m_cashiers", uniqueConstraints = {
        @UniqueConstraint(name = "ux_cashiers_staff_teller", columnNames = { "staff_id", "teller_id" }) })
public class Cashier extends AbstractPersistableCustom {
org.apache.fineract.organisation.teller.domain.CashierTransaction JPA The class is a JPA entity mapped to the 'm_cashier_transactions' table using Jakarta Persistence annotations. It defines columns for transaction details and a Many-to-One relationship with the Cashier entity.
@Entity
@Table(name = "m_cashier_transactions")
public class CashierTransaction extends AbstractPersistableCustom { ... }
org.apache.fineract.organisation.teller.domain.Teller JPA The class is a JPA Entity mapped to the 'm_tellers' table. It uses standard Jakarta Persistence annotations to define the table structure, constraints, and relationships.
@Entity
@Table(name = "m_tellers", uniqueConstraints = { @UniqueConstraint(name = "ux_tellers_name", columnNames = { "name" }) })
public class Teller extends AbstractPersistableCustom { ... }
org.apache.fineract.organisation.teller.domain.TellerTransaction JPA This class is a JPA Entity mapped to the 'm_teller_transactions' table. It uses Jakarta Persistence annotations to define the table mapping, column constraints, and foreign key relationships to other entities like Office, Teller, and Client.
@Entity
@Table(name = "m_teller_transactions")
public class TellerTransaction extends AbstractPersistableCustom {
    @Column(name = "amount", nullable = false)
    private Double amount;
}
org.apache.fineract.organisation.workingdays.domain JPA The class is a JPA Entity annotated with @Entity and @Table, mapping directly to the 'm_working_days' database table. It inherits ID management from AbstractPersistableCustom.
@Entity
@Table(name = "m_working_days")
public class WorkingDays extends AbstractPersistableCustom {
org.apache.fineract.portfolio.account.domain JPA The class is a JPA Entity annotated with @Entity and @Table, mapping Java objects to the 'm_account_transfer_details' database table. It defines relationships using @ManyToOne, @OneToMany, and @OneToOne annotations to link with other domain entities like Office, Client, Loan, and SavingsAccount.
@Entity
@Table(name = "m_account_transfer_details")
public class AccountTransferDetails extends AbstractPersistableCustom {
org.apache.fineract.portfolio.account.domain.AccountAssociations JPA The class is a JPA Entity that maps directly to a relational database table. It uses annotations to define the table name, column mappings, and foreign key relationships to other entities (Loan and SavingsAccount).
@Entity
@Table(name = "m_portfolio_account_associations")
public class AccountAssociations extends AbstractPersistableCustom {
org.apache.fineract.portfolio.account.domain.AccountTransferStandingInstruction JPA The class is a JPA entity mapped to the 'm_account_transfer_standing_instructions' table. It uses Jakarta Persistence annotations to define the table structure, unique constraints, and column mappings. It maintains a Many-to-One relationship with the 'AccountTransferDetails' entity.
@Entity
@Table(name = "m_account_transfer_standing_instructions", uniqueConstraints = {
        @UniqueConstraint(columnNames = { "name" }, name = "name") })
public class AccountTransferStandingInstruction extends AbstractPersistableCustom {
org.apache.fineract.portfolio.account.domain.AccountTransferTransaction JPA The class is a JPA Entity mapped to the 'm_account_transfer_transaction' table. It uses Jakarta Persistence annotations to define the table mapping, column definitions, and relationships with other entities.
@Entity
@Table(name = "m_account_transfer_transaction")
@Getter
public class AccountTransferTransaction extends AbstractPersistableCustom {
org.apache.fineract.portfolio.account.handler JPA The class uses Spring's `@Transactional` annotation to manage database transactions for the refund operation. While the direct database access code is not in this file, it orchestrates a write operation via the injected `AccountTransfersWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.refundByTransfer(command);
}
org.apache.fineract.portfolio.address.domain JPA The class is a JPA Entity mapped to a relational database table using Jakarta Persistence annotations.
@Entity
@Table(name = "m_field_configuration")
public class FieldConfiguration extends AbstractPersistableCustom {
org.apache.fineract.portfolio.address.domain.Address JPA The class is a JPA Entity mapped to the 'm_address' table. It uses Jakarta Persistence annotations to define the schema mapping, including columns, relationships (ManyToOne, OneToMany), and cascading rules.
@Entity
@Table(name = "m_address")
public class Address extends AbstractPersistableCustom {
org.apache.fineract.portfolio.calendar.domain.Calendar JPA The class is a JPA Entity annotated with @Entity and @Table(name = 'm_calendar'). It maps class fields to database columns using @Column and manages a one-to-many relationship with CalendarHistory.
@Entity
@Table(name = "m_calendar")
public class Calendar extends AbstractAuditableWithUTCDateTimeCustom {
    @Column(name = "title", length = 50, nullable = false)
    private String title;
org.apache.fineract.portfolio.calendar.domain.CalendarHistory JPA The class is a JPA Entity mapped to the 'm_calendar_history' table. It uses standard Jakarta Persistence annotations to define the schema mapping, relationships (ManyToOne with Calendar), and column definitions.
@Entity
@Table(name = "m_calendar_history")
public class CalendarHistory extends AbstractPersistableCustom {
    @ManyToOne(optional = false)
    @JoinColumn(name = "calendar_id", referencedColumnName = "id", nullable = false)
    private Calendar calendar;
org.apache.fineract.portfolio.calendar.domain.CalendarInstance JPA The class is a JPA Entity mapped to the 'm_calendar_instance' table. It manages persistence for calendar associations using Jakarta Persistence annotations.
@Entity
@Table(name = "m_calendar_instance")
public class CalendarInstance extends AbstractPersistableCustom {
    @ManyToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name = "calendar_id", nullable = false)
    private Calendar calendar;
org.apache.fineract.portfolio.calendar.handler JPA The class manages a database transaction via the `@Transactional` annotation and delegates the actual persistence operation (deletion) to the `CalendarWritePlatformService`. While the SQL/ORM code isn't inline, this class defines the transaction boundary for the database write operation.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.deleteCalendar(command.entityId());
}
org.apache.fineract.portfolio.charge.domain.Charge JPA The class is a JPA entity mapped to the 'm_charge' table. It uses standard Jakarta Persistence annotations to define the table mapping, columns, and relationships (ManyToOne) with other entities like PaymentType, GLAccount, and TaxGroup.
@Entity
@Table(name = "m_charge", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "name") })
public class Charge extends AbstractPersistableCustom {
org.apache.fineract.portfolio.charge.handler JPA The class uses Spring's `@Transactional` annotation to manage database transactions for the delete operation. While it does not execute SQL directly, it orchestrates the transaction for the underlying service layer which interacts with the database.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.clientWritePlatformService.deleteCharge(command.entityId());
}
org.apache.fineract.portfolio.charge.handler JPA The class defines a transaction boundary using Spring's `@Transactional` annotation, implying that the underlying service method `updateCharge` performs database write operations, likely via JPA or a similar ORM used in the application.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.clientWritePlatformService.updateCharge(command.entityId(), command);
}
org.apache.fineract.portfolio.client.domain JPA The class is a JPA Entity mapped to the 'm_client_identifier' table. It defines relationships to other entities (Client, CodeValue) and specifies unique constraints on the database schema.
@Entity
@Table(name = "m_client_identifier", uniqueConstraints = { ... })
public class ClientIdentifier extends AbstractAuditableWithUTCDateTimeCustom { ... }
org.apache.fineract.portfolio.client.domain JPA The class is a JPA Entity that maps to the 'm_client_address' table in the database. It uses Jakarta Persistence annotations to define the table name, columns, and relationships (Many-to-One) with other entities.
@Entity
@Table(name = "m_client_address")
public class ClientAddress extends AbstractPersistableCustom {
org.apache.fineract.portfolio.client.domain JPA The class is a JPA Entity mapped to the 'm_client_charge_paid_by' table. It uses Jakarta Persistence annotations to define the table name, column mappings, and relationships. It specifically maps foreign keys to 'm_client_transaction' and 'm_client_charge' tables via @ManyToOne and @JoinColumn annotations.
@Entity
@Table(name = "m_client_charge_paid_by")
public class ClientChargePaidBy extends AbstractPersistableCustom {
    @ManyToOne
    @JoinColumn(name = "client_transaction_id", nullable = false)
    private ClientTransaction clientTransaction;
    //...
org.apache.fineract.portfolio.client.domain.Client JPA The class is a JPA Entity mapped to the 'm_client' table. It uses standard Jakarta Persistence annotations to define columns, relationships, and constraints.
@Entity
@Table(name = "m_client", uniqueConstraints = { @UniqueConstraint(columnNames = { "account_no" }, name = "account_no_UNIQUE") })
public class Client extends AbstractAuditableWithUTCDateTimeCustom { ... }
org.apache.fineract.portfolio.client.domain.ClientCharge JPA The class is a standard JPA Entity annotated with @Entity and @Table. It maps to the 'm_client_charge' table and uses @ManyToOne relationships for linking to Client and Charge entities.
@Entity
@Table(name = "m_client_charge")
public class ClientCharge extends AbstractPersistableCustom {
    @ManyToOne(optional = false)
    @JoinColumn(name = "client_id", referencedColumnName = "id", nullable = false)
    private Client client;
    // ...
org.apache.fineract.portfolio.client.domain.ClientFamilyMembers JPA The class is a JPA entity mapped to the 'm_family_members' table. It uses Jakarta Persistence annotations to define the table mapping, column definitions, and relationships with other entities like 'Client' and 'CodeValue'.
@Entity
@Table(name = "m_family_members")
public class ClientFamilyMembers extends AbstractPersistableCustom {
    @ManyToOne
    @JoinColumn(name = "client_id")
    private Client client;
    // ...
org.apache.fineract.portfolio.client.domain.ClientNonPerson JPA The class is a JPA entity mapped to the 'm_client_non_person' table. It uses standard Jakarta Persistence annotations to define the table mapping, column constraints, and relationships (OneToOne with Client, ManyToOne with CodeValue).
@Entity
@Table(name = "m_client_non_person")
public class ClientNonPerson extends AbstractPersistableCustom {
    @OneToOne(optional = false)
    @JoinColumn(name = "client_id", referencedColumnName = "id", nullable = false, unique = true)
    private Client client;
    ...
org.apache.fineract.portfolio.client.domain.ClientTransaction JPA The class is a JPA Entity mapped to the 'm_client_transaction' table. It uses Jakarta Persistence annotations to define the schema mapping, including column definitions, unique constraints, and relationships with other entities (Client, Office, PaymentDetail).
@Entity
@Table(name = "m_client_transaction", uniqueConstraints = { @UniqueConstraint(columnNames = { "external_id" }, name = "external_id") })
public class ClientTransaction extends AbstractAuditableWithUTCDateTimeCustom {
    @ManyToOne(optional = false)
    @JoinColumn(name = "client_id", nullable = false)
    private Client client;
org.apache.fineract.portfolio.client.domain.ClientTransferDetails JPA The class is a JPA Entity mapped to the relational database table 'm_client_transfer_details'. It defines the schema mapping for client transfer records using annotations.
@Entity
@Table(name = "m_client_transfer_details")
public class ClientTransferDetails extends AbstractPersistableCustom {
    @Column(name = "client_id", length = 20, unique = true, nullable = false)
    private Long clientId;
org.apache.fineract.portfolio.client.domain.search JPA The class interacts with the database using the Jakarta Persistence API (JPA) Criteria API via an injected EntityManager. It dynamically constructs SQL queries to retrieve client data based on search criteria.
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<SearchedClient> query = cb.createQuery(SearchedClient.class);
Root<Client> root = query.from(Client.class);
// ... predicates ...
TypedQuery<SearchedClient> queryToExecute = entityManager.createQuery(query);
org.apache.fineract.portfolio.client.handler.UndoClientTransactionCommandHandler JPA The class uses Spring's @Transactional annotation to manage database transactions. While it does not execute SQL or JPQL directly, it defines the transaction boundary for the 'undo' operation delegated to the service layer.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.writePlatformService.undo(command.getClientId(), command.entityId());
    }
org.apache.fineract.portfolio.client.service JPA The interface uses Spring's @Transactional annotation, indicating that its implementations interact with a database within a transaction context. While the implementation details (JDBC vs JPA) are not visible in the interface, the return of a domain entity (ClientTransaction) in one method and the transactional nature implies database interaction.
@Transactional(readOnly = true)
Page<ClientTransactionData> retrieveAllTransactions(Long clientId, SearchParameters parameters);
org.apache.fineract.portfolio.client.service.ClientWritePlatformServiceJpaRepositoryImpl JPA The class uses Spring Data JPA repositories wrapped in service wrappers (e.g., ClientRepositoryWrapper, ClientNonPersonRepositoryWrapper) to perform CRUD operations. It uses standard JPA entity management including saveAndFlush, delete, and findOne.
this.clientRepository.saveAndFlush(newClient);
org.apache.fineract.portfolio.collateral.domain.LoanCollateral JPA The class is a JPA Entity mapped to the 'm_loan_collateral' database table. It uses annotations to define column mappings, relationships (ManyToOne with Loan and CodeValue), and constraints.
@Entity
@Table(name = "m_loan_collateral")
public class LoanCollateral extends AbstractPersistableCustom {
    @ManyToOne(optional = false)
    @JoinColumn(name = "loan_id", nullable = false)
    private Loan loan;
    ...
org.apache.fineract.portfolio.collateralmanagement.domain JPA The class is a standard JPA Entity mapped to a relational database table. It uses Jakarta Persistence annotations to define the table name, column mappings, and relationships.
@Entity
@Table(name = "m_collateral_management")
public class CollateralManagementDomain extends AbstractPersistableCustom {
    @Column(name = "base_price", nullable = false, scale = 5, precision = 20)
    private BigDecimal basePrice;
}
org.apache.fineract.portfolio.collateralmanagement.domain.ClientCollateralManagement JPA The class is a JPA entity mapped to the 'm_client_collateral_management' table. It uses standard Jakarta Persistence annotations to define the table mapping, column constraints, and relationships with other entities (Client, CollateralManagementDomain, LoanCollateralManagement).
@Entity
@Table(name = "m_client_collateral_management")
public class ClientCollateralManagement extends AbstractPersistableCustom {
org.apache.fineract.portfolio.collateralmanagement.handler JPA The class defines a transaction boundary using the @Transactional annotation, implying interaction with a transactional resource (likely a database) via the delegated service.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand jsonCommand) {
    return this.collateralManagementWritePlatformService.createCollateral(jsonCommand);
}
org.apache.fineract.portfolio.collateralmanagement.handler JPA The class defines transaction boundaries using the @Transactional annotation, ensuring that the database operations performed by the invoked service are atomic. While it does not execute SQL directly, it orchestrates the transaction for the persistence layer.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.collateralManagementWritePlatformService.updateCollateral(command.entityId(), command);
    }
org.apache.fineract.portfolio.collateralmanagement.handler JPA The class manages database transactions using the @Transactional annotation while delegating the actual persistence operations to the CollateralManagementWritePlatformService. It ensures that the delete operation performed by the service is committed or rolled back atomically.
@Transactional
@Override
public CommandProcessingResult processCommand(JsonCommand command) {
    return this.collateralManagementWritePlatformService.deleteCollateral(command.entityId());
}
org.apache.fineract.portfolio.collateralmanagement.handler JPA The class defines a transaction boundary using the `@Transactional` annotation, ensuring that the underlying service operation to add a collateral product is executed within a database transaction.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand jsonCommand) {
    return this.clientCollateralManagementWritePlatformService.addClientCollateralProduct(jsonCommand);
}
org.apache.fineract.portfolio.collateralmanagement.handler JPA The class defines a transactional boundary using the @Transactional annotation, implying interaction with a database via the injected service. While the SQL or ORM logic is not present in this file, this handler manages the transaction lifecycle for the database write operation.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand jsonCommand) {
org.apache.fineract.portfolio.collectionsheet.service.CollectionSheetWritePlatformServiceJpaRepositoryImpl JPA This class functions as a service layer implementation (suffixed JpaRepositoryImpl) that orchestrates database writes. While it does not contain direct EntityManager calls or SQL queries itself, it delegates to other services (LoanWritePlatformService, PaymentDetailWritePlatformService, etc.) that persist entities (PaymentDetail, SavingsAccountTransaction, Loan) using JPA/Spring Data.
final PaymentDetail paymentDetail = this.paymentDetailWritePlatformService.createAndPersistPaymentDetail(command, changes);
org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket JPA This class is a JPA Entity that maps directly to the relational database table 'm_delinquency_bucket'. It defines column mappings, unique constraints, and relationships to other entities.
@Entity
@Table(name = "m_delinquency_bucket", uniqueConstraints = {
        @UniqueConstraint(name = "uq_delinquency_bucket_name", columnNames = { "name" }) })
public class DelinquencyBucket extends AbstractAuditableWithUTCDateTimeCustom {
org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucketMappings JPA This class is a JPA Entity that maps to the relational database table 'm_delinquency_bucket_mappings'. It handles the persistence of the relationship between delinquency buckets and ranges.
@Entity
@Table(name = "m_delinquency_bucket_mappings"...)
public class DelinquencyBucketMappings extends AbstractAuditableWithUTCDateTimeCustom { ... }
org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange JPA The class is a JPA Entity that maps directly to a relational database table. It uses standard Jakarta Persistence annotations to define the table name, column mappings, and constraints.
@Entity
@Table(name = "m_delinquency_range", uniqueConstraints = {
        @UniqueConstraint(name = "uq_delinquency_range_classification", columnNames = { "classification" }) })
public class DelinquencyRange extends AbstractAuditableWithUTCDateTimeCustom {
org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyTagHistory JPA The class is a JPA Entity mapped to the 'm_loan_delinquency_tag_history' table. It uses Jakarta Persistence annotations to define the schema mapping and relationships.
@Entity
@Table(name = "m_loan_delinquency_tag_history")
public class LoanDelinquencyTagHistory extends AbstractAuditableWithUTCDateTimeCustom {
    @ManyToOne
    @JoinColumn(name = "delinquency_range_id", nullable = false)
    private DelinquencyRange delinquencyRange;
}
org.apache.fineract.portfolio.delinquency.handler JPA The class defines a database transaction boundary using Spring's `@Transactional` annotation. While it does not execute SQL or JPA queries directly, it orchestrates the transaction for the `DelinquencyWritePlatformService` which performs the actual database writes.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.createDelinquencyRange(command);
}
org.apache.fineract.portfolio.delinquency.handler JPA The class uses Spring's `@Transactional` annotation to manage database transactions. While it does not execute SQL directly, it delegates to `DelinquencyWritePlatformService`, which performs the data persistence operations related to loan delinquency.
@Transactional
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.applyDelinquencyTagToLoan(command.entityId(), command);
}
org.apache.fineract.portfolio.delinquency.service.LoanDelinquencyDomainServiceImpl JPA The class uses Spring's @Transactional annotation to manage database transactions. While it does not contain direct SQL or Repository calls, it operates on JPA Entities (Loan, LoanRepaymentScheduleInstallment, LoanTransaction). Accessing collections on these entities (e.g., loan.getRepaymentScheduleInstallments()) triggers lazy loading of related database records within the transaction scope.
@Override
@Transactional(readOnly = true)
public CollectionData getOverdueCollectionData(final Loan loan) {
    // ...
    // Accessing lazy-loaded collection triggers DB read
    for (LoanRepaymentScheduleInstallment installment : loan.getRepaymentScheduleInstallments()) {
       // ...
    }
}
org.apache.fineract.portfolio.floatingrates.domain.FloatingRate JPA The class is a JPA Entity mapped to the 'm_floating_rates' table. It uses standard Jakarta Persistence annotations for ORM mapping.
@Entity
@Table(name = "m_floating_rates", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "unq_name") })
public class FloatingRate extends AbstractAuditableWithUTCDateTimeCustom {
org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod JPA The class is a JPA Entity mapped to the 'm_floating_rates_periods' table. It uses standard Jakarta Persistence annotations to define the table mapping, column constraints (precision, scale, nullability), and relationships (ManyToOne to FloatingRate).
@Entity
@Table(name = "m_floating_rates_periods")
public class FloatingRatePeriod extends AbstractAuditableWithUTCDateTimeCustom {
org.apache.fineract.portfolio.fund.domain.Fund JPA The class is a JPA Entity mapped to the 'm_fund' table using Jakarta Persistence annotations. It defines columns and unique constraints for data persistence.
@Entity
@Table(name = "m_fund", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "fund_name_org") })
public class Fund extends AbstractPersistableCustom {
org.apache.fineract.portfolio.group.domain.Group JPA The class is a JPA entity mapped to the 'm_group' table. It uses standard Jakarta Persistence annotations to define columns, relationships (OneToMany, ManyToOne, ManyToMany), and join tables.
@Entity
@Table(name = "m_group")
public final class Group extends AbstractPersistableCustom {
    @Column(name = "external_id", length = 100, unique = true)
    private String externalId;
    @ManyToMany
    @JoinTable(name = "m_group_client", joinColumns = @JoinColumn(name = "group_id"), inverseJoinColumns = @JoinColumn(name = "client_id"))
    private Set<Client> clientMembers = new HashSet<>();
}
org.apache.fineract.portfolio.group.domain.GroupLevel JPA The class is a JPA Entity mapped to the 'm_group_level' table. It uses standard Jakarta Persistence annotations to define the table name and column mappings.
@Entity
@Table(name = "m_group_level")
public class GroupLevel extends AbstractPersistableCustom {
org.apache.fineract.portfolio.group.domain.GroupRole JPA The class is a JPA Entity mapped to the 'm_group_roles' table. It uses annotations to define the table name and relationships (ManyToOne) with other entities (Group, Client, CodeValue).
@Entity
@Table(name = "m_group_roles")
public class GroupRole extends AbstractPersistableCustom {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "group_id")
    private Group group;
org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory JPA The class is a JPA Entity that maps directly to the 'm_staff_assignment_history' table. It uses standard Jakarta Persistence annotations to define the table mapping, column definitions, and relationships (ManyToOne) with other entities.
@Entity
@Table(name = "m_staff_assignment_history")
public class StaffAssignmentHistory extends AbstractAuditableCustom {
    @ManyToOne
    @JoinColumn(name = "centre_id", nullable = true)
    private Group center;
org.apache.fineract.portfolio.group.handler JPA The class defines a transaction boundary using Spring's `@Transactional` annotation. While it does not execute SQL directly, it manages the transaction for the underlying service (`GroupingTypesWritePlatformService`) which performs the actual database persistence (likely via JPA/Hibernate).
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.groupWritePlatformService.updateCenter(command.entityId(), command);
}
org.apache.fineract.portfolio.group.handler.UnassignRoleCommandHandler JPA The class defines a transaction boundary using Spring's `@Transactional` annotation. While it does not execute SQL directly, it orchestrates a write operation (delete) delegated to the `GroupRolesWritePlatformService`, which interacts with the persistence layer (likely JPA/Hibernate repositories).
@Override
@Transactional
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.groupRolesWritePlatformService.deleteRole(command.entityId());
}
org.apache.fineract.portfolio.interestratechart.domain JPA The class is a JPA Embeddable component. It defines the schema for columns that will be embedded in the table of the parent entity using @Column annotations.
@Embeddable
public class InterestRateChartFields {
    @Column(name = "name", length = 100, unique = false, nullable = false)
    private String name;
    // ...
org.apache.fineract.portfolio.interestratechart.domain JPA This class is an Embeddable JPA component. It does not correspond to a standalone table but defines a set of columns that are embedded into the table of the parent entity (likely InterestRateChartSlab). It uses standard Jakarta Persistence annotations to define column properties such as name, precision, scale, and nullability.
@Embeddable
public class InterestRateChartSlabFields {
    @Column(name = "description", nullable = true)
    private String description;

    @Column(name = "annual_interest_rate", scale = 6, precision = 19, nullable = false)
    private BigDecimal annualInterestRate;
}
org.apache.fineract.portfolio.interestratechart.domain.InterestIncentives JPA The class is a JPA entity mapped to the 'm_interest_incentives' table. It uses annotations to define the table mapping, relationships (ManyToOne), and embedded fields.
@Entity
@Table(name = "m_interest_incentives")
public class InterestIncentives extends AbstractPersistableCustom {
    @ManyToOne
    @JoinColumn(name = "interest_rate_slab_id", nullable = false)
    private InterestRateChartSlab interestRateChartSlab;
}
org.apache.fineract.portfolio.interestratechart.domain.InterestIncentivesFields JPA The class is an `@Embeddable` component used to map a set of related fields to database columns within a parent entity. It defines column mappings for incentive details.
@Embeddable
public class InterestIncentivesFields {
    @Column(name = "entiry_type", nullable = false)
    private Integer entityType;
    @Column(name = "attribute_name", nullable = false)
    private Integer attributeName;
    // ...
}
org.apache.fineract.portfolio.interestratechart.domain.InterestRateChart JPA The class is a standard JPA Entity mapped to a relational database table. It uses Jakarta Persistence annotations to define the mapping, including embedded fields and one-to-many relationships.
@Entity
@Table(name = "m_interest_rate_chart")
public class InterestRateChart extends AbstractPersistableCustom {
    @Embedded
    private InterestRateChartFields chartFields;
    @OneToMany(mappedBy = "interestRateChart", cascade = CascadeType.ALL...)
    private Set<InterestRateChartSlab> chartSlabs...
org.apache.fineract.portfolio.interestratechart.domain.InterestRateChartSlab JPA The class is a JPA entity mapped to the 'm_interest_rate_slab' table. It uses standard Jakarta Persistence annotations to define the table mapping, embedded fields, and relationships with other entities.
@Entity
@Table(name = "m_interest_rate_slab")
public class InterestRateChartSlab extends AbstractPersistableCustom {
org.apache.fineract.portfolio.loanaccount.domain JPA The class is a JPA Entity mapped to the 'm_loan_officer_assignment_history' table. It uses standard Jakarta Persistence annotations to define the table mapping and relationships (ManyToOne) with Loan and Staff entities.
@Entity
@Table(name = "m_loan_officer_assignment_history")
public class LoanOfficerAssignmentHistory extends AbstractAuditableCustom {
    @ManyToOne
    @JoinColumn(name = "loan_id", nullable = false)
    private Loan loan;
}
org.apache.fineract.portfolio.loanaccount.domain JPA The class is a JPA entity that maps directly to a database table used for linking two other entities. It defines foreign key relationships via annotations.
@Entity
@Table(name = "m_loan_reschedule_request_term_variations_mapping")
public class LoanRescheduleRequestToTermVariationMapping...
org.apache.fineract.portfolio.loanaccount.domain JPA The class is a JPA entity mapped to the 'm_loan_payment_allocation_rule' table. It defines a unique constraint on the combination of 'loan_id' and 'transaction_type'. It uses a custom converter (AllocationTypeListConverter) to handle the persistence of the 'allocationTypes' list and standard enumerations for transaction and rule types.
@Entity
@Table(name = "m_loan_payment_allocation_rule", uniqueConstraints = {
        @UniqueConstraint(columnNames = { "loan_id", "transaction_type" }, name = "uq_m_loan_payment_allocation_rule") })
public class LoanPaymentAllocationRule extends AbstractAuditableWithUTCDateTimeCustom {
org.apache.fineract.portfolio.loanaccount.domain JPA The interface defines methods that explicitly handle the persistence of Loan and LoanTransaction entities. Methods like 'saveAndFlushLoanWithDataIntegrityViolationChecks' and 'saveLoanWithDataIntegrityViolationChecks' indicate that the implementation of this service is responsible for interacting with the database to save state changes, likely wrapping JPA repository calls with additional validation logic.
Loan saveAndFlushLoanWithDataIntegrityViolationChecks(Loan loan);
org.apache.fineract.portfolio.loanaccount.domain JPA The class is a JPA Entity that maps to the 'm_loan_transaction_repayment_schedule_mapping' database table. It uses standard Jakarta Persistence annotations to define the table name, column mappings, and relationships (ManyToOne) to other entities.
@Entity
@Table(name = "m_loan_transaction_repayment_schedule_mapping")
public class LoanTransactionToRepaymentScheduleMapping extends AbstractPersistableCustom {
    @ManyToOne(optional = false, cascade = CascadeType.PERSIST)
    @JoinColumn(name = "loan_transaction_id", nullable = false)
    private LoanTransaction loanTransaction;
    // ...
org.apache.fineract.portfolio.loanaccount.domain JPA The class is a JPA Entity mapped to the 'm_loan_transaction_relation' table. It manages foreign key relationships to the 'm_loan_transaction' table (via 'from_loan_transaction_id' and 'to_loan_transaction_id') and the 'm_loan_charge' table (via 'to_loan_charge_id').
@Entity
@Table(name = "m_loan_transaction_relation")
public class LoanTransactionRelation extends AbstractAuditableWithUTCDateTimeCustom {
    @ManyToOne
    @JoinColumn(name = "from_loan_transaction_id", nullable = false)
    private LoanTransaction fromTransaction;
org.apache.fineract.portfolio.loanaccount.domain JPA The class is a JPA Entity mapped to the 'm_loan_collateral_management' table. It uses Jakarta Persistence annotations to define the table mapping, column constraints (precision, scale, nullability), and relationships (ManyToOne) with other entities.
@Entity
@Table(name = "m_loan_collateral_management")
public class LoanCollateralManagement extends AbstractPersistableCustom {
org.apache.fineract.portfolio.loanaccount.domain JPA The class is a JPA Entity that maps to the 'glim_accounts' table. It defines the schema structure including columns for account details and relationships to Group and Loan entities.
@Entity
@Table(name = "glim_accounts", uniqueConstraints = { @UniqueConstraint(columnNames = { "account_number" }, name = "FK_glim_id") })
public class GroupLoanIndividualMonitoringAccount extends AbstractPersistableCustom {
org.apache.fineract.portfolio.loanaccount.domain JPA The class is a JPA Entity mapped to the 'm_loan_transaction' table. It uses standard Jakarta Persistence annotations to define the mapping, including relationships to other entities like 'Loan' and 'Office'.
@Entity
@Table(name = "m_loan_transaction", uniqueConstraints = { @UniqueConstraint(columnNames = { "external_id" }, name = "external_id_UNIQUE") })
public class LoanTransaction extends AbstractAuditableWithUTCDateTimeCustom {

    @ManyToOne(optional = false)
    @JoinColumn(name = "loan_id", nullable = false)
    private Loan loan;
    // ...
}
org.apache.fineract.portfolio.loanaccount.domain JPA The class is a JPA entity mapped to the database table 'm_loan_interest_recalculation_additional_details'. It uses Jakarta Persistence annotations to define the table name, column mappings (including precision and scale for the amount), and a Many-to-One relationship with the LoanRepaymentScheduleInstallment entity via a foreign key column.
@Entity
@Table(name = "m_loan_interest_recalculation_additional_details")
public class LoanInterestRecalcualtionAdditionalDetails extends AbstractPersistableCustom {
    @ManyToOne(optional = false)
    @JoinColumn(name = "loan_repayment_schedule_id", nullable = false)
    private LoanRepaymentScheduleInstallment loanRepaymentScheduleInstallment;
    // ...
}
org.apache.fineract.portfolio.loanaccount.domain.Loan JPA The class is a JPA Entity mapped to the 'm_loan' table. It uses standard Jakarta Persistence annotations to define the mapping of fields to database columns and relationships to other entities (Client, Group, LoanProduct, etc.).
@Entity
@Table(name = "m_loan", uniqueConstraints = { @UniqueConstraint(columnNames = { "account_no" }, name = "loan_account_no_UNIQUE"),
        @UniqueConstraint(columnNames = { "external_id" }, name = "loan_externalid_UNIQUE") })
public class Loan extends AbstractAuditableWithUTCDateTimeCustom {
    @Column(name = "account_no", length = 20, unique = true, nullable = false)
    private String accountNumber;
    ...
org.apache.fineract.portfolio.loanaccount.domain.LoanAccountDomainServiceJpa JPA The class uses Spring Data JPA repositories (and wrapper services around them) to persist `Loan`, `LoanTransaction`, `Note`, and other related entities. It relies on `@Transactional` annotations to manage database transactions.
this.loanTransactionRepository.saveAndFlush(newRepaymentTransaction);
org.apache.fineract.portfolio.loanaccount.domain.LoanCharge JPA The class is a JPA Entity mapped to the 'm_loan_charge' table. It uses standard Jakarta Persistence annotations to define the table structure, columns, and relationships (ManyToOne with Loan and Charge, OneToMany with LoanInstallmentCharge).
@Entity
@Table(name = "m_loan_charge", uniqueConstraints = { @UniqueConstraint(columnNames = { "external_id" }, name = "external_id") })
public class LoanCharge extends AbstractAuditableWithUTCDateTimeCustom {
    @ManyToOne(optional = false)
    @JoinColumn(name = "loan_id", referencedColumnName = "id", nullable = false)
    private Loan loan;
    ...
org.apache.fineract.portfolio.loanaccount.domain.LoanChargePaidBy JPA The class is a JPA entity mapped to the 'm_loan_charge_paid_by' table. It uses Jakarta Persistence annotations to define the table mapping, column constraints (precision, scale, nullability), and foreign key relationships to the 'm_loan_transaction' and 'm_loan_charge' tables.
@Entity
@Table(name = "m_loan_charge_paid_by")
public class LoanChargePaidBy extends AbstractPersistableCustom { ... }
org.apache.fineract.portfolio.loanaccount.domain.LoanDisbursementDetails JPA The class is a JPA Entity mapped to the 'm_loan_disbursement_detail' table. It uses standard Jakarta Persistence annotations to define the table mapping, column definitions (precision, scale), and relationships (ManyToOne to Loan).
@Entity
@Table(name = "m_loan_disbursement_detail")
public class LoanDisbursementDetails extends AbstractPersistableCustom {
    @ManyToOne
    @JoinColumn(name = "loan_id", nullable = false)
    private Loan loan;
}
org.apache.fineract.portfolio.loanaccount.domain.LoanInstallmentCharge JPA The class is a JPA Entity mapped to the 'm_loan_installment_charge' table. It defines the schema for storing loan installment charges, including columns for amounts (amount, paid, waived, written off, outstanding) and relationships to the 'm_loan_charge' and 'm_loan_repayment_schedule' tables via ManyToOne associations.
@Entity
@Table(name = "m_loan_installment_charge")
public class LoanInstallmentCharge extends AbstractPersistableCustom implements Comparable<LoanInstallmentCharge> {
    @ManyToOne(optional = false)
    @JoinColumn(name = "loan_charge_id", referencedColumnName = "id", nullable = false)
    private LoanCharge loancharge;
org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalculationDetails JPA The class is a JPA Entity annotated with @Entity and @Table, mapping directly to the 'm_loan_recalculation_details' table. It uses standard JPA annotations for column mapping and relationships.
@Entity
@Table(name = "m_loan_recalculation_details")
public class LoanInterestRecalculationDetails extends AbstractPersistableCustom {
    @OneToOne
    @JoinColumn(name = "loan_id", nullable = false)
    private Loan loan;
    ...
org.apache.fineract.portfolio.loanaccount.domain.LoanOverdueInstallmentCharge JPA The class is a JPA entity mapped to the 'm_loan_overdue_installment_charge' table using Jakarta Persistence annotations.
@Entity
@Table(name = "m_loan_overdue_installment_charge")
public class LoanOverdueInstallmentCharge extends AbstractPersistableCustom {
org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment JPA The class is a standard JPA Entity annotated with @Entity and @Table(name = 'm_loan_repayment_schedule'). It maps class fields to database columns using @Column. It uses @ManyToOne for the relationship to the Loan table and @OneToMany for child collections like installment charges.
@Entity
@Table(name = "m_loan_repayment_schedule")
public class LoanRepaymentScheduleInstallment ... {
    @Column(name = "principal_amount", scale = 6, precision = 19, nullable = true)
    private BigDecimal principal;
}
org.apache.fineract.portfolio.loanaccount.domain.LoanSummary JPA The class is an @Embeddable JPA component. Its fields are mapped to database columns in the table of the owning entity (likely the Loan table) using @Column annotations.
@Column(name = "principal_disbursed_derived", scale = 6, precision = 19)
private BigDecimal totalPrincipalDisbursed;
org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariations JPA The class is a JPA entity mapped to the 'm_loan_term_variations' table using Jakarta Persistence annotations. It defines columns for term details and relationships to the Loan entity.
@Entity
@Table(name = "m_loan_term_variations")
public class LoanTermVariations extends AbstractPersistableCustom {
org.apache.fineract.portfolio.loanaccount.domain.LoanTopupDetails JPA The class is a JPA Entity that maps directly to a relational database table. It uses Jakarta Persistence annotations to define the schema mapping, including table name, column definitions, and foreign key relationships.
@Entity
@Table(name = "m_loan_topup")
public class LoanTopupDetails extends AbstractPersistableCustom {
    @OneToOne
    @JoinColumn(name = "loan_id", nullable = false)
    private Loan loan;
org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheCharge JPA The class is a JPA entity mapped to the 'm_loan_tranche_charges' table. It uses Jakarta Persistence annotations to define the schema mapping and relationships.
@Entity
@Table(name = "m_loan_tranche_charges")
public class LoanTrancheCharge extends AbstractPersistableCustom {
org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheDisbursementCharge JPA The class is a JPA Entity mapped to the 'm_loan_tranche_disbursement_charge' table. It uses Jakarta Persistence annotations to define the table name and column mappings. It establishes foreign key relationships to the 'm_loan_charge' table (via 'loan_charge_id') and the 'm_loan_disbursement_detail' table (via 'disbursement_detail_id').
@Entity
@Table(name = "m_loan_tranche_disbursement_charge")
public class LoanTrancheDisbursementCharge extends AbstractPersistableCustom {
    @ManyToOne
    @JoinColumn(name = "loan_charge_id", referencedColumnName = "id", nullable = false)
    private LoanCharge loancharge;
}
org.apache.fineract.portfolio.loanaccount.guarantor.domain.Guarantor JPA The class is a JPA entity mapped to the 'm_guarantor' table. It uses standard Jakarta Persistence annotations to define the schema mapping, relationships (ManyToOne with Loan, OneToMany with GuarantorFundingDetails), and column definitions.
@Entity
@Table(name = "m_guarantor")
public class Guarantor extends AbstractPersistableCustom {
    @ManyToOne
    @JoinColumn(name = "loan_id", nullable = false)
    private Loan loan;
org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorFundingDetails JPA The class is a JPA Entity mapped to the 'm_guarantor_funding_details' table. It uses standard Jakarta Persistence annotations to define the table mapping, columns, and relationships (ManyToOne, OneToMany).
@Entity
@Table(name = "m_guarantor_funding_details")
public class GuarantorFundingDetails extends AbstractPersistableCustom {
org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorFundingTransaction JPA The class is a JPA Entity that maps to the 'm_guarantor_transaction' table. It uses Jakarta Persistence annotations to define the table mapping, column constraints, and relationships with other entities (Many-to-One and One-to-One).
@Entity
@Table(name = "m_guarantor_transaction")
public class GuarantorFundingTransaction extends AbstractPersistableCustom {
org.apache.fineract.portfolio.loanaccount.guarantor.service.GuarantorWritePlatformServiceJpaRepositoryIImpl JPA The class uses Spring Data JPA repositories to interact with the database. It performs CRUD operations on Guarantor, Loan, and AccountAssociations entities. It uses @Transactional to manage transaction boundaries.
this.guarantorRepository.saveAndFlush(guarantor);
org.apache.fineract.portfolio.loanaccount.handler JPA The class manages database transactions using Spring's `@Transactional` annotation and handles JPA-specific exceptions (`JpaSystemException`), indicating interaction with a JPA persistence layer via the injected service.
@Transactional
public CommandProcessingResult processCommand(final JsonCommand command) {
    try {
        return this.writePlatformService.makeLoanRepayment(...);
    } catch (final JpaSystemException | DataIntegrityViolationException dve) {
        // handle error
    }
}
org.apache.fineract.portfolio.loanaccount.handler JPA The class manages database transactions via Spring's `@Transactional` annotation and handles JPA-specific exceptions (`JpaSystemException`). While it does not execute SQL directly, it orchestrates a write operation (`makeLoanRepayment`) on the Loan entity through the injected service.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    try {
        return this.writePlatformService.makeLoanRepayment(LoanTransactionType.MERCHANT_ISSUED_REFUND, ...);
    } catch (final JpaSystemException | DataIntegrityViolationException dve) { ... }
org.apache.fineract.portfolio.loanaccount.handler JPA The class manages the transaction boundary for database operations using Spring's `@Transactional` annotation. While it delegates the actual persistence calls to `LoanWritePlatformService`, it explicitly handles JPA-specific exceptions (`JpaSystemException`) and database constraint violations (`DataIntegrityViolationException`), indicating it is tightly coupled to the database interaction layer.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        try {
            // ...
            return this.writePlatformService.makeLoanRepayment(LoanTransactionType.REPAYMENT, ...);
        } catch (final JpaSystemException | DataIntegrityViolationException dve) {
            // ...
        }
    }
org.apache.fineract.portfolio.loanaccount.handler JPA The class manages database transactions via Spring's @Transactional annotation and handles JPA-specific exceptions (JpaSystemException, DataIntegrityViolationException), although the direct database writes are delegated to the injected service.
@Transactional
public CommandProcessingResult processCommand(final JsonCommand command) {
    try {
        return this.writePlatformService.disburseLoan(command.entityId(), command, false);
    } catch (final JpaSystemException | DataIntegrityViolationException dve) { ... }
org.apache.fineract.portfolio.loanaccount.handler JPA The class manages database transactions via Spring's `@Transactional` annotation and handles JPA-specific exceptions (`JpaSystemException`, `DataIntegrityViolationException`). While it does not execute SQL directly, it orchestrates the transaction for the `LoanChargeWritePlatformService` which performs the persistence operations.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    try {
        return this.writePlatformService.loanChargeRefund(command.getLoanId(), command);
    } catch (final JpaSystemException | DataIntegrityViolationException dve) { ... }
org.apache.fineract.portfolio.loanaccount.handler JPA The class manages a database transaction using Spring's @Transactional annotation and handles JPA-specific exceptions (JpaSystemException). While it does not execute SQL directly, it orchestrates a write operation (refund) via the LoanWritePlatformService which interacts with the persistence layer.
@Transactional
public CommandProcessingResult processCommand(final JsonCommand command) {
    try {
        return this.writePlatformService.creditBalanceRefund(command.getLoanId(), command);
    } catch (final JpaSystemException | DataIntegrityViolationException dve) { ... }
org.apache.fineract.portfolio.loanaccount.handler.AddLoanChargeCommandHandler JPA The class manages database transactions via Spring's @Transactional annotation and handles JPA-specific exceptions (JpaSystemException, DataIntegrityViolationException). While it delegates the actual persistence logic to the LoanChargeWritePlatformService, it acts as the transaction boundary and error handling layer for database interactions related to creating loan charges.
@Transactional
public CommandProcessingResult processCommand(final JsonCommand command) {
    try {
        return this.writePlatformService.addLoanCharge(command.getLoanId(), command);
    } catch (final JpaSystemException | DataIntegrityViolationException dve) { ... }
org.apache.fineract.portfolio.loanaccount.handler.LoanPayoutRefundCommandHandler JPA The class interacts with the database indirectly through the `LoanWritePlatformService`. It manages the transaction boundary using Spring's `@Transactional` annotation. The explicit handling of `JpaSystemException` and `DataIntegrityViolationException` confirms that the underlying service interacts with a JPA-based persistence layer.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        try {
            // ...
            return this.writePlatformService.makeLoanRepayment(LoanTransactionType.PAYOUT_REFUND, ...);
        } catch (final JpaSystemException | DataIntegrityViolationException dve) {
            // ...
        }
    }
org.apache.fineract.portfolio.loanaccount.handler.UpdateLoanOfficerCommandHandler JPA This class initiates a database write operation by delegating to the `LoanWritePlatformService`. The `processCommand` method is annotated with `@Transactional`, indicating that the call to `writePlatformService.loanReassignment` is executed within a database transaction managed by the Spring framework. The actual database interaction logic (e.g., finding the loan entity, updating its officer field, and saving the changes) resides within the `LoanWritePlatformService`, which uses JPA for persistence.
return this.writePlatformService.loanReassignment(command.getLoanId(), command);
org.apache.fineract.portfolio.loanaccount.loanschedule.domain JPA The class is a JPA Entity that maps directly to a relational database table. It uses Jakarta Persistence annotations to define the table name, column mappings, precision for decimal values, and foreign key relationships.
@Entity
@Table(name = "m_loan_repayment_schedule_history")
public class LoanRepaymentScheduleHistory extends AbstractPersistableCustom { ... }
org.apache.fineract.portfolio.loanaccount.loanschedule.service JPA The class interacts with the database primarily through the `LoanAccountDomainService` to persist changes to the `Loan` entity and its related `LoanTermVariations`. It also uses `LoanAssembler` to fetch entities. The operations are wrapped in a Spring `@Transactional` annotation to ensure atomicity.
loanAccountDomainService.saveLoanWithDataIntegrityViolationChecks(loan);
org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest JPA The class is a JPA Entity mapped to the 'm_loan_reschedule_request' table. It uses Jakarta Persistence annotations to define the schema mapping and relationships.
@Entity
@Table(name = "m_loan_reschedule_request")
public class LoanRescheduleRequest extends AbstractPersistableCustom { ... }
org.apache.fineract.portfolio.loanaccount.rescheduleloan.handler JPA The class participates in database transactions via the Spring `@Transactional` annotation. While it does not execute SQL directly, it defines the transaction boundary for the `approve` operation performed by the injected service.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
        return this.loanRescheduleRequestWritePlatformService.approve(jsonCommand);
    }
org.apache.fineract.portfolio.loanaccount.service JPA The interface interacts with the database primarily through the 'Loan' domain entity (likely JPA) and explicitly through the generation of SQL statements in 'createInsertStatements'. This suggests a hybrid approach using both ORM for entity management and raw SQL generation for bulk operations.
void createInsertStatements(List<String> insertStatement, ...)
org.apache.fineract.portfolio.loanaccount.service.LoanApplicationWritePlatformServiceJpaRepositoryImpl JPA The class uses Spring Data JPA repositories (wrapped in custom wrapper classes) to interact with the database. It performs CRUD operations on entities like Loan, Client, Group, LoanProduct, CalendarInstance, and Note. It uses `@Transactional` to ensure atomicity of complex operations involving multiple tables.
this.loanRepositoryWrapper.saveAndFlush(newLoanApplication);
org.apache.fineract.portfolio.loanaccount.service.LoanWritePlatformService JPA The service manages write operations for loans, which involves persisting changes to Loan and LoanTransaction entities within transactions. It uses Spring's @Transactional annotation to manage transaction boundaries.
@Transactional
CommandProcessingResult makeLoanRepaymentWithChargeRefundChargeType(LoanTransactionType repaymentTransactionType, Long loanId, JsonCommand command, boolean isRecoveryRepayment, String chargeRefundChargeType);
org.apache.fineract.portfolio.loanaccount.service.LoanWritePlatformServiceJpaRepositoryImpl JPA The service uses Spring Data JPA repositories (wrapped in wrapper classes like `LoanRepositoryWrapper`) to interact with the database. It performs CRUD operations on `Loan`, `LoanTransaction`, and related entities. It uses `@Transactional` to ensure atomicity of complex business operations involving multiple tables.
loanRepaymentScheduleInstallmentRepository.saveAll(loan.getRepaymentScheduleInstallments());
return this.loanRepositoryWrapper.saveAndFlush(loan);
org.apache.fineract.portfolio.loanproduct.domain JPA The class is a JPA Entity mapped to the `m_product_loan_variations_borrower_cycle` table. It uses standard Jakarta Persistence annotations to define the table name, column mappings (including precision/scale for BigDecimals), and a Many-to-One relationship with the `LoanProduct` entity.
@Entity
@Table(name = "m_product_loan_variations_borrower_cycle")
public class LoanProductBorrowerCycleVariations extends AbstractPersistableCustom {
org.apache.fineract.portfolio.loanproduct.domain JPA The class is a JPA Entity mapped to the 'm_product_loan_configurable_attributes' table using Jakarta Persistence annotations. It uses a One-to-One relationship with the LoanProduct entity.
@Entity
@Table(name = "m_product_loan_configurable_attributes")
public class LoanProductConfigurableAttributes extends AbstractPersistableCustom implements Serializable {
    @OneToOne
    @JoinColumn(name = "loan_product_id", nullable = false)
    private LoanProduct loanProduct;
org.apache.fineract.portfolio.loanproduct.domain JPA This class is a JPA Embeddable component. It does not represent a standalone table but defines a set of columns that are embedded into the tables of entities that use it (likely Loan or LoanProduct tables). It uses standard Jakarta Persistence annotations to map fields to database columns.
@Embeddable
public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentScheduleRelatedDetail {
    @Column(name = "principal_amount", scale = 6, precision = 19)
    private BigDecimal principal;
    @Enumerated(EnumType.ORDINAL)
    @Column(name = "interest_period_frequency_enum")
    private PeriodFrequencyType interestPeriodFrequencyType;
}
org.apache.fineract.portfolio.loanproduct.domain JPA The class uses Jakarta Persistence (JPA) annotations to map the object model to the relational database table 'm_loan_product_payment_allocation_rule'. It defines column mappings, constraints, and relationships.
@Entity
@Table(name = "m_loan_product_payment_allocation_rule", uniqueConstraints = {
        @UniqueConstraint(columnNames = { "loan_product_id", "transaction_type" }, name = "uq_m_loan_product_payment_allocation_rule") })
public class LoanProductPaymentAllocationRule extends AbstractAuditableWithUTCDateTimeCustom {
org.apache.fineract.portfolio.loanproduct.domain JPA The class is a JPA Embeddable component. It defines the schema for min/max constraints columns (e.g., 'min_principal_amount', 'max_principal_amount') which are embedded into the table of the parent entity (likely LoanProduct).
@Embeddable
public class LoanProductMinMaxConstraints {
    @Column(name = "min_principal_amount", scale = 6, precision = 19)
    private BigDecimal minPrincipal;
    // ...
org.apache.fineract.portfolio.loanproduct.domain JPA This class is a JPA AttributeConverter. It intercepts database read and write operations for attributes of type List<PaymentAllocationType>, converting them to a String format (likely CSV) for the database and back to a List for the Java entity.
@Converter(autoApply = true)
public class AllocationTypeListConverter extends GenericEnumListConverter<PaymentAllocationType>
        implements AttributeConverter<List<PaymentAllocationType>, String>
org.apache.fineract.portfolio.loanproduct.domain.LoanProduct JPA The class is a standard JPA Entity annotated with @Entity and @Table. It maps to the 'm_product_loan' table. It uses @OneToMany, @ManyToOne, @ManyToMany, and @OneToOne annotations to define relationships with other entities like Fund, Charge, Rate, and various configuration details. It uses @Embedded to flatten complex value objects into the main table.
@Entity
@Table(name = "m_product_loan", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "unq_name"), ... })
public class LoanProduct extends AbstractPersistableCustom {
    @Column(name = "name", nullable = false, unique = true)
    private String name;
    ...
org.apache.fineract.portfolio.loanproduct.domain.LoanProductFloatingRates JPA The class is a JPA Entity mapped to the 'm_product_loan_floating_rates' table. It uses Jakarta Persistence annotations to define the table mapping, column constraints, and relationships (OneToOne, ManyToOne).
@Entity
@Table(name = "m_product_loan_floating_rates")
public class LoanProductFloatingRates extends AbstractPersistableCustom {
    @OneToOne
    @JoinColumn(name = "loan_product_id", nullable = false)
    private LoanProduct loanProduct;
    // ...
}
org.apache.fineract.portfolio.loanproduct.domain.LoanProductGuaranteeDetails JPA The class is a JPA Entity mapped to a relational database table. It uses Jakarta Persistence annotations to define the table name, column mappings, and relationships.
@Entity
@Table(name = "m_product_loan_guarantee_details")
public class LoanProductGuaranteeDetails extends AbstractPersistableCustom {
org.apache.fineract.portfolio.loanproduct.domain.LoanProductInterestRecalculationDetails JPA The class is a JPA Entity that maps to the 'm_product_loan_recalculation_details' table. It uses Jakarta Persistence annotations (@Entity, @Table, @Column, @OneToOne) to define the schema mapping. It maintains a one-to-one relationship with the 'LoanProduct' entity via the 'product_id' join column.
@Entity
@Table(name = "m_product_loan_recalculation_details")
public class LoanProductInterestRecalculationDetails extends AbstractPersistableCustom {
    @OneToOne
    @JoinColumn(name = "product_id", nullable = false)
    private LoanProduct loanProduct;
    // ...
org.apache.fineract.portfolio.loanproduct.domain.LoanProductTrancheDetails JPA The class is a JPA Embeddable component. It defines database column mappings for tranche-related fields which will be part of the table of the entity that embeds this class (likely the Loan Product table).
@Column(name = "max_outstanding_loan_balance", scale = 6, precision = 19)
private BigDecimal outstandingLoanBalance;
org.apache.fineract.portfolio.loanproduct.domain.LoanProductVariableInstallmentConfig JPA The class is a JPA Entity that maps directly to a relational database table. It uses Jakarta Persistence annotations to define the table name, column mappings, and relationships (OneToOne).
@Entity
@Table(name = "m_product_loan_variable_installment_config")
public class LoanProductVariableInstallmentConfig extends AbstractPersistableCustom {
org.apache.fineract.portfolio.loanproduct.productmix.domain.ProductMix JPA This class is a JPA Entity that maps directly to the relational database table 'm_product_mix'. It uses annotations to define foreign key relationships to the LoanProduct table.
@Entity
@Table(name = "m_product_mix")
public class ProductMix extends AbstractPersistableCustom {
    @ManyToOne
    @JoinColumn(name = "product_id", nullable = false)
    private LoanProduct product;
}
org.apache.fineract.portfolio.meeting.attendance.domain.ClientAttendance JPA The class is a JPA Entity mapped to the 'm_client_attendance' table. It defines the schema structure including foreign keys to Client and Meeting tables and a unique constraint.
@Entity
@Table(name = "m_client_attendance", uniqueConstraints = {
        @UniqueConstraint(columnNames = { "client_id", "meeting_id" }, name = "unique_client_meeting_attendance") })
public class ClientAttendance extends AbstractPersistableCustom {
org.apache.fineract.portfolio.meeting.domain.Meeting JPA The class is a JPA Entity mapped to the 'm_meeting' table. It uses standard Jakarta Persistence annotations to define the table structure, unique constraints, and relationships (ManyToOne, OneToMany).
@Entity
@Table(name = "m_meeting", uniqueConstraints = {
        @UniqueConstraint(columnNames = { "calendar_instance_id", "meeting_date" }, name = "unique_calendar_instance_id_meeting_date") })
public class Meeting extends AbstractPersistableCustom {
org.apache.fineract.portfolio.note.domain.Note JPA The class is a standard JPA Entity mapped to the 'm_note' table. It defines relationships to other tables (m_client, m_group, m_loan, etc.) using @ManyToOne annotations.
@Entity
@Table(name = "m_note")
public class Note extends AbstractAuditableWithUTCDateTimeCustom {
    @ManyToOne
    @JoinColumn(name = "client_id", nullable = true)
    private Client client;
    // ...
}
org.apache.fineract.portfolio.paymentdetail.domain JPA The class is a JPA entity mapped to the 'm_payment_detail' database table. It uses annotations to define column mappings and relationships.
@Entity
@Table(name = "m_payment_detail")
public final class PaymentDetail extends AbstractPersistableCustom {
org.apache.fineract.portfolio.paymenttype.domain.PaymentType JPA The class is a JPA Entity that maps directly to a relational database table. It uses Jakarta Persistence annotations to define the table name and column mappings.
@Entity
@Table(name = "m_payment_type")
public class PaymentType extends AbstractPersistableCustom {
    @Column(name = "value")
    private String name;
}
org.apache.fineract.portfolio.rate.domain.Rate JPA The class is a JPA entity mapped to the 'm_rate' database table. It uses Jakarta Persistence annotations to define the table structure, columns, and relationships.
@Entity
@Table(name = "m_rate", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "name") })
public class Rate extends AbstractAuditableCustom {
    @Column(name = "name", length = 250, unique = true)
    private String name;
    // ...
org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDatedChecks JPA The class is a JPA entity that maps to the 'm_repayment_with_post_dated_checks' table. It uses Jakarta Persistence annotations to define the table structure, column constraints, and foreign key relationships to the Loan and LoanRepaymentScheduleInstallment tables.
@Entity
@Table(name = "m_repayment_with_post_dated_checks")
public class PostDatedChecks extends AbstractPersistableCustom {
    @Column(name = "account_no", nullable = false, length = 10)
    private Long accountNo;
}
org.apache.fineract.portfolio.savings.domain JPA The class is a JPA Embeddable component. It does not interact with the database directly but defines columns that will be part of the table of the entity embedding it.
@Column(name = "is_mandatory", nullable = true)
private boolean isMandatoryDeposit;
org.apache.fineract.portfolio.savings.domain JPA The class is a JPA entity mapped to the 'm_savings_account_charge_paid_by' table. It uses Jakarta Persistence annotations to define the table mapping and relationships (ManyToOne) with other entities.
@Entity
@Table(name = "m_savings_account_charge_paid_by")
public class SavingsAccountChargePaidBy extends AbstractPersistableCustom {
org.apache.fineract.portfolio.savings.domain JPA The class is a JPA entity that maps directly to the 'm_savings_officer_assignment_history' table. It uses annotations to define the table name, column mappings, and relationships (ManyToOne) to other entities (SavingsAccount, Staff).
@Entity
@Table(name = "m_savings_officer_assignment_history")
public class SavingsOfficerAssignmentHistory extends AbstractAuditableCustom {
    @ManyToOne
    @JoinColumn(name = "account_id", nullable = false)
    private SavingsAccount savingsAccount;
org.apache.fineract.portfolio.savings.domain JPA The class is a JPA entity mapped to the 'm_savings_account_transaction' table. It uses standard JPA annotations for ORM mapping.
@Entity
@Table(name = "m_savings_account_transaction")
public final class SavingsAccountTransaction extends AbstractPersistableCustom { ... }
org.apache.fineract.portfolio.savings.domain JPA This class is a JPA Embeddable component. It does not represent a standalone table but defines columns that are embedded into the table of the owning entity (likely SavingsAccount). It uses standard Jakarta Persistence annotations to map fields to database columns with specific precision and scale.
@Embeddable
public final class SavingsAccountSummary {
    @Column(name = "total_deposits_derived", scale = 6, precision = 19)
    private BigDecimal totalDeposits;
    // ...
}
org.apache.fineract.portfolio.savings.domain JPA The class uses Spring Data JPA repositories (wrapped in wrapper classes) to interact with the database. It loads, updates, and saves `SavingsAccount`, `FixedDepositAccount`, `RecurringDepositAccount`, and `CalendarInstance` entities. It also uses `JournalEntryWritePlatformService` to write accounting entries.
this.savingsAccountRepository.save(account);
org.apache.fineract.portfolio.savings.domain JPA The class is a JPA Entity that maps to the 'm_deposit_product_term_and_preclosure' table. It uses Jakarta Persistence annotations to define the mapping. It utilizes @Embedded to flatten the structure of related value objects (DepositPreClosureDetail, DepositTermDetail, DepositProductAmountDetails) into columns within the same table, and @OneToOne to link to the 'm_savings_product' table (via FixedDepositProduct).
@Entity
@Table(name = "m_deposit_product_term_and_preclosure")
public class DepositProductTermAndPreClosure extends AbstractPersistableCustom {
org.apache.fineract.portfolio.savings.domain JPA The class is a JPA Entity that maps to a relational database table. It uses Jakarta Persistence annotations to define the table name, relationships, and embedded fields.
@Entity
@Table(name = "m_deposit_product_recurring_detail")
public class DepositProductRecurringDetail extends AbstractPersistableCustom {
org.apache.fineract.portfolio.savings.domain JPA The class is a JPA entity that maps to the database table for savings accounts (likely 'm_savings_account' via inheritance). It uses a discriminator value '300' to distinguish itself from other savings account types. It manages relationships with other entities like DepositAccountTermAndPreClosure, DepositAccountRecurringDetail, and RecurringDepositScheduleInstallment using @OneToOne and @OneToMany annotations with CascadeType.ALL.
@Entity
@DiscriminatorValue("300")
public class RecurringDepositAccount extends SavingsAccount {
    @OneToOne(mappedBy = "account", cascade = CascadeType.ALL)
    private DepositAccountTermAndPreClosure accountTermAndPreClosure;
    ...
org.apache.fineract.portfolio.savings.domain JPA This interface defines a domain service that orchestrates changes to JPA entities (SavingsAccount, FixedDepositAccount, RecurringDepositAccount). The @Transactional annotation on 'handleFDAccountMaturityClosure' indicates that the implementation manages database transactions to ensure data consistency during complex operations like account maturity.
@Transactional
Long handleFDAccountMaturityClosure(FixedDepositAccount account, ...)
org.apache.fineract.portfolio.savings.domain JPA The class is a JPA Entity mapped to the 'm_savings_account_interest_rate_chart' table. It uses standard Jakarta Persistence annotations to define the table mapping, embedded fields, and relationships (OneToOne with SavingsAccount, OneToMany with DepositAccountInterestRateChartSlabs).
@Entity
@Table(name = "m_savings_account_interest_rate_chart")
public class DepositAccountInterestRateChart extends AbstractPersistableCustom {
    @OneToOne
    @JoinColumn(name = "savings_account_id", nullable = false)
    private SavingsAccount account;
}
org.apache.fineract.portfolio.savings.domain JPA The class is a JPA Entity mapped to the 'm_deposit_account_on_hold_transaction' table. It uses standard Jakarta Persistence annotations to define columns and relationships.
@Entity
@Table(name = "m_deposit_account_on_hold_transaction")
public class DepositAccountOnHoldTransaction extends AbstractPersistableCustom {
org.apache.fineract.portfolio.savings.domain JPA The class is a JPA Entity mapped to the 'm_deposit_account_recurring_detail' table. It uses standard Jakarta Persistence annotations to define the table mapping, columns, and relationships (OneToOne with SavingsAccount).
@Entity
@Table(name = "m_deposit_account_recurring_detail")
public class DepositAccountRecurringDetail extends AbstractPersistableCustom {
    @Column(name = "mandatory_recommended_deposit_amount"...)
    private BigDecimal mandatoryRecommendedDepositAmount;
    @OneToOne
    @JoinColumn(name = "savings_account_id", nullable = false)
    private SavingsAccount account;
org.apache.fineract.portfolio.savings.domain JPA The class is a JPA Entity annotated with `@Entity` and `@DiscriminatorValue("300")`. It extends `FixedDepositProduct`, implying a Single Table inheritance strategy where all products are stored in one table (likely `m_savings_product` or similar) distinguished by the discriminator column. It also manages a child entity `DepositProductRecurringDetail` via a `@OneToOne` relationship with `CascadeType.ALL`.
@Entity
@DiscriminatorValue("300")
public class RecurringDepositProduct extends FixedDepositProduct {
    @OneToOne(mappedBy = "product", cascade = CascadeType.ALL)
    private DepositProductRecurringDetail recurringDetail;
org.apache.fineract.portfolio.savings.domain.DepositAccountInterestIncentive JPA The class uses Jakarta Persistence API (JPA) annotations to map the Java object to a relational database table. It defines relationships and embedded fields that correspond to columns in the 'm_deposit_account_interest_incentives' table.
@Entity
@Table(name = "m_deposit_account_interest_incentives")
public class DepositAccountInterestIncentive extends AbstractPersistableCustom {
org.apache.fineract.portfolio.savings.domain.DepositAccountInterestIncentives JPA The class is a JPA entity that maps directly to the 'm_savings_interest_incentives' table in the database. It uses annotations to define the table name, column mappings, and relationships (Many-to-One) with other entities.
@Entity
@Table(name = "m_savings_interest_incentives")
public class DepositAccountInterestIncentives extends AbstractPersistableCustom {
org.apache.fineract.portfolio.savings.domain.DepositAccountInterestRateChartSlabs JPA The class is a JPA Entity mapped to the 'm_savings_account_interest_rate_slab' table. It uses Jakarta Persistence annotations to define the table mapping, embedded fields, and relationships with other entities.
@Entity
@Table(name = "m_savings_account_interest_rate_slab")
public class DepositAccountInterestRateChartSlabs extends AbstractPersistableCustom {
org.apache.fineract.portfolio.savings.domain.DepositAccountTermAndPreClosure JPA The class is a JPA Entity annotated with @Entity and @Table, mapping directly to the 'm_deposit_account_term_and_preclosure' table. It uses standard JPA annotations (@Column, @OneToOne, @Embedded) to map class fields to database columns and relationships.
@Entity
@Table(name = "m_deposit_account_term_and_preclosure")
public class DepositAccountTermAndPreClosure extends AbstractPersistableCustom {
    @Column(name = "deposit_amount", scale = 6, precision = 19, nullable = true)
    private BigDecimal depositAmount;
    // ...
}
org.apache.fineract.portfolio.savings.domain.DepositPreClosureDetail JPA This class is a JPA Embeddable component. It does not represent a standalone table but defines columns that are embedded into the tables of the entities that use it (e.g., FixedDepositProduct or FixedDepositAccount). It uses Jakarta Persistence annotations to map fields to database columns.
@Embeddable
public class DepositPreClosureDetail {
    @Column(name = "pre_closure_penal_applicable")
    private boolean preClosurePenalApplicable;
    @Column(name = "pre_closure_penal_interest", scale = 6, precision = 19, nullable = true)
    private BigDecimal preClosurePenalInterest;
}
org.apache.fineract.portfolio.savings.domain.DepositProductAmountDetails JPA The class uses Jakarta Persistence (JPA) annotations to map its fields to database columns. It is marked as @Embeddable, meaning it does not have its own table but its columns are embedded in the table of the entity that contains it.
@Embeddable
public class DepositProductAmountDetails {
    @Column(name = "min_deposit_amount", scale = 6, precision = 19, nullable = true)
    private BigDecimal minDepositAmount;
org.apache.fineract.portfolio.savings.domain.DepositTermDetail JPA This class is a JPA Embeddable component. It does not have its own table but defines columns that are embedded into the tables of entities that use it (e.g., FixedDepositProduct).
@Embeddable
public class DepositTermDetail {
    @Column(name = "min_deposit_term", nullable = true)
    private Integer minDepositTerm;
org.apache.fineract.portfolio.savings.domain.FixedDepositAccount JPA The class is a JPA Entity mapped to the database. It inherits from `SavingsAccount` and uses a discriminator value to distinguish it in the persistence layer. It uses One-to-One relationships for managing term details and interest charts.
@Entity
@DiscriminatorValue("200")
public class FixedDepositAccount extends SavingsAccount {
    @OneToOne(mappedBy = "account", cascade = CascadeType.ALL)
    private DepositAccountTermAndPreClosure accountTermAndPreClosure;
}
org.apache.fineract.portfolio.savings.domain.FixedDepositProduct JPA The class is a JPA Entity annotated with @Entity and @DiscriminatorValue('200'). It maps to a database table (likely 'm_savings_product' via inheritance) and uses a join table 'm_deposit_product_interest_rate_chart' for its relationship with InterestRateChart.
@Entity
@DiscriminatorValue("200")
public class FixedDepositProduct extends SavingsProduct {
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "m_deposit_product_interest_rate_chart", ...)
    protected Set<InterestRateChart> charts;
}
org.apache.fineract.portfolio.savings.domain.GroupSavingsIndividualMonitoring JPA The class is a JPA Entity mapped to the 'gsim_accounts' table. It uses Jakarta Persistence annotations to define the schema, including columns, unique constraints, and relationships (ManyToOne with Group, OneToMany with SavingsAccount).
@Entity
@Table(name = "gsim_accounts", uniqueConstraints = { @UniqueConstraint(columnNames = { "account_number" }, name = "gsim_id") })
public final class GroupSavingsIndividualMonitoring extends AbstractPersistableCustom {
org.apache.fineract.portfolio.savings.domain.RecurringDepositScheduleInstallment JPA The class is a JPA Entity that maps directly to the 'm_mandatory_savings_schedule' table. It uses standard Jakarta Persistence annotations to define the table name, column mappings, and relationships (ManyToOne with RecurringDepositAccount).
@Entity
@Table(name = "m_mandatory_savings_schedule")
public class RecurringDepositScheduleInstallment extends AbstractAuditableCustom {
    @ManyToOne(optional = false)
    @JoinColumn(name = "savings_account_id")
    private RecurringDepositAccount account;
}
org.apache.fineract.portfolio.savings.domain.SavingsAccount JPA The class is a JPA Entity mapped to the 'm_savings_account' table. It uses Single Table Inheritance with a discriminator column. It defines relationships with other entities like Client, Group, SavingsProduct, and manages collections of transactions and charges.
@Entity
@Table(name = "m_savings_account", uniqueConstraints = { @UniqueConstraint(columnNames = { "account_no" }, name = "sa_account_no_UNIQUE"),
        @UniqueConstraint(columnNames = { "external_id" }, name = "sa_external_id_UNIQUE") })
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "deposit_type_enum", discriminatorType = DiscriminatorType.INTEGER)
@DiscriminatorValue("100")
public class SavingsAccount extends AbstractPersistableCustom { ... }
org.apache.fineract.portfolio.savings.domain.SavingsAccountCharge JPA The class is a JPA Entity mapped to the 'm_savings_account_charge' table. It uses standard Jakarta Persistence annotations to define the table mapping, column definitions, and relationships (ManyToOne) with SavingsAccount and Charge entities.
@Entity
@Table(name = "m_savings_account_charge")
public class SavingsAccountCharge extends AbstractPersistableCustom {
    @ManyToOne(optional = false)
    @JoinColumn(name = "savings_account_id", referencedColumnName = "id", nullable = false)
    private SavingsAccount savingsAccount;
    // ...
org.apache.fineract.portfolio.savings.domain.SavingsAccountTransactionTaxDetails JPA The class is a JPA entity mapped to the 'm_savings_account_transaction_tax_details' table. It uses standard JPA annotations to define the table mapping, column constraints, and foreign key relationships to other entities.
@Entity
@Table(name = "m_savings_account_transaction_tax_details")
public class SavingsAccountTransactionTaxDetails extends AbstractPersistableCustom {
    @ManyToOne
    @JoinColumn(name = "savings_transaction_id", nullable = false)
    private SavingsAccountTransaction savingsAccountTransaction;
}
org.apache.fineract.portfolio.savings.domain.SavingsProduct JPA The class is a JPA Entity mapped to the 'm_savings_product' table. It uses Single Table Inheritance with a discriminator column 'deposit_type_enum'. It defines mappings for various columns including unique constraints on name and short_name, and relationships like Many-to-Many with Charges and Many-to-One with TaxGroup.
@Entity
@Table(name = "m_savings_product", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "sp_unq_name") })
@Inheritance
@DiscriminatorColumn(name = "deposit_type_enum", discriminatorType = DiscriminatorType.INTEGER)
public class SavingsProduct extends AbstractPersistableCustom { ... }
org.apache.fineract.portfolio.savings.handler JPA The class uses Spring's `@Transactional` annotation to manage database transactions. While it does not execute SQL directly, it delegates to `DepositAccountWritePlatformService` which performs write operations on the database.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.depositAccountWritePlatformService.prematureCloseFDAccount(command.entityId(), command);
    }
org.apache.fineract.portfolio.savings.handler JPA The class manages database transactions via the Spring `@Transactional` annotation. While it does not execute SQL directly, it defines the transaction boundary for the `depositToRDAccount` operation performed by the injected service, which likely interacts with the database using JPA.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.depositAccountWritePlatformService.depositToRDAccount(command.entityId(), command);
}
org.apache.fineract.portfolio.savings.handler JPA The class defines a transactional boundary using Spring's @Transactional annotation. While it does not execute SQL or call a repository directly, it orchestrates a write operation via the DepositApplicationProcessWritePlatformService which interacts with the database to update the state of the recurring deposit account application.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.depositAccountWritePlatformService.undoApplicationApproval(...);
}
org.apache.fineract.portfolio.savings.handler JPA The class defines a transaction boundary using the Spring `@Transactional` annotation. While it does not execute SQL or JPA queries directly, it orchestrates a transactional unit of work that delegates to the `DepositAccountWritePlatformService`, which performs the actual database persistence operations.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.depositAccountWritePlatformService.postInterest(command.entityId(), DepositAccountType.RECURRING_DEPOSIT);
    }
org.apache.fineract.portfolio.savings.handler JPA The class manages database transactions via the Spring `@Transactional` annotation. While it does not execute SQL directly, it orchestrates a write operation ('UNBLOCKCREDIT') on the 'SAVINGSACCOUNT' entity through the injected service, ensuring atomicity of the database changes.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand command) {
        return this.writePlatformService.unblockCredits(command.getSavingsId());
    }
org.apache.fineract.portfolio.savings.handler JPA The class uses Spring's `@Transactional` annotation to manage database transactions for the operation. It delegates the actual data modification to `SavingsAccountWritePlatformService`, which likely interacts with the `SAVINGSACCOUNT` table.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand command) {
        return this.writePlatformService.blockCredits(command.getSavingsId(), command);
    }
org.apache.fineract.portfolio.savings.handler JPA The class defines a transaction boundary using Spring's @Transactional annotation for a database write operation. While it does not contain direct SQL or Repository calls, it orchestrates a persistence operation by delegating to the SavingsAccountWritePlatformService which interacts with the database.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.writePlatformService.waiveCharge(command.getSavingsId(), command.entityId());
    }
org.apache.fineract.portfolio.savings.handler.GSIMDepositCommandHandler JPA The class defines a transactional boundary using Spring's `@Transactional` annotation, implying interaction with a transactional resource (database). It delegates the actual persistence logic to `SavingsAccountWritePlatformService`.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.writePlatformService.gsimDeposit(command.getSavingsId(), command);
    }
org.apache.fineract.portfolio.savings.service JPA The service uses `DepositAccountAssembler` to retrieve domain entities (`SavingsAccount`, `FixedDepositAccount`, `RecurringDepositAccount`) from the database. It is also annotated with `@Transactional`, indicating it participates in a database transaction managed by Spring.
@Transactional
@Override
public DepositAccountData calculatePreMatureAmount(final Long accountId, final JsonQuery query, final DepositAccountType depositAccountType) {
    // ...
    final SavingsAccount account = this.depositAccountAssembler.assembleFrom(accountId, depositAccountType);
    // ...
}
org.apache.fineract.portfolio.savings.service JPA The service uses Spring Data JPA repositories to interact with the database. It injects repositories for FixedDepositAccount, RecurringDepositAccount, SavingsAccount, and related entities (Client, Group, Staff, Note). It uses the @Transactional annotation to ensure data consistency across multiple repository calls.
this.fixedDepositAccountRepository.saveAndFlush(account);
org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformServiceJpaRepositoryImpl JPA The class uses Spring Data JPA repositories (wrapped in wrapper classes) to interact with the database. It performs CRUD operations on savings accounts, transactions, charges, and related entities. Transaction management is handled via Spring's @Transactional annotation.
this.savingAccountRepositoryWrapper.saveAndFlush(account);
org.apache.fineract.portfolio.self.account.domain.SelfBeneficiariesTPT JPA The class is a JPA Entity mapped to a relational database table. It uses Jakarta Persistence annotations to define the table name, column mappings, and unique constraints.
@Entity
@Table(name = "m_selfservice_beneficiaries_tpt"...)
public class SelfBeneficiariesTPT extends AbstractPersistableCustom {
    @Column(name = "app_user_id", nullable = false)
    private Long appUserId;
...
org.apache.fineract.portfolio.self.pockets.domain JPA The class is a JPA Entity mapped to the 'm_pocket_accounts_mapping' table. It uses Jakarta Persistence annotations to define the table structure and column mappings for pocket IDs and account details.
@Entity
@Table(name = "m_pocket_accounts_mapping")
public class PocketAccountMapping extends AbstractPersistableCustom {
    @Column(name = "pocket_id", length = 20, nullable = false)
    private Long pocketId;
    // ...
org.apache.fineract.portfolio.self.pockets.domain.Pocket JPA The class is a JPA Entity that maps directly to a relational database table using Jakarta Persistence annotations. It defines the table structure, column mappings, and unique constraints for the 'Pocket' domain object.
@Entity
@Table(name = "m_pocket", uniqueConstraints = { @UniqueConstraint(columnNames = { "app_user_id" }, name = "unique_app_user") })
public class Pocket extends AbstractPersistableCustom { ... }
org.apache.fineract.portfolio.self.registration.domain.SelfServiceRegistration JPA The class is a JPA Entity mapped to the 'request_audit_table' database table. It uses Jakarta Persistence annotations to define the schema mapping, including column names, lengths, and nullability constraints. It establishes a Many-to-One relationship with the Client entity.
@Entity
@Table(name = "request_audit_table")
public class SelfServiceRegistration extends AbstractPersistableCustom {
    @ManyToOne
    @JoinColumn(name = "client_id", nullable = false)
    private Client client;
org.apache.fineract.portfolio.shareaccounts.domain JPA The class is a JPA entity mapped to the 'm_share_account_charge_paid_by' table. It uses foreign keys to link to 'm_share_account_transaction' and 'm_share_account_charge'.
@Entity
@Table(name = "m_share_account_charge_paid_by")
public class ShareAccountChargePaidBy extends AbstractPersistableCustom {
    @ManyToOne(optional = false)
    @JoinColumn(name = "share_transaction_id", referencedColumnName = "id", nullable = false)
    private ShareAccountTransaction shareAccountTransaction;
    //...
org.apache.fineract.portfolio.shareaccounts.domain.ShareAccount JPA The class is a JPA Entity mapped to the 'm_share_account' table. It uses standard Jakarta Persistence annotations (@Entity, @Table, @Column, @ManyToOne, @OneToMany) to define the mapping to the relational database schema, including relationships with Client, ShareProduct, and child entities like ShareAccountTransaction.
@Entity
@Table(name = "m_share_account")
public class ShareAccount extends AbstractPersistableCustom {
    @ManyToOne
    @JoinColumn(name = "client_id")
    private Client client;
    // ...
}
org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountCharge JPA The class is a JPA Entity annotated with @Entity and @Table, mapping directly to the 'm_share_account_charge' table. It uses @ManyToOne relationships for linking to ShareAccount and Charge entities.
@Entity
@Table(name = "m_share_account_charge")
public class ShareAccountCharge extends AbstractPersistableCustom {
org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountDividendDetails JPA The class is a JPA Entity that maps directly to a relational database table. It uses annotations to define column mappings, constraints, and relationships.
@Entity
@Table(name = "m_share_account_dividend_details")
public class ShareAccountDividendDetails extends AbstractPersistableCustom {
    @Column(name = "account_id", nullable = false)
    private Long shareAccountId;
org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountTransaction JPA The class is a JPA Entity annotated with @Entity and @Table, mapping to the 'm_share_account_transactions' table. It uses standard JPA annotations for column mapping (@Column), relationships (@ManyToOne, @OneToMany), and cascading operations.
@Entity
@Table(name = "m_share_account_transactions")
public class ShareAccountTransaction extends AbstractPersistableCustom {
    @ManyToOne(optional = false)
    @JoinColumn(name = "account_id", referencedColumnName = "id", nullable = false)
    private ShareAccount shareAccount;
org.apache.fineract.portfolio.shareaccounts.handler JPA The class defines a transaction boundary using Spring's @Transactional annotation. While it does not execute SQL directly, it orchestrates a write operation (redeem shares) via the ShareAccountWritePlatformService, which implies underlying database interaction managed by JPA or a similar persistence framework.
@Transactional
@Override
public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
    return this.shareAccountWritePlatformService.redeemShares(jsonCommand.entityId(), jsonCommand);
}
org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformServiceJpaRepositoryImpl JPA The class uses Spring Data JPA repositories (wrapped in custom wrappers) to perform CRUD operations on share accounts, share products, and notes. It relies on the persistence context to manage entity states and flush changes to the database.
ShareAccount account = this.accountDataSerializer.validateAndCreate(jsonCommand);
this.shareAccountRepository.saveAndFlush(account);
org.apache.fineract.portfolio.shareproducts.domain JPA The class is a standard JPA Entity mapped to a specific database table. It uses Jakarta Persistence annotations to define the schema mapping, including column definitions and relationships.
@Entity
@Table(name = "m_share_product_dividend_pay_out")
public class ShareProductDividendPayOutDetails extends AbstractAuditableCustom {
org.apache.fineract.portfolio.shareproducts.domain JPA The class is a JPA Entity mapped to a relational database table. It uses annotations to define the table name, column mappings, and relationships (ManyToOne) to other entities.
@Entity
@Table(name = "m_share_product_market_price")
public class ShareProductMarketPrice extends AbstractPersistableCustom {
org.apache.fineract.portfolio.shareproducts.domain.ShareProduct JPA The class is a JPA Entity mapped to the 'm_share_product' table. It uses standard Jakarta Persistence annotations to define column mappings, relationships (OneToMany for market prices, ManyToMany for charges), and constraints.
@Entity
@Table(name = "m_share_product")
public class ShareProduct extends AbstractAuditableCustom {
    @Column(name = "name", nullable = false, unique = true)
    private String name;
    // ...
}
org.apache.fineract.portfolio.shareproducts.handler JPA The class defines a transaction boundary using Spring's `@Transactional` annotation, implying that the underlying service method `deleteShareProductDividend` performs database write operations (likely via JPA or JDBC) that need to be atomic.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
        return this.shareProductWritePlatformService.deleteShareProductDividend(jsonCommand.entityId());
    }
org.apache.fineract.portfolio.tax.domain.TaxComponent JPA The class is a JPA Entity mapped to the 'm_tax_component' table. It uses Jakarta Persistence annotations to define the schema mapping, including columns for name, percentage, and account IDs. It manages relationships with 'TaxComponentHistory' (One-to-Many) and 'GLAccount' (Many-to-One).
@Entity
@Table(name = "m_tax_component")
public class TaxComponent extends AbstractAuditableCustom {
    @Column(name = "percentage", scale = 6, precision = 19, nullable = false)
    private BigDecimal percentage;
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
    @JoinColumn(name = "tax_component_id", referencedColumnName = "id", nullable = false)
    private Set<TaxComponentHistory> taxComponentHistories = new HashSet<>();
}
org.apache.fineract.portfolio.tax.domain.TaxComponentHistory JPA This class is a JPA entity mapped to the 'm_tax_component_history' table. It defines columns for percentage, start_date, and end_date.
@Entity
@Table(name = "m_tax_component_history")
public class TaxComponentHistory extends AbstractAuditableCustom {
org.apache.fineract.portfolio.tax.domain.TaxGroup JPA The class is a JPA Entity annotated with @Entity and @Table, mapping it to the 'm_tax_group' table. It manages a relationship with the 'm_tax_group_mappings' table (implied by the OneToMany relationship) via the TaxGroupMappings entity.
@Entity
@Table(name = "m_tax_group")
public class TaxGroup extends AbstractAuditableCustom {
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER, mappedBy = "taxGroup")
    private Set<TaxGroupMappings> taxGroupMappings = new HashSet<>();
org.apache.fineract.portfolio.tax.domain.TaxGroupMappings JPA The class is a JPA entity mapped to the 'm_tax_group_mappings' table. It uses Jakarta Persistence annotations to define the table mapping and relationships.
@Entity
@Table(name = "m_tax_group_mappings")
public class TaxGroupMappings extends AbstractAuditableCustom {
org.apache.fineract.spm.domain JPA The class is a JPA Entity mapped to the 'm_survey_components' table. It uses annotations to define column mappings and relationships.
@Entity
@Table(name = "m_survey_components")
public class Component extends AbstractPersistableCustom {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "survey_id")
    private Survey survey;
org.apache.fineract.spm.domain.LookupTable JPA The class is a JPA Entity mapped to the 'm_survey_lookup_tables' table. It uses standard Jakarta Persistence annotations to define the table mapping, column constraints (length, precision, scale), and relationships (ManyToOne with Survey).
@Entity
@Table(name = "m_survey_lookup_tables")
public class LookupTable extends AbstractPersistableCustom {
    @Column(name = "score", precision = 5, scale = 2)
    private Double score;
}
org.apache.fineract.spm.domain.Question JPA The class is a JPA entity mapped to the 'm_survey_questions' table. It defines columns for component key, key, text, description, and sequence number. It also manages foreign key relationships to the Survey entity and a collection of Response entities.
@Entity
@Table(name = "m_survey_questions")
public class Question extends AbstractPersistableCustom {
org.apache.fineract.spm.domain.Response JPA The class is a JPA entity mapped to the 'm_survey_responses' table. It uses Jakarta Persistence annotations to define the table mapping, column definitions (including length and precision), and the Many-to-One relationship with the Question entity.
@Entity
@Table(name = "m_survey_responses")
public class Response extends AbstractPersistableCustom {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "question_id")
    private Question question;
org.apache.fineract.spm.domain.Scorecard JPA The class is a JPA Entity mapped to the 'm_survey_scorecards' table. It defines the schema for storing survey scores, including foreign keys to Survey, Question, Response, AppUser, and Client tables.
@Entity
@Table(name = "m_survey_scorecards")
public class Scorecard extends AbstractPersistableCustom {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "survey_id")
    private Survey survey;
    // ...
org.apache.fineract.spm.domain.Survey JPA The class is a JPA entity mapped to the 'm_surveys' table. It defines the schema for storing survey data and manages relationships with 'Component' and 'Question' entities via OneToMany mappings.
@Entity
@Table(name = "m_surveys")
public class Survey extends AbstractPersistableCustom { ... }
org.apache.fineract.template.domain JPA The class is a JPA Entity mapped to the 'm_templatemappers' database table using Jakarta Persistence annotations. It maps class fields to specific database columns.
@Entity
@Table(name = "m_templatemappers")
public class TemplateMapper extends AbstractPersistableCustom {
    @Column(name = "mapperorder")
    private int mapperorder;
org.apache.fineract.template.domain.Template JPA The class is a JPA entity mapped to the 'm_template' table. It uses standard JPA annotations to define column mappings, unique constraints, and relationships. Specifically, it defines a One-to-Many relationship with 'TemplateMapper' using a join table 'm_template_m_templatemappers'.
@Entity
@Table(name = "m_template", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "unq_name") })
public class Template extends AbstractPersistableCustom {
    @Column(name = "name", nullable = false, unique = true)
    private String name;
    @OneToMany(targetEntity = TemplateMapper.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(name = "m_template_m_templatemappers"...)
    private List<TemplateMapper> mappers;
}
org.apache.fineract.template.service JPA This interface defines service-level operations that delegate to a persistence layer (likely JPA/Hibernate based on the domain entities) to perform CRUD operations on Template data.
n/a
org.apache.fineract.useradministration.domain JPA The class is a JPA Entity mapped to the 'm_password_validation_policy' table. It uses annotations to define the table name and column constraints (nullability).
@Entity
@Table(name = "m_password_validation_policy")
public class PasswordValidationPolicy extends AbstractPersistableCustom {
org.apache.fineract.useradministration.domain.AppUser JPA The class is a JPA Entity mapped to the 'm_appuser' table. It uses standard Jakarta Persistence annotations to define columns, constraints, and relationships (ManyToOne with Office/Staff, ManyToMany with Role, OneToMany with AppUserClientMapping).
@Entity
@Table(name = "m_appuser", uniqueConstraints = @UniqueConstraint(columnNames = { "username" }, name = "username_org"))
public class AppUser extends AbstractPersistableCustom implements PlatformUser { ... }
org.apache.fineract.useradministration.domain.AppUserClientMapping JPA The class is a JPA Entity that maps directly to a relational database table. It uses annotations to define the table name and column relationships (foreign keys) to other entities.
@Entity
@Table(name = "m_selfservice_user_client_mapping")
public class AppUserClientMapping extends AbstractPersistableCustom {
    @ManyToOne(optional = false, cascade = CascadeType.ALL)
    @JoinColumn(name = "appuser_id", nullable = false)
    private AppUser appUser;
org.apache.fineract.useradministration.domain.AppUserPreviousPassword JPA This class is a JPA Entity that maps directly to a relational database table. It uses Jakarta Persistence annotations to define the table name and column mappings.
@Entity
@Table(name = "m_appuser_previous_password")
public class AppUserPreviousPassword extends AbstractPersistableCustom {
org.apache.fineract.useradministration.domain.Permission JPA The class is a JPA Entity mapped to the 'm_permission' table. It uses Jakarta Persistence annotations to define the table mapping and column constraints.
@Entity
@Table(name = "m_permission")
public class Permission extends AbstractPersistableCustom implements Serializable {
org.apache.fineract.useradministration.domain.Role JPA The class is a JPA entity annotated with @Entity and @Table. It maps to the 'm_role' table in the database. It uses a Many-To-Many relationship with the Permission entity, managed via a join table named 'm_role_permission'.
@Entity
@Table(name = "m_role", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "unq_name") })
public class Role extends AbstractPersistableCustom implements Serializable {
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "m_role_permission", joinColumns = @JoinColumn(name = "role_id"), inverseJoinColumns = @JoinColumn(name = "permission_id"))
    private Set<Permission> permissions = new HashSet<>();
}
fineract-db/server_collation.cnf OTHER This file is a direct configuration for the MySQL database server itself, rather than application code that integrates with a database. It establishes the character set and collation rules for the server instance and client connections.
[mysqld]
collation-server=utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
kubernetes/fineractmysql-deployment.yml OTHER This file does not connect to a database via an application layer but rather deploys the MariaDB database server itself within a Kubernetes cluster. It configures the container image, ports, storage volumes, and initialization scripts required to run the database service.
containers:
  - image: mariadb:10.9
    name: mysql
    ports:
      - containerPort: 3306
        name: fineractmysql
org.apache.fineract.accounting.accrual.handler.ExecutePeriodicAccrualCommandHandler OTHER The class defines a transactional boundary using Spring's @Transactional annotation, implying interaction with a database via the injected service, although no direct SQL or repository calls are made in this file.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.executeLoansPeriodicAccrual(command);
}
org.apache.fineract.accounting.closure.handler.CreateGLClosureCommandHandler OTHER This class defines the transaction boundary for database operations using Spring's `@Transactional` annotation, although the direct data access logic is delegated to the injected `GLClosureWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.createGLClosure(command);
}
org.apache.fineract.accounting.closure.handler.UpdateGLClosureCommandHandler OTHER The class defines a transactional boundary using Spring's @Transactional annotation, ensuring that the GL closure update operation performed by the injected service is atomic. While it does not execute SQL directly, it manages the database transaction context.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.writePlatformService.updateGLClosure(command.entityId(), command);
    }
org.apache.fineract.accounting.financialactivityaccount.handler.DeleteFinancialActivityAccountCommandHandler OTHER This class orchestrates a database write operation (deletion) by defining a transaction boundary using Spring's `@Transactional` annotation and delegating the persistence logic to a service component.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.deleteGLAccountActivityMapping(command.entityId(), command);
}
org.apache.fineract.accounting.glaccount.handler OTHER The class manages database transactions via Spring's `@Transactional` annotation, although the direct database interaction (SQL/ORM) is delegated to the `GLAccountWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.createGLAccount(command);
}
org.apache.fineract.accounting.glaccount.handler OTHER The class manages the transaction boundary for a database write operation using Spring's `@Transactional` annotation, delegating the actual persistence logic to the `GLAccountWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.deleteGLAccount(command.entityId());
}
org.apache.fineract.accounting.provisioning.handler OTHER The class uses Spring's @Transactional annotation to manage database transactions for the command processing, delegating the actual persistence logic to the ProvisioningEntriesWritePlatformService.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
org.apache.fineract.accounting.rule.handler OTHER The class uses Spring's `@Transactional` annotation to define transaction boundaries for the command processing, ensuring that the underlying service operations are executed within a database transaction.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
org.apache.fineract.accounting.rule.handler.UpdateAccountingRuleCommandHandler OTHER The class defines a transaction boundary using Spring's @Transactional annotation, ensuring that the database operations performed by the delegated service (AccountingRuleWritePlatformService) are executed within a transaction context.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.updateAccountingRule(command.entityId(), command);
}
org.apache.fineract.adhocquery.handler.DeleteAdHocCommandHandler OTHER The class manages the transaction boundary for a database write operation via Spring's @Transactional annotation, delegating the actual persistence logic to the AdHocWritePlatformService.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {

        return this.writePlatformService.deleteAdHocQuery(command.entityId());
    }
org.apache.fineract.cob.service OTHER The class uses Spring's `@Transactional` annotation to define a transaction boundary for the database update operation. While the direct SQL/ORM calls are likely inside the injected `ConfigJobParameterService`, this handler explicitly manages the transaction lifecycle for the 'UPDATE' action.
@Override
@Transactional
public CommandProcessingResult processCommand(JsonCommand command) ...
org.apache.fineract.infrastructure.accountnumberformat.handler OTHER The class defines a database transaction boundary using Spring's `@Transactional` annotation, although the direct database manipulation (SQL/ORM) is delegated to the injected service layer.
@Override
@Transactional
public CommandProcessingResult processCommand(JsonCommand command) {
    return this.accountNumberFormatWritePlatformService.deleteAccountNumberFormat(command.entityId());
}
org.apache.fineract.infrastructure.campaigns.email.handler OTHER The class manages the transaction boundary for database operations using Spring's @Transactional annotation, while delegating the actual data access logic to the EmailCampaignWritePlatformService.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand command) {
        return this.emailCampaignWritePlatformService.update(command.entityId(), command);
    }
org.apache.fineract.infrastructure.campaigns.email.handler OTHER The class manages database transactions using Spring's @Transactional annotation while delegating the actual persistence logic to a service layer. The @CommandType annotation indicates interaction with the 'EMAIL_CONFIGURATION' entity.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.update(command);
}
org.apache.fineract.infrastructure.campaigns.email.handler OTHER The class uses Spring's `@Transactional` annotation to manage database transactions, although the direct database access logic (SQL/JPA) is delegated to the `EmailWritePlatformService`. It ensures that the operation performed by the service is atomic.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {

        return this.writePlatformService.create(command);
    }
org.apache.fineract.infrastructure.campaigns.email.handler.CreateEmailCampaignCommandHandler OTHER The class integrates with the database indirectly by managing the transaction boundary for the write operation. It uses Spring's `@Transactional` annotation to ensure that the changes made by the `EmailCampaignWritePlatformService` are committed or rolled back atomically.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand command) {
        return this.emailCampaignWritePlatformService.create(command);
    }
org.apache.fineract.infrastructure.campaigns.sms.handler OTHER The class manages database transactions using Spring's `@Transactional` annotation. While it does not contain direct SQL or JPA calls, it defines the transactional boundary for the `delete` operation which is delegated to the `SmsCampaignWritePlatformService`.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand command) {
        return this.smsCampaignWritePlatformService.delete(command.entityId());
    }
org.apache.fineract.infrastructure.campaigns.sms.handler OTHER This class manages the transaction boundary for database operations using Spring's `@Transactional` annotation, although the direct data access logic is delegated to the `SmsCampaignWritePlatformService`.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand command) {
        return this.smsCampaignWritePlatformService.reactivateSmsCampaign(command.entityId(), command);
    }
org.apache.fineract.infrastructure.campaigns.sms.handler OTHER The class orchestrates database updates by delegating to a service layer within a Spring `@Transactional` boundary. While it does not contain direct SQL or repository calls, it defines the transaction scope for the database write operation performed by the injected service.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand command) {
        return this.smsCampaignWritePlatformService.update(command.entityId(), command);
    }
org.apache.fineract.infrastructure.campaigns.sms.handler.ActivateSmsCampaignCommandHandler OTHER The class uses Spring's `@Transactional` annotation to manage database transactions, ensuring that the activation operation performed by the `SmsCampaignWritePlatformService` is atomic. While it does not contain direct SQL or ORM calls, it defines the transaction boundary for database writes.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand command) {
        return this.smsCampaignWritePlatformService.activateSmsCampaign(command.entityId(), command);
    }
org.apache.fineract.infrastructure.codes.handler.CreateCodeCommandHandler OTHER The class manages database transactions using Spring's `@Transactional` annotation. While it does not contain direct SQL or Repository calls, it defines the transaction boundary for the database write operation performed by the delegated `CodeWritePlatformService`.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {

        return this.writePlatformService.createCode(command);
    }
org.apache.fineract.infrastructure.codes.handler.CreateCodeValueCommandHandler OTHER The class defines a transaction boundary using Spring's @Transactional annotation, delegating the actual database write operation to the CodeValueWritePlatformService.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {

        return this.writePlatformService.createCodeValue(command);
    }
org.apache.fineract.infrastructure.codes.handler.DeleteCodeValueCommandHandler OTHER The class manages database transactions using Spring's `@Transactional` annotation, although the specific database operations (SQL/JPA) are delegated to the injected `CodeValueWritePlatformService`.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {

        return this.writePlatformService.deleteCodeValue(command.entityId(), command.subentityId());
    }
org.apache.fineract.infrastructure.core.service.migration OTHER This class is a utility for the Liquibase database migration framework. While it does not execute SQL or connect to a database directly, it controls which migration files (changelogs) are applied to the database schema.
public boolean include(String changeLogPath) {
    return changeLogPath.endsWith("module-changelog-master.xml");
}
org.apache.fineract.infrastructure.creditbureau.handler OTHER The class manages the transaction boundary for database operations using Spring's @Transactional annotation, although the direct data access logic is delegated to the injected service.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {

        return this.writePlatformService.updateCreditBureau(command);
    }
org.apache.fineract.infrastructure.dataqueries.handler OTHER The class manages database transactions via the Spring `@Transactional` annotation. While it does not contain direct SQL or ORM calls, it defines the transaction boundary for the `updateDatatableEntryOneToMany` operation performed by the injected `ReadWriteNonCoreDataService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.updateDatatableEntryOneToMany(...);
}
org.apache.fineract.infrastructure.dataqueries.handler OTHER The class defines a database transaction boundary using Spring's `@Transactional` annotation, but delegates the actual data access logic to the `ReadWriteNonCoreDataService`. It does not contain direct SQL or ORM calls itself.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.deleteDatatableEntry(command.entityName(), command.entityId(), command.subentityId(), command);
}
org.apache.fineract.infrastructure.dataqueries.handler OTHER The class defines a database transaction boundary using Spring's @Transactional annotation, although the direct database manipulation is delegated to the injected service.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {

        return writePlatformService.createDatatable(command);
    }
org.apache.fineract.infrastructure.dataqueries.handler OTHER The class manages a database transaction using Spring's `@Transactional` annotation while delegating the actual data persistence logic to the `ReadWriteNonCoreDataService`. It does not contain direct SQL or ORM calls but defines the transaction boundary for database operations.
@Transactional
public CommandProcessingResult processCommand(final JsonCommand command) {
    // ...
    this.writePlatformService.updateDatatable(datatableName, command);
    // ...
}
org.apache.fineract.infrastructure.dataqueries.handler OTHER The class orchestrates database operations by delegating to the ReadWriteNonCoreDataService within a Spring-managed transaction. While the specific persistence mechanism (likely JDBC or DDL execution given the context of 'Datatables') is hidden in the service, this handler explicitly manages the transaction boundary for the write operation.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    this.writePlatformService.registerDatatable(command);
    return new CommandProcessingResultBuilder()...
}
org.apache.fineract.infrastructure.dataqueries.handler OTHER The class manages database transactions via Spring's `@Transactional` annotation while delegating the actual data modification to the `ReadWriteNonCoreDataService`. While it does not contain direct SQL or ORM calls, it defines the transaction boundary for database write operations.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.deleteDatatableEntries(command.entityName(), command.entityId(), command);
}
org.apache.fineract.infrastructure.dataqueries.handler.CreateDatatableEntryCommandHandler OTHER The class manages database transactions via Spring's `@Transactional` annotation and delegates the actual data persistence logic to the `ReadWriteNonCoreDataService`. While it does not contain direct SQL or ORM calls, it defines the transaction boundary for a database write operation.
@Transactional
public CommandProcessingResult processCommand(final JsonCommand command) {
    return writePlatformService.createNewDatatableEntry(command.entityName(), command.entityId(), command);
}
org.apache.fineract.infrastructure.dataqueries.handler.UpdateOneToOneDatatableEntryCommandHandler OTHER The class defines a transaction boundary using Spring's `@Transactional` annotation and delegates the actual database write operation to the `ReadWriteNonCoreDataService`. While it does not contain direct SQL or repository calls, it controls the transaction for the data modification.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    final CommandProcessingResult commandProcessingResult = this.writePlatformService.updateDatatableEntryOneToOne(command.entityName(),
            command.entityId(), command);
    // ...
}
org.apache.fineract.infrastructure.entityaccess.handler.UpdateEntityToEntityMappingCommandHandler OTHER The class defines a transaction boundary using Spring's `@Transactional` annotation. It delegates the actual database write operation to the `FineractEntityAccessWriteService`.
@Transactional
public CommandProcessingResult processCommand(JsonCommand command) {
    return this.fineractEntityAccessWriteService.updateEntityToEntityMapping(command.entityId(), command);
}
org.apache.fineract.infrastructure.event.external.handler.ExternalEventConfigurationUpdateHandler OTHER This class manages the transaction boundary for database operations using Spring's `@Transactional` annotation, delegating the actual persistence logic to the `ExternalEventConfigurationWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(@NotNull final JsonCommand command) {
    return writePlatformService.updateConfigurations(command);
}
org.apache.fineract.infrastructure.event.external.jobs.PurgeExternalEventsConfig OTHER The class configures a Spring Batch Job which interacts with the database via the Spring Batch `JobRepository`. This repository is responsible for persisting job execution metadata, such as job instances, execution contexts, and step execution statuses. While this class does not contain direct SQL, it wires up the infrastructure that performs database operations for batch management.
new JobBuilder(JobName.PURGE_EXTERNAL_EVENTS.name(), jobRepository)
org.apache.fineract.infrastructure.hooks.handler OTHER The class manages a database transaction via the Spring @Transactional annotation, wrapping a delete operation performed by the injected service.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.deleteHook(command.entityId());
}
org.apache.fineract.infrastructure.hooks.handler.CreateHookCommandHandler OTHER The class defines the transaction boundary for database write operations using Spring's transaction management, although the direct database access logic resides in the injected service.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.writePlatformService.createHook(command);
    }
org.apache.fineract.infrastructure.hooks.handler.UpdateHookCommandHandler OTHER This class defines the transaction boundary for database operations using Spring's @Transactional annotation, although the direct database access is delegated to the injected HookWritePlatformService.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.updateHook(command.entityId(), command);
}
org.apache.fineract.infrastructure.jobs.filter OTHER The class manages transaction boundaries using Spring's PlatformTransactionManager to suspend the current transaction. It delegates actual database read (calculating loan IDs) and write (executing inline COB) operations to the injected LoanCOBFilterHelper.
TransactionTemplate tr = new TransactionTemplate(transactionManager);
tr.setPropagationBehavior(TransactionDefinition.PROPAGATION_NOT_SUPPORTED);
return tr.execute(status -> {
    // ...
    List<Long> result = helper.calculateRelevantLoanIds(relativeUrl);
    if (!result.isEmpty() && helper.isLoanBehind(result)) {
        helper.executeInlineCob(result);
    }
    // ...
});
org.apache.fineract.infrastructure.jobs.service OTHER This class manages a database transaction boundary using Spring's `@Transactional` annotation with `READ_COMMITTED` isolation. While it does not execute SQL directly, it delegates to `schedularService` which likely performs database writes or checks to manage job state.
@Transactional(isolation = Isolation.READ_COMMITTED)
public boolean veto(Trigger trigger, JobExecutionContext context) { ... }
org.apache.fineract.infrastructure.jobs.service.increasedateby1day.increasebusinessdateby1day OTHER The class configures a Spring Batch Job which relies on the injected JobRepository. The JobRepository is responsible for persisting job execution metadata (job instances, executions, steps, and contexts) to the underlying database.
new StepBuilder(JobName.INCREASE_BUSINESS_DATE_BY_1_DAY.name(), jobRepository)
org.apache.fineract.infrastructure.reportmailingjob.handler OTHER The class defines the transaction boundary for a database update operation using Spring's @Transactional annotation. While it does not execute SQL or JPA queries directly, it orchestrates the transaction for the underlying service which interacts with the database.
@Override
@Transactional
public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
    return this.reportMailingJobWritePlatformService.updateReportMailingJob(jsonCommand.entityId(), jsonCommand);
}
org.apache.fineract.infrastructure.reportmailingjob.handler OTHER The class manages database transactions via Spring's `@Transactional` annotation, although the direct database manipulation is delegated to the injected `ReportMailingJobWritePlatformService`.
@Override
@Transactional
public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
    return this.reportMailingJobWritePlatformService.deleteReportMailingJob(jsonCommand.entityId());
}
org.apache.fineract.infrastructure.sms.handler OTHER The class manages the transaction boundary for database operations using Spring's @Transactional annotation, delegating the actual persistence logic to the SmsWritePlatformService.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.writePlatformService.update(command.entityId(), command);
    }
org.apache.fineract.infrastructure.survey.handler.UpdateLikelihoodCommandHandler OTHER The class manages database transactions using Spring's @Transactional annotation, defining a transaction boundary for the update operation. The actual database interaction logic is delegated to the injected WriteLikelihoodService.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.update(command.entityId(), command);
}
org.apache.fineract.interoperation.handler OTHER The class manages database transactions via the Spring @Transactional annotation, ensuring that the operations performed by the delegated InteropService are atomic. While it does not contain direct SQL or Repository calls, it defines the transaction boundary for the database write operation.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    // ... parsing logic ...
    return this.interopService.registerAccountIdentifier(idType, idValue, subIdOrType, command);
}
org.apache.fineract.interoperation.handler OTHER The class defines a transaction boundary using Spring's `@Transactional` annotation. While it does not execute SQL or JPA queries directly, it orchestrates a database write operation ('CREATE') by delegating to the `InteropService` within a transaction.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.interopService.createQuote(command);
    }
org.apache.fineract.interoperation.handler.CreateInteropRequestHandler OTHER This class defines a transactional boundary using Spring's @Transactional annotation. While it does not execute SQL or JPA queries directly, it orchestrates database operations performed by the injected InteropService.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.interopService.createTransactionRequest(command);
}
org.apache.fineract.mix.handler OTHER The class manages database transactions via Spring's @Transactional annotation, although the direct database manipulation is delegated to the injected service. It acts as a transactional boundary for the 'XBRLMAPPING' update operation.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.writeTaxonomyService.updateMapping(command.entityId(), command);
    }
org.apache.fineract.organisation.holiday.handler OTHER This class manages the transaction boundary for database operations using Spring's @Transactional annotation, but delegates the actual data access and modification logic to the HolidayWritePlatformService.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.holidayWritePlatformService.updateHoliday(command);
}
org.apache.fineract.organisation.monetary.handler.UpdateCurrencyCommandHandler OTHER The class uses Spring's `@Transactional` annotation to define a transaction boundary. While it does not execute SQL or call a repository directly, it delegates to `CurrencyWritePlatformService` which performs the actual database persistence operations for currency updates.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.updateAllowedCurrencies(command);
}
org.apache.fineract.organisation.office.handler.CreateOfficeCommandHandler OTHER The class manages database transaction boundaries using Spring's `@Transactional` annotation. While it does not execute SQL or JPA queries directly, it wraps the execution of the `OfficeWritePlatformService` in a transaction, implying that the service performs database write operations.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {

        return this.writePlatformService.createOffice(command);
    }
org.apache.fineract.organisation.provisioning.handler OTHER The class defines a database transaction boundary using Spring's `@Transactional` annotation. While it does not execute SQL or JPA queries directly, it orchestrates the write operation which is performed by the injected `ProvisioningCriteriaWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
    return this.provisioningCriteriaWritePlatformService.createProvisioningCriteria(jsonCommand);
}
org.apache.fineract.organisation.provisioning.handler OTHER The class manages database transaction boundaries using Spring's @Transactional annotation, ensuring that the delegated service operations are executed within a transaction context, although it does not perform direct SQL or repository calls itself.
@Transactional
@Override
public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
org.apache.fineract.organisation.provisioning.handler OTHER The class manages database transactions using Spring's @Transactional annotation, ensuring the delete operation performed by the delegate service is atomic. While it does not contain direct SQL or Repository calls, it defines the transaction boundary for database writes.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
        return this.provisioningCriteriaWritePlatformService.deleteProvisioningCriteria(jsonCommand.entityId());
    }
org.apache.fineract.organisation.provisioning.handler OTHER The class manages database transactions using Spring's @Transactional annotation, delegating the actual data persistence logic to the ProvisioningCategoryWritePlatformService.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
        return this.provisioningCategoryWritePlatformService.createProvisioningCateogry(jsonCommand);
    }
org.apache.fineract.organisation.staff.handler.CreateStaffCommandHandler OTHER The class orchestrates database interactions by defining a transaction boundary using Spring's `@Transactional` annotation, but delegates the specific data access logic to the `StaffWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.createStaff(command);
}
org.apache.fineract.portfolio.account.handler.CreateAccountTransferCommandHandler OTHER This class defines a transaction boundary using Spring's `@Transactional` annotation, but delegates the actual database interaction to the `AccountTransfersWritePlatformService`. While it does not contain direct SQL or ORM calls, it controls the transaction context for the database write operation.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.create(command);
}
org.apache.fineract.portfolio.calendar.handler.CreateCalendarCommandHandler OTHER The class manages database transactions via the Spring `@Transactional` annotation but delegates the actual data access and persistence logic to the `CalendarWritePlatformService`. It does not contain direct SQL or ORM calls itself.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.writePlatformService.createCalendar(command);
    }
org.apache.fineract.portfolio.client.handler OTHER This class defines the transaction boundary using Spring's @Transactional annotation, but delegates the actual database operations to the ClientWritePlatformService.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.clientWritePlatformService.undoRejection(command.entityId(), command);
}
org.apache.fineract.portfolio.client.handler OTHER This class defines a transactional boundary using Spring's `@Transactional` annotation. While it does not execute SQL directly, it orchestrates the write operation by delegating to `ClientChargeWritePlatformService`, which performs the actual database persistence.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.addCharge(command.getClientId(), command);
}
org.apache.fineract.portfolio.client.handler OTHER The class defines a transaction boundary using Spring's `@Transactional` annotation. While it does not execute SQL directly, it delegates to `ClientChargeWritePlatformService` which performs the database write operation to waive the charge.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.waiveCharge(command.getClientId(), command.entityId());
}
org.apache.fineract.portfolio.client.handler.DeleteClientChargeCommandHandler OTHER The class manages database transactions via Spring's `@Transactional` annotation, delegating the actual persistence logic to the injected `ClientChargeWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.deleteCharge(command.getClientId(), command.entityId());
}
org.apache.fineract.portfolio.client.handler.UpdateClientCommandHandler OTHER The class manages database transactions via the Spring `@Transactional` annotation, although the direct database access logic is delegated to the `ClientWritePlatformService`.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {

        return this.clientWritePlatformService.updateClient(command.entityId(), command);
    }
org.apache.fineract.portfolio.collateral.handler OTHER The class manages database transactions via Spring's `@Transactional` annotation but delegates the actual database modification logic to the `CollateralWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.collateralWritePlatformService.deleteCollateral(...);
}
org.apache.fineract.portfolio.collectionsheet.handler.UpdateCollectionSheetCommandHandler OTHER The class orchestrates database interactions by defining a transaction boundary using Spring's `@Transactional` annotation. While it does not contain direct SQL or JPA calls, it delegates to `CollectionSheetWritePlatformService` which performs the actual data persistence operations.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {

        return this.collectionSheetWritePlatformService.updateCollectionSheet(command);
    }
org.apache.fineract.portfolio.delinquency.handler OTHER The class defines a database transaction boundary using Spring's `@Transactional` annotation, although the direct database manipulation is delegated to the `DelinquencyWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.updateDelinquencyRange(command.entityId(), command);
}
org.apache.fineract.portfolio.delinquency.handler.CreateDelinquencyBucketCommandHandler OTHER This class orchestrates database interactions by defining a transaction boundary using Spring's `@Transactional` annotation. While it does not execute SQL or call a repository directly, it delegates to `DelinquencyWritePlatformService` which performs the persistence operations.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.createDelinquencyBucket(command);
}
org.apache.fineract.portfolio.delinquency.handler.DeleteDelinquencyRangeCommandHandler OTHER The class manages the transaction boundary for a database write operation using Spring's `@Transactional` annotation, although the actual data access logic resides in the injected service.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.deleteDelinquencyRange(command.entityId(), command);
}
org.apache.fineract.portfolio.floatingrates.handler.UpdateFloatingRateCommandHandler OTHER The class manages database transactions via Spring's @Transactional annotation, delegating the actual data persistence to the FloatingRateWritePlatformService.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.writePlatformService.updateFloatingRate(command);
    }
org.apache.fineract.portfolio.group.handler OTHER The class manages database transactions via Spring's @Transactional annotation, although the direct database operations are delegated to the GroupingTypesWritePlatformService.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    final Long centerId = command.longValueOfParameterNamed("centerId");
    return this.groupWritePlatformService.createGroup(centerId, command);
}
org.apache.fineract.portfolio.group.handler OTHER This class defines a transactional boundary using Spring's @Transactional annotation. While it does not execute SQL directly, it orchestrates a database write operation by delegating to the GroupRolesWritePlatformService.
@Override
@Transactional
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.groupRolesWritePlatformService.updateRole(command);
}
org.apache.fineract.portfolio.group.handler OTHER The class defines a transaction boundary using Spring's `@Transactional` annotation and delegates data modification logic to the `GroupingTypesWritePlatformService`. While it does not contain direct SQL or ORM calls, it orchestrates a database write operation via the service layer.
@Transactional
@Override
public CommandProcessingResult processCommand(JsonCommand command) {
    return this.writePlatformService.disassociateGroupsToCenter(command.entityId(), command);
}
org.apache.fineract.portfolio.group.handler OTHER The class defines a transaction boundary using Spring's `@Transactional` annotation, delegating the actual database write operation (delete) to the injected `GroupingTypesWritePlatformService`.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.groupWritePlatformService.deleteGroup(command.entityId());
    }
org.apache.fineract.portfolio.group.handler.UpdateGroupCommandHandler OTHER The class defines a transaction boundary using Spring's @Transactional annotation, orchestrating database writes via the injected service.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.groupWritePlatformService.updateGroup(command.entityId(), command);
}
org.apache.fineract.portfolio.loanaccount.handler OTHER The class defines a database transaction boundary using Spring's @Transactional annotation. While it does not execute SQL directly, it manages the transaction for the underlying service layer which interacts with the database.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.undoApplicationApproval(command.entityId(), command);
}
org.apache.fineract.portfolio.loanaccount.handler OTHER The class defines a database transaction boundary using Spring's `@Transactional` annotation. While it does not execute SQL directly, it orchestrates a write operation (loan approval) via the injected service layer within a transaction context.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.approveApplication(command.entityId(), command);
}
org.apache.fineract.portfolio.loanaccount.handler OTHER The class defines a transaction boundary using Spring's `@Transactional` annotation, but delegates the actual database interaction to the injected `LoanApplicationWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.submitApplication(command);
}
org.apache.fineract.portfolio.loanaccount.handler OTHER The class orchestrates a database transaction using Spring's `@Transactional` annotation, although the direct data access logic is delegated to the `LoanApplicationWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.applicantWithdrawsFromApplication(command.entityId(), command);
}
org.apache.fineract.portfolio.loanaccount.handler OTHER This class defines a transaction boundary using Spring's `@Transactional` annotation, but delegates the actual data access and persistence logic to the `LoanWritePlatformService`. While it does not contain direct SQL or Repository calls, it controls the transaction for a database write operation.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.waiveInterestOnLoan(command.getLoanId(), command);
}
org.apache.fineract.portfolio.loanaccount.handler OTHER This class manages database transactions using Spring's `@Transactional` annotation, although the direct database access logic (SQL/JPA) is delegated to the injected `LoanApplicationWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.approveGLIMLoanAppication(command.entityId(), command);
}
org.apache.fineract.portfolio.loanaccount.handler OTHER The class defines a transaction boundary using Spring's `@Transactional` annotation and delegates the actual database write operation (deletion) to the `LoanChargeWritePlatformService`.
@Transactional
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.deleteLoanCharge(command.getLoanId(), command.entityId(), command);
}
org.apache.fineract.portfolio.loanaccount.handler OTHER The class defines a transactional boundary using Spring's @Transactional annotation and delegates the actual database write operation to the LoanChargeWritePlatformService. While it does not contain direct SQL or JPA calls, it orchestrates the persistence flow for the Loan Charge entity.
@Transactional
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.updateLoanCharge(command.getLoanId(), command.entityId(), command);
}
org.apache.fineract.portfolio.loanaccount.handler OTHER This class does not perform direct database operations (SQL/JPA) itself but defines a transaction boundary using Spring's `@Transactional` annotation. It delegates the actual data persistence logic to the `LoanChargeWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return writePlatformService.adjustmentForLoanCharge(...);
}
org.apache.fineract.portfolio.loanaccount.handler OTHER This class participates in database integration by defining the transaction boundary using Spring's `@Transactional` annotation, although the direct database operations are delegated to the `LoanChargeWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.payLoanCharge(command.getLoanId(), ...);
}
org.apache.fineract.portfolio.loanaccount.handler OTHER This class defines a transaction boundary using Spring's `@Transactional` annotation, implying interaction with the database occurs within the called service method. While it does not contain direct SQL or Repository calls, it orchestrates a write operation (Disbursement) that persists state changes to the database via the injected `LoanWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.disburseGLIMLoan(command.entityId(), command);
}
org.apache.fineract.portfolio.loanaccount.handler.AddAndDeleteLoanDisburseDetailsCommandHandler OTHER This class defines a transactional boundary using Spring's @Transactional annotation. It delegates the actual database operations to the LoanWritePlatformService.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.addAndDeleteLoanDisburseDetails(command.getLoanId(), command);
}
org.apache.fineract.portfolio.loanaccount.handler.GLIMApplicationRejectionCommandHandler OTHER This class manages the transaction boundary for database operations using Spring's `@Transactional` annotation. While it does not execute SQL or access repositories directly, it orchestrates the transaction for the `LoanApplicationWritePlatformService` which performs the actual database writes.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.rejectGLIMApplicationApproval(command.entityId(), command);
}
org.apache.fineract.portfolio.loanaccount.handler.LoanApplicationModificationCommandHandler OTHER This class defines a transactional boundary using Spring's `@Transactional` annotation, orchestrating database writes by delegating to the `LoanApplicationWritePlatformService`. While it does not execute SQL directly, it controls the transaction for the database update operation.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.modifyApplication(command.getLoanId(), command);
}
org.apache.fineract.portfolio.loanaccount.handler.RemoveLoanOfficerCommandHandler OTHER The class defines a transaction boundary using Spring's `@Transactional` annotation, implying database interactions occur within the called service method. It delegates the actual data persistence logic to `LoanWritePlatformService`.
@Transactional
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.removeLoanOfficer(command.getLoanId(), command);
}
org.apache.fineract.portfolio.loanaccount.handler.UndoChargeOffLoanCommandHandler OTHER This class defines a database transaction boundary using Spring's @Transactional annotation, ensuring that the delegated service operation is executed within a transaction context, although it does not perform direct SQL or ORM operations itself.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return writePlatformService.undoChargeOff(command);
}
org.apache.fineract.portfolio.loanaccount.handler.UndoGLIMLoanApplicationApproval OTHER The class uses Spring's `@Transactional` annotation to define a transaction boundary for the operation. While it does not execute SQL or JPA calls directly, it delegates to `LoanApplicationWritePlatformService` which performs the actual database writes.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {

        return this.writePlatformService.undoGLIMLoanApplicationApproval(command.entityId(), command);
    }
org.apache.fineract.portfolio.loanaccount.handler.UndoGLIMLoanDisbursalCommandHandler OTHER The class uses Spring's `@Transactional` annotation to manage database transactions, although the direct data access logic is delegated to the `LoanWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.undoGLIMLoanDisbursal(command.entityId(), command);
}
org.apache.fineract.portfolio.loanaccount.handler.UpdateLoanDisburseDateCommandHandler OTHER The class defines a database transaction boundary using Spring's `@Transactional` annotation. While it does not execute SQL directly, it delegates to `LoanWritePlatformService` which performs the actual database write operations.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.updateDisbursementDateAndAmountForTranche(command.getLoanId(), command.entityId(), command);
}
org.apache.fineract.portfolio.loanaccount.jobs.updateloanarrearsageing OTHER The class configures Spring Batch components which implicitly interact with the database to persist job execution metadata (JobInstance, JobExecution, StepExecution) via the injected JobRepository. It also configures a PlatformTransactionManager to handle transactions during the batch step execution.
new StepBuilder(JobName.UPDATE_LOAN_ARREARS_AGEING.name(), jobRepository)
        .tasklet(updateLoanArrearsAgeingTasklet(), transactionManager)
org.apache.fineract.portfolio.loanaccount.rescheduleloan.handler OTHER The class manages database transactions using Spring's `@Transactional` annotation, wrapping the operations performed by the `LoanRescheduleRequestWritePlatformService`. While it does not execute SQL directly, it defines the transaction boundary for the database interactions.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
        return this.loanRescheduleRequestWritePlatformService.create(jsonCommand);
    }
org.apache.fineract.portfolio.loanproduct.productmix.handler OTHER This class manages the transaction boundary for database operations using Spring's @Transactional annotation, while the actual data access and modification are delegated to the ProductMixWritePlatformService.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.productMixWritePlatformService.updateProductMix(command.getProductId(), command);
}
org.apache.fineract.portfolio.meeting.handler OTHER The class manages database transactions using Spring's `@Transactional` annotation, ensuring that the delegated service operation runs within a transaction context. The actual data access logic is performed by the injected `MeetingWritePlatformService`.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.writePlatformService.deleteMeeting(command.entityId());
    }
org.apache.fineract.portfolio.meeting.handler.UpdateMeetingAttendanceCommandHandler OTHER The class defines a transaction boundary using Spring's `@Transactional` annotation. While it does not contain direct SQL or ORM calls, it orchestrates database write operations by delegating to `MeetingWritePlatformService` within a transactional context.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.saveOrUpdateAttendance(command);
}
org.apache.fineract.portfolio.note.handler OTHER This class defines the transaction boundary for database write operations but delegates the actual data access to the NoteWritePlatformService.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.createNote(command);
}
org.apache.fineract.portfolio.note.handler.UpdateNoteCommandHandler OTHER This class manages the transaction boundary for database operations using Spring's `@Transactional` annotation, though the direct database access logic is delegated to the injected `NoteWritePlatformService`.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {

        return this.writePlatformService.updateNote(command);
    }
org.apache.fineract.portfolio.repaymentwithpostdatedchecks.handler OTHER The class manages database transactions using Spring's `@Transactional` annotation, ensuring that the update operation performed by the underlying service is atomic. While it does not execute SQL directly, it controls the transaction boundary for the database interaction.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.repaymentWithPostDatedChecksWritePlatformService.updatePostDatedChecks(command);
}
org.apache.fineract.portfolio.savings.handler OTHER The class manages database transactions via the Spring `@Transactional` annotation, delegating the actual data persistence and modification logic to the injected `DepositAccountWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.depositAccountWritePlatformService.activateFDAccount(command.entityId(), command);
}
org.apache.fineract.portfolio.savings.handler OTHER This class manages the transaction boundary for database writes using Spring's @Transactional annotation, but delegates the actual data access and persistence logic to the SavingsApplicationProcessWritePlatformService.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.savingAccountWritePlatformService.rejectGSIMApplication(command.entityId(), command);
    }
org.apache.fineract.portfolio.savings.handler OTHER The class uses Spring's `@Transactional` annotation to manage database transactions, delegating the actual persistence operations to the `DepositApplicationProcessWritePlatformService`. While it does not contain direct SQL or ORM calls, it defines the transactional boundary for the database write operation.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.depositAccountWritePlatformService.rejectApplication(command.entityId(), command, DepositAccountType.FIXED_DEPOSIT);
    }
org.apache.fineract.portfolio.savings.handler OTHER This class does not execute SQL directly but defines a transaction boundary using Spring's `@Transactional` annotation. This ensures that the database operations performed by the injected `SavingsAccountWritePlatformService` are committed or rolled back atomically.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.withdrawal(command.getSavingsId(), command);
}
org.apache.fineract.portfolio.savings.handler OTHER This class defines a transaction boundary using Spring's @Transactional annotation, but delegates the actual database interaction to the injected SavingsApplicationProcessWritePlatformService. While it does not contain direct SQL or Repository calls, it controls the transaction context for the database write operation (deletion).
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.savingAccountWritePlatformService.deleteApplication(command.entityId());
}
org.apache.fineract.portfolio.savings.handler OTHER The class defines a transactional boundary using Spring's "@Transactional" annotation, ensuring that the withdrawal operation performed by the delegated service is atomic. While it does not execute SQL directly, it controls the transaction context for the database operations executed by the "DepositAccountWritePlatformService".
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.depositAccountWritePlatformService.withdrawal(command.entityId(), command, DepositAccountType.RECURRING_DEPOSIT);
}
org.apache.fineract.portfolio.savings.handler OTHER The class does not perform direct database queries but manages database transaction boundaries using Spring's `@Transactional` annotation before delegating to the service layer.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
org.apache.fineract.portfolio.savings.handler OTHER The class manages database transactions using Spring's `@Transactional` annotation while delegating the actual data persistence logic to the `DepositAccountWritePlatformService`. It does not execute SQL directly but controls the transaction boundary for the operation.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    final Long transactionId = Long.valueOf(command.getTransactionId());
    return this.depositAccountWritePlatformService.undoFDTransaction(command.entityId(), transactionId, false);
}
org.apache.fineract.portfolio.savings.handler OTHER The class manages database transactions using Spring's `@Transactional` annotation, ensuring that the delegated service operation runs within a transaction context. While it does not execute SQL directly, it orchestrates the transactional boundary for the database write operation performed by the service.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        final Long transactionId = Long.valueOf(command.getTransactionId());
        return this.depositAccountWritePlatformService.adjustRDTransaction(command.entityId(), transactionId, command);
    }
org.apache.fineract.portfolio.savings.handler OTHER The class defines a database transaction boundary using Spring's `@Transactional` annotation. While it does not contain direct SQL or ORM calls itself, it orchestrates a service method (`depositAccountWritePlatformService.calculateInterest`) that performs database write operations (calculating and persisting interest data).
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.depositAccountWritePlatformService.calculateInterest(command.entityId(), DepositAccountType.RECURRING_DEPOSIT);
}
org.apache.fineract.portfolio.savings.handler OTHER The class manages database transactions using Spring's `@Transactional` annotation while delegating the actual data modification to the `DepositApplicationProcessWritePlatformService`. While it does not contain direct SQL or Repository calls, it defines the transactional boundary for a database write operation.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.depositAccountWritePlatformService.deleteApplication(command.entityId(), DepositAccountType.RECURRING_DEPOSIT);
}
org.apache.fineract.portfolio.savings.handler OTHER The class uses Spring's `@Transactional` annotation to manage database transactions, although the actual data access logic is delegated to the `DepositAccountWritePlatformService`.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.depositAccountWritePlatformService.closeRDAccount(command.entityId(), command);
    }
org.apache.fineract.portfolio.savings.handler OTHER The class orchestrates database writes by defining a transaction boundary using Spring's @Transactional annotation and delegating to a service layer component that performs the actual persistence operations.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.depositAccountWritePlatformService.updateDepositAmountForRDAccount(command.entityId(), command);
}
org.apache.fineract.portfolio.savings.handler OTHER The class manages database transactions using Spring's `@Transactional` annotation, ensuring that the downstream database operations performed by the `DepositAccountWritePlatformService` are atomic. While it does not contain direct SQL or ORM calls, it defines the transaction boundary for database writes.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.depositAccountWritePlatformService.closeFDAccount(command.entityId(), command);
    }
org.apache.fineract.portfolio.savings.handler OTHER The class manages database transactions via Spring's @Transactional annotation, although the direct database operations are delegated to the injected service.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {

        return this.writePlatformService.undoApplicationApproval(command.entityId(), command);
    }
org.apache.fineract.portfolio.savings.handler OTHER The class defines a transactional boundary using Spring's `@Transactional` annotation. It delegates the actual database persistence and business logic to the `SavingsApplicationProcessWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.applicantWithdrawsFromApplication(command.entityId(), command);
}
org.apache.fineract.portfolio.savings.handler OTHER The class defines a transaction boundary using Spring's `@Transactional` annotation. While it does not execute SQL or JPA queries directly, it orchestrates a unit of work that modifies database state via the injected `SavingsApplicationProcessWritePlatformService`.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.savingAccountWritePlatformService.modifyGSIMApplication(command.entityId(), command);
    }
org.apache.fineract.portfolio.savings.handler OTHER The class defines a database transaction boundary using Spring's `@Transactional` annotation. While it does not execute SQL or JPA queries directly, it orchestrates a write operation by delegating to a service layer that interacts with the database.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.savingAccountWritePlatformService.modifyApplication(command.entityId(), command);
}
org.apache.fineract.portfolio.savings.handler OTHER The class defines a database transaction boundary using Spring's `@Transactional` annotation. While it does not execute SQL directly, it orchestrates a write operation (creation of a savings account) by delegating to a service layer that interacts with the database.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.savingAccountWritePlatformService.submitApplication(command);
}
org.apache.fineract.portfolio.savings.handler OTHER The class orchestrates database interactions by defining a transaction boundary using Spring's `@Transactional` annotation. While it does not execute SQL directly, it delegates to the `SavingsAccountWritePlatformService` which performs the actual database write operations to block the account.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand command) {
        return this.writePlatformService.blockAccount(command.getSavingsId(), command);
    }
org.apache.fineract.portfolio.savings.handler OTHER The class does not execute SQL or access repositories directly, but it manages database transactions via the Spring `@Transactional` annotation. It delegates the actual persistence operations to the `SavingsAccountWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(JsonCommand command) {
    return this.writePlatformService.inactivateCharge(command.getSavingsId(), command.entityId());
}
org.apache.fineract.portfolio.savings.handler OTHER The class defines a database transaction boundary using Spring's `@Transactional` annotation, ensuring the savings account closure operation is atomic. While it does not execute SQL directly, it orchestrates the write operation via the injected service.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.close(command.getSavingsId(), command);
}
org.apache.fineract.portfolio.savings.handler OTHER The class defines a database transaction boundary using the Spring @Transactional annotation. While it does not execute SQL directly, it orchestrates the transaction for the underlying service layer which interacts with the database.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.depositAccountWritePlatformService.depositToFDAccount(command.entityId(), command);
    }
org.apache.fineract.portfolio.savings.handler OTHER This class defines a transaction boundary using Spring's @Transactional annotation but delegates the actual database persistence operations to the injected DepositApplicationProcessWritePlatformService.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.depositAccountWritePlatformService.approveApplication(...);
}
org.apache.fineract.portfolio.savings.handler OTHER This class participates in database integration by defining a transaction boundary using Spring's `@Transactional` annotation. While it does not execute SQL or call repositories directly, it delegates to a service that performs write operations on the database.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.depositAccountWritePlatformService.rejectApplication(command.entityId(), command, DepositAccountType.RECURRING_DEPOSIT);
}
org.apache.fineract.portfolio.savings.handler.CloseGSIMCommandHandler OTHER The class manages database transactions using Spring's `@Transactional` annotation. While it does not contain direct SQL or Repository calls, it defines the transaction boundary for the `bulkGSIMClose` operation performed by the injected service.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.bulkGSIMClose(command.getSavingsId(), command);
}
org.apache.fineract.portfolio.savings.handler.RecurringDepositAccountApplicationSubmittalCommandHandler OTHER The class uses Spring's declarative transaction management to define transaction boundaries for the command processing, although it does not execute direct SQL queries itself.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
org.apache.fineract.portfolio.savings.handler.UnblockSavingsAccountCommandHandler OTHER The class uses Spring's `@Transactional` annotation to define a transaction boundary for the operation. While it does not contain direct JDBC or JPA calls itself, it orchestrates the transaction for the underlying `SavingsAccountWritePlatformService` which performs the actual database writes.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand command) {
        return this.writePlatformService.unblockAccount(command.getSavingsId());
    }
org.apache.fineract.portfolio.self.pockets.handler OTHER The class orchestrates a database transaction using Spring's `@Transactional` annotation, although the direct database manipulation logic is delegated to the `PocketWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.pocketWritePlatformService.delinkAccounts(command);
}
org.apache.fineract.portfolio.shareaccounts.handler OTHER The class defines a transactional boundary using Spring's `@Transactional` annotation, implying interaction with the database through the delegated service. While this specific file does not contain SQL or Repository calls, it manages the transaction context for the database operations performed by the `ShareAccountWritePlatformService`.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
        return this.shareAccountWritePlatformService.rejectAdditionalShares(jsonCommand.entityId(), jsonCommand);
    }
org.apache.fineract.portfolio.shareaccounts.handler OTHER This class manages the transaction boundary for database operations using Spring's `@Transactional` annotation. While it does not execute SQL or JPA queries directly, it delegates to `ShareAccountWritePlatformService` which performs the actual database write operations for the 'SHAREACCOUNT' entity.
@Transactional
@Override
public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
    return this.shareAccountWritePlatformService.updateShareAccount(jsonCommand.entityId(), jsonCommand);
}
org.apache.fineract.portfolio.shareaccounts.handler OTHER This class does not perform direct database operations (SQL/JPA) itself but manages the transaction boundary for database interactions. It uses Spring's `@Transactional` annotation to ensure that the operations performed by the called service (`ShareAccountWritePlatformService`) occur within a transaction context.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
        return this.shareAccountWritePlatformService.approveShareAccount(jsonCommand.entityId(), jsonCommand);
    }
org.apache.fineract.portfolio.shareaccounts.handler OTHER This class acts as a transactional wrapper around the business service. While it does not execute SQL directly, it defines the transaction boundary using Spring's `@Transactional` annotation, delegating the actual database persistence operations to the `ShareAccountWritePlatformService`.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
        return this.shareAccountWritePlatformService.undoApproveShareAccount(jsonCommand.entityId(), jsonCommand);
    }
org.apache.fineract.portfolio.shareaccounts.handler.ApproveAddtionalSharesCommandHandler OTHER This class defines the transaction boundary for database operations using Spring's @Transactional annotation, although the direct database access logic resides in the injected ShareAccountWritePlatformService.
@Transactional
@Override
public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
    return this.shareAccountWritePlatformService.approveAdditionalShares(jsonCommand.entityId(), jsonCommand);
}
org.apache.fineract.portfolio.shareaccounts.handler.CreateShareAccountCommandHandler OTHER The class defines a transaction boundary using Spring's @Transactional annotation, ensuring that the database operations performed by the called service are atomic. While it does not execute SQL directly, it controls the transaction context for the database write operation.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
        return this.shareAccountWritePlatformService.createShareAccount(jsonCommand);
    }
org.apache.fineract.portfolio.shareaccounts.handler.RejectShareAccountCommandHandler OTHER The class manages database transactions using Spring's `@Transactional` annotation. It does not perform direct database queries itself but delegates the persistence operations to the `ShareAccountWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
    return this.shareAccountWritePlatformService.rejectShareAccount(jsonCommand.entityId(), jsonCommand);
}
org.apache.fineract.portfolio.shareproducts.handler.CreateShareProductCommandHandler OTHER The class manages database transactions using Spring's @Transactional annotation, wrapping the database operations performed by the injected ShareProductWritePlatformService.
@Transactional
@Override
public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
    return this.shareProductWritePlatformService.createShareProduct(jsonCommand);
}
org.apache.fineract.portfolio.transfer.handler OTHER The class manages database transactions via Spring's @Transactional annotation, although the direct database operations are delegated to the injected TransferWritePlatformService.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.proposeAndAcceptClientTransfer(command.entityId(), command);
}
org.apache.fineract.portfolio.transfer.handler OTHER The class manages database transactions via the Spring `@Transactional` annotation but delegates the actual data access and modification to the `TransferWritePlatformService`. It does not contain direct SQL or Repository calls itself, but acts as the transactional boundary for the write operation.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.writePlatformService.rejectClientTransfer(command.entityId(), command);
    }
org.apache.fineract.useradministration.handler OTHER The class defines a transaction boundary using Spring's `@Transactional` annotation, implying interaction with a transactional resource (database) via the delegated service.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.updatePreferences(command);
}
org.apache.fineract.useradministration.handler OTHER The class defines a transactional boundary for the user creation operation using Spring's @Transactional annotation, ensuring that the database operations performed by the delegated service are atomic.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
org.apache.fineract.useradministration.handler OTHER The class uses Spring's `@Transactional` annotation to manage database transactions. It delegates the actual database write operation to the `RoleWritePlatformService`.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.updateRolePermissions(command.entityId(), command);
}
fineract-loan/dependencies.gradle SPRING-DATA The build script configures the application to use Spring Data JPA for database access. It specifically overrides the default Hibernate provider to use EclipseLink by excluding the Hibernate group from the starter dependency and explicitly adding the EclipseLink library.
implementation ('org.springframework.boot:spring-boot-starter-data-jpa') {
    exclude group: 'org.hibernate'
}
implementation('org.eclipse.persistence:org.eclipse.persistence.jpa') {
    exclude group: 'org.eclipse.persistence', module: 'jakarta.persistence'
}
org.apache.fineract.accounting.closure.domain.GLClosureRepository SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends `JpaRepository` to provide standard data access methods and defines a custom JPQL query for specific business logic.
@Query("select closure from GLClosure closure where closure.closingDate = (select max(closure1.closingDate) from GLClosure closure1 where closure1.office.id=:officeId)  and closure.office.id= :officeId")
GLClosure getLatestGLClosureByBranch(@Param("officeId") Long officeId);
org.apache.fineract.accounting.closure.service SPRING-DATA The class uses Spring Data JPA repositories (GLClosureRepository and OfficeRepositoryWrapper) to interact with the database. It performs CRUD operations on GLClosure entities and read operations on Office entities.
this.glClosureRepository.saveAndFlush(glClosure);
org.apache.fineract.accounting.financialactivityaccount.domain SPRING-DATA The class wraps a Spring Data repository interface to perform database operations on FinancialActivityAccount entities.
return this.repository.findById(id).orElseThrow(() -> new FinancialActivityAccountNotFoundException(id));
org.apache.fineract.accounting.financialactivityaccount.domain SPRING-DATA The file uses Spring Data JPA repositories to interact with the database. It extends JpaRepository to provide standard data access methods and defines a custom JPQL query for specific retrieval logic.
@Query("select faa from FinancialActivityAccount faa where faa.financialActivityType = :financialActivityType")
org.apache.fineract.accounting.financialactivityaccount.service SPRING-DATA The class uses repository wrappers (likely wrapping Spring Data JPA repositories) to perform CRUD operations on `FinancialActivityAccount` and `GLAccount` entities. It handles persistence exceptions and performs explicit `saveAndFlush` operations.
this.financialActivityAccountRepository.saveAndFlush(financialActivityAccount);
org.apache.fineract.accounting.glaccount.domain SPRING-DATA The class interacts with the database through the injected `TrialBalanceRepository`, which is likely a Spring Data interface. It performs read operations filtered by office and account, and batch write operations.
this.repository.findNewByOfficeAndAccount(officeId, accountId);
org.apache.fineract.accounting.glaccount.domain SPRING-DATA The class interacts with the database through the injected `GLAccountRepository`, which is a Spring Data repository interface. It performs read operations to fetch GLAccount entities.
this.repository.findById(id).orElseThrow(() -> new GLAccountNotFoundException(id))
org.apache.fineract.accounting.glaccount.domain.GLAccountRepository SPRING-DATA The file uses Spring Data JPA to abstract database interactions. It extends JpaRepository to provide standard CRUD operations and JpaSpecificationExecutor for complex criteria queries without writing explicit SQL.
Optional<GLAccount> findOneByGlCode(String glCode);
org.apache.fineract.accounting.glaccount.domain.TrialBalanceRepository SPRING-DATA The file uses Spring Data JPA repositories to interact with the database. It extends JpaRepository for standard CRUD operations and defines a custom native SQL query for specific retrieval logic.
@Query(value = "select * from m_trial_balance where office_id=:officeId ...", nativeQuery = true)
org.apache.fineract.accounting.glaccount.jobs.updatetrialbalancedetails.UpdateTrialBalanceDetailsConfig SPRING-DATA The configuration class injects a repository wrapper (TrialBalanceRepositoryWrapper) and a data source factory (RoutingDataSourceServiceFactory) and passes them to the Tasklet. This indicates that the job's execution involves reading from and writing to the database using these components, likely via JPA/Spring Data and potentially direct JDBC via the data source factory.
return new UpdateTrialBalanceDetailsTasklet(dataSourceServiceFactory, trialBalanceRepositoryWrapper);
org.apache.fineract.accounting.glaccount.service SPRING-DATA The class primarily uses Spring Data JPA repositories (GLAccountRepository, JournalEntryRepository) for CRUD operations and existence checks on entities. It also utilizes Spring's JdbcTemplate to execute a raw SQL query for checking product mappings in the 'acc_product_mapping' table.
String sql = "select count(*) from acc_product_mapping acc where acc.gl_account_id = ?";
int count = this.jdbcTemplate.queryForObject(sql, Integer.class, glAccountId);
org.apache.fineract.accounting.journalentry.domain SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database by extending JpaRepository, which provides standard CRUD methods, and by defining custom JPQL queries via the @Query annotation to perform specific filtering on the JournalEntry table.
@Query("select journalEntry from JournalEntry journalEntry where journalEntry.transactionId= :transactionId and journalEntry.reversed=false and journalEntry.manualEntry=true")
org.apache.fineract.accounting.journalentry.service.AccountingProcessorHelper SPRING-DATA The class uses multiple Spring Data repositories to interact with the database. It reads configuration data (GL Accounts, Mappings, Closures) and writes transaction data (Journal Entries).
JournalEntry savedJournalEntry = this.glJournalEntryRepository.saveAndFlush(journalEntry);
org.apache.fineract.accounting.journalentry.service.JournalEntryWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses multiple Spring Data JPA repositories to interact with the database. It performs CRUD operations on JournalEntry, GLAccount, and GLClosure entities. It uses @Transactional to ensure data consistency across multiple repository calls.
final List<JournalEntry> journalEntries = this.glJournalEntryRepository.findUnReversedManualJournalEntriesByTransactionId(command.getTransactionId());
org.apache.fineract.accounting.producttoaccountmapping.domain SPRING-DATA The interface extends JpaRepository to provide database access for ProductToGLAccountMapping entities. It uses JPQL annotations to define complex selection logic involving null checks and specific constant values for account types.
@Query("select mapping from ProductToGLAccountMapping mapping where mapping.productId =:productId ... and mapping.paymentType is NULL")
org.apache.fineract.accounting.producttoaccountmapping.service SPRING-DATA The class injects Spring Data repositories via its constructor and passes them to its superclass. It delegates persistence operations (save, update, delete) to the superclass methods, which utilize these repositories to manage the lifecycle of product-to-account mappings in the database.
public void deleteSharesProductToGLAccountMapping(final Long sharesProductId) {
    deleteProductToGLAccountMapping(sharesProductId, PortfolioProductType.SHARES);
}
org.apache.fineract.accounting.producttoaccountmapping.service SPRING-DATA The class interacts with the database through Spring Data repositories injected into its constructor (and passed to the superclass). It performs CRUD operations on GL Account mappings.
public void deleteSavingsProductToGLAccountMapping(final Long savingsProductId) {
    deleteProductToGLAccountMapping(savingsProductId, PortfolioProductType.SAVING);
}
org.apache.fineract.accounting.producttoaccountmapping.service.LoanProductToGLAccountMappingHelper SPRING-DATA The class interacts with the database through Spring Data repositories injected into the constructor (and passed to the superclass). It performs operations to save, update, and delete mappings between products and GL accounts.
saveProductToAccountMapping(element, paramName, productId, placeHolderTypeId, GLAccountType.ASSET, PortfolioProductType.LOAN);
org.apache.fineract.accounting.producttoaccountmapping.service.ProductToGLAccountMappingHelper SPRING-DATA The class uses Spring Data repositories to interact with the database. It performs CRUD operations on `ProductToGLAccountMapping` and `GLAccount` entities. It uses `saveAndFlush` for immediate persistence and `deleteAllInBatch` for bulk deletions.
this.accountMappingRepository.saveAndFlush(accountMapping);
org.apache.fineract.accounting.provisioning.domain SPRING-DATA The interface extends JpaRepository to provide database access for ProvisioningEntry entities. It uses JPQL annotations for custom retrieval logic.
@Query("select entry1 from ProvisioningEntry entry1 where entry1.createdDate = :createdDate")
org.apache.fineract.accounting.provisioning.service.ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses multiple Spring Data JPA repositories to interact with the database. It performs read and write operations on ProvisioningEntry, LoanProduct, GLAccount, and related entities. It uses saveAndFlush for immediate persistence.
this.provisioningEntryRepository.saveAndFlush(requestedEntry);
org.apache.fineract.accounting.rule.domain SPRING-DATA The class interacts with the database through the AccountingRuleRepository, which is a Spring Data repository interface. It performs read operations to fetch AccountingRule entities by their primary key.
return this.repository.findById(id).orElseThrow(() -> new AccountingRuleNotFoundException(id));
org.apache.fineract.accounting.rule.domain.AccountingRuleRepository SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository to provide standard data access capabilities and defines a custom JPQL query for specific retrieval logic.
@Query("select accountingRule from AccountingRule accountingRule where accountingRule.office is null or accountingRule.office.id =:officeId")
org.apache.fineract.accounting.rule.service.AccountingRuleWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It injects `AccountingRuleRepository`, `GLAccountRepositoryWrapper`, `OfficeRepositoryWrapper`, and `CodeValueRepository` to perform CRUD operations. Transaction management is handled via the `@Transactional` annotation.
this.accountingRuleRepository.saveAndFlush(accountingRule);
org.apache.fineract.adhocquery.domain.AdHocRepository SPRING-DATA Database integration is achieved through Spring Data JPA, which automatically generates the implementation for the repository interface at runtime. It manages the persistence lifecycle of the AdHoc entity.
public interface AdHocRepository extends JpaRepository<AdHoc, Long>, JpaSpecificationExecutor<AdHoc> {
    // no added behaviour
}
org.apache.fineract.adhocquery.service.AdHocWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses a Spring Data JPA repository (AdHocRepository) to interact with the database. It performs standard CRUD operations such as save, findById, and delete on the AdHoc entity.
this.adHocRepository.saveAndFlush(entity);
org.apache.fineract.cob SPRING-DATA The class uses a Spring Data JPA repository (`BatchBusinessStepRepository`) to access batch business step configurations.
List<BatchBusinessStep> cobStepConfigs = batchBusinessStepRepository.findAllByJobName(cobJobName);
org.apache.fineract.cob.api.InternalLoanAccountLockApiResource SPRING-DATA The class interacts with the database using a Spring Data repository interface `LoanAccountLockRepository`. It persists `LoanAccountLock` entities.
loanAccountLockRepository.save(loanAccountLock);
org.apache.fineract.cob.common SPRING-DATA The class interacts with the database to retrieve the system user details required for authentication. This is done through the `AppUserRepositoryWrapper`, which likely wraps a Spring Data repository.
AppUser user = userRepository.fetchSystemUser();
org.apache.fineract.cob.common SPRING-DATA The class uses a Spring Data repository (`CustomJobParameterRepository`) to fetch `CustomJobParameter` entities by their primary key ID.
return customJobParameterRepository.findById(customJobParameterId).map(CustomJobParameter::getParameterJson)
org.apache.fineract.cob.data SPRING-DATA This interface functions as a Spring Data JPA Projection. By defining getter methods that match properties of the underlying Loan entity, it enables the persistence framework to generate a query that selects only the 'id', 'externalId', and 'accountNo' columns from the database, rather than retrieving the entire row.
public interface LoanIdAndExternalIdAndAccountNo {
    Long getId();
    ExternalId getExternalId();
    String getAccountNo();
}
org.apache.fineract.cob.data.LoanIdAndLastClosedBusinessDate SPRING-DATA This interface functions as a Spring Data Projection. It defines a subset of data to be retrieved from the database, specifically targeting the Loan entity's ID and last closed business date. This allows the persistence layer to generate an optimized SQL SELECT query fetching only these specific columns.
public interface LoanIdAndLastClosedBusinessDate {
    Long getId();
    LocalDate getLastClosedBusinessDate();
}
org.apache.fineract.cob.domain SPRING-DATA The interface extends JpaRepository to provide data access for the BatchBusinessStep entity. It uses Spring Data's method derivation and JPQL annotations to interact with the underlying relational database.
@Query("SELECT DISTINCT bbs.jobName FROM BatchBusinessStep bbs")
org.apache.fineract.cob.domain SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database by extending JpaRepository and defining method signatures that Spring translates into SQL queries. It also uses the @Query annotation for custom JPQL operations.
@Query("""
        delete from LoanAccountLock lck where lck.lockPlacedOnCobBusinessDate is not null and lck.error is not null and
        lck.lockOwner in (org.apache.fineract.cob.domain.LockOwner.LOAN_COB_CHUNK_PROCESSING,org.apache.fineract.cob.domain.LockOwner.LOAN_INLINE_COB_PROCESSING)
        """)
@Modifying(flushAutomatically = true)
void removeLockByOwner();
org.apache.fineract.cob.domain.CustomLoanAccountLockRepository SPRING-DATA This interface represents a custom extension to a Spring Data repository, defining a specific data manipulation operation. It implies the execution of a database update command to synchronize loan data with account lock data.
void updateLoanFromAccountLocks();
org.apache.fineract.cob.listener SPRING-DATA The class interacts with the database to update 'LoanAccountLock' entities when errors occur. It uses a 'TransactionTemplate' to execute these updates in a separate transaction (REQUIRES_NEW), ensuring error logs are persisted even if the main batch transaction fails. It delegates the actual entity retrieval to 'LoanLockingService'.
transactionTemplate.setPropagationBehavior(PROPAGATION_REQUIRES_NEW);
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
    @Override
    protected void doInTransactionWithoutResult(@NotNull TransactionStatus status) {
        for (Long loanId : loanIds) {
            LoanAccountLock loanAccountLock = loanLockingService.findByLoanIdAndLockOwner(loanId, getLockOwner());
            if (loanAccountLock != null) {
                loanAccountLock.setError(String.format(msg, loanId), ThrowableSerialization.serialize(e));
            }
        }
    }
});
org.apache.fineract.cob.loan SPRING-DATA This class configures database access by injecting and passing the JdbcTemplate and LoanAccountLockRepository to the service layer. While this specific file does not execute queries, it wires the components (JDBC and Spring Data Repository) that perform database operations for loan locking.
return new LoanLockingServiceImpl(jdbcTemplate, fineractProperties, loanAccountLockRepository);
org.apache.fineract.cob.loan SPRING-DATA The class injects a `LoanRepository` via its constructor and passes it to its superclass `AbstractLoanItemReader`. While this specific file primarily reads IDs from the `ExecutionContext` (memory), it is part of a data access component hierarchy that relies on Spring Data JPA repositories for loan data retrieval.
public InlineCOBLoanItemReader(LoanRepository loanRepository) {
    super(loanRepository);
}
org.apache.fineract.cob.loan SPRING-DATA The class uses a Spring Data repository (`LoanRepository`) to retrieve `Loan` entities by their primary key ID.
return loanRepository.findById(loanId).orElseThrow(() -> new LoanNotFoundException(loanId));
org.apache.fineract.cob.loan SPRING-DATA The configuration sets up Spring Batch components (Reader and Writer) that interact with the database via the LoanRepository. The LoanItemReader reads loan data, and the LoanItemWriter persists changes to Loan entities.
LoanItemWriter repositoryItemWriter = new LoanItemWriter(loanLockingService);
repositoryItemWriter.setRepository(loanRepository);
org.apache.fineract.cob.loan.AbstractLoanItemWriter SPRING-DATA The class interacts with the database in two ways: implicitly through the `RepositoryItemWriter` superclass which persists `Loan` entities, and explicitly through the `LoanLockingService` to delete lock records.
super.write(items);
List<Long> loanIds = items.getItems().stream().map(AbstractPersistableCustom::getId).toList();
loanLockingService.deleteByLoanIdInAndLockOwner(loanIds, getLockOwner());
org.apache.fineract.cob.loan.ApplyLoanLockTasklet SPRING-DATA The class interacts with the database indirectly through injected services (`LoanLockingService` and `RetrieveLoanIdService`) to read loan data and manage lock entities. It explicitly controls transaction boundaries using `TransactionTemplate` to ensure locks are committed in a new transaction.
transactionTemplate.setPropagationBehavior(PROPAGATION_REQUIRES_NEW);
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
    @Override
    protected void doInTransactionWithoutResult(@NotNull TransactionStatus status) {
        loanLockingService.applyLock(toBeProcessedLoanIds, LockOwner.LOAN_COB_CHUNK_PROCESSING);
    }
});
org.apache.fineract.cob.loan.InlineLoanCOBBuildExecutionContextTasklet SPRING-DATA The class uses a Spring Data repository (CustomJobParameterRepository) to retrieve custom job parameters stored in the database. These parameters contain JSON payloads defining the inputs for the batch job.
CustomJobParameter customJobParameter = customJobParameterRepository.findById(customJobParameterId)
        .orElseThrow(() -> new LoanNotFoundException(customJobParameterId));
org.apache.fineract.cob.loan.LoanInlineCOBConfig SPRING-DATA The configuration sets up a Spring Batch job that interacts with the database via Spring Data Repositories. The 'InlineCOBLoanItemReader' uses 'LoanRepository' to fetch Loan entities, and the 'InlineCOBLoanItemWriter' uses the same repository to persist updates. Transaction management is handled via the PlatformTransactionManager.
@Bean
public InlineCOBLoanItemReader inlineCobWorkerItemReader() {
    return new InlineCOBLoanItemReader(loanRepository);
}
org.apache.fineract.cob.loan.LoanItemReader SPRING-DATA The class interacts with the database indirectly through injected services (`RetrieveLoanIdService`, `LoanLockingService`) and the `LoanRepository` passed to the superclass. These services likely use Spring Data JPA repositories to query loan data and lock tables.
accountLocks.addAll(loanLockingService.findAllByLoanIdInAndLockOwner(loanIds, LockOwner.LOAN_COB_CHUNK_PROCESSING));
org.apache.fineract.cob.loan.LoanLockingService SPRING-DATA Although this is an interface, the method naming conventions (e.g., 'deleteBy...', 'findAllBy...') strongly suggest it is implemented using Spring Data JPA or acts as a service wrapper around a Spring Data repository for the 'LoanAccountLock' entity.
n/a
org.apache.fineract.cob.loan.RetrieveLoanIdConfiguration SPRING-DATA The configuration class injects and utilizes a Spring Data 'LoanRepository' and a Spring JDBC 'NamedParameterJdbcTemplate'. While this specific file does not execute queries, it wires these database access components into the 'RetrieveLoanIdService', enabling downstream database interactions.
@Autowired
private LoanRepository loanRepository;

@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
org.apache.fineract.cob.loan.RetrieveLoanIdService SPRING-DATA The interface defines data access contracts for retrieving loan information. The presence of the @Param annotation on 'findAllStayedLockedByCobBusinessDate' indicates that this interface is likely used as a Spring Data Repository or implemented by a class that utilizes Spring Data JPA features to bind method parameters to database queries.
List<LoanIdAndExternalIdAndAccountNo> findAllStayedLockedByCobBusinessDate(@Param("cobBusinessDate") LocalDate cobBusinessDate);
org.apache.fineract.cob.service SPRING-DATA The class interacts with the database primarily through Spring Data JPA repositories to manage loan account locks and custom job parameters. It also utilizes a TransactionTemplate to enforce specific transaction propagation behaviors (REQUIRES_NEW) when locking loan accounts to ensure locks are committed independently of the main flow.
loanAccountLockRepository.saveAndFlush(loanAccountLock);
org.apache.fineract.cob.service SPRING-DATA The class uses Spring Data repositories to access job configuration details. Specifically, it uses ScheduledJobDetailRepository to find job details by name. It also relies on RetrieveLoanIdService which likely performs database queries to fetch loan dates.
ScheduledJobDetail scheduledJobDetail = scheduledJobDetailRepository.findByJobName(LoanCOBConstant.JOB_HUMAN_READABLE_NAME);
org.apache.fineract.cob.service SPRING-DATA The class interacts with the database primarily through the `JobExecutionRepository` (likely a Spring Data JPA repository) to query job execution history and status. It also indirectly accesses data via `RetrieveLoanIdService`.
LocalDate runningCatchUpBusinessDate = jobExecutionRepository.getBusinessDateOfRunningJobByExecutionParameter(
        LoanCOBConstant.JOB_NAME, LoanCOBConstant.LOAN_COB_CUSTOM_JOB_PARAMETER_KEY, LoanCOBConstant.IS_CATCH_UP_PARAMETER_NAME,
        "true", LoanCOBConstant.BUSINESS_DATE_PARAMETER_NAME);
org.apache.fineract.cob.service.ConfigJobParameterServiceImpl SPRING-DATA The class uses a Spring Data JPA repository (BatchBusinessStepRepository) to perform CRUD operations on the BatchBusinessStep entity.
batchBusinessStepRepository.deleteAllByJobName(jobName);
org.apache.fineract.cob.service.LoanAccountLockServiceImpl SPRING-DATA The class interacts with the database through the LoanAccountLockRepository, which is a Spring Data repository interface. It performs standard CRUD operations (findAll) as well as custom queries (existsByLoanIdAndLockOwner, updateLoanFromAccountLocks, removeLockByOwner).
Page<LoanAccountLock> loanAccountLocks = loanAccountLockRepository.findAll(loanAccountLockPage);
org.apache.fineract.commands.domain.CommandSourceRepository SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository to provide standard data access methods and defines custom JPQL queries for specific business requirements.
@Query("delete from CommandSource c where c.status = :status and c.madeOnDate is not null and c.madeOnDate <= :dateForPurgeCriteria")
org.apache.fineract.commands.jobs SPRING-DATA The class interacts with the database through the CommandSourceRepository interface, which is likely a Spring Data JPA repository. It performs a bulk delete operation based on status and date criteria.
repository.deleteOlderEventsWithStatus(CommandProcessingResultType.PROCESSED.getValue(), dateForPurgeCriteria);
org.apache.fineract.commands.service SPRING-DATA The class uses a Spring Data repository (CommandSourceRepository) to perform CRUD operations on CommandSource entities. It retrieves entities by ID, saves updates (for rejections), and deletes entities.
this.commandSourceRepository.deleteById(makerCheckerId);
org.apache.fineract.commands.service.CommandSourceService SPRING-DATA The class uses a Spring Data JPA repository (`CommandSourceRepository`) to perform CRUD operations on the `CommandSource` entity. It utilizes standard methods like `saveAndFlush` and `findById`, as well as a custom finder method for idempotency checks.
return commandSourceRepository.saveAndFlush(initialCommandSource);
org.apache.fineract.commands.service.SynchronousCommandProcessingService SPRING-DATA The class interacts with the database primarily through the `CommandSourceService` to persist and update `CommandSource` entities. It uses Spring's `@Transactional` annotation to manage transaction boundaries, ensuring that command state updates (initial, success, error) are committed atomically. It also interacts with `ConfigurationDomainService` to read configuration settings from the database.
commandSource = sameTransaction ? commandSourceService.saveInitialSameTransaction(wrapper, command, user, idempotencyKey)
                    : commandSourceService.saveInitialNewTransaction(wrapper, command, user, idempotencyKey);
org.apache.fineract.infrastructure.accountnumberformat.domain SPRING-DATA The file is a Spring Data JPA repository interface that manages persistence for the AccountNumberFormat entity. It inherits standard database operations from JpaRepository and defines a custom read operation using JPQL.
@Query(FIND_ACCOUNT_NUMBER_FORMAT_FOR_ENTITY)
AccountNumberFormat findOneByAccountTypeEnum(@Param("accountTypeEnum") Integer accountTypeEnum);
org.apache.fineract.infrastructure.accountnumberformat.domain SPRING-DATA The class wraps a Spring Data repository (`AccountNumberFormatRepository`) to perform database operations. It relies on Spring Data JPA's abstraction to generate SQL for standard CRUD operations and custom finders.
public AccountNumberFormat findOneWithNotFoundDetection(final Long id) {
    return this.repository.findById(id).orElseThrow(() -> new AccountNumberFormatNotFoundException(id));
}
org.apache.fineract.infrastructure.accountnumberformat.service SPRING-DATA The class uses a repository wrapper (likely wrapping a Spring Data JpaRepository) to interact with the database. It performs CRUD operations on the AccountNumberFormat entity. Transactions are managed using Spring's @Transactional annotation.
this.accountNumberFormatRepository.saveAndFlush(accountNumberFormat);
org.apache.fineract.infrastructure.bulkimport.domain SPRING-DATA The interface is a Spring Data JPA repository. It automatically generates SQL queries at runtime to interact with the database table mapped to the ImportDocument entity.
public interface ImportDocumentRepository extends JpaRepository<ImportDocument, Long>, JpaSpecificationExecutor<ImportDocument> {
    // no added behaviour
}
org.apache.fineract.infrastructure.bulkimport.importhandler.chartofaccounts.ChartOfAccountsImportHandler SPRING-DATA The class uses a repository wrapper to query existing GL Accounts from the database. This is primarily used during the processing of opening balances to verify that the GL Account referenced in the Excel file exists and to retrieve its ID.
GLAccount glAccount = this.glAccountRepository.findOneByGlCodeWithNotFoundDetection(glCode);
org.apache.fineract.infrastructure.bulkimport.service.BulkImportEventListener SPRING-DATA The class uses a Spring Data repository to retrieve and update `ImportDocument` entities. It fetches the document metadata before processing and updates it with success/error counts after processing.
final ImportDocument importDocument = this.importRepository.findById(event.getImportId()).orElse(null);
// ... processing ...
this.importRepository.saveAndFlush(importDocument);
org.apache.fineract.infrastructure.bulkimport.service.BulkImportWorkbookServiceImpl SPRING-DATA The class uses a hybrid approach: it uses Spring Data JPA (ImportDocumentRepository) for saving new import records and Spring JDBC (JdbcTemplate) for querying import history and document locations with raw SQL.
final String sql = "select " + rm.schema() + " order by i.id desc";
return this.jdbcTemplate.query(sql, rm, new Object[] { type.getValue() });
org.apache.fineract.infrastructure.businessdate.domain.BusinessDateRepository SPRING-DATA The interface extends JpaRepository to provide automatic database interaction for the BusinessDate entity.
Optional<BusinessDate> findByType(BusinessDateType type);
org.apache.fineract.infrastructure.businessdate.service SPRING-DATA The class uses a Spring Data repository interface (BusinessDateRepository) to interact with the underlying database for retrieving BusinessDate entities.
List<BusinessDate> businessDateList = repository.findAll();
org.apache.fineract.infrastructure.businessdate.service.BusinessDateWritePlatformServiceImpl SPRING-DATA The class uses a Spring Data JPA repository (`BusinessDateRepository`) to interact with the database. It performs lookups by business date type and saves new or updated `BusinessDate` entities.
Optional<BusinessDate> businessDate = repository.findByType(businessDateType);
if (businessDate.isEmpty()) {
    repository.save(newBusinessDate);
}
org.apache.fineract.infrastructure.cache.command.UpdateCacheCommandHandler SPRING-DATA The class uses Spring's @Transactional annotation to manage database transactions for the cache update operation. While the direct database access logic resides in the injected CacheWritePlatformService, this handler defines the transaction boundary.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
org.apache.fineract.infrastructure.cache.domain.PlatformCacheRepository SPRING-DATA The file uses Spring Data JPA to manage persistence for the PlatformCache entity. By extending JpaRepository, it inherits standard CRUD operations, pagination, and sorting capabilities. By extending JpaSpecificationExecutor, it allows for dynamic query construction using the Criteria API.
public interface PlatformCacheRepository extends JpaRepository<PlatformCache, Long>, JpaSpecificationExecutor<PlatformCache> {
    //
}
org.apache.fineract.infrastructure.campaigns.email.domain SPRING-DATA The class interacts with the database to retrieve existing entities (Group, Client, Staff, EmailMessage) using repository patterns. It uses both direct Spring Data repositories and wrapper classes that likely encapsulate JPA `EntityManager` or Spring Data calls with additional error handling (like 'Not Found' detection).
group = this.groupRepository.findOneWithNotFoundDetection(groupId);
org.apache.fineract.infrastructure.campaigns.email.domain.EmailCampaignRepository SPRING-DATA The file uses Spring Data JPA repositories to interact with the database. It extends `JpaRepository` to inherit standard methods and defines a custom JPQL query for specific filtering logic.
@Query("SELECT campaign FROM EmailCampaign campaign WHERE campaign.paramValue LIKE :reportPattern...")
org.apache.fineract.infrastructure.campaigns.email.domain.EmailConfigurationRepository SPRING-DATA The interface utilizes Spring Data JPA to manage database interactions for the EmailConfiguration entity. It abstracts the JDBC and JPA boilerplate code, providing a high-level API for data persistence.
public interface EmailConfigurationRepository extends JpaRepository<EmailConfiguration, Long> { EmailConfiguration findByName(String name); }
org.apache.fineract.infrastructure.campaigns.email.domain.EmailMessageRepository SPRING-DATA The interface extends JpaRepository and JpaSpecificationExecutor, indicating it is a Spring Data JPA repository used for database persistence.
public interface EmailMessageRepository extends JpaRepository<EmailMessage, Long>, JpaSpecificationExecutor<EmailMessage> {
    List<EmailMessage> findByStatusType(Integer emailMessageStatus);
}
org.apache.fineract.infrastructure.campaigns.email.service SPRING-DATA The service uses an injected EmailMessageRepository (likely extending JpaRepository) to perform CRUD operations on EmailMessage entities. It uses @Transactional to ensure atomicity of database operations.
this.repository.saveAndFlush(message);
org.apache.fineract.infrastructure.campaigns.email.service SPRING-DATA The service interacts with the database to retrieve active email campaigns using a Spring Data repository. It executes a query to find campaigns matching a specific parameter value (trigger type) and status.
emailCampaignRepository.findActiveEmailCampaigns("%" + paramValue + "%",
                SmsCampaignTriggerType.TRIGGERED.getValue());
org.apache.fineract.infrastructure.campaigns.email.service SPRING-DATA The service uses a Spring Data repository to interact with the database. It retrieves all configuration entities and updates them individually.
Collection<EmailConfiguration> configurations = this.repository.findAll();
// ...
this.repository.saveAndFlush(config);
org.apache.fineract.infrastructure.campaigns.email.service.EmailCampaignWritePlatformCommandHandlerImpl SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It performs CRUD operations on EmailCampaign and EmailMessage entities. It also interacts with the ReportRepository to fetch business rules.
this.emailCampaignRepository.saveAndFlush(emailCampaign);
org.apache.fineract.infrastructure.campaigns.jobs.executeemail SPRING-DATA The class injects multiple Spring Data repositories (EmailMessageRepository, EmailCampaignRepository, LoanRepository, SavingsAccountRepository) and passes them to the tasklet. While this configuration class does not execute queries directly, it wires the components that perform database operations.
@Autowired
private EmailMessageRepository emailMessageRepository;
// ...
@Bean
public ExecuteEmailTasklet executeEmailTasklet() {
    return new ExecuteEmailTasklet(emailMessageRepository, ...);
}
org.apache.fineract.infrastructure.campaigns.jobs.executeemail.ExecuteEmailTasklet SPRING-DATA The class uses Spring Data JPA repositories to fetch pending email messages, retrieve campaign details, and look up related business entities (Loans, SavingsAccounts) for report generation. It also updates the status of EmailMessage entities.
final List<EmailMessage> emailMessages = emailMessageRepository.findByStatusType(EmailMessageStatusType.PENDING.getValue());
org.apache.fineract.infrastructure.campaigns.jobs.executereportmailingjobs.ExecuteReportMailingJobsConfig SPRING-DATA The class injects Spring Data repositories (`ReportMailingJobRepository` and `ReportMailingJobRunHistoryRepository`) and passes them to the tasklet. While this configuration class does not execute queries directly, it wires the components that perform database operations.
@Autowired
private ReportMailingJobRepository reportMailingJobRepository;
@Autowired
private ReportMailingJobRunHistoryRepository reportMailingJobRunHistoryRepository;
org.apache.fineract.infrastructure.campaigns.jobs.executereportmailingjobs.ExecuteReportMailingJobsTasklet SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It retrieves job configurations and saves execution history and updates job schedules.
final Collection<ReportMailingJob> reportMailingJobCollection = reportMailingJobRepository.findByIsActiveTrueAndIsDeletedFalse();
// ...
reportMailingJobRepository.save(reportMailingJob);
org.apache.fineract.infrastructure.campaigns.jobs.getdeliveryreportsfromsmsgateway SPRING-DATA The code uses a Spring Data repository (`SmsMessageRepository`) to interact with the database. It retrieves `SmsMessage` entities by ID and saves them after updating their status and external ID. It also uses a service (`SmsReadPlatformService`) which likely executes a read-only query to find messages waiting for reports.
SmsMessage smsMessage = smsMessageRepository.findById(smsMessageDeliveryReportData.getId()).orElse(null);
// ... status mapping logic ...
smsMessage.setStatusType(statusType);
smsMessageRepository.save(smsMessage);
org.apache.fineract.infrastructure.campaigns.jobs.getdeliveryreportsfromsmsgateway SPRING-DATA The class injects a Spring Data repository interface (SmsMessageRepository) and passes it to the tasklet bean. This indicates that the resulting job will perform database operations (likely reading and updating SMS message records) via this repository.
@Autowired
private SmsMessageRepository smsMessageRepository;
...
return new GetDeliveryReportsFromSmsGatewayTasklet(..., smsMessageRepository);
org.apache.fineract.infrastructure.campaigns.jobs.sendmessagetosmsgateway.SendMessageToSmsGatewayConfig SPRING-DATA The class injects a Spring Data repository (`SmsMessageRepository`) and passes it to the batch tasklet. This repository is used to interact with the database table storing SMS messages.
@Autowired
private SmsMessageRepository smsMessageRepository;
...
return new SendMessageToSmsGatewayTasklet(smsMessageRepository, ...);
org.apache.fineract.infrastructure.campaigns.jobs.sendmessagetosmsgateway.SendMessageToSmsGatewayTasklet SPRING-DATA The class uses a Spring Data repository interface to interact with the database for retrieving and updating SMS message entities.
org.springframework.data.domain.Page<SmsMessage> pendingMessages = smsMessageRepository
        .findByStatusType(SmsMessageStatusType.PENDING.getValue(), pageRequest);
// ... processing ...
smsMessageRepository.saveAll(toSaveMessages);
org.apache.fineract.infrastructure.campaigns.jobs.updateemailoutboundwithcampaignmessage SPRING-DATA The class injects Spring Data repositories and passes them to the batch tasklet. While this configuration file does not execute queries directly, it wires the components that perform database operations.
@Autowired
private EmailCampaignRepository emailCampaignRepository;
// ...
return new UpdateEmailOutboundWithCampaignMessageTasklet(..., emailCampaignRepository, ...);
org.apache.fineract.infrastructure.campaigns.jobs.updateemailoutboundwithcampaignmessage SPRING-DATA The class interacts with the database using Spring Data JPA repositories to manage campaign and message entities. It reads campaign configurations, fetches client details via a wrapper, and persists generated email messages to an outbound table.
EmailMessage emailMessage = EmailMessage.pendingEmail(null, client, null, emailCampaign, emailSubject, message, emailAddress, campaignName);
emailMessageRepository.save(emailMessage);
org.apache.fineract.infrastructure.campaigns.jobs.updatesmsoutboundwithcampaignmessage SPRING-DATA The configuration class injects a Spring Data repository (SmsCampaignRepository) and passes it to the Tasklet bean. While this class does not execute queries directly, it wires the component that performs database operations.
@Autowired
private SmsCampaignRepository smsCampaignRepository;
// ...
return new UpdateSmsOutboundWithCampaignMessageTasklet(smsCampaignRepository, smsCampaignWritePlatformService);
org.apache.fineract.infrastructure.campaigns.jobs.updatesmsoutboundwithcampaignmessage.UpdateSmsOutboundWithCampaignMessageTasklet SPRING-DATA The class interacts with the database using a Spring Data JPA repository (`SmsCampaignRepository`) to fetch and update `SmsCampaign` entities. It also uses a service (`SmsCampaignWritePlatformService`) which implies further database interactions for inserting outbound messages.
final Collection<SmsCampaign> smsCampaignDataCollection = smsCampaignRepository
        .findByTriggerTypeAndStatus(SmsCampaignTriggerType.SCHEDULE.getValue(), SmsCampaignStatus.ACTIVE.getValue());
// ...
this.smsCampaignRepository.saveAndFlush(smsCampaign);
org.apache.fineract.infrastructure.campaigns.sms.domain SPRING-DATA The file is a Spring Data JPA repository interface that manages persistence for the `SmsCampaign` entity. It provides database interaction without boilerplate code by extending `JpaRepository`. It uses method naming conventions to generate SQL queries automatically and includes a custom JPQL query for more complex filtering logic involving pattern matching and hardcoded status checks.
@Query("SELECT campaign FROM SmsCampaign campaign WHERE campaign.paramValue LIKE :reportPattern AND campaign.triggerType=:triggerType AND campaign.status=300")
org.apache.fineract.infrastructure.campaigns.sms.serialization.SmsCampaignValidator SPRING-DATA The class uses a repository wrapper to query the database for device registrations. This is used to validate if a client is eligible to receive push notifications.
DeviceRegistration deviceRegistration = this.deviceRegistrationRepository.findDeviceRegistrationByClientId(client.getId());
org.apache.fineract.infrastructure.campaigns.sms.service.SmsCampaignDomainServiceImpl SPRING-DATA The service uses Spring Data JPA repositories to interact with the database. It retrieves SMS campaign configurations, office hierarchy information, and group details. It also persists generated SMS messages.
List<SmsCampaign> smsCampaigns = smsCampaignRepository.findActiveSmsCampaigns("%" + paramValue + "%",
        SmsCampaignTriggerType.TRIGGERED.getValue());
org.apache.fineract.infrastructure.campaigns.sms.service.SmsCampaignWritePlatformServiceJpaImpl SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It performs CRUD operations on SmsCampaign and SmsMessage entities, and also interacts with Report, Client, and Group entities via their respective repositories.
this.smsCampaignRepository.saveAndFlush(smsCampaign);
org.apache.fineract.infrastructure.codes.domain SPRING-DATA The class interacts with the database through the CodeValueRepository interface, which is likely a Spring Data JPA repository. It performs read operations to fetch CodeValue entities by ID, or by combinations of code name, ID, and label.
return this.repository.findById(id).orElseThrow(() -> new CodeValueNotFoundException(id));
org.apache.fineract.infrastructure.codes.domain.CodeRepository SPRING-DATA The file uses Spring Data JPA repositories to interact with the database. By extending JpaRepository, it gains automatic implementation of standard data access operations for the 'Code' entity.
public interface CodeRepository extends JpaRepository<Code, Long>, JpaSpecificationExecutor<Code> {
    Code findOneByName(String name);
}
org.apache.fineract.infrastructure.codes.domain.CodeValueRepository SPRING-DATA The file is a Spring Data JPA repository interface. It provides database access for the 'CodeValue' entity by extending JpaRepository, which offers standard CRUD and paging operations, and JpaSpecificationExecutor for dynamic criteria-based queries.
public interface CodeValueRepository extends JpaRepository<CodeValue, Long>, JpaSpecificationExecutor<CodeValue> { ... }
org.apache.fineract.infrastructure.codes.handler.DeleteCodeCommandHandler SPRING-DATA The class manages database transactions via the Spring `@Transactional` annotation, delegating the actual persistence operations to the `CodeWritePlatformService`. While it does not contain direct SQL or repository calls, it orchestrates the transactional write operation.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.deleteCode(command.entityId());
}
org.apache.fineract.infrastructure.codes.service SPRING-DATA The class uses Spring Data JPA repositories (CodeRepository and CodeValueRepository) to interact with the database. It performs CRUD operations on Code and CodeValue entities within transactional boundaries.
this.codeValueRepository.saveAndFlush(codeValue);
org.apache.fineract.infrastructure.codes.service.CodeWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses a Spring Data JPA repository (CodeRepository) to interact with the database. It performs CRUD operations on the 'Code' entity.
this.codeRepository.saveAndFlush(code);
org.apache.fineract.infrastructure.configuration.domain SPRING-DATA The class interacts with the database through the injected GlobalConfigurationRepository, which is likely a Spring Data JPA repository interface. It performs standard CRUD operations (find, save, delete) on GlobalConfigurationProperty entities.
this.repository.findOneByName(propertyName);
org.apache.fineract.infrastructure.configuration.domain SPRING-DATA The file uses Spring Data JPA to interact with the database, mapping the ExternalServicesProperties entity to a relational table.
@Query("SELECT ep from ExternalServicesProperties ep where ep.externalServicePropertiesPK.name=:name...")
org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainServiceJpa SPRING-DATA The class uses injected repository interfaces (likely extending Spring Data JpaRepository) to interact with the database. It retrieves global configuration settings, permissions, and cache settings. The 'GlobalConfigurationRepositoryWrapper' is a custom wrapper around the standard repository to handle caching and exception handling.
this.cacheTypeRepository.findById(1L).ifPresent(cache -> {
    cache.setCacheType(cacheType.getValue());
    this.cacheTypeRepository.save(cache);
});
org.apache.fineract.infrastructure.configuration.domain.ExternalServicesPropertiesRepositoryWrapper SPRING-DATA The class interacts with the database through a Spring Data repository interface. It performs read operations to fetch configuration properties based on a composite primary key.
final ExternalServicesProperties externalServicesProperties = this.repository.findOneByExternalServicePropertiesPK(name, id);
org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationRepository SPRING-DATA The interface uses Spring Data JPA to interact with the database. It inherits standard CRUD operations (save, findAll, delete) from JpaRepository and defines a custom finder method.
public interface GlobalConfigurationRepository
        extends JpaRepository<GlobalConfigurationProperty, Long>...
org.apache.fineract.infrastructure.configuration.service SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It injects ExternalServicesPropertiesRepository and a wrapper to perform read and write operations on ExternalServicesProperties entities.
this.repository.saveAndFlush(externalServicesProperties);
org.apache.fineract.infrastructure.configuration.service SPRING-DATA The class interacts with the database through a repository wrapper (GlobalConfigurationRepositoryWrapper) which likely delegates to a Spring Data JPA repository. It performs read and write operations on GlobalConfigurationProperty entities within a transactional context.
this.repository.save(configItemForUpdate);
org.apache.fineract.infrastructure.core.auditing.CustomAuditingHandler SPRING-DATA This class is a core component of the Spring Data JPA auditing infrastructure. While it does not execute SQL directly, it intercepts entity persistence operations (save/update) to automatically populate auditing fields (createdDate, lastModifiedDate, etc.) on entities before they are written to the database.
setDateTimeProvider(fetchDateTimeProvider(source));
return super.markCreated(source);
org.apache.fineract.infrastructure.core.filters SPRING-DATA The class uses a Spring Data repository (`CommandSourceRepository`) to find entities by ID and a service (`CommandSourceService`) to save updates to the database. It handles transaction boundaries explicitly for these updates.
commandSourceRepository.findById(commandId).ifPresent(commandSource -> { ... commandSourceService.saveResultNewTransaction(commandSource); });
org.apache.fineract.infrastructure.creditbureau.domain SPRING-DATA Database integration is achieved through Spring Data JPA repositories. The interface defines the contract for data access, and Spring generates the implementation to interact with the underlying relational database using Hibernate/JPA.
public interface CreditBureauRepository extends JpaRepository<CreditBureau, Long>, JpaSpecificationExecutor<CreditBureau> {
org.apache.fineract.infrastructure.creditbureau.domain SPRING-DATA The class interacts with the database through a Spring Data repository interface named TokenRepository. It performs standard CRUD operations (save, delete, read) on the CreditBureauToken entity.
this.repository.save(token);
org.apache.fineract.infrastructure.creditbureau.domain SPRING-DATA The file is a Spring Data JPA repository interface that manages persistence for the CreditBureauToken entity. It inherits standard database operations from JpaRepository and defines custom JPQL queries.
@Query("select creditbureautoken from CreditBureauToken creditbureautoken")
CreditBureauToken getToken();
org.apache.fineract.infrastructure.creditbureau.domain SPRING-DATA The class interacts with the database through a Spring Data repository interface. It delegates read operations to the repository, which likely maps to a database table storing credit bureau configurations.
return this.creditBureauConfigurationRepository.getCreditBureauConfigData(creditBureauID, parameterName);
org.apache.fineract.infrastructure.creditbureau.domain SPRING-DATA The interface uses Spring Data JPA to interact with the database. It defines custom JPQL queries to select data from the 'CreditBureauConfiguration' entity/table.
@Query("SELECT creditBureauConfig from CreditBureauConfiguration creditBureauConfig where creditBureauConfig.organisationCreditbureau.id = :creditBureauID")
org.apache.fineract.infrastructure.creditbureau.domain.CreditBureauLoanProductMappingRepository SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends `JpaRepository` to provide standard data access capabilities without boilerplate code.
CreditBureauLoanProductMapping findOneByLoanProduct(LoanProduct loanProduct);
org.apache.fineract.infrastructure.creditbureau.domain.CreditReportRepository SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository to provide standard CRUD operations and JpaSpecificationExecutor for dynamic queries. It also defines a custom JPQL query for specific data retrieval.
@Query("SELECT creditBureauReport from CreditReport creditBureauReport where creditBureauReport.nationalId = :nationalId and creditBureauReport.creditBureauId = :creditBureauId ")
org.apache.fineract.infrastructure.creditbureau.domain.OrganisationCreditBureauRepository SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository to inherit standard CRUD operations and JpaSpecificationExecutor for dynamic queries.
public interface OrganisationCreditBureauRepository
        extends JpaRepository<OrganisationCreditBureau, Long>, JpaSpecificationExecutor<OrganisationCreditBureau> {

}
org.apache.fineract.infrastructure.creditbureau.handler SPRING-DATA The class participates in database integration by defining a transactional boundary using Spring's `@Transactional` annotation. It delegates the actual persistence logic to the `CreditBureauConfigurationWritePlatformService`, which performs the write operation.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.addCreditBureauConfiguration(command.entityId(), command);
}
org.apache.fineract.infrastructure.creditbureau.service SPRING-DATA The class uses Spring Data JPA repositories (OrganisationCreditBureauRepository and CreditBureauRepository) to interact with the database. It performs operations to retrieve entity references by ID and to save/flush entities.
this.organisationCreditBureauRepository.saveAndFlush(organisationCreditBureau);
org.apache.fineract.infrastructure.creditbureau.service SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It performs retrieval (`getReferenceById`) and persistence (`saveAndFlush`) operations on domain entities.
this.creditBureauLoanProductMappingRepository.saveAndFlush(cb_lp);
org.apache.fineract.infrastructure.creditbureau.service SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It injects CreditBureauConfigurationRepository and OrganisationCreditBureauRepository to perform CRUD operations. It uses @Transactional to manage transaction boundaries.
this.creditBureauConfigurationRepository.saveAndFlush(cb_config);
org.apache.fineract.infrastructure.creditbureau.service.CreditReportWritePlatformServiceImpl SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It injects `CreditBureauRepository` to look up bureau details and `CreditReportRepository` to perform CRUD operations (save, delete, find) on credit reports. Transactions are managed via the `@Transactional` annotation.
creditReport = CreditReport.instance(creditBureauId, nationalId, creditReportArray);
this.creditReportRepository.saveAndFlush(creditReport);
org.apache.fineract.infrastructure.creditbureau.service.ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl SPRING-DATA The class uses repository wrappers (TokenRepositoryWrapper, CreditBureauConfigurationRepositoryWrapper) which likely wrap Spring Data JPA repositories to interact with the database. It performs CRUD operations on tokens and reads configuration data.
this.tokenRepositoryWrapper.save(generatedtoken);
org.apache.fineract.infrastructure.dataqueries.domain SPRING-DATA The file is a Spring Data JPA repository interface. It provides database interaction capabilities without boilerplate code by extending 'JpaRepository'. It defines custom JPQL queries to perform specific lookups on the 'EntityDatatableChecks' table and joins with 'RegisteredDatatable'.
@Query("select t from EntityDatatableChecks t WHERE t.status =:status and t.entity=:entity and t.productId = :productId ")
List<EntityDatatableChecks> findByEntityStatusAndProduct(@Param("entity") String entity, ...);
org.apache.fineract.infrastructure.dataqueries.domain.RegisteredDatatableRepository SPRING-DATA The interface utilizes Spring Data JPA to manage database interactions for the RegisteredDatatable entity. It inherits standard data access methods without requiring explicit SQL or JPQL implementation in the file.
public interface RegisteredDatatableRepository
        extends JpaRepository<RegisteredDatatable, Long>, JpaSpecificationExecutor<RegisteredDatatable> {

}
org.apache.fineract.infrastructure.dataqueries.domain.ReportParameterRepository SPRING-DATA Database integration is achieved through Spring Data JPA, which automatically generates the implementation for the repository interface to interact with the underlying database tables mapped to the ReportParameter entity.
public interface ReportParameterRepository extends JpaRepository<ReportParameter, Long>, JpaSpecificationExecutor<ReportParameter> {
    // no added behaviour
}
org.apache.fineract.infrastructure.dataqueries.domain.ReportParameterUsageRepository SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository to provide standard data access operations without boilerplate code.
public interface ReportParameterUsageRepository
        extends JpaRepository<ReportParameterUsage, Long>...
org.apache.fineract.infrastructure.dataqueries.domain.ReportRepository SPRING-DATA The file uses Spring Data JPA to manage database interactions for the Report entity. By extending JpaRepository, it automatically gains methods for saving, deleting, and finding entities. By extending JpaSpecificationExecutor, it supports complex, dynamic filtering.
public interface ReportRepository extends JpaRepository<Report, Long>, JpaSpecificationExecutor<Report> {
    // no added behaviour
}
org.apache.fineract.infrastructure.dataqueries.domain.ReportRepositoryWrapper SPRING-DATA The class interacts with the database through a Spring Data repository interface (`ReportRepository`). It performs read operations to fetch entities by their primary key.
return this.reportRepository.findById(id).orElseThrow(() -> new ReportNotFoundException(id));
org.apache.fineract.infrastructure.dataqueries.service SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It performs CRUD operations on Report and Permission entities, including saving, flushing, and deleting records. Transaction management is handled via the @Transactional annotation.
this.reportRepository.saveAndFlush(report);
org.apache.fineract.infrastructure.dataqueries.service.EntityDatatableChecksWritePlatformServiceImpl SPRING-DATA The class uses a Spring Data JPA repository (`EntityDatatableChecksRepository`) to manage the `EntityDatatableChecks` entity. It also interacts with a `ReadWriteNonCoreDataService` to perform dynamic SQL operations on variable datatables.
this.entityDatatableChecksRepository.saveAndFlush(check);
org.apache.fineract.infrastructure.documentmanagement.domain SPRING-DATA This interface is a Spring Data JPA repository that manages the persistence of Document entities. It automatically generates SQL queries based on the inherited methods for saving, deleting, and finding entities.
public interface DocumentRepository extends JpaRepository<Document, Long>, JpaSpecificationExecutor<Document> {
    // no added behaviour
}
org.apache.fineract.infrastructure.documentmanagement.domain.ImageRepository SPRING-DATA The file uses Spring Data JPA to manage database interactions. It extends JpaRepository to inherit standard CRUD operations for the Image entity and JpaSpecificationExecutor to support dynamic queries.
public interface ImageRepository extends JpaRepository<Image, Long>, JpaSpecificationExecutor<Client> {}
org.apache.fineract.infrastructure.documentmanagement.service SPRING-DATA The class interacts with the database using Spring Data repositories (likely wrapped by custom wrappers). It performs CRUD operations on Client, Staff, and Image entities within a transactional context.
this.imageRepository.delete(image);
org.apache.fineract.infrastructure.documentmanagement.service SPRING-DATA The class uses a Spring Data JPA repository (DocumentRepository) to perform CRUD operations on Document entities.
this.documentRepository.saveAndFlush(document);
org.apache.fineract.infrastructure.entityaccess.data.FineractEntityDataValidator SPRING-DATA The class uses Spring Data repositories and wrapper services to verify the existence of entities referenced in the API requests. It performs read-only operations to ensure referential integrity.
public void checkForLoanProducts(final Long id) {
    this.loanProductRepository.findById(id).orElseThrow(() -> new LoanProductNotFoundException(id));
}
org.apache.fineract.infrastructure.entityaccess.domain SPRING-DATA The class interacts with the database through a Spring Data repository interface (FineractEntityToEntityMappingRepository). It performs read operations by ID and delete operations on the FineractEntityToEntityMapping entity.
this.fineractEntityToEntityMappingRepository.findById(id).orElseThrow(...)
org.apache.fineract.infrastructure.entityaccess.domain SPRING-DATA The class interacts with the database through a Spring Data JPA repository interface. It performs read-only operations to fetch entity relation data based on ID or code name.
this.fineractEntityRelationRepository.findById(id).orElseThrow(...)
org.apache.fineract.infrastructure.entityaccess.domain SPRING-DATA The file uses Spring Data JPA repositories to interact with the database. It extends JpaRepository to provide standard CRUD operations and defines a custom JPQL query for specific retrieval logic.
@Query("select feem from FineractEntityToEntityMapping feem where feem.fromId= :fromId and feem.toId= :toId and feem.relationId= :relId")
org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityAccessRepository SPRING-DATA The interface uses Spring Data JPA to interact with the database, abstracting SQL operations for the FineractEntityAccess entity.
public interface FineractEntityAccessRepository
        extends JpaRepository<FineractEntityAccess, Long>, JpaSpecificationExecutor<FineractEntityAccess> {
    // no added behaviour
}
org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityAccessRepositoryWrapper SPRING-DATA The class wraps a Spring Data repository interface to perform CRUD operations on the database.
this.repository.findById(id).orElseThrow(() -> new FineractEntityAccessNotFoundException(id));
org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityRelationRepository SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository to provide standard data access methods and defines a custom JPQL query for specific retrieval logic.
@Query("select fea from FineractEntityRelation fea where fea.codeName= :codeName")
org.apache.fineract.infrastructure.entityaccess.service SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It injects repository interfaces and wrapper classes to perform CRUD operations on `FineractEntityAccess` and `FineractEntityToEntityMapping` entities.
this.fineractEntityToEntityMappingRepository.saveAndFlush(newMap);
org.apache.fineract.infrastructure.entityaccess.service.FineractEntityAccessUtil SPRING-DATA The class uses Spring Data repositories (via wrappers) to read global configurations and entity relations, and to persist new entity-to-entity mappings.
this.fineractEntityToEntityMappingRepository.save(newMap);
org.apache.fineract.infrastructure.event.business.service SPRING-DATA The class uses a Spring Data repository to query configuration settings for external events. It checks if specific event types are enabled for external broadcasting.
eventConfigurationRepository.findExternalEventConfigurationByTypeWithNotFoundDetection(eventType).isEnabled()
org.apache.fineract.infrastructure.event.external.jobs.PurgeExternalEventsTasklet SPRING-DATA The class uses a Spring Data repository (ExternalEventRepository) to perform bulk deletion of records based on status and date criteria.
repository.deleteOlderEventsWithSentStatus(ExternalEventStatus.SENT, dateForPurgeCriteria);
org.apache.fineract.infrastructure.event.external.jobs.SendAsynchronousEventsTasklet SPRING-DATA The class uses `ExternalEventRepository` to interact with the database. It reads events with a specific status and updates them after processing.
repository.findByStatusOrderById(ExternalEventStatus.TO_BE_SENT, batchSize)
org.apache.fineract.infrastructure.event.external.jobs.SendAsynchronousEventsTaskletTest SPRING-DATA The code under test interacts with a Spring Data repository (ExternalEventRepository) to fetch pending events and update their status. The test mocks this interaction.
when(repository.findByStatusOrderById(Mockito.any(), Mockito.any())).thenReturn(events);
verify(repository).markEventsSent(Mockito.eq(events.stream().map(ExternalEventView::getId).toList()), Mockito.any());
org.apache.fineract.infrastructure.event.external.repository SPRING-DATA The interface extends JpaRepository to provide standard CRUD operations and defines custom JPQL queries for specific business requirements. It interacts with the 'ExternalEvent' table.
@Query("UPDATE ExternalEvent e SET e.status = ... WHERE e.id IN :ids")
void markEventsSent(@Param("ids") List<Long> ids, ...);
org.apache.fineract.infrastructure.event.external.repository.CustomExternalEventConfigurationRepository SPRING-DATA This interface represents a Data Access Object (DAO) or Repository component, likely part of a Spring Data JPA setup. It defines a read operation to fetch configuration data from the database.
ExternalEventConfiguration findExternalEventConfigurationByTypeWithNotFoundDetection(String externalEventType);
org.apache.fineract.infrastructure.event.external.repository.ExternalEventConfigurationRepository SPRING-DATA The file is a Spring Data JPA repository interface. It provides database access for the ExternalEventConfiguration entity by extending JpaRepository, which automatically provides CRUD operations.
public interface ExternalEventConfigurationRepository
        extends JpaRepository<ExternalEventConfiguration, String>, CustomExternalEventConfigurationRepository {}
org.apache.fineract.infrastructure.event.external.repository.domain SPRING-DATA This interface functions as a Spring Data JPA Projection (Closed Projection). It allows the application to retrieve a read-only view of the 'ExternalEvent' entity (or underlying table) containing only the fields defined by the getter methods. This mechanism optimizes database performance by fetching only necessary columns rather than the entire entity graph.
public interface ExternalEventView {
    Long getId();
    String getType();
    // ... other getters map to columns
}
org.apache.fineract.infrastructure.event.external.service SPRING-DATA The class interacts with the database through the ExternalEventConfigurationRepository, which is likely a Spring Data JPA repository interface. It performs a read operation to fetch all records of the ExternalEventConfiguration entity.
List<ExternalEventConfiguration> eventConfigurations = repository.findAll();
org.apache.fineract.infrastructure.event.external.service SPRING-DATA The class uses a Spring Data repository interface (`ExternalEventConfigurationRepository`) to perform CRUD operations on `ExternalEventConfiguration` entities.
final ExternalEventConfiguration configuration = repository
        .findExternalEventConfigurationByTypeWithNotFoundDetection(eventType);
// ... modification logic ...
this.repository.saveAll(modifiedConfigurations);
org.apache.fineract.infrastructure.event.external.service.serialization.serializer.loan SPRING-DATA The class uses `LoanTransactionRepository` to retrieve data related to unpaid charges for a specific loan during the serialization process.
List<UnpaidChargeData> unpaidChargeDataList = loanTransactionRepository.fetchTotalUnpaidChargesForLoan(event.get().getLoan());
org.apache.fineract.infrastructure.gcm.domain SPRING-DATA The class interacts with the database through a Spring Data repository interface (DeviceRegistrationRepository). It performs standard CRUD operations and custom lookups without writing explicit SQL.
this.repository.findById(deviceRegistrationId)
        .orElseThrow(() -> new DeviceRegistrationNotFoundException(deviceRegistrationId));
org.apache.fineract.infrastructure.gcm.domain SPRING-DATA The code uses Spring Data JPA repositories to interact with the database. It extends JpaRepository to inherit standard CRUD operations and defines a custom JPQL query to filter data.
@Query(FIND_DEVICE_REGISTRATION_BY_CLIENT)
DeviceRegistration findDeviceRegistrationByClientId(@Param("clientId") Long clientId);
org.apache.fineract.infrastructure.gcm.service SPRING-DATA The class uses repository wrappers (likely wrapping Spring Data JPA repositories) to perform CRUD operations on DeviceRegistration and Client entities. It relies on JPA annotations on the domain objects for mapping.
this.deviceRegistrationRepository.save(deviceRegistration);
org.apache.fineract.infrastructure.gcm.service SPRING-DATA The service uses Spring Data repositories to interact with the database. It reads device registration information via `DeviceRegistrationRepositoryWrapper` (which likely wraps a repository) and persists the status of SMS messages using `SmsMessageRepository`.
smsMessageRepository.saveAll(smsList);
org.apache.fineract.infrastructure.hooks.domain SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends `JpaRepository` to provide standard data access methods and defines custom JPQL queries for specific business requirements.
@Query("select hook from Hook hook inner join hook.events event where event.entityName = :entityName...")
org.apache.fineract.infrastructure.hooks.domain SPRING-DATA The code uses Spring Data JPA repositories to interact with the database. It extends JpaRepository to provide standard data access capabilities and defines custom JPQL queries via annotations.
@Query("select template from HookTemplate template where template.name = :name")
HookTemplate findOne(@Param("name") String name);
org.apache.fineract.infrastructure.hooks.domain SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository to provide standard data access for the HookConfiguration entity and defines a custom JPQL query.
@Query("select config.fieldValue from HookConfiguration config where config.hook.id = :hookId and config.fieldName = :fieldName")
org.apache.fineract.infrastructure.hooks.processor.MessageGatewayHookProcessor SPRING-DATA The class uses Spring Data repositories (and wrappers) to interact with the database. It reads templates and client information and writes new SMS message records.
SmsMessage smsMessage = SmsMessage.pendingSms(null, null, client, null, smsText, client.mobileNo(), null, false);
this.smsMessageRepository.save(smsMessage);
org.apache.fineract.infrastructure.hooks.processor.TwilioHookProcessor SPRING-DATA The class interacts with the database to retrieve and store hook configurations (specifically API keys) and to look up client information (mobile numbers) for template processing.
String apiKey = this.hookConfigurationRepository.findOneByHookIdAndFieldName(hook.getId(), apiKeyName);
...
this.hookConfigurationRepository.save(apiKeyEntry);
...
final Client client = this.clientRepositoryWrapper.findOneWithNotFoundDetection(clientId);
org.apache.fineract.infrastructure.hooks.service.HookWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses Spring Data JPA repositories (HookRepository, HookTemplateRepository, TemplateRepository) to perform CRUD operations on Hook entities and related data. It relies on the underlying JPA implementation (likely Hibernate) for object-relational mapping.
this.hookRepository.saveAndFlush(hook);
org.apache.fineract.infrastructure.jobs.domain SPRING-DATA The file uses Spring Data JPA to interact with the database. By extending JpaRepository, it automatically gains methods for saving, deleting, and finding JobParameter entities. It also defines a custom JPQL query to filter results.
@Query("select jobParameter from JobParameter jobParameter where jobParameter.jobId=:jobId")
List<JobParameter> findJobParametersByJobId(@Param("jobId") Long jobId);
org.apache.fineract.infrastructure.jobs.domain SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository to provide standard data access methods and defines a custom JPQL query for specific business logic.
@Query("select max(sjrh.version) from ScheduledJobRunHistory sjrh where sjrh.scheduledJobDetail.jobKey = :jobKey")
org.apache.fineract.infrastructure.jobs.domain.CustomJobParameterRepository SPRING-DATA This interface represents a Data Access Object (DAO) or Repository pattern, likely used within a Spring Data context (common in the Fineract project structure). It defines methods for CRUD operations (Create and Read) on the CustomJobParameter entity.
Long save(Set<JobParameterDTO> customJobParameters);
org.apache.fineract.infrastructure.jobs.domain.ScheduledJobDetailRepository SPRING-DATA The file is a Spring Data JPA repository interface that manages database interactions for the ScheduledJobDetail entity. It uses JPQL annotations for custom queries and standard JPA locking annotations for concurrency control.
@Query("select jobDetail from ScheduledJobDetail jobDetail where jobDetail.jobKey = :jobKey")
ScheduledJobDetail findByJobKey(@Param("jobKey") String jobKey);
org.apache.fineract.infrastructure.jobs.domain.SchedulerDetailRepository SPRING-DATA The code defines a Spring Data JPA repository interface. This mechanism automatically generates the implementation for database access, mapping the 'SchedulerDetail' Java entity to a relational database table. It supports standard CRUD operations and dynamic queries via Specifications.
public interface SchedulerDetailRepository extends JpaRepository<SchedulerDetail, Long>, JpaSpecificationExecutor<SchedulerDetail> {}
org.apache.fineract.infrastructure.jobs.filter.LoanCOBFilterHelper SPRING-DATA The class uses Spring Data JPA repositories to resolve loan identifiers from external IDs or reschedule request IDs, and to retrieve GLIM account details. It also indirectly queries loan business dates via a service.
return loanRepository.findIdByExternalId(new ExternalId(externalId));
org.apache.fineract.infrastructure.jobs.service SPRING-DATA The service interacts with the database via a Spring Data repository to query job execution states, count stuck jobs, and update job statuses.
Long stuckJobCount = jobExecutionRepository.getStuckJobCountByJobName(jobName);
org.apache.fineract.infrastructure.jobs.service SPRING-DATA The class uses a Spring Data repository interface to fetch job parameters stored in the database associated with a specific job ID.
List<org.apache.fineract.infrastructure.jobs.domain.JobParameter> jobParameterList = jobParameterRepository
        .findJobParametersByJobId(scheduledJobDetail.getId());
org.apache.fineract.infrastructure.jobs.service.SchedularWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It performs CRUD operations and utilizes specific query methods defined in the repository interfaces.
this.scheduledJobDetailsRepository.save(scheduledJobDetails);
org.apache.fineract.infrastructure.jobs.service.SchedulerJobListener SPRING-DATA The class interacts with the database indirectly through injected service components. It uses `AppUserRepositoryWrapper` to read system user details and `SchedularWritePlatformService` to read job details and write job execution history.
this.schedularService.saveOrUpdate(scheduledJobDetails, runHistory);
org.apache.fineract.infrastructure.jobs.service.executealldirtyjobs SPRING-DATA The class uses a Spring Data repository interface to query for scheduled job details.
List<ScheduledJobDetail> jobDetails = scheduledJobDetailsRepository.findAllMismatchedJobs(true);
org.apache.fineract.infrastructure.jobs.service.increasedateby1day.IncreaseDateBy1DayServiceImpl SPRING-DATA The class interacts with the database primarily through the `BusinessDateRepository` to read existing date configurations. It also delegates write operations to `BusinessDateWritePlatformService`, which implies further database interaction for updating records.
Optional<BusinessDate> businessDateEntity = businessDateRepository.findByType(businessDateType);
org.apache.fineract.infrastructure.jobs.service.jobparameterprovider SPRING-DATA The class uses a Spring Data repository (`CustomJobParameterRepository`) to persist job parameter data into the database. This allows the application to store dynamic parameters associated with a specific batch job execution instance.
Long customJobParameterId = customJobParameterRepository.save(getJobParameterDTOListWithCorrectBusinessDate(jobParameterDTOSet));
org.apache.fineract.infrastructure.reportmailingjob.domain SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database by extending JpaRepository, which provides standard CRUD operations, and JpaSpecificationExecutor for dynamic queries. It maps the ReportMailingJob entity to a database table.
public interface ReportMailingJobRepository extends JpaRepository<ReportMailingJob, Long>, JpaSpecificationExecutor<ReportMailingJob> { ... }
org.apache.fineract.infrastructure.reportmailingjob.domain SPRING-DATA The class interacts with the database through a Spring Data repository interface (ReportMailingJobRepository). It performs read operations to fetch entities by primary key.
this.reportMailingJobRepository.findById(id)
org.apache.fineract.infrastructure.reportmailingjob.domain.ReportMailingJobConfigurationRepository SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository to inherit standard CRUD operations and JpaSpecificationExecutor for dynamic queries.
public interface ReportMailingJobConfigurationRepository
        extends JpaRepository<ReportMailingJobConfiguration, Integer>...
org.apache.fineract.infrastructure.reportmailingjob.domain.ReportMailingJobRunHistoryRepository SPRING-DATA The file uses Spring Data JPA to manage database interactions for the ReportMailingJobRunHistory entity. It inherits standard CRUD capabilities and specification execution logic without requiring manual SQL implementation.
public interface ReportMailingJobRunHistoryRepository
        extends JpaRepository<ReportMailingJobRunHistory, Long>, JpaSpecificationExecutor<ReportMailingJobRunHistory> {

}
org.apache.fineract.infrastructure.reportmailingjob.handler SPRING-DATA The class manages database transactions via the Spring @Transactional annotation. While it does not execute SQL directly, it defines the transaction boundary for the 'createReportMailingJob' operation, ensuring that the database writes performed by the injected service are committed or rolled back as a single unit.
@Override
@Transactional
public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
    return this.reportMailingJobWritePlatformService.createReportMailingJob(jsonCommand);
}
org.apache.fineract.infrastructure.reportmailingjob.service SPRING-DATA The class uses Spring Data JPA repositories (ReportMailingJobRepository and ReportRepositoryWrapper) to perform CRUD operations on ReportMailingJob and Report entities. It uses @Transactional to ensure atomicity.
this.reportMailingJobRepository.saveAndFlush(reportMailingJob);
org.apache.fineract.infrastructure.security.command SPRING-DATA The class manages database transactions via the Spring '@Transactional' annotation while delegating the actual data persistence logic to the 'TwoFactorConfigurationService'.
@Transactional
public CommandProcessingResult processCommand(final JsonCommand command) {
    // ...
    final Map<String, Object> changes = configurationService.update(command);
    // ...
}
org.apache.fineract.infrastructure.security.command.InvalidateTFAccessTokenCommandHandler SPRING-DATA The class delegates data persistence operations to `TwoFactorService`, which manages the `TFAccessToken` entity. The method is annotated with `@Transactional`, indicating it participates in a database transaction managed by Spring.
final TFAccessToken accessToken = twoFactorService.invalidateAccessToken(user, command);
org.apache.fineract.infrastructure.security.domain SPRING-DATA The interface extends JpaRepository, leveraging Spring Data JPA to manage database interactions for the TFAccessToken entity. It provides abstraction over the underlying SQL queries.
public interface TFAccessTokenRepository extends JpaRepository<TFAccessToken, Long> {
    TFAccessToken findByUserAndToken(AppUser user, String token);
}
org.apache.fineract.infrastructure.security.domain SPRING-DATA The interface extends JpaRepository, utilizing Spring Data JPA to manage persistence for the TwoFactorConfiguration entity.
TwoFactorConfiguration config = repository.findByName("otp_provider");
org.apache.fineract.infrastructure.security.domain.PlatformUserRepository SPRING-DATA The interface functions as a Spring Data repository, leveraging method name derivation to perform database queries without writing explicit SQL.
PlatformUser findByUsernameAndDeletedAndEnabled(String username, boolean deleted, boolean enabled);
org.apache.fineract.infrastructure.security.service SPRING-DATA The class uses a Spring Data JPA repository (PlatformUserRepository) to query the database for user information.
this.platformUserRepository.findByUsernameAndDeletedAndEnabled(username, deleted, enabled);
org.apache.fineract.infrastructure.security.service SPRING-DATA The class uses a Spring Data JPA repository (`TwoFactorConfigurationRepository`) to access and modify `TwoFactorConfiguration` entities stored in the database.
List<TwoFactorConfiguration> configurationList = configurationRepository.findAll();
org.apache.fineract.infrastructure.security.service.TwoFactorServiceImpl SPRING-DATA The service uses Spring Data repositories to interact with the database. It persists OTP requests, access tokens, and SMS messages using injected repository interfaces.
this.smsMessageRepository.save(smsMessage);
org.apache.fineract.infrastructure.sms.domain SPRING-DATA The class uses Spring Data repositories and custom repository wrappers to fetch related entities (Group, Client, Staff, SmsCampaign) and the SmsMessage itself from the database. It performs read operations to resolve foreign keys and validate existence.
smsCampaign = this.smsCampaignRepository.findById(campaignId).orElseThrow(() -> new SmsCampaignNotFound(campaignId));
org.apache.fineract.infrastructure.sms.domain SPRING-DATA The file uses Spring Data JPA repositories to interact with the database. It extends `JpaRepository` to provide standard data access operations for the `SmsMessage` entity.
public interface SmsMessageRepository extends JpaRepository<SmsMessage, Long> {
    Page<SmsMessage> findByStatusType(Integer status, Pageable pageable);
}
org.apache.fineract.infrastructure.sms.handler SPRING-DATA The class defines a transactional boundary using Spring's `@Transactional` annotation. While it does not execute SQL or call a repository directly, it orchestrates a database write operation (delete) by delegating to the `SmsWritePlatformService` within a transaction context.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.delete(command.entityId());
}
org.apache.fineract.infrastructure.sms.scheduler.SmsMessageScheduledJobServiceImpl SPRING-DATA The class uses a Spring Data repository (`SmsMessageRepository`) to persist the state of SMS messages. It performs batch updates to message statuses before sending them to external systems.
this.smsMessageRepository.saveAll(toSaveMessages);
this.smsMessageRepository.flush();
org.apache.fineract.infrastructure.sms.service SPRING-DATA The class uses a Spring Data JPA repository (SmsMessageRepository) to perform CRUD operations on the SmsMessage entity. It relies on standard JPA annotations and Spring's exception translation for database interactions.
this.repository.saveAndFlush(message);
org.apache.fineract.infrastructure.survey.domain SPRING-DATA The file uses Spring Data JPA to interact with the database. By extending JpaRepository, it gains standard CRUD methods, and it defines a custom JPQL query for specific filtering requirements.
@Query("select liklihood FROM Likelihood liklihood WHERE liklihood.ppiName =:ppiName AND liklihood.id <>:id")
org.apache.fineract.infrastructure.survey.service SPRING-DATA The class uses a Spring Data JPA repository (LikelihoodRepository) to perform CRUD operations on Likelihood entities.
final Likelihood likelihood = this.repository.findById(likelihoodId).orElse(null);
this.repository.save(likelihood);
org.apache.fineract.interoperation.domain.InteropIdentifierRepository SPRING-DATA The interface extends JpaRepository to provide database interaction for the InteropIdentifier entity using Spring Data JPA.
public interface InteropIdentifierRepository extends JpaRepository<InteropIdentifier, Long> ...
org.apache.fineract.interoperation.service.InteropServiceImpl SPRING-DATA The class primarily uses Spring Data JPA repositories for CRUD operations on entities like SavingsAccount, InteropIdentifier, and Loan. It also uses Spring's JdbcTemplate for executing a complex SQL join query to retrieve KYC data efficiently.
final String sql = "select " + rm.schema() + " where c.id = ?";
final InteropKycData accountKyc = this.jdbcTemplate.queryForObject(sql, rm, new Object[] { clientId });
org.apache.fineract.investor.accounting.journalentry.service SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It performs read operations to fetch GL closures, account mappings, and financial activity accounts. It performs write operations to save new `JournalEntry` records.
return this.glJournalEntryRepository.saveAndFlush(journalEntry);
org.apache.fineract.investor.cob.loan.LoanAccountOwnerTransferBusinessStep SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It performs complex queries using JPA Specifications (CriteriaBuilder) to find transfers based on multiple conditions (loanId, settlementDate, status, effectiveDate) and performs CRUD operations (save, delete) on transfer and mapping entities.
externalAssetOwnerTransferRepository.findAll(
    (root, query, criteriaBuilder) -> criteriaBuilder.and(criteriaBuilder.equal(root.get("loanId"), loanId),
            criteriaBuilder.equal(root.get("settlementDate"), settlementDate),
            root.get("status").in(List.of(ExternalTransferStatus.PENDING, ExternalTransferStatus.BUYBACK)),
            criteriaBuilder.greaterThanOrEqualTo(root.get("effectiveDateTo"), FUTURE_DATE_9999_12_31)),
    Sort.by(Sort.Direction.ASC, "id"));
org.apache.fineract.investor.domain SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database by extending JpaRepository, which provides standard CRUD capabilities, and defines custom JPQL queries for specific lookups.
@Query("SELECT mapping FROM ExternalAssetOwnerTransferLoanMapping mapping WHERE mapping.ownerTransfer.externalLoanId =:externalLoanId")
org.apache.fineract.investor.domain SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository to provide standard data access methods and defines a custom JPQL query for specific retrieval logic.
@Query("SELECT mapping FROM ExternalAssetOwnerJournalEntryMapping mapping WHERE mapping.owner.externalId = :ownerExternalId")
org.apache.fineract.investor.domain SPRING-DATA The code uses Spring Data JPA to manage database interactions. By extending JpaRepository, it automatically gains methods for standard database operations without explicit implementation.
public interface ExternalAssetOwnerRepository extends JpaRepository<ExternalAssetOwner, Long> ...
org.apache.fineract.investor.domain SPRING-DATA The file uses Spring Data JPA to manage database interactions for the `ExternalAssetOwnerTransferJournalEntryMapping` entity. It inherits standard database operations and defines a custom JPQL query.
@Query("SELECT mapping FROM ExternalAssetOwnerTransferJournalEntryMapping mapping WHERE mapping.ownerTransfer.id =:transferId")
org.apache.fineract.investor.domain.ExternalAssetOwnerTransferRepository SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database using JPA entities and JPQL queries defined via annotations.
@Query("select e from ExternalAssetOwnerTransfer e where e.loanId = :loanId and e.id = (select max(ex.id) from ExternalAssetOwnerTransfer ex where ex.loanId = :loanId)")
Optional<ExternalAssetOwnerTransfer> findLatestByLoanId(@Param("loanId") Long loanId);
org.apache.fineract.investor.domain.search SPRING-DATA This interface is part of the Spring Data repository layer. It defines a custom search method that interacts with the database to retrieve investor data. The return type 'Page' indicates it leverages Spring Data's pagination support.
Page<SearchedExternalAssetOwner> searchInvestorData(PagedRequest<ExternalAssetOwnerSearchRequest> searchRequest);
org.apache.fineract.investor.enricher SPRING-DATA The class interacts with the database via a Spring Data repository to retrieve ownership transfer information associated with a loan.
externalAssetOwnerTransferRepository.findActiveOwnerByLoanId(data.getLoanId())
org.apache.fineract.investor.enricher.LoanAccountDataV1Enricher SPRING-DATA The class uses a Spring Data repository interface to query the database for active external asset owner transfers associated with a specific loan ID.
externalAssetOwnerTransferRepository.findActiveByLoanId(data.getId()).ifPresent(transfer -> { ... })
org.apache.fineract.investor.enricher.LoanTransactionDataV1Enricher SPRING-DATA The class uses a Spring Data repository interface to query the database for asset owner transfer information.
externalAssetOwnerTransferRepository.findActiveOwnerByLoanId(data.getLoanId())
org.apache.fineract.investor.service SPRING-DATA The class uses Spring Data JPA repositories to persist mapping entities that link external asset owner transfers and owners to the generated accounting journal entries. It also uses a repository wrapper to retrieve financial activity account configurations.
externalAssetOwnerJournalEntryMappingRepository.saveAndFlush(mapping);
org.apache.fineract.investor.service SPRING-DATA The class uses multiple Spring Data JPA repositories to interact with the database. It performs read-only operations to fetch transfer data, loan mappings, and journal entry mappings based on various criteria like Loan ID, External ID, or Transfer ID.
result = externalAssetOwnerTransferRepository.findAllByLoanId(loanId, pageRequest);
org.apache.fineract.investor.service SPRING-DATA The service interacts with the database using Spring Data JPA repositories to read loan transaction details, check for asset owner mappings, and persist new journal entry mappings.
externalAssetOwnerTransferLoanMappingRepository.findByLoanId(loanId).ifPresent(transferLoanMapping -> {
    ExternalAssetOwnerJournalEntryMapping mapping = new ExternalAssetOwnerJournalEntryMapping();
    mapping.setJournalEntry(journalEntry);
    mapping.setOwner(transferLoanMapping.getOwnerTransfer().getOwner());
    externalAssetOwnerJournalEntryMappingRepository.saveAndFlush(mapping);
});
org.apache.fineract.investor.service SPRING-DATA The class uses Spring Data JPA repositories to manage `ExternalAssetOwnerTransfer` entities. It utilizes JPA Criteria API (Specifications) within the repository calls to perform complex filtering based on loan IDs, statuses, and dates.
externalAssetOwnerTransferRepository.findAll((root, query, criteriaBuilder) -> criteriaBuilder.and(criteriaBuilder.equal(root.get("loanId"), loanId), root.get("status").in(List.of(PENDING, BUYBACK))...
org.apache.fineract.investor.service.ExternalAssetOwnersWriteServiceImpl SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It performs CRUD operations and executes custom queries (via specifications or method naming conventions) to manage the lifecycle of asset transfers and validate loan states.
externalAssetOwnerTransferRepository.saveAndFlush(externalAssetOwnerTransfer);
org.apache.fineract.investor.service.search SPRING-DATA The service interacts with the database through a Spring Data repository interface named `SearchingExternalAssetOwnerRepository`. It retrieves paged results based on search criteria.
return externalAssetOwnerRepository.searchInvestorData(searchRequest).map(externalAssetOwnerSearchDataMapper::map);
org.apache.fineract.mix.domain SPRING-DATA This interface is a Spring Data JPA repository that abstracts database interactions for the `MixTaxonomyMapping` entity. It delegates low-level JDBC and SQL operations to the Hibernate/JPA provider configured in the Spring context.
public interface MixTaxonomyMappingRepository
        extends JpaRepository<MixTaxonomyMapping, Long>, JpaSpecificationExecutor<MixTaxonomyMapping> {

}
org.apache.fineract.mix.service SPRING-DATA The class uses a Spring Data repository (MixTaxonomyMappingRepository) to perform CRUD operations on the MixTaxonomyMapping entity.
this.mappingRepository.saveAndFlush(mapping);
org.apache.fineract.notification.domain.NotificationMapperRepository SPRING-DATA This interface is a Spring Data JPA repository that provides database access for the NotificationMapper entity. It inherits standard CRUD operations from JpaRepository.
public interface NotificationMapperRepository extends JpaRepository<NotificationMapper, Long> {}
org.apache.fineract.notification.domain.NotificationRepository SPRING-DATA The interface extends JpaRepository, allowing Spring Data to generate the implementation for database access at runtime. It manages the persistence of the Notification entity.
public interface NotificationRepository extends JpaRepository<Notification, Long> {}
org.apache.fineract.notification.service SPRING-DATA The class interacts with the database using Spring Data repositories and wrapper services. It performs read operations to fetch `AppUser` entities and write operations to persist `Notification` and `NotificationMapper` entities. The entire operation is wrapped in a Spring `@Transactional` annotation.
AppUser appUser = this.appUserRepository.findById(userId).orElseThrow();
NotificationMapper notificationMapper = new NotificationMapper().setNotification(...).setUserId(appUser)...;
this.notificationMapperWritePlatformService.create(notificationMapper);
org.apache.fineract.notification.service SPRING-DATA The class uses the AppUserRepository, which is likely a Spring Data JPA repository, to query user information from the database. It retrieves users by ID and by office ID to determine notification recipients.
Collection<AppUser> users = appUserRepository.findByOfficeId(officeId);
org.apache.fineract.notification.service SPRING-DATA The class interacts with the database via the NotificationRepository, which is a Spring Data repository interface. It performs standard CRUD operations (Read and Delete) on the Notification entity.
this.notificationRepository.findById(id).orElse(null);
org.apache.fineract.notification.service SPRING-DATA The class interacts with the database through the NotificationMapperRepository, which is a Spring Data repository interface. It performs write operations to persist NotificationMapper entities using JPA mechanisms.
this.notificationMapperRepository.saveAndFlush(notificationMapper);
org.apache.fineract.notification.service.NotificationGeneratorWritePlatformServiceImpl SPRING-DATA The class interacts with the database through a Spring Data repository interface (`NotificationRepository`). It uses the `saveAndFlush` method to persist entities immediately.
this.notificationRepository.saveAndFlush(notification);
org.apache.fineract.notification.service.NotificationMapperReadRepositoryWrapperImpl SPRING-DATA The class uses a Spring Data repository (NotificationMapperRepository) to interact with the database. This abstracts the underlying SQL or JPA queries.
this.notificationMapperRepository.findById(id).orElse(null);
org.apache.fineract.organisation.holiday.domain SPRING-DATA The file is a Spring Data JPA repository that manages persistence for the Holiday entity. It uses JPQL annotations to define specific read operations involving joins and filtering.
@Query("select holiday from Holiday holiday... where holiday.processed = false")
org.apache.fineract.organisation.holiday.domain.HolidayRepositoryWrapper SPRING-DATA The class wraps a Spring Data repository (HolidayRepository) to perform CRUD operations and custom queries on Holiday entities. It abstracts the direct repository calls.
return this.repository.findById(id).orElseThrow(() -> new HolidayNotFoundException(id));
org.apache.fineract.organisation.holiday.service.HolidayWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class interacts with the database through repository wrapper classes (`HolidayRepositoryWrapper`, `OfficeRepositoryWrapper`, `WorkingDaysRepositoryWrapper`), which are injected via Spring's dependency injection. These wrappers are assumed to encapsulate Spring Data JPA repositories. All public methods that modify data are annotated with `@Transactional`, delegating transaction management to the Spring framework. The class performs create, read, and update operations using methods like `saveAndFlush` and `findOneWithNotFoundDetection` on the repository wrappers.
this.holidayRepository.saveAndFlush(holiday);
org.apache.fineract.organisation.monetary.domain SPRING-DATA The class interacts with the database through the ApplicationCurrencyRepository interface, which is likely a Spring Data JPA repository. It performs read operations to fetch currency details by their unique code.
this.repository.findOneByCode(currencyCode)
org.apache.fineract.organisation.monetary.domain.ApplicationCurrencyRepository SPRING-DATA The file uses Spring Data JPA to interact with the database. By extending JpaRepository, it gains automatic implementations for standard database operations, and by defining method signatures like findOneByCode, it triggers automatic query generation.
public interface ApplicationCurrencyRepository
        extends JpaRepository<ApplicationCurrency, Long>...
org.apache.fineract.organisation.monetary.service SPRING-DATA The class uses Spring Data repositories (OrganisationCurrencyRepository and ApplicationCurrencyRepositoryWrapper) to perform CRUD operations. It reads application currencies, checks existing organization currencies, and performs a bulk delete followed by a save operation to update the allowed currencies list.
this.organisationCurrencyRepository.deleteAll();
this.organisationCurrencyRepository.saveAll(allowedCurrencies);
org.apache.fineract.organisation.office.domain SPRING-DATA The class interacts with the database through a Spring Data repository interface (OrganisationCurrencyRepository). It performs read operations to fetch currency configuration data based on a unique code.
final OrganisationCurrency organisationCurrency = this.repository.findOneByCode(currencyCode);
org.apache.fineract.organisation.office.domain SPRING-DATA The class wraps a Spring Data repository (OfficeRepository) to perform CRUD operations on the Office entity. It uses standard JPA/Spring Data patterns for retrieval and persistence.
this.repository.findById(id).orElseThrow(() -> new OfficeNotFoundException(id));
org.apache.fineract.organisation.office.domain.OfficeRepository SPRING-DATA The interface uses Spring Data JPA to manage database interactions for the Office entity. It inherits standard CRUD operations and specification execution capabilities, allowing for database abstraction.
public interface OfficeRepository extends JpaRepository<Office, Long> ... {
    Optional<Office> findByExternalId(ExternalId externalId);
}
org.apache.fineract.organisation.office.domain.OfficeTransactionRepository SPRING-DATA Database integration is achieved through Spring Data JPA. The interface extends JpaRepository to provide standard CRUD operations and JpaSpecificationExecutor for dynamic queries on the OfficeTransaction entity.
public interface OfficeTransactionRepository extends JpaRepository<OfficeTransaction, Long>, JpaSpecificationExecutor<OfficeTransaction> {}
org.apache.fineract.organisation.office.domain.OrganisationCurrencyRepository SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository to provide standard CRUD operations and JpaSpecificationExecutor for complex criteria-based queries.
public interface OrganisationCurrencyRepository
        extends JpaRepository<OrganisationCurrency, Long>, JpaSpecificationExecutor<OrganisationCurrency> {
    OrganisationCurrency findOneByCode(String currencyCode);
}
org.apache.fineract.organisation.office.service SPRING-DATA The class uses Spring Data JPA repositories (wrapped in custom wrappers for some entities) to perform CRUD operations on Office and OfficeTransaction entities. It handles transaction management using Spring's @Transactional annotation.
this.officeRepositoryWrapper.saveAndFlush(office);
org.apache.fineract.organisation.provisioning.domain.ProvisioningCategoryRepository SPRING-DATA The interface uses Spring Data JPA to provide automatic CRUD and specification-based query capabilities for the ProvisioningCategory entity.
public interface ProvisioningCategoryRepository
        extends JpaRepository<ProvisioningCategory, Long>, JpaSpecificationExecutor<ProvisioningCategory> {

}
org.apache.fineract.organisation.provisioning.domain.ProvisioningCriteriaDefinitionRepository SPRING-DATA Database integration is achieved through Spring Data JPA, which automatically implements the repository interface to interact with the database tables mapped to the ProvisioningCriteriaDefinition entity.
public interface ProvisioningCriteriaDefinitionRepository
        extends JpaRepository<ProvisioningCriteriaDefinition, Long>, JpaSpecificationExecutor<ProvisioningCriteriaDefinition> {

}
org.apache.fineract.organisation.provisioning.domain.ProvisioningCriteriaRepository SPRING-DATA Database integration is achieved via Spring Data JPA. The interface inherits methods for interacting with the database table mapped to the ProvisioningCriteria entity.
public interface ProvisioningCriteriaRepository
        extends JpaRepository<ProvisioningCriteria, Long>, JpaSpecificationExecutor<ProvisioningCriteria> {

}
org.apache.fineract.organisation.provisioning.service SPRING-DATA The class uses Spring Data repositories to fetch entities required to assemble the ProvisioningCriteria object. It performs read-only operations to retrieve LoanProducts, ProvisioningCategories, and GLAccounts by ID or all at once.
loanProducts.add(loanProductRepository.findById(productId).orElse(null));
org.apache.fineract.organisation.provisioning.service.ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class primarily uses a Spring Data JPA repository (ProvisioningCategoryRepository) for CRUD operations on the ProvisioningCategory entity. Additionally, it uses Spring's JdbcTemplate to execute a raw SQL query for checking referential integrity constraints that might not be easily handled by JPA alone (checking usage in loan products).
this.provisioningCategoryRepository.saveAndFlush(provisioningCategory);
org.apache.fineract.organisation.provisioning.service.ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses Spring Data JPA repositories (ProvisioningCriteriaRepository and GLAccountRepository) to interact with the database. It performs CRUD operations on ProvisioningCriteria and GLAccount entities, relying on the underlying Hibernate implementation managed by Spring.
this.provisioningCriteriaRepository.saveAndFlush(provisioningCriteria);
org.apache.fineract.organisation.staff.domain SPRING-DATA The class uses a Spring Data repository (StaffRepository) to perform CRUD operations on the Staff entity.
return this.repository.findById(id).orElseThrow(() -> new StaffNotFoundException(id));
org.apache.fineract.organisation.staff.domain.StaffRepository SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository<Staff, Long>, which provides standard CRUD operations, and JpaSpecificationExecutor<Staff> for dynamic queries. It also defines a custom JPQL query.
@Query(FIND_BY_OFFICE_QUERY)
Staff findByOffice(@Param("id") Long id, @Param("officeId") Long officeId);
org.apache.fineract.organisation.staff.service SPRING-DATA The class uses Spring Data JPA repositories (StaffRepository) to perform CRUD operations on Staff entities. It also uses OfficeRepositoryWrapper to retrieve Office entities. Transactions are managed via the @Transactional annotation.
this.staffRepository.saveAndFlush(staff);
org.apache.fineract.organisation.teller.domain SPRING-DATA The interface extends JpaRepository and JpaSpecificationExecutor, indicating it is a Spring Data repository used to interact with the database for the Teller entity.
public interface TellerRepository extends JpaRepository<Teller, Long>, JpaSpecificationExecutor<Teller> { ... }
org.apache.fineract.organisation.teller.domain SPRING-DATA The interface uses Spring Data JPA to manage persistence for the Cashier entity, inheriting standard CRUD and specification execution capabilities.
public interface CashierRepository extends JpaRepository<Cashier, Long>, JpaSpecificationExecutor<Cashier> {
org.apache.fineract.organisation.teller.domain.CashierRepositoryWrapper SPRING-DATA The class interacts with the database via a Spring Data repository interface (`CashierRepository`). It performs read operations to fetch entities by primary key.
return this.repository.findById(id).orElseThrow(() -> new TellerNotFoundException(id));
org.apache.fineract.organisation.teller.domain.CashierTransactionRepository SPRING-DATA This interface is a Spring Data JPA repository that manages persistence for the CashierTransaction entity. It automatically provides methods for saving, deleting, and finding entities, as well as executing complex criteria-based queries.
public interface CashierTransactionRepository
        extends JpaRepository<CashierTransaction, Long>, JpaSpecificationExecutor<CashierTransaction> {
    // no added behavior
}
org.apache.fineract.organisation.teller.domain.TellerRepositoryWrapper SPRING-DATA The class interacts with the database via a Spring Data repository interface (TellerRepository). It performs standard CRUD operations and utilizes JPA/Hibernate features like lazy loading initialization.
final Teller teller = this.repository.findById(id).orElseThrow(() -> new TellerNotFoundException(id));
org.apache.fineract.organisation.teller.domain.TellerTransactionRepository SPRING-DATA The file is a Spring Data JPA repository interface. It provides database abstraction for the TellerTransaction entity, enabling CRUD operations and dynamic specification queries without explicit implementation code.
public interface TellerTransactionRepository extends JpaRepository<TellerTransaction, Long>, JpaSpecificationExecutor<TellerTransaction> {
    // no added behavior
}
org.apache.fineract.organisation.teller.service.TellerWritePlatformServiceJpaImpl SPRING-DATA The class uses Spring Data JPA repositories (wrapped in Fineract wrappers) to interact with the database. It performs CRUD operations on Teller and Cashier entities and creates JournalEntry records for accounting.
this.tellerRepositoryWrapper.saveAndFlush(teller);
org.apache.fineract.organisation.workingdays.domain SPRING-DATA The class wraps a Spring Data repository interface (WorkingDaysRepository) to perform CRUD operations on the WorkingDays entity.
final List<WorkingDays> workingDaysList = this.repository.findAll();
org.apache.fineract.organisation.workingdays.domain.WorkingDaysRepository SPRING-DATA The interface uses Spring Data JPA to manage database interactions for the WorkingDays entity. By extending JpaRepository, it automatically provides implementations for standard CRUD operations, and JpaSpecificationExecutor allows for complex, dynamic queries.
public interface WorkingDaysRepository extends JpaRepository<WorkingDays, Long>, JpaSpecificationExecutor<WorkingDays> {}
org.apache.fineract.organisation.workingdays.service SPRING-DATA The class uses a repository wrapper (likely wrapping a Spring Data JPA repository) to retrieve and save the WorkingDays entity.
final WorkingDays workingDays = this.daysRepositoryWrapper.findOne();
// ... updates ...
this.daysRepositoryWrapper.saveAndFlush(workingDays);
org.apache.fineract.portfolio.account.domain SPRING-DATA The class uses repository wrappers to fetch Client and Office entities by ID. It also relies on other assemblers (SavingsAccountAssembler, LoanAssembler) which implicitly fetch account data from the database.
final Long fromClientId = this.fromApiJsonHelper.extractLongNamed(fromClientIdParamName, element);
final Client fromClient = this.clientRepository.findOneWithNotFoundDetection(fromClientId);
org.apache.fineract.portfolio.account.domain SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database by extending JpaRepository, which provides standard data access methods, and by defining custom JPQL queries via the @Query annotation to perform complex filtering based on entity relationships.
@Query(FIND_BY_LOAN_AND_STATUS_QUERY)
Collection<AccountTransferStandingInstruction> findByLoanAccountAndStatus(@Param("loan") Loan loan, @Param("status") Integer status);
org.apache.fineract.portfolio.account.domain SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database by extending JpaRepository, which provides standard CRUD operations, and defines custom JPQL queries for specific lookups.
@Query("select aa from AccountAssociations aa where aa.loanAccount.id= :loanId and aa.associationType = :associationType")
org.apache.fineract.portfolio.account.domain SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database by extending `JpaRepository` and defining methods annotated with `@Query` containing JPQL to select data from the `AccountTransferTransaction` entity.
@Query("select att from AccountTransferTransaction att where att.accountTransferDetails.fromLoanAccount.id= :accountNumber and att.reversed=false")
org.apache.fineract.portfolio.account.domain.AccountTransferDetailRepository SPRING-DATA Database integration is achieved through Spring Data JPA, which automatically implements the repository interface to interact with the underlying database using Hibernate/JPA.
public interface AccountTransferDetailRepository
        extends JpaRepository<AccountTransferDetails, Long>, JpaSpecificationExecutor<AccountTransferDetails> {}
org.apache.fineract.portfolio.account.service SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It injects AccountTransferDetailRepository and StandingInstructionRepository to save new transfer details and retrieve/update existing standing instructions. The operations are wrapped in a Spring @Transactional annotation to ensure atomicity.
this.accountTransferDetailRepository.saveAndFlush(standingInstruction);
org.apache.fineract.portfolio.account.service.AccountTransfersWritePlatformServiceImpl SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It persists transfer details and transactions, and updates account balances via domain services that also use JPA.
this.accountTransferDetailRepository.saveAndFlush(accountTransferDetails);
org.apache.fineract.portfolio.account.starter SPRING-DATA This configuration class wires up services that interact with the database using two primary mechanisms: Spring JDBC (via JdbcTemplate) for read-only platform services, and Spring Data JPA (via Repositories) for write platform services. The read services execute SQL queries directly, while the write services use repositories for entity persistence.
public AccountAssociationsReadPlatformService accountAssociationsReadPlatformService(JdbcTemplate jdbcTemplate) {
    return new AccountAssociationsReadPlatformServiceImpl(jdbcTemplate);
}
org.apache.fineract.portfolio.address.domain.AddressRepository SPRING-DATA The interface utilizes Spring Data JPA to automatically generate database access logic. By extending JpaRepository, it gains standard CRUD capabilities, and by extending JpaSpecificationExecutor, it gains the ability to run dynamic queries based on JPA Criteria.
public interface AddressRepository extends JpaRepository<Address, Long>, JpaSpecificationExecutor<Address> {}
org.apache.fineract.portfolio.address.domain.FieldConfigurationRepository SPRING-DATA This interface is a Spring Data JPA repository that manages database interactions for the FieldConfiguration entity. It automatically maps Java methods to database SQL operations via Hibernate/JPA.
public interface FieldConfigurationRepository
        extends JpaRepository<FieldConfiguration, Long>, JpaSpecificationExecutor<FieldConfiguration> {

}
org.apache.fineract.portfolio.address.service.AddressWritePlatformServiceImpl SPRING-DATA The class uses Spring Data JPA repositories to perform CRUD operations on Address and ClientAddress entities. It injects these repositories and uses methods like save(), saveAndFlush(), and getReferenceById() to persist data.
addressRepository.save(address);
clientAddressRepository.saveAndFlush(clientAddress);
org.apache.fineract.portfolio.calendar.domain SPRING-DATA The class interacts with the database through a Spring Data repository interface named CalendarRepository. It performs standard CRUD operations.
this.repository.findById(calendarId).orElseThrow(() -> new CalendarNotFoundException(calendarId));
org.apache.fineract.portfolio.calendar.domain SPRING-DATA The interface acts as a Spring Data JPA repository, automatically generating the implementation for database interactions involving the CalendarHistory entity.
public interface CalendarHistoryRepository extends JpaRepository<CalendarHistory, Long>, JpaSpecificationExecutor<CalendarHistory> {

}
org.apache.fineract.portfolio.calendar.domain SPRING-DATA The class wraps a Spring Data repository interface to perform CRUD operations on the CalendarInstance entity.
this.repository.findById(CalendarInstanceId).orElseThrow(() -> new CalendarInstanceNotFoundException(CalendarInstanceId));
org.apache.fineract.portfolio.calendar.domain SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database by extending JpaRepository, allowing for standard CRUD operations and custom JPQL queries defined via annotations.
@Query("select ci from CalendarInstance ci where ci.entityId in (select loan.id from Loan loan where loan.client.id = :clientId...)")
org.apache.fineract.portfolio.calendar.domain.CalendarRepository SPRING-DATA The interface uses Spring Data JPA to manage database interactions for the Calendar entity. By extending JpaRepository, it inherits methods for saving, deleting, and finding entities. By extending JpaSpecificationExecutor, it supports complex, dynamic queries based on the JPA Criteria API.
public interface CalendarRepository extends JpaRepository<Calendar, Long>, JpaSpecificationExecutor<Calendar> {}
org.apache.fineract.portfolio.calendar.service SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It injects repositories for Calendar, CalendarHistory, CalendarInstance, and related entities (Group, Loan, Client) to perform CRUD operations and fetch relationships.
this.calendarRepository.saveAndFlush(newCalendar);
org.apache.fineract.portfolio.calendar.starter SPRING-DATA This configuration class wires up database access components. It injects a JdbcTemplate for read services (JDBC mechanism) and multiple Spring Data JPA Repositories (CalendarRepository, CalendarHistoryRepository, etc.) for write services. While this file does not execute queries directly, it constructs the services that perform READ and WRITE operations against the database.
@Bean
public CalendarReadPlatformService calendarReadPlatformService(JdbcTemplate jdbcTemplate, ...) {
    return new CalendarReadPlatformServiceImpl(jdbcTemplate, ...);
}
org.apache.fineract.portfolio.charge.domain SPRING-DATA The class interacts with the database through the injected ChargeRepository, which is a Spring Data repository interface. It performs read operations to fetch Charge entities by their primary key.
final Charge chargeDefinition = this.repository.findById(id).orElseThrow(() -> new ChargeNotFoundException(id));
org.apache.fineract.portfolio.charge.domain.ChargeRepository SPRING-DATA This interface is a Spring Data JPA repository that manages persistence for the Charge entity. It automatically provides implementations for standard database operations.
public interface ChargeRepository extends JpaRepository<Charge, Long>, JpaSpecificationExecutor<Charge> {
    // no added behaviour
}
org.apache.fineract.portfolio.charge.service.ChargeWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class primarily uses Spring Data JPA repositories (ChargeRepository, LoanProductRepository, etc.) for managing the lifecycle of Charge entities. However, it also heavily relies on Spring's JdbcTemplate to execute raw SQL queries for complex validation logic, specifically to check for the existence of related records in tables like 'm_loan_charge' and 'm_savings_account_charge' which might not be efficiently loaded via JPA relationships during validation.
final String sql = "select (CASE WHEN exists (select 1 from m_loan_charge lc where lc.charge_id = ? and lc.is_active = true) THEN 'true' ELSE 'false' END)";
final String isLoansUsingCharge = this.jdbcTemplate.queryForObject(sql, String.class, new Object[] { chargeId });
org.apache.fineract.portfolio.client.api SPRING-DATA The code uses a wrapper around a Spring Data repository (ClientRepositoryWrapper) to fetch Client entities from the database by their ID.
final Client client = clientRepositoryWrapper.findOneWithNotFoundDetection(clientId);
org.apache.fineract.portfolio.client.domain SPRING-DATA The interface extends JpaRepository, indicating it is a Spring Data JPA repository used for database persistence. It manages the ClientTransaction entity.
public interface ClientTransactionRepository extends JpaRepository<ClientTransaction, Long>, JpaSpecificationExecutor<ClientTransaction>
org.apache.fineract.portfolio.client.domain SPRING-DATA The class interacts with the database through the ClientChargeRepository, which is a Spring Data repository interface. It performs CRUD operations on the ClientCharge entity.
final ClientCharge clientCharge = this.repository.findById(id).orElseThrow(() -> new ChargeNotFoundException(id));
org.apache.fineract.portfolio.client.domain SPRING-DATA The file is a Spring Data JPA repository interface that manages database interactions for the Client entity. It uses JPQL annotations to define custom queries involving joins and conditional logic.
@Query("SELECT c.id FROM Client c WHERE c.externalId = :externalId")
org.apache.fineract.portfolio.client.domain SPRING-DATA The class interacts with the database through a Spring Data repository interface (ClientAddressRepository). It performs read operations to fetch ClientAddress entities based on various filtering criteria.
final ClientAddress clientAddress = this.clientAddressRepository.findByClientIdAndAddressTypeAndIsActive(clientId, addressType, isActive);
org.apache.fineract.portfolio.client.domain SPRING-DATA Database integration is achieved through Spring Data JPA, which maps the ClientNonPerson entity to a database table and provides repository methods.
@Query("select clientNonPerson from ClientNonPerson clientNonPerson where clientNonPerson.client.id = :clientId")
org.apache.fineract.portfolio.client.domain.AccountNumberGenerator SPRING-DATA The class uses Spring Data repositories to check for account number conflicts when random number generation is enabled. It queries the database to ensure a generated random number is not already assigned to an existing entity.
Client client = this.clientRepository.getClientByAccountNumber(accountNumber);
org.apache.fineract.portfolio.client.domain.ClientAddressRepository SPRING-DATA The file uses Spring Data JPA repositories to interact with the database. It extends JpaRepository to provide standard data access methods and defines custom JPQL queries for specific lookups.
@Query("SELECT clientAddress FROM ClientAddress clientAddress WHERE clientAddress.client.id = :clientId...")
org.apache.fineract.portfolio.client.domain.ClientChargeRepository SPRING-DATA This interface is a Spring Data JPA repository that manages persistence for the ClientCharge entity. It inherits standard database operations from JpaRepository.
public interface ClientChargeRepository extends JpaRepository<ClientCharge, Long>, JpaSpecificationExecutor<ClientCharge> {

}
org.apache.fineract.portfolio.client.domain.ClientFamilyMembersRepository SPRING-DATA Database integration is achieved through Spring Data JPA, which automatically generates SQL queries based on the interface definition and inherited methods. It manages the lifecycle of the ClientFamilyMembers entity.
public interface ClientFamilyMembersRepository
        extends JpaRepository<ClientFamilyMembers, Long>, JpaSpecificationExecutor<ClientFamilyMembers> {

}
org.apache.fineract.portfolio.client.domain.ClientIdentifierRepository SPRING-DATA The interface is a Spring Data JPA repository, which automatically generates SQL queries and handles database connections based on the method names and inherited interfaces.
public interface ClientIdentifierRepository extends JpaRepository<ClientIdentifier, Long>, JpaSpecificationExecutor<ClientIdentifier> {
    // no behaviour
}
org.apache.fineract.portfolio.client.domain.ClientNonPersonRepositoryWrapper SPRING-DATA The class interacts with the database via a Spring Data repository interface (ClientNonPersonRepository). It performs standard CRUD operations (findById, findByClientId, save, delete) on the 'ClientNonPerson' entity.
return this.repository.findById(id).orElseThrow(() -> new ClientNonPersonNotFoundException(id));
org.apache.fineract.portfolio.client.domain.ClientRepositoryWrapper SPRING-DATA The class wraps a Spring Data repository (ClientRepository) to perform database operations. It uses standard JPA/Spring Data patterns for finding, saving, and deleting entities, while adding a layer of exception handling.
final Client client = this.repository.findById(clientId).orElseThrow(() -> new ClientNotFoundException(clientId));
org.apache.fineract.portfolio.client.domain.ClientTransactionRepositoryWrapper SPRING-DATA The class interacts with the database through a Spring Data repository interface (ClientTransactionRepository). It performs standard CRUD operations (save, delete, findById) on the ClientTransaction entity.
final ClientTransaction clientTransaction = this.repository.findById(transactionId)
        .orElseThrow(() -> new ClientTransactionNotFoundException(clientId, transactionId));
org.apache.fineract.portfolio.client.domain.ClientTransferDetailsRepository SPRING-DATA Database integration is achieved through Spring Data JPA, which abstracts the underlying JDBC/Hibernate interactions. The repository interface allows the application to interact with the 'ClientTransferDetails' table (or mapped entity) using object-oriented methods.
public interface ClientTransferDetailsRepository
        extends JpaRepository<ClientTransferDetails, Long>, JpaSpecificationExecutor<ClientTransferDetails> {

}
org.apache.fineract.portfolio.client.domain.ClientTransferDetailsRepositoryWrapper SPRING-DATA The class interacts with the database through a Spring Data repository interface (ClientTransferDetailsRepository). It delegates persistence operations (specifically 'save') to this repository, which abstracts the underlying SQL or JPA operations.
this.repository.save(clientTransferDetails);
org.apache.fineract.portfolio.client.domain.search.SearchingClientRepository SPRING-DATA This interface is part of the Data Access Layer using Spring Data conventions. It defines a custom search operation that will interact with the underlying database to retrieve client records.
Page<SearchedClient> searchByText(String searchText, Pageable pageable, String officeHierarchy);
org.apache.fineract.portfolio.client.service SPRING-DATA This interface defines the transactional boundaries for database write operations regarding client charges. While it does not contain the actual data access code, the use of @Transactional annotations mandates that the implementing class will interact with the database within a transaction context to ensure data integrity during add, update, delete, and state-change operations.
@Transactional
CommandProcessingResult addCharge(Long clientId, JsonCommand command);
org.apache.fineract.portfolio.client.service SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It injects `ClientIdentifierRepository` (likely extending JpaRepository) to perform CRUD operations on `ClientIdentifier` entities. It also uses `ClientRepositoryWrapper` and `CodeValueRepositoryWrapper` for related data lookups.
this.clientIdentifierRepository.saveAndFlush(clientIdentifier);
org.apache.fineract.portfolio.client.service SPRING-DATA The class interacts with the database using repository wrappers (likely wrapping Spring Data JPA repositories) to fetch and persist domain entities. It performs read operations to retrieve Client and ClientTransaction entities, and write operations to update the transaction status and associated charges.
this.clientTransactionRepository.saveAndFlush(clientTransaction);
org.apache.fineract.portfolio.client.service.ClientChargeWritePlatformServiceImpl SPRING-DATA The class uses Spring Data JPA repositories (wrapped in Fineract specific wrappers) to perform CRUD operations on Client, Charge, and ClientCharge entities. It handles transaction management implicitly through the service layer and explicitly calls saveAndFlush for immediate persistence.
this.clientChargeRepository.saveAndFlush(clientCharge);
org.apache.fineract.portfolio.client.service.ClientFamilyMembersWritePlatformServiceImpl SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It injects ClientFamilyMembersRepository and CodeValueRepository to perform CRUD operations. It uses methods like saveAndFlush, getReferenceById, and delete.
this.clientFamilyRepository.saveAndFlush(clientFamilyMembers);
org.apache.fineract.portfolio.client.service.search SPRING-DATA The service uses a Spring Data repository (ClientRepository) to perform database searches. It relies on the repository's abstraction to execute a query that filters clients by text and office hierarchy.
clientRepository.searchByText(searchText, pageable, hierarchy).map(clientSearchDataMapper::map);
org.apache.fineract.portfolio.collateral.domain.LoanCollateralRepository SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository to provide standard data access operations and JpaSpecificationExecutor for criteria-based querying.
LoanCollateral findByLoanIdAndId(Long loanId, Long id);
org.apache.fineract.portfolio.collateral.service SPRING-DATA The class interacts with the database to retrieve existing LoanCollateral entities by ID and CodeValue entities by ID. It uses Spring Data repositories (or wrappers around them) to perform these read operations.
final LoanCollateral loanCollateralItem = this.loanCollateralRepository.findById(id)
        .orElseThrow(() -> new CollateralNotFoundException(id));
org.apache.fineract.portfolio.collateral.service.CollateralWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class interacts with the database using Spring Data JPA repositories (LoanCollateralRepository) and wrapper classes (LoanRepositoryWrapper, CodeValueRepositoryWrapper). It performs transactional CRUD operations on LoanCollateral entities and retrieves related Loan and CodeValue entities.
this.collateralRepository.saveAndFlush(collateral);
org.apache.fineract.portfolio.collateralmanagement.domain SPRING-DATA The file uses Spring Data JPA repositories to abstract database interactions. It extends JpaRepository to provide standard data access methods and defines custom JPQL queries for specific lookups.
@Query("select clientCollateral from ClientCollateralManagement clientCollateral where clientCollateral.client=:client")
org.apache.fineract.portfolio.collateralmanagement.domain SPRING-DATA The class interacts with the database via Spring Data JPA repositories (ClientCollateralManagementRepository, ClientRepositoryWrapper, LoanProductRepository). It performs standard CRUD operations and relational lookups.
this.clientCollateralManagementRepository.findByClientId(client);
org.apache.fineract.portfolio.collateralmanagement.domain.CollateralManagementDomainRepository SPRING-DATA The file defines a Spring Data JPA repository interface, which abstracts the interaction with the underlying relational database for the CollateralManagementDomain entity.
public interface CollateralManagementDomainRepository
        extends JpaRepository<CollateralManagementDomain, Long>, JpaSpecificationExecutor<CollateralManagementDomain> {

}
org.apache.fineract.portfolio.collateralmanagement.domain.CollateralManagementRepositoryWrapper SPRING-DATA The class uses a Spring Data repository (inferred from method names like saveAndFlush, findById, deleteById) to interact with the database. It performs CRUD operations on the CollateralManagementDomain entity.
return this.collateralManagementDomainRepository.saveAndFlush(collateralData);
org.apache.fineract.portfolio.collateralmanagement.service SPRING-DATA The class uses Spring Data repositories and wrapper services to interact with the database. It fetches 'ClientCollateralManagement' entities to check availability and 'LoanCollateralManagement' entities to check existing state. It modifies the state of these managed entities (updating quantities), which are then persisted by the JPA context.
LoanCollateralManagement loanCollateralManagement = this.loanCollateralRepository.findById(id)
        .orElseThrow(() -> new LoanCollateralManagementNotFoundException(id));
org.apache.fineract.portfolio.collateralmanagement.service SPRING-DATA The class interacts with the database indirectly through the `CollateralManagementRepositoryWrapper`. This wrapper likely encapsulates a Spring Data JPA repository or similar persistence mechanism to fetch `CollateralManagementDomain` entities.
final CollateralManagementDomain collateralManagementDomain = this.collateralManagementRepositoryWrapper.getCollateral(collateralId);
org.apache.fineract.portfolio.collateralmanagement.service SPRING-DATA The class interacts with the database using Spring Data JPA repositories. It performs read operations to fetch entities, update operations to modify collateral quantities, and delete operations to remove loan collateral records.
final LoanCollateralManagement loanCollateralManagement = this.loanCollateralManagementRepository.findById(id).orElseThrow();
org.apache.fineract.portfolio.collateralmanagement.service SPRING-DATA The class interacts with the database primarily through Spring Data repositories (LoanTransactionRepository) and a wrapper around another repository (ClientCollateralManagementRepositoryWrapper). It performs read operations to fetch entities by ID or by client association.
LoanTransaction loanTransaction = this.loanTransactionRepository.findById(transactionId)
        .orElseThrow(() -> new LoanTransactionNotFoundException(transactionId));
org.apache.fineract.portfolio.collateralmanagement.service SPRING-DATA The class uses Repository Wrappers (likely wrapping Spring Data JPA repositories) to interact with the database. It performs CRUD operations on ClientCollateralManagement entities and fetches related Client and CollateralManagementDomain entities.
this.clientCollateralManagementRepositoryWrapper.saveAndFlush(clientCollateralManagement);
org.apache.fineract.portfolio.collateralmanagement.service.CollateralManagementWritePlatformServiceImpl SPRING-DATA The class uses a Repository Wrapper pattern (likely wrapping Spring Data JPA repositories) to interact with the database. It performs CRUD operations on CollateralManagementDomain and ApplicationCurrency entities. Transactions are managed via Spring's @Transactional annotation.
final CollateralManagementDomain collateral = CollateralManagementDomain.createNew(jsonCommand, applicationCurrency);
this.collateralManagementRepositoryWrapper.create(collateral);
org.apache.fineract.portfolio.collateralmanagement.service.LoanCollateralManagementReadPlatformServiceImpl SPRING-DATA The class uses Spring Data JPA repositories to perform read-only operations on the database. It accesses `Loan` and `LoanCollateralManagement` entities via `findById` and `findByLoan` methods.
Loan loan = this.loanRepository.findById(loanId).orElseThrow(() -> new LoanNotFoundException(loanId));
org.apache.fineract.portfolio.delinquency.domain SPRING-DATA Database integration is achieved through Spring Data JPA. The interface extends JpaRepository, which acts as a proxy to the underlying EntityManager, handling database interactions for the DelinquencyBucketMappings entity.
public interface DelinquencyBucketMappingsRepository extends JpaRepository<DelinquencyBucketMappings, Long> ...
org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucketRepository SPRING-DATA Database integration is achieved through Spring Data JPA repositories. The interface inherits standard CRUD operations (save, findById, delete, etc.) from JpaRepository and dynamic query capabilities from JpaSpecificationExecutor.
public interface DelinquencyBucketRepository extends JpaRepository<DelinquencyBucket, Long> { ... }
org.apache.fineract.portfolio.delinquency.domain.DelinquencyRangeRepository SPRING-DATA The interface uses Spring Data JPA to interact with the database. It maps the DelinquencyRange entity to a database table and provides methods for data manipulation and retrieval without writing explicit SQL.
public interface DelinquencyRangeRepository extends JpaRepository<DelinquencyRange, Long> {
    Optional<DelinquencyRange> findByClassification(String classification);
}
org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyTagHistoryRepository SPRING-DATA The interface extends JpaRepository, indicating it uses Spring Data JPA for database interactions. It maps the LoanDelinquencyTagHistory entity to a database table and provides methods to perform CRUD operations and custom queries without writing explicit SQL.
public interface LoanDelinquencyTagHistoryRepository
        extends JpaRepository<LoanDelinquencyTagHistory, Long>, JpaSpecificationExecutor<LoanDelinquencyTagHistory> {
    LoanDelinquencyTagHistory findFirstByLoanOrderByAddedOnDateDesc(Loan loan);
org.apache.fineract.portfolio.delinquency.service.DelinquencyReadPlatformServiceImpl SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It performs read operations on DelinquencyRange, DelinquencyBucket, LoanDelinquencyTagHistory, and Loan entities. It uses standard JPA methods like findAll, getReferenceById, and custom query methods defined in the repository interfaces (e.g., findByLoanAndLiftedOnDate).
final List<DelinquencyRange> delinquencyRangeList = repositoryRange.findAll();
org.apache.fineract.portfolio.delinquency.service.DelinquencyWritePlatformServiceImpl SPRING-DATA The class uses multiple Spring Data JPA repositories to interact with the database. It performs CRUD operations on DelinquencyRange, DelinquencyBucket, and LoanDelinquencyTagHistory entities. It also uses `saveAndFlush` for immediate persistence.
DelinquencyRange newDelinquencyRange = DelinquencyRange.instance(data.getClassification(), ...);
return repositoryRange.saveAndFlush(newDelinquencyRange);
org.apache.fineract.portfolio.delinquency.starter.DelinquencyConfiguration SPRING-DATA This configuration class wires up Spring Data repositories (e.g., DelinquencyRangeRepository, LoanRepository) into the service beans. While this specific file does not execute queries, it is the integration point that enables database access for the Delinquency module by injecting the persistence layer components.
public DelinquencyReadPlatformService delinquencyReadPlatformService(DelinquencyRangeRepository repositoryRange, ...) {
    return new DelinquencyReadPlatformServiceImpl(repositoryRange, ...);
}
org.apache.fineract.portfolio.floatingrates.domain SPRING-DATA The class interacts with the database through an injected Spring Data repository interface (FloatingRateRepository). It performs standard CRUD operations (save, findById) and custom queries defined in the repository.
return this.floatingRateRepository.findById(id).orElseThrow(() -> new FloatingRateNotFoundException(id));
org.apache.fineract.portfolio.floatingrates.domain SPRING-DATA The file uses Spring Data JPA to abstract database interactions. It extends `JpaRepository` to provide standard data access methods and defines custom queries using JPQL annotations.
@Query("select floatingRate from FloatingRate floatingRate where floatingRate.isBaseLendingRate = true...")
org.apache.fineract.portfolio.floatingrates.serialization.FloatingRateDataValidator SPRING-DATA The class uses `FloatingRateRepository` to perform read-only checks against the database during validation. It verifies if a Base Lending Rate already exists and checks for dependencies when modifying a Base Lending Rate.
FloatingRate baseLendingRate = this.floatingRateRepository.retrieveBaseLendingRate();
org.apache.fineract.portfolio.floatingrates.service.FloatingRateWritePlatformServiceImpl SPRING-DATA The class uses a repository wrapper (FloatingRateRepositoryWrapper) to interact with the database. This wrapper likely delegates to a Spring Data JPA repository for standard CRUD operations on the FloatingRate entity.
this.floatingRateRepository.saveAndFlush(newFloatingRate);
org.apache.fineract.portfolio.fund.domain SPRING-DATA The interface is a Spring Data JPA repository that manages the persistence of the Fund entity without requiring boilerplate JDBC code.
public interface FundRepository extends JpaRepository<Fund, Long>, JpaSpecificationExecutor<Fund> {
    // no added behaviour
}
org.apache.fineract.portfolio.fund.service SPRING-DATA The class uses a Spring Data JPA repository (`FundRepository`) to perform CRUD operations on the `Fund` entity. It relies on `saveAndFlush` for persistence and `findById` for retrieval.
this.fundRepository.saveAndFlush(fund);
org.apache.fineract.portfolio.group.domain SPRING-DATA The class interacts with the database via the GroupRoleRepository, which is likely a Spring Data JPA repository interface. It performs standard CRUD operations on the GroupRole entity.
public GroupRole findOneWithNotFoundDetection(final Long id) {
    return this.repository.findById(id).orElseThrow(() -> new GroupRoleNotFoundException(id));
}
org.apache.fineract.portfolio.group.domain SPRING-DATA The class wraps a Spring Data repository interface (GroupRepository) to perform database operations on Group entities. It delegates standard CRUD operations and custom queries to this repository.
public Group findOneWithNotFoundDetection(final Long id) {
    return this.repository.findById(id).orElseThrow(() -> new GroupNotFoundException(id));
}
org.apache.fineract.portfolio.group.domain SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends `JpaRepository` for standard operations and uses `@Query` for custom JPQL execution.
@Query(RETRIEVE_SUBMITTED_ON_DATE)
LocalDate retrieveGroupTypeSubmitteOndDate(@Param("groupId") Long groupId);
org.apache.fineract.portfolio.group.domain.GroupLevelRepository SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository to inherit standard CRUD operations and defines custom finders that are translated into SQL by the framework.
GroupLevel findBySuperParent(boolean superParent);
org.apache.fineract.portfolio.group.domain.GroupRoleRepository SPRING-DATA The interface extends JpaRepository, indicating it is a Spring Data repository used for database persistence of the GroupRole entity. It allows for standard CRUD operations and dynamic specification-based queries against the underlying database table mapped to the GroupRole entity.
public interface GroupRoleRepository extends JpaRepository<GroupRole, Long>, JpaSpecificationExecutor<GroupRole> {

}
org.apache.fineract.portfolio.group.handler SPRING-DATA The class manages database transactions using Spring's @Transactional annotation while delegating the actual persistence logic to a service component.
@Transactional
@Override
public CommandProcessingResult processCommand(final JsonCommand command) {
    return this.writePlatformService.associateClientsToGroup(command.entityId(), command);
}
org.apache.fineract.portfolio.group.serialization.GroupingTypesDataValidator SPRING-DATA The validator uses the GroupRepositoryWrapper to retrieve existing data from the database to perform logical validation against current state (specifically dates).
LocalDate submittedOnDate = this.groupRepositoryWrapper.retrieveSubmittedOndate(centerId);
org.apache.fineract.portfolio.group.service SPRING-DATA The class uses Spring Data JPA repositories (wrapped in custom wrapper classes) to interact with the database. It performs CRUD operations on GroupRole, Group, Client, and CodeValue entities.
final GroupRole groupRole = GroupRole.createGroupRole(group, client, role);
this.groupRoleRepository.saveAndFlush(groupRole);
org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses multiple Repository Wrappers (which wrap Spring Data JPA repositories) to perform CRUD operations on entities like Group, Client, Office, and Staff. It uses `saveAndFlush` for immediate persistence and `findOneWithNotFoundDetection` for retrieval with error handling.
this.groupRepository.saveAndFlush(newGroup);
org.apache.fineract.portfolio.interestratechart.domain SPRING-DATA The class wraps a Spring Data repository interface (InterestRateChartSlabRepository) to perform standard CRUD operations on the InterestRateChartSlab entity.
return this.repository.findById(chartSlabId).orElseThrow(() -> new InterestRateChartSlabNotFoundException(chartSlabId));
org.apache.fineract.portfolio.interestratechart.domain SPRING-DATA The class wraps a Spring Data repository interface to perform CRUD operations on the InterestRateChart entity.
return this.repository.findById(intrestRateChartId).orElseThrow(() -> new InterestRateChartNotFoundException(intrestRateChartId));
org.apache.fineract.portfolio.interestratechart.domain.InterestRateChartRepository SPRING-DATA Database integration is achieved through Spring Data JPA, which automatically generates SQL queries based on the method signatures and inherited interfaces. The repository manages the persistence lifecycle of the InterestRateChart entity.
public interface InterestRateChartRepository extends JpaRepository<InterestRateChart, Long>, JpaSpecificationExecutor<InterestRateChart> {

}
org.apache.fineract.portfolio.interestratechart.domain.InterestRateChartSlabRepository SPRING-DATA Database integration is achieved through Spring Data JPA, which automatically implements the repository interface to interact with the database using Hibernate/JPA under the hood.
public interface InterestRateChartSlabRepository
        extends JpaRepository<InterestRateChartSlab, Long>, JpaSpecificationExecutor<InterestRateChartSlab> {

}
org.apache.fineract.portfolio.interestratechart.service SPRING-DATA The class uses a Spring Data JPA repository (InterestRateChartSlabRepository) to perform CRUD operations on the InterestRateChartSlab entity. Transactions are managed using the @Transactional annotation on methods.
this.chartSlabRepository.saveAndFlush(interestRateChartSlab);
org.apache.fineract.portfolio.interestratechart.service SPRING-DATA The class uses a repository wrapper (likely wrapping a Spring Data JPA repository) to fetch existing InterestRateChart entities from the database by ID.
final InterestRateChart interestRateChart = this.interestRateChartRepositoryWrapper
        .findOneWithNotFoundDetection(interestRateChartId);
org.apache.fineract.portfolio.interestratechart.service SPRING-DATA The class interacts with the database through `InterestRateChartRepositoryWrapper`, which wraps a Spring Data JPA repository. It performs CRUD operations on `InterestRateChart` entities within transactional boundaries managed by Spring.
this.interestRateChartRepository.saveAndFlush(interestRateChart);
org.apache.fineract.portfolio.interestratechart.service.InterestRateChartSlabAssembler SPRING-DATA The class uses a repository wrapper to fetch parent 'InterestRateChart' entities from the database. This is necessary to associate new slabs with existing charts and to validate that the parent chart exists.
final InterestRateChart chart = this.interestRateChartRepositoryWrapper.findOneWithNotFoundDetection(chartId);
org.apache.fineract.portfolio.loanaccount.api.InternalLoanInformationApiResource SPRING-DATA The class interacts with the database using Spring Data repositories (or wrappers around them). It retrieves Loan and LoanTransaction entities by ID and queries for loan IDs based on status.
final Loan loan = loanRepositoryWrapper.findOneWithNotFoundDetection(loanId);
org.apache.fineract.portfolio.loanaccount.domain SPRING-DATA The interface extends JpaRepository, enabling automatic ORM mapping and SQL generation for the GroupLoanIndividualMonitoringAccount entity.
public interface GLIMAccountInfoRepository
        extends JpaRepository<GroupLoanIndividualMonitoringAccount, Long>...
org.apache.fineract.portfolio.loanaccount.domain SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database using JPA entities and JPQL queries. It extends JpaRepository to inherit standard CRUD operations and defines custom queries using the @Query annotation.
@Query("SELECT lt.id FROM LoanTransaction lt WHERE lt.externalId = :externalId")
Long findIdByExternalId(@Param("externalId") ExternalId externalId);
org.apache.fineract.portfolio.loanaccount.domain SPRING-DATA The file uses Spring Data JPA repositories to interact with the database. It extends JpaRepository to provide standard CRUD operations and defines a custom JPQL query to filter records.
@Query("select lp from LoanChargePaidBy lp where lp.loanCharge=:loanCharge and lp.installmentNumber=:installmentNumber")
org.apache.fineract.portfolio.loanaccount.domain SPRING-DATA The interface extends JpaRepository to provide data access for the LoanCharge entity. It uses Spring Data JPA to automatically generate SQL for standard operations and executes a custom JPQL query for ID lookup.
@Query(FIND_ID_BY_EXTERNAL_ID)
Long findIdByExternalId(@Param("externalId") ExternalId externalId);
org.apache.fineract.portfolio.loanaccount.domain SPRING-DATA The code uses Spring Data JPA repositories to interact with the database. It extends JpaRepository to provide standard data access methods and defines a custom JPQL query for specific retrieval logic.
@Query("select loanCollaterals from LoanCollateralManagement loanCollaterals where loanCollaterals.loan=:loan")
List<LoanCollateralManagement> findByLoan(@Param("loan") Loan loan);
org.apache.fineract.portfolio.loanaccount.domain SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository to provide standard data access methods and defines custom JPQL queries for specific reporting needs.
@Query("""
            SELECT new org.apache.fineract.portfolio.loanaccount.data.LoanScheduleDelinquencyData(
                lrs.loan.id,
                min(lrs.dueDate),
                0L,
                lrs.loan
            ) FROM LoanRepaymentScheduleInstallment lrs...""")
org.apache.fineract.portfolio.loanaccount.domain SPRING-DATA The class wraps a Spring Data JPA repository (LoanRepository) to perform CRUD operations and custom queries on the Loan entity. It handles transaction management and lazy loading of related entities.
final Loan loan = this.repository.findById(id).orElseThrow(() -> new LoanNotFoundException(id));
org.apache.fineract.portfolio.loanaccount.domain.LoanDisbursementDetailsRepository SPRING-DATA The file is a Spring Data JPA repository interface. It automatically provides database interaction capabilities for the LoanDisbursementDetails entity without explicit implementation code.
public interface LoanDisbursementDetailsRepository
        extends JpaRepository<LoanDisbursementDetails, Long>, JpaSpecificationExecutor<LoanDisbursementDetails> {}
org.apache.fineract.portfolio.loanaccount.domain.LoanRepository SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database primarily through JPQL queries defined in @Query annotations and standard Spring Data method naming conventions. It manages the 'Loan' entity and related data.
@Query("select loan from Loan loan where loan.client.id = :clientId")
List<Loan> findLoanByClientId(@Param("clientId") Long clientId);
org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRelationRepository SPRING-DATA The interface extends JpaRepository, enabling Spring Data to generate the implementation for database access at runtime. It maps the LoanTransactionRelation entity to a database table.
public interface LoanTransactionRelationRepository extends JpaRepository<LoanTransactionRelation, Long> ...
org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMappingRepository SPRING-DATA The interface uses Spring Data JPA to interact with the database. It maps the 'LoanTransactionToRepaymentScheduleMapping' Java entity to a corresponding database table and provides object-relational mapping capabilities.
LoanTransactionToRepaymentScheduleMapping findByLoanTransaction(LoanTransaction loanTransaction);
org.apache.fineract.portfolio.loanaccount.guarantor.domain SPRING-DATA The code uses Spring Data JPA to interact with the database. It extends JpaRepository to inherit standard data access methods and defines a custom JPQL query for specific retrieval logic.
@Query("select ft from GuarantorFundingTransaction ft where ft.loanTransaction.id in :loanTransactions")
org.apache.fineract.portfolio.loanaccount.guarantor.domain SPRING-DATA The interface extends JpaRepository to provide automated database interactions via Hibernate/JPA.
public interface GuarantorRepository extends JpaRepository<Guarantor, Long>, JpaSpecificationExecutor<Guarantor> { ... }
org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorFundingRepository SPRING-DATA The interface utilizes Spring Data JPA to automatically generate the implementation for database access based on the GuarantorFundingDetails entity. It provides standard CRUD operations and specification execution capabilities without requiring explicit SQL or JPQL in this file.
public interface GuarantorFundingRepository
        extends JpaRepository<GuarantorFundingDetails, Long>, JpaSpecificationExecutor<GuarantorFundingDetails> {}
org.apache.fineract.portfolio.loanaccount.guarantor.service.GuarantorDomainServiceImpl SPRING-DATA The service uses Spring Data JPA repositories to interact with the database. It retrieves and saves entities related to guarantors, loans, and savings account transactions.
final List<Guarantor> existGuarantorList = this.guarantorRepository.findByLoan(loan);
// ...
this.depositAccountOnHoldTransactionRepository.saveAndFlush(onHoldTransaction);
org.apache.fineract.portfolio.loanaccount.jobs.applyholidaystoloans SPRING-DATA The class uses repository wrappers (likely abstractions over Spring Data JPA repositories) to fetch and persist domain entities. It retrieves `Holiday` entities to find unprocessed ones and `Loan` entities based on office IDs and status. It performs write operations to update the loan repayment schedules and the holiday processing status.
final List<Holiday> holidays = holidayRepository.findUnprocessed();
// ...
loans.addAll(loanRepositoryWrapper.findByClientOfficeIdsAndLoanStatus(officeIds, loanStatuses));
// ...
loanRepositoryWrapper.save(loans);
org.apache.fineract.portfolio.loanaccount.jobs.setloandelinquencytags SPRING-DATA The class injects Spring Data repositories (LoanRepaymentScheduleInstallmentRepository and LoanTransactionRepository) and passes them to the tasklet. While this configuration class does not execute queries directly, it wires the components that perform database operations.
private LoanRepaymentScheduleInstallmentRepository loanRepaymentScheduleInstallmentRepository;
private LoanTransactionRepository loanTransactionRepository;

@Bean
public SetLoanDelinquencyTagsTasklet setLoanDelinquencyTagsTasklet() {
    return new SetLoanDelinquencyTagsTasklet(delinquencyWritePlatformService, loanRepaymentScheduleInstallmentRepository,
            loanTransactionRepository);
}
org.apache.fineract.portfolio.loanaccount.jobs.setloandelinquencytags SPRING-DATA The class uses Spring Data repositories to query the database for loans with specific transaction types and overdue schedules. It also delegates to a service that likely performs database updates (writes) to apply tags.
loanScheduleDelinquencyData = this.loanTransactionRepository
        .fetchLoanTransactionsByTypeAndLessOrEqualDate(LoanTransactionType.CHARGEBACK.getValue(), businessDate);
org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanRepaymentScheduleHistoryRepository SPRING-DATA The interface uses Spring Data JPA to manage database interactions for LoanRepaymentScheduleHistory entities. It abstracts the underlying SQL or JPQL generation.
public interface LoanRepaymentScheduleHistoryRepository
        extends JpaRepository<LoanRepaymentScheduleHistory, Long>, JpaSpecificationExecutor<LoanRepaymentScheduleHistory> {
}
org.apache.fineract.portfolio.loanaccount.loanschedule.service.LoanScheduleAssembler SPRING-DATA The class uses multiple Spring Data repositories to fetch domain entities required for assembling the loan schedule. It retrieves LoanProduct, Calendar, Holiday, Client, Group, and WorkingDays entities by their IDs or other attributes.
final LoanProduct loanProduct = this.loanProductRepository.findById(loanProductId)
        .orElseThrow(() -> new LoanProductNotFoundException(loanProductId));
org.apache.fineract.portfolio.loanaccount.loanschedule.service.LoanScheduleCalculationPlatformServiceImpl SPRING-DATA The class uses Spring Data repositories to access loan product information and JPA entities (via LoanAssembler) to access Loan data. It performs read operations to fetch configuration and state required for schedule calculation.
final LoanProduct loanProduct = this.loanProductRepository.findById(productId)
        .orElseThrow(() -> new LoanProductNotFoundException(productId));
org.apache.fineract.portfolio.loanaccount.loanschedule.service.LoanScheduleHistoryWritePlatformServiceImpl SPRING-DATA The class uses a Spring Data repository (`LoanRepaymentScheduleHistoryRepository`) to perform batch insert operations (`saveAll`) for the history records. It also uses a read service (`LoanScheduleHistoryReadPlatformService`) which likely executes SQL/JDBC queries to fetch version numbers and old audit dates.
this.loanRepaymentScheduleHistoryRepository.saveAll(loanRepaymentScheduleHistoryList);
org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain SPRING-DATA The file is a Spring Data JPA repository interface. It automatically generates SQL queries based on method names and annotations to interact with the underlying relational database for the `LoanRescheduleRequest` entity.
@Query("select lrr.loan.id from LoanRescheduleRequest lrr where lrr.id = :rescheduleRequestId")
org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain SPRING-DATA The class uses a Spring Data repository interface to interact with the database. It performs read operations to fetch LoanRescheduleRequest entities by their primary key.
this.loanRescheduleRequestRepository.findById(id)
        .orElseThrow(() -> new LoanRescheduleRequestNotFoundException(id));
org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanTermVariationsRepository SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository to provide standard data access methods and defines a custom JPQL query for specific retrieval logic.
@Query("select lrr from LoanTermVariations lrr where lrr.loan.id = :loanId")
org.apache.fineract.portfolio.loanaccount.rescheduleloan.handler SPRING-DATA The class manages database transactions via the Spring @Transactional annotation while delegating the actual data persistence logic to the LoanRescheduleRequestWritePlatformService.
@Transactional
@Override
public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
    return this.loanRescheduleRequestWritePlatformService.reject(jsonCommand);
}
org.apache.fineract.portfolio.loanaccount.rescheduleloan.service SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It performs CRUD operations on LoanRescheduleRequest, Loan, and LoanRepaymentScheduleHistory entities. It uses @Transactional to ensure atomicity of complex operations involving multiple tables.
this.loanRescheduleRequestRepository.saveAndFlush(loanRescheduleRequest);
org.apache.fineract.portfolio.loanaccount.rescheduleloan.service.LoanReschedulePreviewPlatformServiceImpl SPRING-DATA The class uses a repository wrapper to fetch LoanRescheduleRequest entities from the database. It relies on the underlying JPA/Spring Data infrastructure to retrieve the request and its associated Loan entity and mappings.
final LoanRescheduleRequest loanRescheduleRequest = this.loanRescheduleRequestRepository.findOneWithNotFoundDetection(requestId, true);
org.apache.fineract.portfolio.loanaccount.serialization.LoanApplicationCommandFromApiJsonHelper SPRING-DATA The class uses a repository wrapper to fetch client collateral details from the database during validation. This is used to verify that the collateral exists and to retrieve its quantity and value for business rule checks.
final ClientCollateralManagement clientCollateralManagement = this.clientCollateralManagementRepositoryWrapper.getCollateral(clientCollateralId);
org.apache.fineract.portfolio.loanaccount.serialization.LoanEventApiJsonValidator SPRING-DATA The class uses `LoanRepository` to fetch `Loan` entities by ID. This is primarily used in `validateDisbursementWithPostDatedChecks` to retrieve the loan's repayment schedule and validate that the provided post-dated checks correspond to valid installments.
final Loan loan = this.loanRepository.findById(loanId).orElseThrow(() -> new LoanNotFoundException(loanId));
org.apache.fineract.portfolio.loanaccount.service SPRING-DATA The service uses a Spring Data repository to retrieve existing loan transaction entities by their primary key ID.
LoanTransaction oldTransaction = loanTransactionRepository.findById(mapEntry.getKey())
        .orElseThrow(() -> new LoanTransactionNotFoundException(mapEntry.getKey()));
org.apache.fineract.portfolio.loanaccount.service SPRING-DATA The class uses Spring Data repositories to fetch entity definitions required for assembly. It retrieves `Charge` definitions to understand calculation rules and `LoanProduct` definitions to check configuration flags like multi-disbursement support. It also retrieves existing `LoanCharge` entities by ID for updates.
final LoanProduct loanProduct = this.loanProductRepository.findById(productId)
        .orElseThrow(() -> new LoanProductNotFoundException(productId));
final Charge chargeDefinition = this.chargeRepository.findOneWithNotFoundDetection(chargeId);
org.apache.fineract.portfolio.loanaccount.service SPRING-DATA The class uses Spring Data repositories (`GLIMAccountInfoRepository` and `LoanRepository`) to interact with the database. It performs write operations (save/update) on `GroupLoanIndividualMonitoringAccount` entities.
this.glimAccountRepository.save(glimAccountInfo);
org.apache.fineract.portfolio.loanaccount.service.LoanAssembler SPRING-DATA The class uses multiple repository wrappers and standard Spring Data repositories to fetch domain entities required to assemble a Loan. It primarily performs read operations to look up Clients, Groups, Products, Funds, and Staff.
final Loan loanAccount = this.loanRepository.findOneWithNotFoundDetection(accountId, true);
org.apache.fineract.portfolio.loanaccount.service.LoanChargeWritePlatformServiceImpl SPRING-DATA The class uses Spring Data JPA repositories (wrapped in service wrappers) to interact with the database. It performs CRUD operations on Loan, LoanCharge, and LoanTransaction entities. It uses @Transactional to ensure data consistency across multiple repository calls.
this.loanRepositoryWrapper.save(loan);
org.apache.fineract.portfolio.loanaccount.service.LoanUtilService SPRING-DATA The class interacts with the database through several injected repository wrappers (e.g., `ApplicationCurrencyRepositoryWrapper`, `CalendarInstanceRepository`, `HolidayRepository`). These are used to retrieve entity information such as currency details, calendar instances associated with loans, and holiday configurations required for schedule generation.
ApplicationCurrency applicationCurrency = this.applicationCurrencyRepository.findOneWithNotFoundDetection(currency);
org.apache.fineract.portfolio.loanproduct.domain SPRING-DATA The file is a Spring Data JPA repository interface. It provides database interaction capabilities for the LoanProduct entity without requiring boilerplate JDBC code. It supports automatic transaction management and query generation.
@Query("select loanProduct from LoanProduct loanProduct, IN(loanProduct.charges) charge where charge.id = :chargeId")
org.apache.fineract.portfolio.loanproduct.productmix.domain SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database by extending JpaRepository, which provides standard CRUD operations, and by defining custom JPQL queries via the @Query annotation to access the 'ProductMix' entity.
@Query(GET_PRODUCTMIXES_BY_PRODUCTID_SCHEMA)
List<ProductMix> findByProductId(@Param("productId") Long productId);
org.apache.fineract.portfolio.loanproduct.productmix.service.ProductMixWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses Spring Data JPA repositories (`ProductMixRepository` and `LoanProductRepository`) to interact with the database. It performs CRUD operations on `ProductMix` and `LoanProduct` entities.
this.productMixRepository.saveAll(productMixes);
org.apache.fineract.portfolio.loanproduct.service SPRING-DATA The class uses Spring Data JPA repositories (LoanProductRepository, FundRepository, etc.) to interact with the database. It performs CRUD operations on LoanProduct entities and related tables.
this.loanProductRepository.saveAndFlush(loanProduct);
org.apache.fineract.portfolio.meeting.attendance.domain.ClientAttendanceRepository SPRING-DATA The interface uses Spring Data JPA to automatically generate the implementation for database access at runtime. It maps the ClientAttendance entity to a database table.
public interface ClientAttendanceRepository extends JpaRepository<ClientAttendance, Long>, JpaSpecificationExecutor<ClientAttendance> {}
org.apache.fineract.portfolio.meeting.domain.MeetingRepository SPRING-DATA The file uses Spring Data JPA to manage database interactions. It extends JpaRepository to provide standard CRUD functionality and defines a custom finder method that is automatically translated into a database query by the framework.
Meeting findByCalendarInstanceIdAndMeetingDate(Long calendarInstanceId, LocalDate meetingDate);
org.apache.fineract.portfolio.meeting.domain.MeetingRepositoryWrapper SPRING-DATA The class wraps a Spring Data repository (MeetingRepository) to perform CRUD operations on the Meeting entity.
public Meeting findOneWithNotFoundDetection(final Long meetingId) {
    return this.repository.findById(meetingId).orElseThrow(() -> new MeetingNotFoundException(meetingId));
}
org.apache.fineract.portfolio.meeting.service.MeetingWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses Spring Data JPA repositories (wrapped in Fineract's RepositoryWrapper pattern) to perform CRUD operations on Meeting entities and read-only operations on related entities like Calendar, Client, and Group.
this.meetingRepositoryWrapper.saveAndFlush(newMeeting);
org.apache.fineract.portfolio.meeting.starter SPRING-DATA This configuration class wires up services that interact with the database using both JDBC (for reads) and Spring Data JPA Repositories (for writes). It injects the JdbcTemplate and various Repository interfaces into the service implementations.
public MeetingReadPlatformService meetingReadPlatformService(JdbcTemplate jdbcTemplate) {
    return new MeetingReadPlatformServiceImpl(jdbcTemplate);
}
org.apache.fineract.portfolio.note.domain.NoteRepository SPRING-DATA The interface extends JpaRepository and JpaSpecificationExecutor, leveraging Spring Data JPA to manage database interactions. It automatically generates SQL queries based on method names (e.g., findByClient) and provides built-in methods for standard CRUD operations.
public interface NoteRepository extends JpaRepository<Note, Long> ... {
    List<Note> findByClient(Client id);
}
org.apache.fineract.portfolio.note.service.NoteWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses multiple Spring Data JPA repositories (NoteRepository, ClientRepositoryWrapper, GroupRepository, etc.) to interact with the database. It performs CRUD operations on Note entities and read operations on parent entities (Client, Group, Loan, etc.) to establish relationships.
final Note newNote = Note.clientNoteFromJson(client, command);
this.noteRepository.saveAndFlush(newNote);
org.apache.fineract.portfolio.note.starter.NoteAutoConfiguration SPRING-DATA This configuration class wires up database access components. It injects a JdbcTemplate for the read service (indicating direct JDBC usage) and multiple Spring Data repositories (NoteRepository, GroupRepository, etc.) for the write service.
@Bean
public NoteReadPlatformService noteReadPlatformService(JdbcTemplate jdbcTemplate) {
    return new NoteReadPlatformServiceImpl(jdbcTemplate);
}
org.apache.fineract.portfolio.paymentdetail.domain SPRING-DATA Database integration is handled via Spring Data JPA. The interface inherits methods for saving, deleting, and finding PaymentDetail entities. It also inherits the ability to execute JPA Specifications, specifically typed for Loan entities.
public interface PaymentDetailRepository extends JpaRepository<PaymentDetail, Long>, JpaSpecificationExecutor<Loan> {
    // no added behaviour
}
org.apache.fineract.portfolio.paymentdetail.domain SPRING-DATA The class uses a repository wrapper (likely wrapping a Spring Data JPA repository) to fetch PaymentType entities from the database by their ID.
final PaymentType paymentType = this.repositoryWrapper.findOneWithNotFoundDetection(paymentTypeId);
org.apache.fineract.portfolio.paymentdetail.service SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It injects PaymentDetailRepository to save payment details and PaymentTypeRepositoryWrapper to read payment types.
this.paymentDetailRepository.save(paymentDetail);
org.apache.fineract.portfolio.paymenttype.api SPRING-DATA The class interacts with the database indirectly through the 'PaymentTypeRepositoryWrapper' for entity existence checks and 'PaymentTypeReadPlatformService' for data retrieval. The wrapper likely encapsulates a Spring Data JPA repository.
this.paymentTypeRepositoryWrapper.findOneWithNotFoundDetection(paymentTypeId);
org.apache.fineract.portfolio.paymenttype.domain SPRING-DATA The class uses a Spring Data JPA repository interface to interact with the database. It relies on method name query derivation (e.g., findAllByOrderByPositionAsc) to generate SQL queries.
this.repository.findAllByOrderByPositionAsc()
org.apache.fineract.portfolio.paymenttype.domain.PaymentTypeRepository SPRING-DATA The file uses Spring Data JPA to abstract database interactions. By extending JpaRepository, it gains full CRUD capabilities on the PaymentType entity. It defines specific read operations using method naming conventions that Spring translates into SQL queries.
public interface PaymentTypeRepository extends JpaRepository<PaymentType, Long>, JpaSpecificationExecutor<PaymentType> {
    List<PaymentType> findAllByOrderByPositionAsc();
}
org.apache.fineract.portfolio.paymenttype.service SPRING-DATA The class interacts with the database through a wrapper around a Spring Data repository (implied by the naming convention and usage). It performs read-only operations to fetch PaymentType entities.
List<PaymentType> paymentType = this.paymentTypeRepository.findAll();
org.apache.fineract.portfolio.paymenttype.service.PaymentTypeWriteServiceImpl SPRING-DATA The class uses a Spring Data JPA repository (`PaymentTypeRepository`) to interact with the database. It performs CRUD operations on the `PaymentType` entity.
this.repository.saveAndFlush(newPaymentType);
org.apache.fineract.portfolio.rate.domain SPRING-DATA The class interacts with the database through the RateRepository interface, which is a Spring Data repository. It performs read operations to fetch Rate entities by primary key.
final Rate rate = this.repository.findById(rateId).orElseThrow(() -> new RateNotFoundException(rateId));
org.apache.fineract.portfolio.rate.domain SPRING-DATA The interface extends JpaRepository, indicating it uses Spring Data JPA for database persistence. The Javadoc explicitly mentions saving to the 'm_rate' table.
public interface RateRepository extends JpaRepository<Rate, Long>, JpaSpecificationExecutor<Rate> { ... }
org.apache.fineract.portfolio.rate.service SPRING-DATA The class uses Spring Data JPA repositories (RateRepository and AppUserRepository) to interact with the database. It performs CRUD operations and relies on JPA for object-relational mapping.
this.rateRepository.saveAndFlush(rate);
org.apache.fineract.portfolio.rate.service.RateAssembler SPRING-DATA The class interacts with the database through the RateRepositoryWrapper. It does not execute SQL directly but relies on the repository pattern to fetch entities based on a list of primary keys (IDs).
rateItems.addAll(rateRepository.findMultipleWithNotFoundDetection(idList));
org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain SPRING-DATA The file is a Spring Data JPA repository interface that manages database interactions for the PostDatedChecks entity.
@Query("select pdc from PostDatedChecks pdc where pdc.status = 0 and pdc.loanRepaymentScheduleInstallment = :loanRepaymentScheduleInstallment")
org.apache.fineract.portfolio.repaymentwithpostdatedchecks.service SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It performs CRUD operations on PostDatedChecks and read operations on Loan entities. Transaction management is handled via the @Transactional annotation.
this.postDatedChecksRepository.saveAndFlush(postDatedChecks);
org.apache.fineract.portfolio.repaymentwithpostdatedchecks.service SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It retrieves `Loan` and `PostDatedChecks` entities using standard `findById` methods and object graph navigation (e.g., `loan.getPostDatedChecks()`). The class is transactional with read-only propagation.
final Loan loan = this.loanRepository.findById(id).orElseThrow(() -> new LoanNotFoundException(id));
org.apache.fineract.portfolio.savings.domain SPRING-DATA The interface extends JpaRepository, which provides full database integration via Hibernate/JPA. It maps the GroupSavingsIndividualMonitoring entity to a database table.
GroupSavingsIndividualMonitoring findOneByAccountNumber(String accountNumber);
org.apache.fineract.portfolio.savings.domain SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository to provide standard data access methods and defines custom JPQL queries for specific business requirements.
@Query("select sac from SavingsAccountCharge sac where sac.id =:id and sac.savingsAccount.id = :savingsAccountId")
org.apache.fineract.portfolio.savings.domain SPRING-DATA The class uses Spring Data repositories to retrieve 'Charge' definitions and existing 'SavingsAccountCharge' entities. It performs read operations to fetch data required for assembly and validation.
final Charge chargeDefinition = this.chargeRepository.findOneWithNotFoundDetection(chargeId);
org.apache.fineract.portfolio.savings.domain SPRING-DATA The class interacts with the database primarily through Spring Data JPA repositories (SavingsAccountRepository and SavingsAccountTransactionRepository). It performs standard CRUD operations, custom finders (e.g., by client ID, status), and transaction management using @Transactional annotations. A JdbcTemplate is injected but not explicitly used in the visible public methods.
final SavingsAccount account = this.repository.findById(savingsId)
        .orElseThrow(() -> new SavingsAccountNotFoundException(savingsId));
org.apache.fineract.portfolio.savings.domain SPRING-DATA The class uses injected repository wrappers and repositories to interact with the database. It retrieves 'Charge' definitions to create new savings charges and retrieves existing 'SavingsAccountCharge' entities by ID to perform updates.
final Charge chargeDefinition = this.chargeRepository.findOneWithNotFoundDetection(chargeId);
// ...
final SavingsAccountCharge savingsAccountCharge = this.savingsAccountChargeRepository
        .findById(savingsAccountChargeId)
        .orElseThrow(() -> new SavingsAccountChargeNotFoundException(savingsAccountChargeId));
org.apache.fineract.portfolio.savings.domain SPRING-DATA The code utilizes Spring Data JPA to interact with the database. It defines a repository interface that extends JpaRepository, automatically providing data access methods for the RecurringDepositAccount entity.
public interface RecurringDepositAccountRepository
        extends JpaRepository<RecurringDepositAccount, Long>, JpaSpecificationExecutor<RecurringDepositAccount> {

}
org.apache.fineract.portfolio.savings.domain SPRING-DATA The interface uses Spring Data JPA to abstract database interactions. It maps the DepositAccountOnHoldTransaction entity to a database table and provides methods to query and manipulate this data without writing raw SQL.
public interface DepositAccountOnHoldTransactionRepository extends JpaRepository<DepositAccountOnHoldTransaction, Long> ...
org.apache.fineract.portfolio.savings.domain SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database by extending JpaRepository, which provides standard CRUD operations, and by defining custom JPQL queries via the @Query annotation for more complex retrieval logic.
@Query("select s_acc from SavingsAccount s_acc where s_acc.client.id = :clientId")
List<SavingsAccount> findSavingAccountByClientId(@Param("clientId") Long clientId);
org.apache.fineract.portfolio.savings.domain SPRING-DATA The class uses several RepositoryWrapper classes (ClientRepositoryWrapper, GroupRepositoryWrapper, SavingsAccountRepositoryWrapper, etc.) which likely wrap Spring Data JPA repositories. It uses these to fetch entities by ID to assemble the domain objects.
client = this.clientRepository.findOneWithNotFoundDetection(clientId, isCalendarInherited);
org.apache.fineract.portfolio.savings.domain SPRING-DATA The class wraps a Spring Data repository interface (SavingsAccountChargeRepository) to perform CRUD operations and custom finders on the underlying database.
public SavingsAccountCharge findOneWithNotFoundDetection(final Long id) {
    return this.repository.findById(id).orElseThrow(() -> new SavingsAccountChargeNotFoundException(id));
}
org.apache.fineract.portfolio.savings.domain SPRING-DATA The class uses Spring Data JPA repositories (wrapped in custom wrappers) to persist SavingsAccount and SavingsAccountTransaction entities. It uses standard JPA save/saveAndFlush methods.
this.savingsAccountRepository.save(account);
org.apache.fineract.portfolio.savings.domain SPRING-DATA The class uses wrapper classes around Spring Data JPA repositories to interact with the database. It retrieves entities like SavingsProduct, Client, Group, and Staff, and loads SavingsAccount transactions.
final SavingsProduct product = this.savingProductRepository.findById(productId)
        .orElseThrow(() -> new SavingsProductNotFoundException(productId));
org.apache.fineract.portfolio.savings.domain SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database by extending `JpaRepository`, which provides standard CRUD capabilities. It defines custom JPQL queries using `@Query` annotations and utilizes `@Lock` for database-level row locking (Pessimistic Write) to handle concurrency for financial transactions.
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("select st from SavingsAccountTransaction st where st.savingsAccount = :savingsAccount...")
List<SavingsAccountTransaction> findTransactionsAfterPivotDate(...);
org.apache.fineract.portfolio.savings.domain.DepositProductAssembler SPRING-DATA The class uses injected repository wrappers to retrieve existing Charge and TaxGroup entities from the database based on IDs provided in the JSON command. It performs read-only operations to link these existing entities to the new product being assembled.
final Long id = jsonObject.get(idParamName).getAsLong();
final Charge charge = this.chargeRepository.findOneWithNotFoundDetection(id);
org.apache.fineract.portfolio.savings.domain.FixedDepositAccountRepository SPRING-DATA Database integration is achieved through Spring Data JPA. The interface extends JpaRepository, which provides standard CRUD operations, and JpaSpecificationExecutor, which allows for dynamic querying based on JPA Specifications. The actual SQL generation and execution are handled by the Spring framework and the underlying Hibernate provider.
public interface FixedDepositAccountRepository
        extends JpaRepository<FixedDepositAccount, Long>, JpaSpecificationExecutor<FixedDepositAccount> {

}
org.apache.fineract.portfolio.savings.domain.FixedDepositProductRepository SPRING-DATA The file uses Spring Data JPA to manage database interactions. By extending JpaRepository, it automatically gains methods for saving, deleting, and finding entities. By extending JpaSpecificationExecutor, it gains the ability to query the database using dynamic criteria (Specifications).
public interface FixedDepositProductRepository
        extends JpaRepository<FixedDepositProduct, Long>, JpaSpecificationExecutor<FixedDepositProduct> {
}
org.apache.fineract.portfolio.savings.domain.RecurringDepositProductRepository SPRING-DATA The interface uses Spring Data JPA to abstract database interactions, automatically providing implementations for standard CRUD operations and specification-based queries.
public interface RecurringDepositProductRepository
        extends JpaRepository<RecurringDepositProduct, Long>, JpaSpecificationExecutor<RecurringDepositProduct> {
    //
}
org.apache.fineract.portfolio.savings.domain.SavingsProductAssembler SPRING-DATA The class uses injected repository wrappers (likely wrapping Spring Data JPA repositories) to look up existing 'Charge' and 'TaxGroup' entities by their primary keys during the assembly process.
final Charge charge = this.chargeRepository.findOneWithNotFoundDetection(id);
org.apache.fineract.portfolio.savings.domain.SavingsProductRepository SPRING-DATA The code uses Spring Data JPA to interact with the database. By extending JpaRepository, it automatically gains methods for standard CRUD operations on the 'SavingsProduct' entity. By extending JpaSpecificationExecutor, it gains the ability to run dynamic queries based on the JPA Criteria API.
public interface SavingsProductRepository extends JpaRepository<SavingsProduct, Long>, JpaSpecificationExecutor<SavingsProduct> {
    //
}
org.apache.fineract.portfolio.savings.handler SPRING-DATA The class uses Spring's @Transactional annotation to manage database transactions for the activation process. While it does not execute SQL directly, it orchestrates the write operation via the injected DepositAccountWritePlatformService, ensuring the state change is committed atomically.
@Transactional
    @Override
    public CommandProcessingResult processCommand(final JsonCommand command) {
        return this.depositAccountWritePlatformService.activateRDAccount(command.entityId(), command);
    }
org.apache.fineract.portfolio.savings.handler SPRING-DATA The class uses Spring's `@Transactional` annotation to define transaction boundaries for the database operation. The actual data access logic is delegated to the `SavingsAccountWritePlatformService`.
@Transactional
    @Override
    public CommandProcessingResult processCommand(JsonCommand command) {
        return this.writePlatformService.holdAmount(command.getSavingsId(), command);
    }
org.apache.fineract.portfolio.savings.service SPRING-DATA The class uses a Spring Data JPA repository (`FixedDepositProductRepository`) to interact with the database. It performs standard CRUD operations (save, findById, delete) on the `FixedDepositProduct` entity. Transactions are managed via the `@Transactional` annotation.
this.fixedDepositProductRepository.saveAndFlush(product);
org.apache.fineract.portfolio.savings.service SPRING-DATA The class uses a Spring Data JPA repository (`SavingsProductRepository`) to interact with the database. It performs CRUD operations on the `SavingsProduct` entity. Transaction management is handled via the `@Transactional` annotation on the class and methods.
this.savingProductRepository.saveAndFlush(product);
org.apache.fineract.portfolio.savings.service SPRING-DATA The class uses a Spring Data repository (GSIMRepositoy) to perform CRUD operations on the GroupSavingsIndividualMonitoring entity. The class is also annotated with @Transactional, ensuring that database operations within its methods are executed within a transaction context.
return this.gsimAccountRepository.save(glimAccountInfo);
org.apache.fineract.portfolio.savings.service.RecurringDepositProductWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses a Spring Data JPA repository (RecurringDepositProductRepository) to interact with the database. It performs standard CRUD operations (saveAndFlush, findById, delete) on the RecurringDepositProduct entity. Transaction management is handled via the @Transactional annotation.
this.recurringDepositProductRepository.saveAndFlush(product);
org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses Spring Data JPA repositories (wrapped in custom wrappers like `SavingsAccountRepositoryWrapper`) to interact with the database. It performs CRUD operations on `SavingsAccount`, `SavingsAccountTransaction`, `SavingsAccountCharge`, and other related entities. It uses `@Transactional` to ensure data consistency across multiple repository calls.
this.savingAccountRepositoryWrapper.saveAndFlush(account);
org.apache.fineract.portfolio.savings.service.SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses Spring Data JPA repositories (wrapped in custom wrappers) to interact with the database. It performs CRUD operations on SavingsAccount, Client, Group, and Note entities. It also handles transaction management using @Transactional annotations.
this.savingAccountRepository.save(account);
String accountNumber = "";
// ...
accountNumber = this.accountNumberGenerator.generate(account, accountNumberFormat);
account.updateAccountNo(accountNumber + "1");
// ...
this.savingAccountRepository.saveAndFlush(account);
org.apache.fineract.portfolio.savings.service.search.SavingsAccountTransactionSearchService SPRING-DATA While this is an interface, the return type `org.springframework.data.domain.Page` strongly indicates that the implementation interacts with a database using Spring Data or a similar pagination-aware data access layer. The methods are designed to retrieve paginated subsets of data (Transactions) based on IDs and criteria.
Page<SavingsAccountTransactionData> searchTransactions(@NotNull Long savingsId, @NotNull TransactionSearchRequest searchParameters);
org.apache.fineract.portfolio.self.account.domain SPRING-DATA The interface uses Spring Data JPA to interact with the database for the SelfBeneficiariesTPT entity. It inherits standard data access methods automatically.
public interface SelfBeneficiariesTPTRepository
        extends JpaRepository<SelfBeneficiariesTPT, Long>, JpaSpecificationExecutor<SelfBeneficiariesTPT> {
org.apache.fineract.portfolio.self.account.service SPRING-DATA The class uses Spring Data JPA repositories to interact with the database. It performs CRUD operations on the `SelfBeneficiariesTPT` entity and read-only lookups on `Loan` and `SavingsAccount` entities via their respective wrapper services.
this.repository.saveAndFlush(beneficiary);
org.apache.fineract.portfolio.self.pockets.domain SPRING-DATA The class interacts with the database via a Spring Data repository interface (PocketRepository). It performs CRUD operations such as saving entities and finding records by foreign key (appUserId).
this.pocketRepository.saveAndFlush(pocket);
org.apache.fineract.portfolio.self.pockets.domain SPRING-DATA The class wraps a Spring Data repository (PocketAccountMappingRepository) to perform CRUD operations on the PocketAccountMapping entity.
this.pocketAccountMappingRepository.save(pocketAccountMapping);
org.apache.fineract.portfolio.self.pockets.domain.PocketAccountMappingRepository SPRING-DATA The interface extends JpaRepository to provide database access for PocketAccountMapping entities using Spring Data JPA.
@Query("select pam from PocketAccountMapping pam where pam.pocketId =:pocketId")
org.apache.fineract.portfolio.self.pockets.domain.PocketRepository SPRING-DATA The interface extends JpaRepository to provide database interaction for the Pocket entity using Spring Data JPA.
@Query("select pocket.id from Pocket pocket where pocket.appUserId= :appUserId")
org.apache.fineract.portfolio.self.pockets.service.PocketWritePlatformServiceImpl SPRING-DATA The class uses repository wrappers (likely wrapping Spring Data JPA repositories) to perform CRUD operations on 'Pocket' and 'PocketAccountMapping' entities. It uses 'saveAndFlush' for creating pockets, 'save' for batch inserting mappings, and 'delete' for removing mappings.
this.pocketRepositoryWrapper.saveAndFlush(pocket);
org.apache.fineract.portfolio.self.registration.domain.SelfServiceRegistrationRepository SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database by extending `JpaRepository`, which provides standard CRUD operations, and defines custom JPQL queries via annotations.
@Query(FIND_BY_REQUEST_AND_AUTHENTICATION_TOKEN)
SelfServiceRegistration getRequestByIdAndAuthenticationToken(@Param("id") Long id, ...)
org.apache.fineract.portfolio.self.registration.service.SelfServiceRegistrationWritePlatformServiceImpl SPRING-DATA The class uses Spring Data JPA repositories (SelfServiceRegistrationRepository, ClientRepositoryWrapper, SmsMessageRepository, RoleRepository, PasswordValidationPolicyRepository) to perform CRUD operations on entities. It also delegates user creation to UserDomainService.
this.selfServiceRegistrationRepository.saveAndFlush(selfServiceRegistration);
org.apache.fineract.portfolio.self.registration.starter.SelfRegistrationConfiguration SPRING-DATA The configuration class wires up database access components. It injects a JdbcTemplate for the read platform service (indicating direct JDBC usage) and multiple Spring Data repositories (e.g., SelfServiceRegistrationRepository, ClientRepositoryWrapper, RoleRepository) for the write platform service.
return new SelfServiceRegistrationReadPlatformServiceImpl(jdbcTemplate);
org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountDividendRepository SPRING-DATA The interface extends JpaRepository, indicating it uses Spring Data JPA to manage persistence for the ShareAccountDividendDetails entity without writing explicit SQL or JPQL.
public interface ShareAccountDividendRepository
        extends JpaRepository<ShareAccountDividendDetails, Long>, JpaSpecificationExecutor<ShareAccountDividendDetails> {

}
org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountRepository SPRING-DATA The interface extends JpaRepository and JpaSpecificationExecutor, leveraging Spring Data JPA to manage database interactions for the ShareAccount entity automatically.
public interface ShareAccountRepository extends JpaRepository<ShareAccount, Long>, JpaSpecificationExecutor<ShareAccount> {

}
org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountRepositoryWrapper SPRING-DATA The class wraps a Spring Data repository (ShareAccountRepository) to perform CRUD operations. It relies on the underlying JPA implementation provided by Spring Data to generate SQL queries.
this.shareAccountRepository.findById(accountId).orElseThrow(() -> new ShareAccountNotFoundException(accountId));
org.apache.fineract.portfolio.shareaccounts.serialization.ShareAccountDataSerializer SPRING-DATA The class uses several repository wrappers (ChargeRepositoryWrapper, SavingsAccountRepositoryWrapper, ClientRepositoryWrapper, ShareProductRepositoryWrapper) to interact with the database. These wrappers likely encapsulate Spring Data JPA repositories. The class fetches entities to validate existence and business rules, and modifies the state of the ShareAccount entity which is then persisted by the calling transaction context.
ShareProduct shareProduct = this.shareProductRepository.findOneWithNotFoundDetection(productId);
org.apache.fineract.portfolio.shareaccounts.service SPRING-DATA The class uses a Spring Data repository (ShareAccountDividendRepository) to fetch and save dividend details. It also interacts with the database implicitly through the SavingsAccountAssembler and SavingsAccountDomainService which manage SavingsAccount entities.
ShareAccountDividendDetails shareAccountDividendDetails = this.shareAccountDividendRepository.findById(dividendDetailId).orElseThrow();
...
this.shareAccountDividendRepository.saveAndFlush(shareAccountDividendDetails);
org.apache.fineract.portfolio.shareproducts.domain SPRING-DATA Database integration is achieved through Spring Data JPA. The interface extends JpaRepository, which provides standard CRUD operations, and JpaSpecificationExecutor, which allows for dynamic query construction. The framework automatically maps these methods to database operations for the ShareProductDividendPayOutDetails entity.
public interface ShareProductDividentPayOutDetailsRepository
        extends JpaRepository<ShareProductDividendPayOutDetails, Long>, JpaSpecificationExecutor<ShareProductDividendPayOutDetails> {
}
org.apache.fineract.portfolio.shareproducts.domain.ShareProductDividentPayOutDetailsRepositoryWrapper SPRING-DATA The class wraps a Spring Data repository interface to perform database operations on the ShareProductDividendPayOutDetails entity.
this.shareProductDividentPayOutDetailsRepository.findById(dividendId)
org.apache.fineract.portfolio.shareproducts.domain.ShareProductRepository SPRING-DATA Database integration is achieved through Spring Data JPA, which automatically implements the repository interface to interact with the database tables mapped to the ShareProduct entity.
public interface ShareProductRepository extends JpaRepository<ShareProduct, Long>, JpaSpecificationExecutor<ShareProduct> {}
org.apache.fineract.portfolio.shareproducts.domain.ShareProductRepositoryWrapper SPRING-DATA The class interacts with the database through a Spring Data repository interface (ShareProductRepository). It performs standard CRUD operations such as finding by ID and saving entities. The actual SQL generation and execution are handled by the Spring Data JPA implementation backing the repository interface.
this.shareProductRepository.findById(productId).orElseThrow(...)
org.apache.fineract.portfolio.shareproducts.serialization.ShareProductDataSerializer SPRING-DATA The class uses a repository wrapper to access Charge entities from the database during validation. This is used to verify that charges associated with a share product exist and share the same currency.
final Charge charge = this.chargeRepository.findOneWithNotFoundDetection(id);
org.apache.fineract.portfolio.shareproducts.service SPRING-DATA The class uses repository wrappers (likely wrapping Spring Data JpaRepository interfaces) to interact with the database. It performs CRUD operations and explicit flushing.
this.repository.saveAndFlush(product);
org.apache.fineract.portfolio.tax.domain SPRING-DATA The class interacts with the database via the TaxComponentRepository, which is a Spring Data repository interface. It performs read operations to locate TaxComponent entities by ID.
this.repository.findById(id).orElseThrow(() -> new TaxComponentNotFoundException(id))
org.apache.fineract.portfolio.tax.domain.TaxComponentRepository SPRING-DATA Database integration is achieved through Spring Data JPA, which automatically generates the implementation for standard CRUD operations and specification-based queries for the TaxComponent entity.
public interface TaxComponentRepository extends JpaRepository<TaxComponent, Long>, JpaSpecificationExecutor<TaxComponent> {

}
org.apache.fineract.portfolio.tax.domain.TaxGroupRepository SPRING-DATA The interface uses Spring Data JPA to manage persistence for the TaxGroup entity, providing automatic implementation of data access patterns.
public interface TaxGroupRepository extends JpaRepository<TaxGroup, Long>, JpaSpecificationExecutor<TaxGroup> {

}
org.apache.fineract.portfolio.tax.domain.TaxGroupRepositoryWrapper SPRING-DATA The class wraps a Spring Data repository interface to perform database read operations.
this.repository.findById(id).orElseThrow(() -> new TaxGroupNotFoundException(id))
org.apache.fineract.portfolio.tax.service.TaxAssembler SPRING-DATA The class uses repository wrappers to perform read-only operations against the database. It fetches 'GLAccount' entities to validate account IDs provided in the JSON payload and 'TaxComponent' entities when assembling tax groups.
debitGlAccount = this.glAccountRepositoryWrapper.findOneWithNotFoundDetection(debitAccountId);
org.apache.fineract.portfolio.tax.service.TaxWritePlatformServiceImpl SPRING-DATA The class uses Spring Data JPA repositories (injected via constructor) to perform CRUD operations. It uses 'saveAndFlush' for immediate persistence and 'findOneWithNotFoundDetection' (via a wrapper) for retrieval.
this.taxComponentRepository.saveAndFlush(taxComponent);
org.apache.fineract.portfolio.transfer.service.TransferWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses multiple Repository Wrappers (which likely wrap Spring Data JpaRepositories) to perform CRUD operations on entities like Client, Group, Office, Loan, and SavingsAccount. It uses @Transactional to ensure atomicity.
this.clientRepositoryWrapper.saveAndFlush(client);
org.apache.fineract.spm.api.ScorecardApiResource SPRING-DATA The class interacts with the database through service layers and repository wrappers. It uses `ClientRepositoryWrapper` (likely wrapping a Spring Data JPA repository) to fetch Client entities and `ScorecardService`/`ScorecardReadPlatformService` to perform CRUD operations on Scorecards. The `@Transactional` annotation on methods indicates that these operations participate in Spring-managed database transactions.
final Client client = this.clientRepositoryWrapper.findOneWithNotFoundDetection(scorecardData.getClientId());
this.scorecardService.createScorecard(ScorecardMapper.map(scorecardData, survey, appUser, client));
org.apache.fineract.spm.domain SPRING-DATA The code utilizes Spring Data JPA to interact with the database. It extends `JpaRepository` to inherit standard database operations and uses `@Query` annotations to define custom JPQL queries for temporal filtering.
@Query("select s from Survey s where :pointInTime between s.validFrom and s.validTo")
org.apache.fineract.spm.domain.LookupTableRepository SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database by extending JpaRepository, which provides standard CRUD operations, and defines custom finder methods that are translated into SQL/JPQL by the Spring framework.
public interface LookupTableRepository extends JpaRepository<LookupTable, Long> {
    List<LookupTable> findBySurvey(Survey survey);
}
org.apache.fineract.spm.domain.ScorecardRepository SPRING-DATA The file uses Spring Data JPA to interact with the database. By extending JpaRepository, it gains automatic implementations for standard CRUD operations and supports dynamic query generation based on method names.
public interface ScorecardRepository extends JpaRepository<Scorecard, Long> { ... }
org.apache.fineract.spm.service.LookupTableService SPRING-DATA The service uses a Spring Data repository interface (`LookupTableRepository`) to interact with the underlying database. This abstracts the SQL/JPQL logic.
return this.lookupTableRepository.findByKey(key);
org.apache.fineract.spm.service.ScorecardService SPRING-DATA The service uses a Spring Data repository (`ScorecardRepository`) to perform CRUD operations on `Scorecard` entities.
return this.scorecardRepository.saveAll(scorecards);
org.apache.fineract.spm.service.SpmService SPRING-DATA The class interacts with the database via the `SurveyRepository` interface, which is injected by Spring. It performs CRUD operations (save, findById) and custom queries (fetchActiveSurveys, findByKey). It explicitly handles JPA and Data Integrity exceptions to manage database constraints.
this.surveyRepository.saveAndFlush(survey);
org.apache.fineract.template.domain SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database by extending JpaRepository, which provides standard CRUD operations, and defines custom query methods for specific lookups.
@Query("select t from Template as t left join t.mappers as m where m.mapperkey = :mapperkey and m.mappervalue = :mappervalue")
org.apache.fineract.template.service.JpaTemplateDomainService SPRING-DATA The class uses a Spring Data repository interface (`TemplateRepository`) to perform CRUD operations on the database. It relies on Spring's `@Transactional` annotation to manage transaction boundaries for data modification methods.
this.templateRepository.saveAndFlush(template);
org.apache.fineract.useradministration.domain SPRING-DATA The code uses Spring Data JPA to interact with the database. By extending `JpaRepository`, it abstracts the underlying JDBC and SQL interactions, allowing object-oriented manipulation of the `AppUserPreviousPassword` entity.
List<AppUserPreviousPassword> history = repository.findByUserId(123L, PageRequest.of(0, 5));
org.apache.fineract.useradministration.domain SPRING-DATA The class interacts with the database via the injected `AppUserRepository`, which is likely a Spring Data repository interface.
AppUser user = this.appUserRepository.findAppUserByName(AppUserConstants.SYSTEM_USER_NAME);
org.apache.fineract.useradministration.domain SPRING-DATA The class uses a Spring Data JPA repository (AppUserRepository) to persist AppUser entities. It performs save and flush operations within a transactional context.
this.userRepository.saveAndFlush(appUser);
org.apache.fineract.useradministration.domain SPRING-DATA The file uses Spring Data JPA to interact with the database. It extends JpaRepository to provide standard data access methods and defines a custom JPQL query for specific lookup logic.
@Query("SELECT p FROM Permission p WHERE LOWER(TRIM(BOTH FROM p.code)) = LOWER(TRIM(BOTH FROM ?1))")
Permission findOneByCode(@Param("code") String code);
org.apache.fineract.useradministration.domain SPRING-DATA The file uses Spring Data JPA repositories to interact with the database. It inherits standard CRUD methods and defines a custom JPQL query to filter entities based on their active status.
@Query("select PVP from PasswordValidationPolicy PVP WHERE PVP.active = true")
org.apache.fineract.useradministration.domain.AppUserRepository SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database by extending JpaRepository, which provides standard CRUD operations, and defines custom query methods for specific data retrieval needs.
@Query("Select appUser from AppUser appUser where appUser.username = :username")
AppUser findAppUserByName(@Param("username") String username);
org.apache.fineract.useradministration.domain.RoleRepository SPRING-DATA The file is a Spring Data JPA repository interface. It interacts with the database using the Java Persistence API (JPA) through Spring's abstraction layer. It defines custom queries using JPQL to access Role and AppUser tables.
@Query("SELECT COUNT(a) FROM AppUser a JOIN a.roles r WHERE r.id = :roleId AND a.deleted = false")
org.apache.fineract.useradministration.service SPRING-DATA The class uses a Spring Data JPA repository (PermissionRepository) to interact with the database. It retrieves all permission entities and saves updates to specific permission entities.
this.permissionRepository.saveAndFlush(permission);
org.apache.fineract.useradministration.service SPRING-DATA The class uses a Spring Data JPA repository (`PasswordValidationPolicyRepository`) to interact with the database. It performs bulk reads and writes to manage the state of password validation policies.
final List<PasswordValidationPolicy> validationPolicies = this.validationRepository.findAll();
// ... logic ...
this.validationRepository.saveAll(validationPolicies);
org.apache.fineract.useradministration.service.AppUserWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses Spring Data JPA repositories (AppUserRepository, OfficeRepositoryWrapper, RoleRepository, etc.) to interact with the database. It performs CRUD operations on AppUser entities and retrieves related entities like Office, Staff, and Role.
this.appUserRepository.saveAndFlush(userToUpdate);
org.apache.fineract.useradministration.service.RoleWritePlatformServiceJpaRepositoryImpl SPRING-DATA The class uses Spring Data JPA repositories (RoleRepository, PermissionRepository) to persist and retrieve Role and Permission entities. It utilizes @Transactional for transaction management and handles DataIntegrityViolationException for constraint enforcement.
final Role entity = Role.fromJson(command);
this.roleRepository.saveAndFlush(entity);
org.apache.fineract.useradministration.service.UserDataValidator SPRING-DATA The class uses a Spring Data repository to fetch the active password validation policy from the database. This policy contains the regex pattern used to validate user passwords.
final PasswordValidationPolicy validationPolicy = this.passwordValidationPolicy.findActivePasswordValidationPolicy();
final String regex = validationPolicy.getRegex();
org.apache.fineract.useradministration.starter SPRING-DATA The configuration class wires up database interactions by injecting Spring Data JPA repositories (e.g., AppUserRepository, RoleRepository) and the Spring JDBC Template into service implementations. The 'Read' services typically use JdbcTemplate for direct SQL queries, while 'Write' services use JPA Repositories for domain entity management.
@Bean
public AppUserReadPlatformService appUserReadPlatformService(..., JdbcTemplate jdbcTemplate, ...) {
    return new AppUserReadPlatformServiceImpl(..., jdbcTemplate, ...);
}
fineract-db/multi-tenant-demo-backups/ceda/bk_ceda_trial.sql SQL The file is a MySQL database dump that utilizes standard SQL DDL to create the schema and DML to populate it. It defines a comprehensive relational model for a microfinance application (Mifos), including tables for clients, loans, savings, and system configuration. It uses InnoDB for transaction support and foreign key constraints.
CREATE TABLE `acc_gl_account` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  `parent_id` BIGINT DEFAULT NULL,
  ...
) ENGINE=InnoDB AUTO_INCREMENT=98 DEFAULT CHARSET=UTF8MB4;
fineract-db/mifospltaform-tenants-first-time-install.sql SQL The file is a raw SQL dump that performs direct database initialization using DDL to create schema structures and DML to populate initial data. It interacts directly with the MySQL server to set up the `fineract_tenants` database.
CREATE TABLE `tenants` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `identifier` varchar(100) NOT NULL,
  `name` varchar(100) NOT NULL,
  ...
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
fineract-db/multi-tenant-demo-backups/0001-mifos-platform-shared-tenants.sql SQL The file is a raw MySQL dump script that integrates directly with the database server to initialize the schema and data. It combines Data Definition Language (DDL) to create the `tenants` and `timezones` tables and Data Manipulation Language (DML) to populate them with initial records. The script manages the database state by dropping existing objects and locking tables during write operations to ensure atomicity of the bulk inserts.
CREATE TABLE `tenants` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `identifier` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=UTF8MB4;
INSERT INTO `tenants` VALUES (1,'default',...);
fineract-db/multi-tenant-demo-backups/ceda/ceda-user-office-product-setup.sql SQL The file integrates with the database by executing raw SQL statements directly against the schema. It functions as a data migration or seed script, utilizing DML operations to populate tables with initial configuration data. There is no application layer code; the integration is purely at the database command level. It handles relationships between entities manually through foreign key values in INSERT statements.
INSERT INTO `m_organisation_currency`
(
`code`,
`decimal_places`,
`name`,
`display_symbol`,
`internationalized_name_code`)
VALUES
('UGX', 2, 'Uganda Shilling', 'USh', 'currency.UGX');
kubernetes/fineractmysql-configmap.yml SQL Database integration is achieved through a raw SQL script embedded in a Kubernetes ConfigMap, designed to be executed directly by the MySQL engine to bootstrap the database environment.
CREATE DATABASE IF NOT EXISTS `fineract_tenants`;
CREATE DATABASE IF NOT EXISTS `fineract_default`;
GRANT ALL ON *.* TO 'root'@'%';
fineract-db/multi-tenant-demo-backups/bare-bones-demo/bk_bare_bones_demo.sql SQL The file is a raw SQL dump that integrates with a MySQL database by executing DDL (Data Definition Language) to create the schema and DML (Data Manipulation Language) to populate it. It defines the entire database structure including tables, primary keys, and foreign key constraints. Additionally, it contains embedded SQL queries stored as strings within the `stretchy_report` and `stretchy_parameter` tables, which are used by the application's reporting engine to execute dynamic queries at runtime.
DROP TABLE IF EXISTS `acc_gl_account`;
CREATE TABLE `acc_gl_account` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
fineract-provider/src/main/resources/sql/migrations/sample_data/load_sample_data.sql SQL The file is a raw SQL dump containing both Data Definition Language (DDL) for creating the database schema and Data Manipulation Language (DML) for seeding initial reference data. It is designed to be executed by a database migration tool (likely Flyway, given the 'schema_version' table) or manually imported into a MySQL database to initialize the persistence layer for the application.
CREATE TABLE IF NOT EXISTS `acc_gl_account` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,
  `gl_code` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
fineract-db/multi-tenant-demo-backups/ceda/bk_core_with_custom_and_coa.sql SQL The file is a raw SQL dump containing both Data Definition Language (DDL) to create the schema and Data Manipulation Language (DML) to insert initial data. It defines a relational structure for a microfinance application. A unique integration feature is the 'stretchy_report' table, which stores full SQL SELECT statements as text data; the application reads these strings at runtime to execute dynamic reports against the database, effectively treating the database as a repository for its own reporting logic. The schema also includes a 'schema_version' table, indicating integration with a migration tool like Flyway.
CREATE TABLE `m_client` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `account_no` varchar(20) NOT NULL,
  `office_id` BIGINT NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=UTF8MB4;
fineract-provider/src/main/resources/sql/migrations/sample_data/barebones_db.sql SQL The file is a comprehensive SQL script that performs both Data Definition (DDL) and Data Manipulation (DML). It creates the entire database schema for the Fineract application, including tables for accounting, clients, loans, savings, and system configurations. It establishes relationships between these entities using foreign keys. Furthermore, it populates the database with initial reference data, such as permissions, roles, default configurations, and report definitions, using INSERT statements.
CREATE TABLE IF NOT EXISTS `m_client` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `account_no` varchar(20) NOT NULL,
  `office_id` BIGINT NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
fineract-db/multi-tenant-demo-backups/bk_mifostenant_default.sql SQL The file interacts with the database using raw SQL commands. It primarily uses Data Definition Language (DDL) to define the schema structure (tables, keys, constraints) and Data Manipulation Language (DML) to insert initial configuration data. The script is designed to be executed directly against a MySQL server to initialize the 'fineract_default' database.
CREATE TABLE `acc_gl_account` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  `parent_id` BIGINT DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=98 DEFAULT CHARSET=UTF8MB4;
fineract-db/multi-tenant-demo-backups/default-demo/bk_mifostenant-default.sql SQL The file interacts with the database using raw SQL commands. It primarily uses Data Definition Language (DDL) to define the schema structure (tables, keys, constraints) and Data Manipulation Language (DML) to insert initial configuration data. The script is designed to be executed directly against a MySQL server to initialize the 'fineract_default' database.
CREATE TABLE `acc_gl_account` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  `parent_id` BIGINT DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=98 DEFAULT CHARSET=UTF8MB4;
fineract-provider/src/main/resources/sql/migrations/sample_data/interop_sample_data.sql SQL The file interacts with the database purely through raw SQL scripts containing DML (Data Manipulation Language) operations. It uses SQL variables (e.g., @last_saving_prod_id) to maintain referential integrity across multiple INSERT statements without needing hardcoded IDs. It performs reads to determine current max IDs and writes to create new configuration entities.
SET @saving_prod_name = concat('Saving Product', @last_saving_prod_id);
INSERT INTO `m_savings_product`
(`name`, `short_name`, `description`, ...)
VALUES (@saving_prod_name, concat('SP', @last_saving_prod_id), ...);
fineract-db/multi-tenant-demo-backups/default-demo/README.md SQL The documentation describes a database initialization process that involves running DDL for the latest schema and inserting mandatory reference data (DML). It specifies the creation of core entities required for the application to function.
n/a
fineract-db/multi-tenant-demo-backups/ceda/ceda-schema-customisations.sql SQL The file interacts with the database via direct SQL execution, combining DDL for schema extensions and DML for data seeding. It creates new tables to store additional business data and populates configuration tables to integrate these extensions into the application framework.
INSERT INTO `m_code` (`code_name`, `is_system_defined`)
VALUES
('FieldOfEmployment', '0'),
('EducationLevel', '0');
CREATE TABLE `client additional data` (...);
fineract-db/multi-tenant-demo-backups/default-demo/extra-datatables-and-code-values.sql SQL The file integrates with the database by directly executing raw SQL commands to modify both the schema and the data. It utilizes DDL to create new extension tables and DML to insert configuration data, register application metadata, and populate the general ledger.
INSERT INTO `m_code_value`(`code_id`,`code_value`,`order_position`)
select mc.id, 'option.Male', ifnull(max(mv.id), 1)
from m_code mc
join m_code_value mv on mv.code_id = mc.id
where mc.`code_name` = "Gender";
fineract-provider/src/main/resources/sql/migrations/sample_data/tn04_interop_sample_data.sql SQL The code is a direct SQL script used for data manipulation and initialization. It interacts directly with the database engine to insert records and query existing data to resolve foreign keys. It uses MySQL-specific variable syntax to pass data between statements within the script execution session.
SET @client_name = 'InteropMerchant';
INSERT INTO `m_client` (`account_no`, ... ) VALUES (@saving_account_no, ...);
SET @saving_prod_id = -1;
SELECT id FROM m_savings_product WHERE name = @saving_prod_name INTO @saving_prod_id;
INSERT INTO `m_savings_account` ... VALUES ...;
org.apache.fineract.commands.api.AuditsApiResource SQL The class constructs SQL fragments using a `SQLBuilder` utility class. While it does not execute the query directly (delegating that to the service layer), it explicitly defines the SQL WHERE clauses and column aliases (e.g., 'aud.action_name', 'aud.entity_name') used to query the database.
extraCriteria.addNonNullCriteria("aud.action_name = ", actionName);
if (entityName != null) {
    extraCriteria.addCriteria("aud.entity_name like", entityName + "%");
}
extraCriteria.addNonNullCriteria("aud.resource_id = ", resourceId);
org.apache.fineract.commands.api.MakercheckersApiResource SQL The class constructs dynamic SQL WHERE clauses using a `SQLBuilder` utility. It references specific database columns (aliased with 'aud.') corresponding to the audit/command source table. These criteria are passed to the service layer for execution.
SQLBuilder extraCriteria = new SQLBuilder();
extraCriteria.addNonNullCriteria("aud.action_name = ", actionName);
if (entityName != null) {
    extraCriteria.addCriteria("aud.entity_name like ", entityName + "%");
}
extraCriteria.addNonNullCriteria("aud.resource_id = ", resourceId);
org.apache.fineract.infrastructure.core.data.PaginationParameters SQL This class is responsible for dynamically generating SQL fragments for 'ORDER BY', 'LIMIT', and 'OFFSET' clauses. It does not execute queries directly but prepares safe, validated SQL strings to be appended to database queries in other components. It explicitly validates input using 'SQLInjectionValidator' to prevent SQL injection.
sql.append(" limit ").append(this.getLimit());
org.apache.fineract.infrastructure.core.service.database SQL This class is a helper for generating raw SQL strings compatible with either MySQL or PostgreSQL. It does not execute queries itself but constructs valid SQL syntax for other components to execute via JDBC.
if (databaseTypeResolver.isMySQL()) {
    return format("LIMIT %s,%s", offset, count);
} else if (databaseTypeResolver.isPostgreSQL()) {
    return format("LIMIT %s OFFSET %s", count, offset);
}
org.apache.fineract.infrastructure.core.service.database.SqlOperator SQL This class is a utility for generating SQL WHERE clause fragments. It does not execute queries itself but constructs SQL strings representing comparisons (e.g., 'col = val', 'col LIKE %val%') used by other data access components.
return format("%s %s %s", definition, getSymbol(), sqlGenerator.formatValue(columnType, "%" + values[0] + "%"));
org.apache.fineract.infrastructure.dataqueries.service SQL The interface explicitly defines methods for executing raw SQL strings passed as arguments. It acts as a direct gateway for dynamic SQL execution against the database.
GenericResultsetData fillGenericResultSet(String sql);
org.apache.fineract.infrastructure.security.utils SQL This class is a utility for dynamically constructing SQL WHERE clauses. While it does not execute queries directly, it generates SQL strings and manages parameters for use with JDBC PreparedStatements or Spring JdbcTemplate.
sb.append(trimmedCriteria);
sb.append(" ?");
crts.add(trimmedCriteria);
args.add(argument);
org.apache.fineract.infrastructure.survey.service SQL The class interacts with the database primarily by constructing raw SQL strings for permission management and delegating execution to 'ReadWriteNonCoreDataService'. It manually builds INSERT statements for the 'm_permission' table.
return "insert into m_permission (" + columns + ") values " + "('datatable', " + createPermission + ", 'CREATE', '" + dataTableName
                + "', false)," + "('datatable', " + createPermissionChecker + ", 'CREATE', '" + dataTableName + "', false),"

Integration Points JSON

ACME_NOOP_JOB

Namespace: com.acme.fineract.loan.job

Mechanism: OTHER

Direction: BOTH

Path/Topic: N/A

Description: Defines a Spring Batch Job that can be triggered by a scheduler or API.

Embedded Tomcat Server

Namespace: org.apache.fineract

Mechanism: REST

Direction: BOTH

Path/Topic: /

Description: Bootstraps the embedded HTTP server (Tomcat) to host the Fineract REST APIs.

executePeriodicAccrualAccounting

Namespace: org.apache.fineract.accounting.accrual.api.AccrualAccountingApiResource

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/runaccruals

Description: Endpoint to execute Periodic Accrual Accounting

List Accounting Closures

Namespace: org.apache.fineract.accounting.closure.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/glclosures

Description: Endpoint to retrieve a list of accounting closures.

Retrieve Accounting Closure

Namespace: org.apache.fineract.accounting.closure.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/glclosures/{glClosureId}

Description: Endpoint to retrieve a specific accounting closure by ID.

Create Accounting Closure

Namespace: org.apache.fineract.accounting.closure.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/glclosures

Description: Endpoint to create a new accounting closure.

Update Accounting Closure

Namespace: org.apache.fineract.accounting.closure.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/glclosures/{glClosureId}

Description: Endpoint to update an existing accounting closure.

Delete Accounting Closure

Namespace: org.apache.fineract.accounting.closure.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/glclosures/{glClosureId}

Description: Endpoint to delete an accounting closure.

GL Closures API Schemas

Namespace: org.apache.fineract.accounting.closure.api

Mechanism: REST

Direction: BOTH

Path/Topic: N/A

Description: Defines the Swagger/OpenAPI schemas (Request and Response bodies) for the General Ledger Closures REST API endpoints.

Financial Activity Accounts API

Namespace: org.apache.fineract.accounting.financialactivityaccount.api.FinancialActivityAccountsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/financialactivityaccounts

Description: API for managing mappings between Financial Activities and GL Accounts.

Retrieve GL Accounts Template

Namespace: org.apache.fineract.accounting.glaccount.api.GLAccountsApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/glaccounts/template

Description: Endpoint to retrieve a template for creating new GL accounts.

List General Ledger Accounts

Namespace: org.apache.fineract.accounting.glaccount.api.GLAccountsApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/glaccounts

Description: Endpoint to list all GL accounts with optional filtering.

Retrieve a General Ledger Account

Namespace: org.apache.fineract.accounting.glaccount.api.GLAccountsApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/glaccounts/{glAccountId}

Description: Endpoint to retrieve a single GL account by ID.

Create a General Ledger Account

Namespace: org.apache.fineract.accounting.glaccount.api.GLAccountsApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/glaccounts

Description: Endpoint to create a new GL account.

Update a GL Account

Namespace: org.apache.fineract.accounting.glaccount.api.GLAccountsApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/glaccounts/{glAccountId}

Description: Endpoint to update an existing GL account.

Delete a GL Account

Namespace: org.apache.fineract.accounting.glaccount.api.GLAccountsApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/glaccounts/{glAccountId}

Description: Endpoint to delete a GL account.

Download GL Accounts Template

Namespace: org.apache.fineract.accounting.glaccount.api.GLAccountsApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/glaccounts/downloadtemplate

Description: Endpoint to download an Excel template for bulk import.

Upload GL Accounts Template

Namespace: org.apache.fineract.accounting.glaccount.api.GLAccountsApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/glaccounts/uploadtemplate

Description: Endpoint to upload an Excel file for bulk import.

GLACCOUNT CREATE Command Handler

Namespace: org.apache.fineract.accounting.glaccount.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: GLACCOUNT (Entity), CREATE (Action)

Description: Registers a handler for the CREATE action on the GLACCOUNT entity within the application's command processing framework.

GL Account Command Deserialization

Namespace: org.apache.fineract.accounting.glaccount.serialization.GLAccountCommandFromApiJsonDeserializer

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Deserializes JSON payloads for GL Account management APIs.

retrieveAll

Namespace: org.apache.fineract.accounting.journalentry.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/journalentries

Description: List Journal Entries

retrieveJournalEntryById

Namespace: org.apache.fineract.accounting.journalentry.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/journalentries/{journalEntryId}

Description: Retrieve a single Entry

createGLJournalEntry

Namespace: org.apache.fineract.accounting.journalentry.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/journalentries

Description: Create Balanced Journal Entries

createReversalJournalEntry

Namespace: org.apache.fineract.accounting.journalentry.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/journalentries/{transactionId}

Description: Update Running balances or Reverse Journal Entries

retrieveJournalEntries

Namespace: org.apache.fineract.accounting.journalentry.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/journalentries/provisioning

Description: Retrieve Provisioning Journal Entries

retrieveOpeningBalance

Namespace: org.apache.fineract.accounting.journalentry.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/journalentries/openingbalance

Description: Retrieve Opening Balance

getJournalEntriesTemplate

Namespace: org.apache.fineract.accounting.journalentry.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/journalentries/downloadtemplate

Description: Download Template

postJournalEntriesTemplate

Namespace: org.apache.fineract.accounting.journalentry.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/journalentries/uploadtemplate

Description: Upload Template

BusinessEventNotifierService

Namespace: org.apache.fineract.accounting.journalentry.service.AccountingProcessorHelper

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Internal event notification system used to publish business events when specific actions occur.

Create Provisioning Entries

Namespace: org.apache.fineract.accounting.provisioning.api.ProvisioningEntriesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/provisioningentries

Description: Endpoint to create new provisioning entries.

Modify Provisioning Entry

Namespace: org.apache.fineract.accounting.provisioning.api.ProvisioningEntriesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/provisioningentries/{entryId}

Description: Endpoint to recreate a provisioning entry or create journal entries for it.

Retrieve Provisioning Entry

Namespace: org.apache.fineract.accounting.provisioning.api.ProvisioningEntriesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/provisioningentries/{entryId}

Description: Endpoint to retrieve a specific provisioning entry by ID.

Retrieve Provisioning Entries (Search)

Namespace: org.apache.fineract.accounting.provisioning.api.ProvisioningEntriesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/provisioningentries/entries

Description: Endpoint to search for loan product provisioning entries with filters.

List All Provisioning Entries

Namespace: org.apache.fineract.accounting.provisioning.api.ProvisioningEntriesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/provisioningentries

Description: Endpoint to list all provisioning entries with pagination.

Accounting Rules API Schemas

Namespace: org.apache.fineract.accounting.rule.api

Mechanism: REST

Direction: BOTH

Path/Topic: n/a

Description: Defines the Swagger/OpenAPI schemas for the Accounting Rules REST API requests and responses.

retrieveTemplate

Namespace: org.apache.fineract.accounting.rule.api.AccountingRuleApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/accountingrules/template

Description: Retrieve Accounting Rule Details Template

retrieveAllAccountingRules

Namespace: org.apache.fineract.accounting.rule.api.AccountingRuleApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/accountingrules

Description: Retrieve all Accounting Rules

retreiveAccountingRule

Namespace: org.apache.fineract.accounting.rule.api.AccountingRuleApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/accountingrules/{accountingRuleId}

Description: Retrieve a specific Accounting Rule

createAccountingRule

Namespace: org.apache.fineract.accounting.rule.api.AccountingRuleApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/accountingrules

Description: Create a new Accounting Rule

updateAccountingRule

Namespace: org.apache.fineract.accounting.rule.api.AccountingRuleApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/accountingrules/{accountingRuleId}

Description: Update an existing Accounting Rule

deleteAccountingRule

Namespace: org.apache.fineract.accounting.rule.api.AccountingRuleApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/accountingrules/{accountingRuleId}

Description: Delete an Accounting Rule

ACCOUNTINGRULE UPDATE Command Handler

Namespace: org.apache.fineract.accounting.rule.handler.UpdateAccountingRuleCommandHandler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for the internal command processing bus to handle UPDATE actions on ACCOUNTINGRULE entities.

retrieveAll

Namespace: org.apache.fineract.adhocquery.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/adhocquery

Description: Retrieves all adhoc queries

template

Namespace: org.apache.fineract.adhocquery.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/adhocquery/template

Description: Retrieves adhoc query template

createAdHocQuery

Namespace: org.apache.fineract.adhocquery.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/adhocquery

Description: Creates a new adhoc query

retrieveAdHocQuery

Namespace: org.apache.fineract.adhocquery.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/adhocquery/{adHocId}

Description: Retrieves a specific adhoc query by ID

update

Namespace: org.apache.fineract.adhocquery.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/adhocquery/{adHocId}

Description: Updates a specific adhoc query

deleteAdHocQuery

Namespace: org.apache.fineract.adhocquery.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/adhocquery/{adHocId}

Description: Deletes a specific adhoc query

ADHOC UPDATE Command Handler

Namespace: org.apache.fineract.adhocquery.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers this class as the handler for ADHOC entity UPDATE actions within the Fineract command processing framework.

handleBatchRequests

Namespace: org.apache.fineract.batch.api.BatchApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/batches

Description: Batch API endpoint allowing multiple API requests to be sent in a single payload.

createClient

Namespace: org.apache.fineract.batch.command.CommandStrategyProvider

Mechanism: REST

Direction: CONSUMER

Path/Topic: v1/clients

Description: Maps POST requests for clients to the createClientCommandStrategy.

updateClient

Namespace: org.apache.fineract.batch.command.CommandStrategyProvider

Mechanism: REST

Direction: CONSUMER

Path/Topic: v1/clients/{id}

Description: Maps PUT requests for specific clients to the updateClientCommandStrategy.

applyLoan

Namespace: org.apache.fineract.batch.command.CommandStrategyProvider

Mechanism: REST

Direction: CONSUMER

Path/Topic: v1/loans

Description: Maps POST requests for loans to the applyLoanCommandStrategy.

getLoanById

Namespace: org.apache.fineract.batch.command.CommandStrategyProvider

Mechanism: REST

Direction: CONSUMER

Path/Topic: v1/loans/{id}

Description: Maps GET requests for loans by ID to the getLoanByIdCommandStrategy.

applySavings

Namespace: org.apache.fineract.batch.command.CommandStrategyProvider

Mechanism: REST

Direction: CONSUMER

Path/Topic: v1/savingsaccounts

Description: Maps POST requests for savings accounts to the applySavingsCommandStrategy.

approveLoan

Namespace: org.apache.fineract.batch.command.CommandStrategyProvider

Mechanism: REST

Direction: CONSUMER

Path/Topic: v1/loans/{id}?command=approve

Description: Maps POST requests with command=approve to the approveLoanCommandStrategy.

disburseLoan

Namespace: org.apache.fineract.batch.command.CommandStrategyProvider

Mechanism: REST

Direction: CONSUMER

Path/Topic: v1/loans/{id}?command=disburse

Description: Maps POST requests with command=disburse to the disburseLoanCommandStrategy.

activateClient

Namespace: org.apache.fineract.batch.command.CommandStrategyProvider

Mechanism: REST

Direction: CONSUMER

Path/Topic: v1/clients/{id}?command=activate

Description: Maps POST requests with command=activate to the activateClientCommandStrategy.

createDatatableEntry

Namespace: org.apache.fineract.batch.command.CommandStrategyProvider

Mechanism: REST

Direction: CONSUMER

Path/Topic: v1/datatables/{table}/{appTableId}

Description: Maps POST requests for datatables to the createDatatableEntryCommandStrategy.

Get Loan Transaction

Namespace: org.apache.fineract.batch.command.internal

Mechanism: REST

Direction: CONSUMER

Path/Topic: loans/{loanId}/transactions/{transactionId}

Description: The code tests a strategy that wraps a RESTful resource call to retrieve loan transaction details.

retrieveAllLoanCharges

Namespace: org.apache.fineract.batch.command.internal

Mechanism: REST

Direction: CONSUMER

Path/Topic: loans/external-id/{loanExternalId}/charges

Description: The test simulates a REST call to retrieve loan charges via the LoanChargesApiResource.

Create Loan Charge via External ID

Namespace: org.apache.fineract.batch.command.internal

Mechanism: REST

Direction: CONSUMER

Path/Topic: loans/external-id/{loanExternalId}/charges

Description: The test simulates a REST API call to create a charge for a loan identified by an external ID.

Loan Transactions API

Namespace: org.apache.fineract.batch.command.internal

Mechanism: REST

Direction: CONSUMER

Path/Topic: loans/external-id/{loanExternalId}/transactions

Description: The test simulates a RESTful batch request to create a loan transaction via an external ID.

Loan Charge Adjustment (Batch)

Namespace: org.apache.fineract.batch.command.internal

Mechanism: REST

Direction: CONSUMER

Path/Topic: loans/external-id/{loanExternalId}/charges/external-id/{chargeExternalId}?command={command}

Description: Handles batch requests for adjusting loan charges via a REST-like URL pattern.

Adjust Loan Transaction (Batch)

Namespace: org.apache.fineract.batch.command.internal

Mechanism: REST

Direction: CONSUMER

Path/Topic: loans/external-id/{loanExternalId}/transactions/external-id/{transactionExternalId}

Description: Handles the batch processing logic for adjusting a loan transaction identified by an external ID.

modifyLoanApplication

Namespace: org.apache.fineract.batch.command.internal

Mechanism: REST

Direction: PRODUCER

Path/Topic: loans/external-id/{externalId}

Description: Delegates a batch command to the internal LoansApiResource to modify a loan application.

adjustLoanTransaction

Namespace: org.apache.fineract.batch.command.internal

Mechanism: REST

Direction: CONSUMER

Path/Topic: /loans/{loanId}/transactions/{transactionId}

Description: Delegates to the internal LoanTransactionsApiResource to adjust a transaction, effectively acting as a wrapper for the REST API logic within a batch context.

retrieveAllLoanCharges

Namespace: org.apache.fineract.batch.command.internal

Mechanism: REST

Direction: CONSUMER

Path/Topic: /loans/{loanId}/charges

Description: Delegates to an internal REST API resource to retrieve charges for a loan.

JAX-RS Exception Mapping

Namespace: org.apache.fineract.batch.exception.ErrorHandler

Mechanism: REST

Direction: OTHER

Path/Topic: n/a

Description: Uses JAX-RS standard interfaces to map Java exceptions to HTTP responses.

createDocument

Namespace: org.apache.fineract.client.services

Mechanism: REST

Direction: N/A

Path/Topic: v1/{entityType}/{entityId}/documents

Description: Uploads a document via Multipart POST

deleteDocument

Namespace: org.apache.fineract.client.services

Mechanism: REST

Direction: N/A

Path/Topic: v1/{entityType}/{entityId}/documents/{documentId}

Description: Deletes a document

downloadFile

Namespace: org.apache.fineract.client.services

Mechanism: REST

Direction: N/A

Path/Topic: v1/{entityType}/{entityId}/documents/{documentId}/attachment

Description: Downloads a document attachment

getDocument

Namespace: org.apache.fineract.client.services

Mechanism: REST

Direction: N/A

Path/Topic: v1/{entityType}/{entityId}/documents/{documentId}

Description: Retrieves document metadata

retrieveAllDocuments

Namespace: org.apache.fineract.client.services

Mechanism: REST

Direction: N/A

Path/Topic: v1/{entityType}/{entityId}/documents

Description: Lists all documents for an entity

updateDocument

Namespace: org.apache.fineract.client.services

Mechanism: REST

Direction: N/A

Path/Topic: v1/{entityType}/{entityId}/documents/{documentId}

Description: Updates a document via Multipart PUT

Run Reports Endpoint

Namespace: org.apache.fineract.client.services

Mechanism: REST

Direction: CONSUMER

Path/Topic: v1/runreports/{reportName}

Description: Client-side definition for consuming the Fineract Run Reports REST API.

Create Image

Namespace: org.apache.fineract.client.services.ImagesApi

Mechanism: REST

Direction: PRODUCER

Path/Topic: v1/{entityType}/{entityId}/images

Description: Uploads a new image for an entity via Retrofit client.

Get Image

Namespace: org.apache.fineract.client.services.ImagesApi

Mechanism: REST

Direction: CONSUMER

Path/Topic: v1/{entityType}/{entityId}/images

Description: Retrieves an image for an entity via Retrofit client.

Update Image

Namespace: org.apache.fineract.client.services.ImagesApi

Mechanism: REST

Direction: PRODUCER

Path/Topic: v1/{entityType}/{entityId}/images

Description: Updates an existing image for an entity via Retrofit client.

Delete Image

Namespace: org.apache.fineract.client.services.ImagesApi

Mechanism: REST

Direction: PRODUCER

Path/Topic: v1/{entityType}/{entityId}/images

Description: Deletes an image for an entity via Retrofit client.

Fineract API Client

Namespace: org.apache.fineract.client.test.FineractClientDemo

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/

Description: Consumes the Fineract REST API to retrieve staff data using the generated FineractClient.

FineractClient

Namespace: org.apache.fineract.client.test.FineractClientTechnicalTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: http://test/

Description: The code configures a REST client SDK for the Fineract platform.

Multipart Body Factory

Namespace: org.apache.fineract.client.util

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: Helper utility to create OkHttp MultipartBody.Part objects for file uploads in REST clients.

Retrofit Client Execution

Namespace: org.apache.fineract.client.util

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Executes HTTP REST calls using the Retrofit library.

Retrofit Client Error Handling

Namespace: org.apache.fineract.client.util.CallFailedRuntimeException

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: This class acts as a wrapper for errors occurring during HTTP interactions performed by the Retrofit client library.

Fineract Platform API

Namespace: org.apache.fineract.client.util.FineractClient

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract Platform REST APIs via Retrofit interfaces.

retrieveAllConfiguredBusinessJobs

Namespace: org.apache.fineract.cob.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/jobs/names

Description: Endpoint to retrieve all configured business job names.

retrieveAllConfiguredBusinessStep

Namespace: org.apache.fineract.cob.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/jobs/{jobName}/steps

Description: Endpoint to retrieve business steps for a specific job.

updateJobBusinessStepConfig

Namespace: org.apache.fineract.cob.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/jobs/{jobName}/steps

Description: Endpoint to update business step configuration for a job.

retrieveAllAvailableBusinessStep

Namespace: org.apache.fineract.cob.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/jobs/{jobName}/available-steps

Description: Endpoint to retrieve available business steps for a specific job.

getOldestCOBProcessedLoan

Namespace: org.apache.fineract.cob.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/oldest-cob-closed

Description: Retrieves the oldest COB processed loan

executeLoanCOBCatchUp

Namespace: org.apache.fineract.cob.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/catch-up

Description: Executes Loan COB Catch Up

isCatchUpRunning

Namespace: org.apache.fineract.cob.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/is-catch-up-running

Description: Retrieves whether Loan COB catch up is running

getCobPartitions

Namespace: org.apache.fineract.cob.api.InternalCOBApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/internal/cob/partitions/{partitionSize}

Description: Endpoint to retrieve loan COB partitions for testing purposes.

placeLockOnLoanAccount

Namespace: org.apache.fineract.cob.api.InternalLoanAccountLockApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/internal/loans/{loanId}/place-lock/{lockOwner}

Description: Internal API endpoint to place a lock on a loan account for testing.

retrieveLockedAccounts

Namespace: org.apache.fineract.cob.api.LoanAccountLockApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/locked

Description: Endpoint to list locked loan accounts

Spring Batch Lifecycle

Namespace: org.apache.fineract.cob.listener.FineractCOBAfterJobListener

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Integrates with the Spring Batch framework to listen for job completion events via the JobExecution object.

inboundRequests

Namespace: org.apache.fineract.cob.loan

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Spring Integration input channel used by the RemotePartitioningWorkerStepBuilderFactory to receive partition requests from the manager step.

outboundRequests

Namespace: org.apache.fineract.cob.loan

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: outboundRequests

Description: Spring Integration DirectChannel used for Spring Batch Remote Partitioning. The manager step sends partition execution requests to workers via this channel.

Spring Batch Job Execution

Namespace: org.apache.fineract.cob.service

Mechanism: OTHER

Direction: BOTH

Path/Topic: N/A

Description: Launches Spring Batch jobs programmatically using JobLauncher.

List Audits

Namespace: org.apache.fineract.commands.api.AuditsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/audits

Description: Retrieve a list of audit entries with optional filtering and pagination.

Retrieve an Audit Entry

Namespace: org.apache.fineract.commands.api.AuditsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/audits/{auditId}

Description: Retrieve a specific audit entry by ID.

Audit Search Template

Namespace: org.apache.fineract.commands.api.AuditsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/audits/searchtemplate

Description: Retrieve metadata/template for building audit search queries.

List Maker Checker Entries

Namespace: org.apache.fineract.commands.api.MakercheckersApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/makercheckers

Description: Get a list of entries that can be checked by the requestor matching supplied criteria.

Maker Checker Search Template

Namespace: org.apache.fineract.commands.api.MakercheckersApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/makercheckers/searchtemplate

Description: Retrieve template data for building UI filters for maker-checker inbox.

Approve/Reject Entry

Namespace: org.apache.fineract.commands.api.MakercheckersApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/makercheckers/{auditId}

Description: Approve or reject a maker-checker entry based on the command parameter.

Delete Entry

Namespace: org.apache.fineract.commands.api.MakercheckersApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/makercheckers/{auditId}

Description: Delete a maker-checker entry.

retrieveTemplate

Namespace: org.apache.fineract.infrastructure.accountnumberformat.api.AccountNumberFormatsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /accountnumberformats/template

Description: Retrieve Account number format Template

retrieveAll

Namespace: org.apache.fineract.infrastructure.accountnumberformat.api.AccountNumberFormatsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /accountnumberformats

Description: List Account number formats

retrieveOne

Namespace: org.apache.fineract.infrastructure.accountnumberformat.api.AccountNumberFormatsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /accountnumberformats/{accountNumberFormatId}

Description: Retrieve an Account number format

create

Namespace: org.apache.fineract.infrastructure.accountnumberformat.api.AccountNumberFormatsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /accountnumberformats

Description: Create an Account number format

update

Namespace: org.apache.fineract.infrastructure.accountnumberformat.api.AccountNumberFormatsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /accountnumberformats/{accountNumberFormatId}

Description: Update an Account number format

delete

Namespace: org.apache.fineract.infrastructure.accountnumberformat.api.AccountNumberFormatsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /accountnumberformats/{accountNumberFormatId}

Description: Delete an Account number format

Swagger Schema Definitions

Namespace: org.apache.fineract.infrastructure.accountnumberformat.api.AccountNumberFormatsApiResourceSwagger

Mechanism: REST

Direction: BOTH

Path/Topic: N/A

Description: Defines the request and response schemas (DTOs) for the Account Number Formats REST API documentation.

AccountNumberFormats Resource

Namespace: org.apache.fineract.infrastructure.accountnumberformat.service.AccountNumberFormatConstants

Mechanism: REST

Direction: OTHER

Path/Topic: /v1/accountnumberformats

Description: Defines the relative URL path for the account number formats API endpoint.

retrieveImportDocuments

Namespace: org.apache.fineract.infrastructure.bulkimport.api.BulkImportApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/imports

Description: Endpoint to retrieve import documents based on entity type.

retriveOutputTemplateLocation

Namespace: org.apache.fineract.infrastructure.bulkimport.api.BulkImportApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/imports/getOutputTemplateLocation

Description: Endpoint to get the location of an output template.

getOutputTemplate

Namespace: org.apache.fineract.infrastructure.bulkimport.api.BulkImportApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/imports/downloadOutputTemplate

Description: Endpoint to download the output template file.

Excel Workbook Generation

Namespace: org.apache.fineract.infrastructure.bulkimport.populator.FixedDepositProductSheetPopulator

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Generates an Excel sheet using Apache POI for reporting or bulk import template purposes.

JAX-RS Response / Jersey Multipart

Namespace: org.apache.fineract.infrastructure.bulkimport.service

Mechanism: REST

Direction: BOTH

Path/Topic: n/a

Description: The service interface explicitly depends on JAX-RS 'Response' and Jersey's 'FormDataContentDisposition'. This indicates that the service is tightly coupled to the REST layer, handling HTTP response generation and multipart file upload details directly within the service contract.

BulkImportEvent Listener

Namespace: org.apache.fineract.infrastructure.bulkimport.service.BulkImportEventListener

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Listens for internal Spring Application Events to trigger bulk import processing asynchronously.

getTemplate

Namespace: org.apache.fineract.infrastructure.bulkimport.service.BulkImportWorkbookPopulatorService

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: The method returns a JAX-RS Response object, indicating it is tightly coupled to the REST API layer for returning HTTP responses (likely file downloads).

Template Download Response

Namespace: org.apache.fineract.infrastructure.bulkimport.service.BulkImportWorkbookPopulatorServiceImpl

Mechanism: REST

Direction: PRODUCER

Path/Topic: n/a

Description: Constructs and returns a JAX-RS Response object containing a generated Excel file, acting as the response producer for a REST API endpoint.

List all business dates

Namespace: org.apache.fineract.infrastructure.businessdate.api.BusinessDateApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/businessdate

Description: Endpoint to retrieve all configured business dates.

Retrieve a specific Business date

Namespace: org.apache.fineract.infrastructure.businessdate.api.BusinessDateApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/businessdate/{type}

Description: Endpoint to retrieve a specific business date by its type.

Update Business Date

Namespace: org.apache.fineract.infrastructure.businessdate.api.BusinessDateApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/businessdate

Description: Endpoint to update business date settings.

Cache API Schemas

Namespace: org.apache.fineract.infrastructure.cache.api

Mechanism: REST

Direction: BOTH

Path/Topic: N/A

Description: Defines the request and response schemas (DTOs) for the Cache Management REST API documentation.

Retrieve Cache Types

Namespace: org.apache.fineract.infrastructure.cache.api.CacheApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/caches

Description: Endpoint to retrieve the list of available cache configurations.

Switch Cache

Namespace: org.apache.fineract.infrastructure.cache.api.CacheApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/caches

Description: Endpoint to switch the active cache implementation.

retrieveAllEmails

Namespace: org.apache.fineract.infrastructure.campaigns.email.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/email

Description: Endpoint to retrieve all email messages.

retrievePendingEmail

Namespace: org.apache.fineract.infrastructure.campaigns.email.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/email/pendingEmail

Description: Endpoint to retrieve pending email messages.

retrieveSentEmail

Namespace: org.apache.fineract.infrastructure.campaigns.email.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/email/sentEmail

Description: Endpoint to retrieve sent email messages.

retrieveAllEmailByStatus

Namespace: org.apache.fineract.infrastructure.campaigns.email.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/email/messageByStatus

Description: Endpoint to retrieve email messages by status and date range.

retrieveFailedEmail

Namespace: org.apache.fineract.infrastructure.campaigns.email.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/email/failedEmail

Description: Endpoint to retrieve failed email messages.

create

Namespace: org.apache.fineract.infrastructure.campaigns.email.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/email

Description: Endpoint to create a new email.

retrieveOne

Namespace: org.apache.fineract.infrastructure.campaigns.email.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/email/{resourceId}

Description: Endpoint to retrieve a single email by ID.

update

Namespace: org.apache.fineract.infrastructure.campaigns.email.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/email/{resourceId}

Description: Endpoint to update an existing email.

delete

Namespace: org.apache.fineract.infrastructure.campaigns.email.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/email/{resourceId}

Description: Endpoint to delete an email.

Email Configuration API

Namespace: org.apache.fineract.infrastructure.campaigns.email.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/email/configuration

Description: API endpoints for managing email configurations.

Email Campaign API

Namespace: org.apache.fineract.infrastructure.campaigns.email.api.EmailCampaignApiResource

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/email/campaign

Description: RESTful endpoints for managing email campaigns.

EMAIL_CAMPAIGN ACTIVATE Command Handler

Namespace: org.apache.fineract.infrastructure.campaigns.email.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers as a handler for the ACTIVATE action on EMAIL_CAMPAIGN entities within the Fineract command framework.

SMTP Email Server

Namespace: org.apache.fineract.infrastructure.campaigns.email.service

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Sends emails via SMTP protocol using JavaMailSenderImpl.

SMS Gateway Request Preparation

Namespace: org.apache.fineract.infrastructure.campaigns.helper

Mechanism: REST

Direction: N/A

Path/Topic: {endPoint}/{apiEndPoint}

Description: Prepares the URI and HttpEntity (headers and body) for calling an external SMS Gateway REST API.

EmailMessageJobEmailService

Namespace: org.apache.fineract.infrastructure.campaigns.jobs.executeemail.ExecuteEmailTasklet

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Service used to send emails with optional attachments.

ReadReportingService

Namespace: org.apache.fineract.infrastructure.campaigns.jobs.executeemail.ExecuteEmailTasklet

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Service used to generate Pentaho reports as byte streams for email attachments.

ReportMailingJobEmailService

Namespace: org.apache.fineract.infrastructure.campaigns.jobs.executereportmailingjobs.ExecuteReportMailingJobsTasklet

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Sends generated reports via email to recipients.

SMS Gateway Report Service

Namespace: org.apache.fineract.infrastructure.campaigns.jobs.getdeliveryreportsfromsmsgateway

Mechanism: REST

Direction: CONSUMER

Path/Topic: sms/report (dynamically resolved)

Description: Calls an external SMS gateway to retrieve delivery reports for a batch of message IDs.

SMS Gateway Intermediate Server

Namespace: org.apache.fineract.infrastructure.campaigns.jobs.sendmessagetosmsgateway.SendMessageToSmsGatewayTasklet

Mechanism: REST

Direction: PRODUCER

Path/Topic: Dynamic (determined by smsConfigUtils)

Description: Sends a batch of SMS message data to an external or intermediate SMS gateway via HTTP POST.

Retrieve Template

Namespace: org.apache.fineract.infrastructure.campaigns.sms.api.SmsCampaignApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/smscampaigns/template

Description: Endpoint to retrieve the template for creating a new SMS campaign.

Create Campaign

Namespace: org.apache.fineract.infrastructure.campaigns.sms.api.SmsCampaignApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/smscampaigns

Description: Endpoint to create a new SMS campaign.

Retrieve Campaign

Namespace: org.apache.fineract.infrastructure.campaigns.sms.api.SmsCampaignApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/smscampaigns/{resourceId}

Description: Endpoint to retrieve a specific SMS campaign by ID.

List Campaigns

Namespace: org.apache.fineract.infrastructure.campaigns.sms.api.SmsCampaignApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/smscampaigns

Description: Endpoint to list SMS campaigns with pagination and search.

Update Campaign

Namespace: org.apache.fineract.infrastructure.campaigns.sms.api.SmsCampaignApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/smscampaigns/{campaignId}

Description: Endpoint to update an existing SMS campaign.

Handle Commands

Namespace: org.apache.fineract.infrastructure.campaigns.sms.api.SmsCampaignApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/smscampaigns/{campaignId}

Description: Endpoint to perform actions (activate, close, reactivate) on a campaign.

Preview Message

Namespace: org.apache.fineract.infrastructure.campaigns.sms.api.SmsCampaignApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/smscampaigns/preview

Description: Endpoint to preview the SMS message.

Delete Campaign

Namespace: org.apache.fineract.infrastructure.campaigns.sms.api.SmsCampaignApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/smscampaigns/{campaignId}

Description: Endpoint to delete an SMS campaign.

Delete SMS Campaign

Namespace: org.apache.fineract.infrastructure.campaigns.sms.handler

Mechanism: REST

Direction: CONSUMER

Path/Topic: /smscampaigns/{id}

Description: This handler is mapped to a REST API endpoint via the Fineract Command infrastructure. It handles the DELETE action for the SMSCAMPAIGN entity.

Fineract Command Bus

Namespace: org.apache.fineract.infrastructure.campaigns.sms.handler.ActivateSmsCampaignCommandHandler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers as a handler for the 'ACTIVATE' action on 'SMSCAMPAIGN' entities via the @CommandType annotation.

BusinessEventNotifierService

Namespace: org.apache.fineract.infrastructure.campaigns.sms.service.SmsCampaignDomainServiceImpl

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Internal event bus subscription for business events.

SMS Provider Service

Namespace: org.apache.fineract.infrastructure.campaigns.sms.service.SmsCampaignDropdownReadPlatformServiceImpl

Mechanism: REST

Direction: CONSUMER

Path/Topic: Dynamic (determined by smsConfigUtils.getMessageGateWayRequestURI)

Description: Fetches configuration for SMS providers from an external service or bridge.

SmsMessageScheduledJobService

Namespace: org.apache.fineract.infrastructure.campaigns.sms.service.SmsCampaignWritePlatformServiceJpaImpl

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Internal service call to trigger scheduled message sending.

Codes API

Namespace: org.apache.fineract.infrastructure.codes.api

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/codes

Description: RESTful endpoints for managing Codes and Code Values.

CodeValuesApi Schemas

Namespace: org.apache.fineract.infrastructure.codes.api

Mechanism: REST

Direction: OTHER

Path/Topic: N/A

Description: Defines the Swagger/OpenAPI schemas for REST API request and response bodies related to Code Values management.

retrieveAllCodeValues

Namespace: org.apache.fineract.infrastructure.codes.api.CodeValuesApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/codes/{codeId}/codevalues

Description: List Code Values for a given Code

createCodeValue

Namespace: org.apache.fineract.infrastructure.codes.api.CodeValuesApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/codes/{codeId}/codevalues

Description: Create a Code Value

retrieveCodeValue

Namespace: org.apache.fineract.infrastructure.codes.api.CodeValuesApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/codes/{codeId}/codevalues/{codeValueId}

Description: Retrieve a Code Value

updateCodeValue

Namespace: org.apache.fineract.infrastructure.codes.api.CodeValuesApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/codes/{codeId}/codevalues/{codeValueId}

Description: Update a Code Value

deleteCodeValue

Namespace: org.apache.fineract.infrastructure.codes.api.CodeValuesApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/codes/{codeId}/codevalues/{codeValueId}

Description: Delete a Code Value

Retrieve External Services Configuration

Namespace: org.apache.fineract.infrastructure.configuration.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/externalservice/{servicename}

Description: Endpoint to retrieve configuration details for a specific external service (e.g., SMTP, S3).

Update External Service

Namespace: org.apache.fineract.infrastructure.configuration.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/externalservice/{servicename}

Description: Endpoint to update configuration details for a specific external service.

Retrieve Global Configuration

Namespace: org.apache.fineract.infrastructure.configuration.api.GlobalConfigurationApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/configurations

Description: Endpoint to retrieve all global configurations or survey configurations.

Retrieve One Configuration

Namespace: org.apache.fineract.infrastructure.configuration.api.GlobalConfigurationApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/configurations/{configId}

Description: Endpoint to retrieve a specific configuration by ID.

Retrieve One Configuration By Name

Namespace: org.apache.fineract.infrastructure.configuration.api.GlobalConfigurationApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/configurations/name/{name}

Description: Endpoint to retrieve a specific configuration by Name.

Update Configuration

Namespace: org.apache.fineract.infrastructure.configuration.api.GlobalConfigurationApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/configurations/{configId}

Description: Endpoint to update a specific configuration item.

JAX-RS Parameter Parsing

Namespace: org.apache.fineract.infrastructure.core.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: n/a

Description: This class is a utility for parsing JAX-RS query parameters, acting as a helper for REST API controllers.

AWS S3 Client

Namespace: org.apache.fineract.infrastructure.core.config

Mechanism: OTHER

Direction: BOTH

Path/Topic: N/A

Description: Configures the AWS SDK S3 Client for interacting with Amazon S3 storage.

requestQueueName

Namespace: org.apache.fineract.infrastructure.core.config.FineractProperties

Mechanism: JMS-QUEUE

Direction: CONSUMER

Path/Topic: ${fineract.remoteJobMessageHandler.jms.requestQueueName}

Description: JMS Queue for handling remote jobs.

Remote Job Kafka Topic

Namespace: org.apache.fineract.infrastructure.core.config.FineractProperties

Mechanism: KAFKA-TOPIC

Direction: CONSUMER

Path/Topic: ${fineract.remoteJobMessageHandler.kafka.topic.name}

Description: Kafka topic for handling remote jobs.

eventQueueName

Namespace: org.apache.fineract.infrastructure.core.config.FineractProperties

Mechanism: JMS-QUEUE

Direction: PRODUCER

Path/Topic: ${fineract.events.external.producer.jms.eventQueueName}

Description: JMS Queue for producing external events.

eventTopicName

Namespace: org.apache.fineract.infrastructure.core.config.FineractProperties

Mechanism: JMS-TOPIC

Direction: PRODUCER

Path/Topic: ${fineract.events.external.producer.jms.eventTopicName}

Description: JMS Topic for producing external events.

External Events Kafka Topic

Namespace: org.apache.fineract.infrastructure.core.config.FineractProperties

Mechanism: KAFKA-TOPIC

Direction: PRODUCER

Path/Topic: ${fineract.events.external.producer.kafka.topic.name}

Description: Kafka topic for producing external events.

API Security Configuration

Namespace: org.apache.fineract.infrastructure.core.config.OAuth2SecurityConfig

Mechanism: REST

Direction: N/A

Path/Topic: /api/**

Description: Configures security rules and filters for all REST API endpoints under /api/**. It defines public endpoints (e.g., /api/*/authentication) and protected endpoints requiring OAuth2 authentication.

Fineract API Security

Namespace: org.apache.fineract.infrastructure.core.config.SecurityConfig

Mechanism: REST

Direction: BOTH

Path/Topic: /api/**

Description: Configures security rules, authentication, and authorization for the Fineract REST API endpoints.

JCache Integration

Namespace: org.apache.fineract.infrastructure.core.config.cache

Mechanism: OTHER

Direction: BOTH

Path/Topic: N/A

Description: Integrates with a JSR-107 (JCache) provider via Spring's JCacheCacheManager to handle actual caching operations for supported cache names.

Spring Cache Abstraction

Namespace: org.apache.fineract.infrastructure.core.config.cache

Mechanism: OTHER

Direction: BOTH

Path/Topic: N/A

Description: Integrates with the Spring Caching abstraction to manage cache lifecycles.

Multipart Upload Request Binding

Namespace: org.apache.fineract.infrastructure.core.data.UploadRequest

Mechanism: REST

Direction: CONSUMER

Path/Topic: n/a

Description: This class is used as a binding target for JAX-RS multipart/form-data requests. The @FormDataParam annotations map form fields to class properties.

Echo Headers Endpoint

Namespace: org.apache.fineract.infrastructure.core.debug

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/echo

Description: A debugging endpoint that returns the HTTP headers sent in the request.

MultiDisbursementDataRequiredExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exception

Mechanism: REST

Direction: N/A

Path/Topic: N/A

Description: JAX-RS ExceptionMapper that intercepts MultiDisbursementDataRequiredException and returns an HTTP 403 Forbidden response.

HttpMessageNotReadableException Mapper

Namespace: org.apache.fineract.infrastructure.core.exception

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: JAX-RS ExceptionMapper that intercepts JSON parsing errors in REST API requests and returns formatted error responses.

LinkedAccountRequiredExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exception

Mechanism: REST

Direction: N/A

Path/Topic: N/A

Description: JAX-RS ExceptionMapper that intercepts LinkedAccountRequiredException and returns an HTTP 403 response.

LoanIdsHardLockedExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exception

Mechanism: REST

Direction: N/A

Path/Topic: n/a

Description: JAX-RS Exception Mapper that intercepts LoanIdsHardLockedException and returns an HTTP 409 Conflict response.

UnrecognizedQueryParamExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: n/a

Description: JAX-RS Exception Mapper that intercepts UnrecognizedQueryParamException and returns a standardized JSON error response.

IdempotentCommandExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: n/a

Description: JAX-RS ExceptionMapper that intercepts idempotent command exceptions and formats the HTTP response.

UnsupportedParameterExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: JAX-RS ExceptionMapper that intercepts UnsupportedParameterException and returns HTTP 400 responses.

UnsupportedCommandExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: JAX-RS ExceptionMapper that intercepts UnsupportedCommandException and returns a standardized HTTP 400 Bad Request JSON response.

PlatformDomainRuleExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: JAX-RS Exception Mapper that intercepts AbstractPlatformDomainRuleException and returns HTTP 403 responses.

ConcurrencyFailureExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: n/a

Description: JAX-RS ExceptionMapper that intercepts ConcurrencyFailureException and returns HTTP 409 Conflict responses.

PlatformResourceNotFoundExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: n/a

Description: JAX-RS Exception Mapper that intercepts AbstractPlatformResourceNotFoundException and converts it into an HTTP 404 REST response.

PlatformApiDataValidationExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: JAX-RS ExceptionMapper that intercepts PlatformApiDataValidationException and returns an HTTP 400 Bad Request response.

ExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: JAX-RS ExceptionMapper implementation that intercepts AbstractPlatformServiceUnavailableException and returns HTTP 503 responses.

NoAuthorizationException Handler

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: N/A

Path/Topic: N/A

Description: Global exception handler for NoAuthorizationException that maps the error to an HTTP 403 Forbidden response.

AccessDeniedExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: JAX-RS ExceptionMapper that intercepts AccessDeniedException and maps it to an HTTP 403 Forbidden response.

InvalidJsonExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: N/A

Description: JAX-RS Exception Mapper for handling invalid JSON requests

InvalidTenantIdentifierExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: n/a

Description: JAX-RS Exception Mapper for handling invalid tenant identifiers.

MalformedJsonExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: BOTH

Path/Topic: Global (Exception Handler)

Description: JAX-RS Exception Mapper for handling invalid JSON request bodies

BadCredentialsException Handler

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: n/a

Description: Global exception handler for REST API authentication failures.

Authentication Error Response

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: Global (intercepts all unauthenticated requests)

Description: Returns a standard JSON error response when API authentication fails.

UnAuthenticatedUserExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: N/A

Path/Topic: n/a

Description: JAX-RS ExceptionMapper that intercepts UnAuthenticatedUserException and returns an HTTP 401 response.

JsonPathExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: N/A

Description: JAX-RS ExceptionMapper provider that intercepts JsonPathException and returns HTTP 400 responses.

InvalidInstanceTypeMethodExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: JAX-RS Exception Mapper that converts InvalidInstanceTypeMethodException to HTTP 405 responses.

LoanAccountLockCannotBeOverruledExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: N/A

Path/Topic: N/A

Description: JAX-RS ExceptionMapper that intercepts LoanAccountLockCannotBeOverruledException and maps it to an HTTP 409 Conflict response.

BusinessStepExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: JAX-RS ExceptionMapper that intercepts BusinessStepException and returns a 400 Bad Request JSON response.

JobIsNotFoundOrNotEnabledExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: JAX-RS ExceptionMapper that intercepts JobIsNotFoundOrNotEnabledException and returns an HTTP 403 Forbidden response.

Global RuntimeException Handler

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: JAX-RS ExceptionMapper that intercepts RuntimeExceptions and converts them to HTTP 500 responses.

BusinessStepNotBelongsToJobExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper.BusinessStepNotBelongsToJobExceptionMapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: JAX-RS ExceptionMapper that intercepts BusinessStepNotBelongsToJobException and returns an HTTP 400 response.

JsonSyntaxExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper.JsonSyntaxExceptionMapper

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: N/A

Description: JAX-RS Exception Mapper for handling malformed JSON requests globally.

OptimisticLockExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper.OptimisticLockExceptionMapper

Mechanism: REST

Direction: OTHER

Path/Topic: N/A

Description: JAX-RS Exception Mapper that intercepts OptimisticLockException and returns HTTP 409 responses.

PlatformDataIntegrityExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper.PlatformDataIntegrityExceptionMapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: JAX-RS Exception Mapper that intercepts PlatformDataIntegrityException and returns a standardized JSON error response.

PlatformInternalServerExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper.PlatformInternalServerExceptionMapper

Mechanism: REST

Direction: N/A

Path/Topic: Global Exception Handler

Description: JAX-RS ExceptionMapper that intercepts PlatformInternalServerException and converts it to an HTTP 500 REST response.

ExceptionMapper

Namespace: org.apache.fineract.infrastructure.core.exceptionmapper.PlatformRequestBodyItemLimitValidationExceptionMapper

Mechanism: REST

Direction: BOTH

Path/Topic: Global (Exception Handler)

Description: JAX-RS Exception Mapper that intercepts PlatformRequestBodyItemLimitValidationException and returns an HTTP 400 response.

Idempotency Filter

Namespace: org.apache.fineract.infrastructure.core.filters

Mechanism: REST

Direction: BOTH

Path/Topic: /*

Description: Intercepts HTTP requests to extract idempotency keys and cache response bodies for storage.

Correlation Header Interceptor

Namespace: org.apache.fineract.infrastructure.core.filters

Mechanism: REST

Direction: CONSUMER

Path/Topic: /*

Description: Intercepts all incoming HTTP requests to extract a correlation ID header for logging context.

Batch Request Filter Chain

Namespace: org.apache.fineract.infrastructure.core.filters

Mechanism: REST

Direction: OTHER

Path/Topic: n/a

Description: This class processes JAX-RS `UriInfo` objects as part of a batch request handling pipeline, indicating it operates within the context of a RESTful service architecture.

HTTP Request/Response Logging

Namespace: org.apache.fineract.infrastructure.core.filters

Mechanism: REST

Direction: BOTH

Path/Topic: /*

Description: Intercepts all HTTP requests handled by the servlet container to log request and response metadata.

CORS Filter

Namespace: org.apache.fineract.infrastructure.core.filters.ResponseCorsFilter

Mechanism: REST

Direction: BOTH

Path/Topic: N/A

Description: Intercepts HTTP requests to inject Cross-Origin Resource Sharing (CORS) headers into the response, enabling browser-based clients to access the API.

JerseyJacksonObjectArgumentHandler

Namespace: org.apache.fineract.infrastructure.core.jersey

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: n/a

Description: JAX-RS Provider for JSON serialization/deserialization

Base API Path

Namespace: org.apache.fineract.infrastructure.core.jersey.JerseyConfig

Mechanism: REST

Direction: BOTH

Path/Topic: /api

Description: Configures the root path for all JAX-RS REST resources in the application.

ActiveMQ Message Factory

Namespace: org.apache.fineract.infrastructure.core.messaging.jms

Mechanism: ACTIVEMQ-QUEUE

Direction: PRODUCER

Path/Topic: N/A

Description: Creates ActiveMQ-specific BytesMessage objects for messaging operations.

createByteMessage

Namespace: org.apache.fineract.infrastructure.core.messaging.jms

Mechanism: JMS-QUEUE

Direction: PRODUCER

Path/Topic: N/A

Description: Factory method for creating JMS BytesMessage objects, facilitating the production of JMS messages.

SMTP Mail Server

Namespace: org.apache.fineract.infrastructure.core.service

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Sends emails via SMTP protocol using Spring's JavaMailSenderImpl.

fetchCreditReport

Namespace: org.apache.fineract.infrastructure.creditbureau.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/creditBureauIntegration/creditReport

Description: Endpoint to fetch a credit report.

addCreditReport

Namespace: org.apache.fineract.infrastructure.creditbureau.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/creditBureauIntegration/addCreditReport

Description: Endpoint to upload a credit report file.

saveCreditReport

Namespace: org.apache.fineract.infrastructure.creditbureau.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/creditBureauIntegration/saveCreditReport

Description: Endpoint to save a fetched credit report to the database.

getSavedCreditReport

Namespace: org.apache.fineract.infrastructure.creditbureau.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/creditBureauIntegration/creditReport/{creditBureauId}

Description: Endpoint to retrieve saved credit reports by credit bureau ID.

deleteCreditReport

Namespace: org.apache.fineract.infrastructure.creditbureau.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/creditBureauIntegration/deleteCreditReport/{creditBureauId}

Description: Endpoint to delete a saved credit report.

getCreditBureau

Namespace: org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/CreditBureauConfiguration

Description: Retrieves credit bureau data

getCreditBureauLoanProductMapping

Namespace: org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/CreditBureauConfiguration/mappings

Description: Retrieves credit bureau loan product mappings

getOrganisationCreditBureau

Namespace: org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/CreditBureauConfiguration/organisationCreditBureau

Description: Retrieves organisation credit bureau data

getConfiguration

Namespace: org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/CreditBureauConfiguration/config/{organisationCreditBureauId}

Description: Retrieves configuration for a specific organisation credit bureau

fetchLoanProducts

Namespace: org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/CreditBureauConfiguration/loanProduct

Description: Fetches loan products associated with credit bureaus

fetchMappingByLoanProductId

Namespace: org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/CreditBureauConfiguration/loanProduct/{loanProductId}

Description: Fetches mapping for a specific loan product

updateCreditBureau

Namespace: org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/CreditBureauConfiguration/organisationCreditBureau

Description: Updates credit bureau information

updateCreditBureauLoanProductMapping

Namespace: org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/CreditBureauConfiguration/mappings

Description: Updates credit bureau loan product mapping

addOrganisationCreditBureau

Namespace: org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/CreditBureauConfiguration/organisationCreditBureau/{organisationCreditBureauId}

Description: Adds an organisation credit bureau

createCreditBureauLoanProductMapping

Namespace: org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/CreditBureauConfiguration/mappings/{organisationCreditBureauId}

Description: Creates a credit bureau loan product mapping

createCreditBureauConfiguration

Namespace: org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/CreditBureauConfiguration/configuration/{creditBureauId}

Description: Creates a credit bureau configuration

updateCreditBureauConfiguration

Namespace: org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/CreditBureauConfiguration/configuration/{configurationId}

Description: Updates a credit bureau configuration

ThitsaWorks API Connection

Namespace: org.apache.fineract.infrastructure.creditbureau.service

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: Dynamic (passed as parameter 'url')

Description: The interface defines a method 'okHttpConnectionMethod' which explicitly suggests the use of an HTTP client to connect to an external URL. The parameters include authentication details (userName, password, subscriptionKey) and a target URL, characteristic of a RESTful integration.

Credit Report File Upload

Namespace: org.apache.fineract.infrastructure.creditbureau.service.CreditReportWritePlatformService

Mechanism: REST

Direction: CONSUMER

Path/Topic: n/a

Description: The method `addCreditReport` accepts `FormDataContentDisposition`, which is a Jersey specific class used for handling Multipart file uploads in REST APIs. This indicates the service is designed to process files received via a REST endpoint.

ThitsaWorks Credit Bureau API

Namespace: org.apache.fineract.infrastructure.creditbureau.service.ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl

Mechanism: REST

Direction: CONSUMER

Path/Topic: Dynamic (configured in DB)

Description: External integration to ThitsaWorks Credit Bureau for credit reporting services.

ThitsaWorks Credit Bureau API

Namespace: org.apache.fineract.infrastructure.creditbureau.service.ThitsaWorksCreditBureauIntegrationWritePlatformServiceImplTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: Various (mocked): /api/...

Description: The test mocks interactions with the ThitsaWorks Credit Bureau API for operations like getting tokens, searching NRC, and retrieving credit reports.

Reports API

Namespace: org.apache.fineract.infrastructure.dataqueries.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/reports

Description: RESTful endpoints for managing reports.

Datatables API

Namespace: org.apache.fineract.infrastructure.dataqueries.api.DatatablesApiResource

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/datatables

Description: RESTful API for managing custom data tables and their contents.

retrieveAll

Namespace: org.apache.fineract.infrastructure.dataqueries.api.EntityDatatableChecksApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/entityDatatableChecks

Description: List Entity-Datatable Checks

getTemplate

Namespace: org.apache.fineract.infrastructure.dataqueries.api.EntityDatatableChecksApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/entityDatatableChecks/template

Description: Retrieve Entity-Datatable Checks Template

createEntityDatatableCheck

Namespace: org.apache.fineract.infrastructure.dataqueries.api.EntityDatatableChecksApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/entityDatatableChecks

Description: Create Entity-Datatable Checks

deleteDatatable

Namespace: org.apache.fineract.infrastructure.dataqueries.api.EntityDatatableChecksApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/entityDatatableChecks/{entityDatatableCheckId}

Description: Delete Entity-Datatable Checks

Run Reports API

Namespace: org.apache.fineract.infrastructure.dataqueries.api.RunreportsApiResource

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/runreports

Description: API for running reports and retrieving export options.

Available Exports Endpoint

Namespace: org.apache.fineract.infrastructure.dataqueries.api.RunreportsApiResource

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/runreports/availableExports/{reportName}

Description: Endpoint to get available export types for a report.

Run Report Endpoint

Namespace: org.apache.fineract.infrastructure.dataqueries.api.RunreportsApiResource

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/runreports/{reportName}

Description: Endpoint to execute a report.

retrieveReportCSV

Namespace: org.apache.fineract.infrastructure.dataqueries.service

Mechanism: REST

Direction: PRODUCER

Path/Topic: n/a

Description: The method 'retrieveReportCSV' returns 'jakarta.ws.rs.core.StreamingOutput', which is a specific JAX-RS type used for streaming data in RESTful web services. This indicates that the service is tightly coupled to a REST API implementation.

AWS S3 Bucket

Namespace: org.apache.fineract.infrastructure.dataqueries.service.export

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Uploads generated CSV report files to an Amazon S3 bucket.

addNewClientImage (Multipart)

Namespace: org.apache.fineract.infrastructure.documentmanagement.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/{entity}/{entityId}/images

Description: Uploads a new image via Multipart Form Data

addNewClientImage (Base64)

Namespace: org.apache.fineract.infrastructure.documentmanagement.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/{entity}/{entityId}/images

Description: Uploads a new image via Base64 Data URL

retrieveImage

Namespace: org.apache.fineract.infrastructure.documentmanagement.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/{entity}/{entityId}/images

Description: Retrieves an image

updateClientImage (Multipart)

Namespace: org.apache.fineract.infrastructure.documentmanagement.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/{entity}/{entityId}/images

Description: Updates an image via Multipart Form Data

updateClientImage (Base64)

Namespace: org.apache.fineract.infrastructure.documentmanagement.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/{entity}/{entityId}/images

Description: Updates an image via Base64 Data URL

deleteClientImage

Namespace: org.apache.fineract.infrastructure.documentmanagement.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/{entity}/{entityId}/images

Description: Deletes an image

Document Upload Schema

Namespace: org.apache.fineract.infrastructure.documentmanagement.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Defines the schema for multipart/form-data requests used in document uploads via the DocumentUploadRequest inner class.

JAX-RS Response Builder

Namespace: org.apache.fineract.infrastructure.documentmanagement.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: Constructs standard JAX-RS Response objects for file downloads, setting headers for Content-Disposition and Content-Type.

retrieveAllDocuments

Namespace: org.apache.fineract.infrastructure.documentmanagement.api.DocumentManagementApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/{entityType}/{entityId}/documents

Description: List documents for an entity

createDocument

Namespace: org.apache.fineract.infrastructure.documentmanagement.api.DocumentManagementApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/{entityType}/{entityId}/documents

Description: Create/Upload a document

updateDocument

Namespace: org.apache.fineract.infrastructure.documentmanagement.api.DocumentManagementApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/{entityType}/{entityId}/documents/{documentId}

Description: Update a document

getDocument

Namespace: org.apache.fineract.infrastructure.documentmanagement.api.DocumentManagementApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/{entityType}/{entityId}/documents/{documentId}

Description: Retrieve a single document metadata

downloadFile

Namespace: org.apache.fineract.infrastructure.documentmanagement.api.DocumentManagementApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/{entityType}/{entityId}/documents/{documentId}/attachment

Description: Download document binary

deleteDocument

Namespace: org.apache.fineract.infrastructure.documentmanagement.api.DocumentManagementApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/{entityType}/{entityId}/documents/{documentId}

Description: Delete a document

Amazon S3

Namespace: org.apache.fineract.infrastructure.documentmanagement.contentrepository.S3ContentRepository

Mechanism: OTHER

Direction: BIDIRECTIONAL

Path/Topic: N/A

Description: Integration with Amazon Simple Storage Service (S3) for storing and retrieving documents and images.

Fineract Entity API

Namespace: org.apache.fineract.infrastructure.entityaccess.api

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/entitytoentitymapping

Description: REST API endpoints for managing entity-to-entity mappings.

External Event Configuration API

Namespace: org.apache.fineract.infrastructure.event.external.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/externalevents/configuration

Description: API endpoints for configuring external events.

externalEventsKafkaTemplate

Namespace: org.apache.fineract.infrastructure.event.external.config

Mechanism: KAFKA-TOPIC

Direction: PRODUCER

Path/Topic: N/A

Description: Configures the Kafka Producer infrastructure to allow the application to send messages to Kafka brokers.

External Events Topic

Namespace: org.apache.fineract.infrastructure.event.external.config

Mechanism: KAFKA-TOPIC

Direction: PRODUCER

Path/Topic: Configured via fineractProperties.getEvents().getExternal().getProducer().getKafka().getTopic().getName()

Description: Configures the creation of a Kafka topic for external events using Spring Kafka Admin.

externalEventDestination

Namespace: org.apache.fineract.infrastructure.event.external.config.ExternalEventJMSConfiguration

Mechanism: ACTIVEMQ-TOPIC

Direction: PRODUCER

Path/Topic: Configured via property: fineract.events.external.producer.jms.eventTopicName

Description: ActiveMQ Topic for publishing external events

externalEventDestination

Namespace: org.apache.fineract.infrastructure.event.external.config.ExternalEventJMSConfiguration

Mechanism: ACTIVEMQ-QUEUE

Direction: PRODUCER

Path/Topic: Configured via property: fineract.events.external.producer.jms.eventQueueName

Description: ActiveMQ Queue for publishing external events

PURGE_EXTERNAL_EVENTS

Namespace: org.apache.fineract.infrastructure.event.external.jobs.PurgeExternalEventsConfig

Mechanism: OTHER

Direction: OTHER

Path/Topic: N/A

Description: Spring Batch Job definition for purging external events

External Event Producer (JMS)

Namespace: org.apache.fineract.infrastructure.event.external.jobs.SendAsynchronousEventsTasklet

Mechanism: JMS-TOPIC

Direction: PRODUCER

Path/Topic: N/A

Description: Sends external events to a JMS provider if enabled in configuration.

External Event Producer (Kafka)

Namespace: org.apache.fineract.infrastructure.event.external.jobs.SendAsynchronousEventsTasklet

Mechanism: KAFKA-TOPIC

Direction: PRODUCER

Path/Topic: N/A

Description: Sends external events to a Kafka topic if enabled in configuration.

ExternalEventProducer

Namespace: org.apache.fineract.infrastructure.event.external.jobs.SendAsynchronousEventsTaskletTest

Mechanism: JMS-QUEUE

Direction: PRODUCER

Path/Topic: n/a

Description: The code configures and uses an ExternalEventProducer to send asynchronous events. The configuration explicitly enables JMS properties.

externalEventDestination

Namespace: org.apache.fineract.infrastructure.event.external.producer.jms

Mechanism: JMS-TOPIC

Direction: PRODUCER

Path/Topic: N/A

Description: Sends external events to a JMS destination (inferred as a Topic due to 'Event' naming, though implemented as a generic Destination).

External Events Producer

Namespace: org.apache.fineract.infrastructure.event.external.producer.jms

Mechanism: JMS-TOPIC

Direction: PRODUCER

Path/Topic: destination (mocked)

Description: Produces external events to a JMS destination (Topic or Queue) using Jakarta JMS API.

unit-test

Namespace: org.apache.fineract.infrastructure.event.external.producer.kafka

Mechanism: KAFKA-TOPIC

Direction: PRODUCER

Path/Topic: unit-test

Description: The test verifies a producer that sends binary messages to a Kafka topic.

Configured via fineractProperties

Namespace: org.apache.fineract.infrastructure.event.external.producer.kafka

Mechanism: KAFKA-TOPIC

Direction: PRODUCER

Path/Topic: kafkaProperties.getTopic().getName()

Description: Produces binary event messages to a Kafka topic defined in the application properties.

Register Device

Namespace: org.apache.fineract.infrastructure.gcm.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/device/registration

Description: Endpoint to register a new device.

Retrieve All Device Registrations

Namespace: org.apache.fineract.infrastructure.gcm.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/device/registration

Description: Endpoint to retrieve all device registrations.

Retrieve Device Registration by Client ID

Namespace: org.apache.fineract.infrastructure.gcm.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/device/registration/client/{clientId}

Description: Endpoint to retrieve device registration for a specific client.

Retrieve Device Registration by ID

Namespace: org.apache.fineract.infrastructure.gcm.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/device/registration/{id}

Description: Endpoint to retrieve a specific device registration.

Update Device Registration

Namespace: org.apache.fineract.infrastructure.gcm.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/device/registration/{id}

Description: Endpoint to update an existing device registration.

Delete Device Registration

Namespace: org.apache.fineract.infrastructure.gcm.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/device/registration/{id}

Description: Endpoint to delete a device registration.

GCM/FCM Send Endpoint

Namespace: org.apache.fineract.infrastructure.gcm.domain

Mechanism: REST

Direction: N/A

Path/Topic: Configured via 'endpoint' field (typically https://fcm.googleapis.com/fcm/send)

Description: Sends downstream messages to the Google Cloud Messaging (or Firebase Cloud Messaging) server.

GCM/FCM Notification Service

Namespace: org.apache.fineract.infrastructure.gcm.service

Mechanism: REST

Direction: PRODUCER

Path/Topic: Defined in notificationConfigurationData.getFcmEndPoint()

Description: Sends push notifications to mobile devices via Google Cloud Messaging or Firebase Cloud Messaging.

Retrieve Hooks

Namespace: org.apache.fineract.infrastructure.hooks.api.HookApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/hooks

Description: Returns the list of hooks.

Retrieve a Hook

Namespace: org.apache.fineract.infrastructure.hooks.api.HookApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/hooks/{hookId}

Description: Returns the details of a Hook.

Retrieve Hooks Template

Namespace: org.apache.fineract.infrastructure.hooks.api.HookApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/hooks/template

Description: Returns the template data for creating hooks.

Create a Hook

Namespace: org.apache.fineract.infrastructure.hooks.api.HookApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/hooks

Description: Creates a new hook.

Update a Hook

Namespace: org.apache.fineract.infrastructure.hooks.api.HookApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/hooks/{hookId}

Description: Updates the details of a hook.

Delete a Hook

Namespace: org.apache.fineract.infrastructure.hooks.api.HookApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/hooks/{hookId}

Description: Deletes a hook.

Hook API Schemas

Namespace: org.apache.fineract.infrastructure.hooks.api.HookApiResourceSwagger

Mechanism: REST

Direction: BOTH

Path/Topic: n/a

Description: Defines the request and response schemas (DTOs) for the Hooks REST API documentation using Swagger annotations. These classes describe the JSON payloads for POST, GET, PUT, and DELETE operations on hooks.

onApplicationEvent

Namespace: org.apache.fineract.infrastructure.hooks.listener

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Spring Application Event Listener for HookEvent

WebHook Notification

Namespace: org.apache.fineract.infrastructure.hooks.processor

Mechanism: REST

Direction: PRODUCER

Path/Topic: Dynamic (determined by Hook configuration)

Description: Sends HTTP requests (WebHooks) to external URLs configured in the Hook entity.

sendEmptyRequest

Namespace: org.apache.fineract.infrastructure.hooks.processor

Mechanism: REST

Direction: PRODUCER

Path/Topic: .

Description: Ping/Health check call to the webhook endpoint.

sendJsonRequest

Namespace: org.apache.fineract.infrastructure.hooks.processor

Mechanism: REST

Direction: PRODUCER

Path/Topic: .

Description: Sends a JSON webhook payload with context headers.

sendFormRequest

Namespace: org.apache.fineract.infrastructure.hooks.processor

Mechanism: REST

Direction: PRODUCER

Path/Topic: .

Description: Sends a Form-URL-Encoded webhook payload with context headers.

sendSmsBridgeRequest

Namespace: org.apache.fineract.infrastructure.hooks.processor

Mechanism: REST

Direction: PRODUCER

Path/Topic: .

Description: Sends a JSON payload to an SMS bridge with an API key.

sendSmsBridgeConfigRequest

Namespace: org.apache.fineract.infrastructure.hooks.processor

Mechanism: REST

Direction: PRODUCER

Path/Topic: /configuration

Description: Sends SMS provider configuration data.

WebHookService

Namespace: org.apache.fineract.infrastructure.hooks.processor.ElasticSearchHookProcessor

Mechanism: REST

Direction: PRODUCER

Path/Topic: Dynamic (determined by hook configuration)

Description: Sends an HTTP request (JSON or Form URL Encoded) to an external URL defined in the hook configuration.

SMS Service Integration

Namespace: org.apache.fineract.infrastructure.hooks.processor.MessageGatewayHookProcessor

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Integrates with an internal SMS scheduling service to trigger message delivery.

WebHookService Client

Namespace: org.apache.fineract.infrastructure.hooks.processor.ProcessorHelper

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: Dynamically creates a REST client to send webhook notifications to external URLs.

SMS Bridge Service

Namespace: org.apache.fineract.infrastructure.hooks.processor.TwilioHookProcessor

Mechanism: REST

Direction: PRODUCER

Path/Topic: Dynamic (based on smsProviderData.getUrl())

Description: Communicates with an external SMS bridge or Twilio service to send SMS messages and retrieve configuration.

WebHook Validation

Namespace: org.apache.fineract.infrastructure.hooks.service.HookWritePlatformServiceJpaRepositoryImpl

Mechanism: REST

Direction: PRODUCER

Path/Topic: Dynamic (based on payloadURL configuration)

Description: Validates the payload URL provided in the hook configuration by sending a test request.

changeMode

Namespace: org.apache.fineract.infrastructure.instancemode.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/instance-mode

Description: Endpoint to update the instance mode configuration.

ChangeInstanceModeRequest

Namespace: org.apache.fineract.infrastructure.instancemode.api.InstanceModeApiResourceSwagger

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Defines the request body schema for the REST API endpoint responsible for updating instance modes.

Loans API

Namespace: org.apache.fineract.infrastructure.instancemode.filter

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans

Description: The test simulates requests to the Loans API to verify access control.

Actuator Health

Namespace: org.apache.fineract.infrastructure.instancemode.filter

Mechanism: REST

Direction: N/A

Path/Topic: /actuator/health

Description: The test simulates requests to the Actuator Health endpoint to verify it is always accessible.

Jobs API

Namespace: org.apache.fineract.infrastructure.instancemode.filter

Mechanism: REST

Direction: N/A

Path/Topic: /v1/jobs

Description: The test simulates requests to the Jobs API to verify batch mode restrictions.

Batches API

Namespace: org.apache.fineract.infrastructure.instancemode.filter

Mechanism: REST

Direction: N/A

Path/Topic: /v1/batches

Description: The test simulates requests to the Batches API.

Loan Catch-Up API

Namespace: org.apache.fineract.infrastructure.instancemode.filter

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/catch-up

Description: The test simulates requests to the Loan Catch-Up API to verify batch manager restrictions.

Scheduler API

Namespace: org.apache.fineract.infrastructure.instancemode.filter

Mechanism: REST

Direction: N/A

Path/Topic: /v1/scheduler

Description: The test simulates requests to the Scheduler API to verify batch manager restrictions.

Instance Mode Filter

Namespace: org.apache.fineract.infrastructure.instancemode.filter

Mechanism: REST

Direction: BOTH

Path/Topic: /*

Description: Intercepts and filters all incoming REST API requests to enforce application instance mode restrictions (Read-Only vs Write).

Retrieve Scheduler Status

Namespace: org.apache.fineract.infrastructure.jobs.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/scheduler

Description: Endpoint to check if the scheduler is currently running.

Change Scheduler Status

Namespace: org.apache.fineract.infrastructure.jobs.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/scheduler

Description: Endpoint to start or stop the scheduler.

executeInlineJob

Namespace: org.apache.fineract.infrastructure.jobs.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/jobs/{jobName}/inline

Description: Endpoint to start an inline Job

Retrieve Scheduler Jobs

Namespace: org.apache.fineract.infrastructure.jobs.api.SchedulerJobApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/jobs

Description: Endpoint to retrieve all scheduler jobs.

Retrieve a Job

Namespace: org.apache.fineract.infrastructure.jobs.api.SchedulerJobApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/jobs/{jobId}

Description: Endpoint to retrieve details of a specific job.

Retrieve Job Run History

Namespace: org.apache.fineract.infrastructure.jobs.api.SchedulerJobApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/jobs/{jobId}/runhistory

Description: Endpoint to retrieve the execution history of a job.

Run a Job

Namespace: org.apache.fineract.infrastructure.jobs.api.SchedulerJobApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/jobs/{jobId}

Description: Endpoint to manually execute a specific job.

Update a Job

Namespace: org.apache.fineract.infrastructure.jobs.api.SchedulerJobApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/jobs/{jobId}

Description: Endpoint to update job details.

LoanCOBApiFilter

Namespace: org.apache.fineract.infrastructure.jobs.filter.LoanCOBApiFilter

Mechanism: REST

Direction: BOTH

Path/Topic: Dynamic (determined by helper.isOnApiList)

Description: A Servlet Filter that intercepts HTTP requests to enforce Loan COB logic.

Loan API

Namespace: org.apache.fineract.infrastructure.jobs.filter.LoanCOBApiFilterTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/loans/{loanId}

Description: The test simulates interception of REST API calls to the Loan resource.

Reschedule Loan API

Namespace: org.apache.fineract.infrastructure.jobs.filter.LoanCOBApiFilterTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/rescheduleloans/{requestId}

Description: The test simulates interception of REST API calls to the Reschedule Loan resource.

Quartz Scheduler

Namespace: org.apache.fineract.infrastructure.jobs.service

Mechanism: OTHER

Direction: BOTH

Path/Topic: N/A

Description: In-memory job scheduling using the Quartz framework to manage job execution and timing.

Quartz Scheduler Veto

Namespace: org.apache.fineract.infrastructure.jobs.service

Mechanism: OTHER

Direction: BOTH

Path/Topic: N/A

Description: Integrates with the Quartz Scheduler library to intercept and potentially veto job triggers before execution.

Quartz Scheduler Listener

Namespace: org.apache.fineract.infrastructure.jobs.service

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Implements the Quartz TriggerListener interface to intercept job scheduling events.

Quartz Job Listener

Namespace: org.apache.fineract.infrastructure.jobs.service

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Listens to Quartz job execution events to trigger scheduler shutdown.

Quartz Scheduler Listener

Namespace: org.apache.fineract.infrastructure.jobs.service.SchedulerJobListener

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Listens to Quartz Scheduler events to manage job context and history.

UPDATE_NPA

Namespace: org.apache.fineract.infrastructure.jobs.service.updatenpa

Mechanism: OTHER

Direction: BOTH

Path/Topic: N/A

Description: Spring Batch Job definition for updating Non-Performing Assets

Report Processing Service

Namespace: org.apache.fineract.infrastructure.report.service

Mechanism: REST

Direction: BOTH

Path/Topic: n/a

Description: This interface uses JAX-RS types (Response, MultivaluedMap) to handle HTTP-based report requests, acting as a service layer for REST endpoints.

Report Mailing Job API Schemas

Namespace: org.apache.fineract.infrastructure.reportmailingjob.api

Mechanism: REST

Direction: BOTH

Path/Topic: N/A

Description: Defines the request and response body schemas (DTOs) for the Report Mailing Job REST API. These classes are used by the Swagger framework to generate the API documentation contract.

List Report Mailing Job History

Namespace: org.apache.fineract.infrastructure.reportmailingjob.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/{REPORT_MAILING_JOB_RUN_HISTORY_RESOURCE_NAME}

Description: Endpoint to retrieve the history of report mailing job runs.

createReportMailingJob

Namespace: org.apache.fineract.infrastructure.reportmailingjob.api.ReportMailingJobApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/reportmailingjobs

Description: Create a new Report Mailing Job

updateReportMailingJob

Namespace: org.apache.fineract.infrastructure.reportmailingjob.api.ReportMailingJobApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/reportmailingjobs/{entityId}

Description: Update an existing Report Mailing Job

deleteReportMailingJob

Namespace: org.apache.fineract.infrastructure.reportmailingjob.api.ReportMailingJobApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/reportmailingjobs/{entityId}

Description: Delete a Report Mailing Job

retrieveReportMailingJob

Namespace: org.apache.fineract.infrastructure.reportmailingjob.api.ReportMailingJobApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/reportmailingjobs/{entityId}

Description: Retrieve a specific Report Mailing Job

retrieveReportMailingJobTemplate

Namespace: org.apache.fineract.infrastructure.reportmailingjob.api.ReportMailingJobApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/reportmailingjobs/template

Description: Retrieve Report Mailing Job Template

retrieveAllReportMailingJobs

Namespace: org.apache.fineract.infrastructure.reportmailingjob.api.ReportMailingJobApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/reportmailingjobs

Description: List all Report Mailing Jobs

sendEmailWithAttachment

Namespace: org.apache.fineract.infrastructure.reportmailingjob.service.ReportMailingJobEmailService

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Defines an integration point for sending emails via an SMTP server or email API, though the specific protocol is determined by the implementation.

SMTP Email Sender

Namespace: org.apache.fineract.infrastructure.reportmailingjob.service.ReportMailingJobEmailServiceImpl

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Sends emails using the Jakarta Mail API via Spring's JavaMailSenderImpl.

AWS S3 Client

Namespace: org.apache.fineract.infrastructure.s3

Mechanism: OTHER

Direction: BOTH

Path/Topic: N/A

Description: Configures the AWS SDK v2 S3 Client for interacting with Amazon S3 storage.

AWS SDK Credential Validation

Namespace: org.apache.fineract.infrastructure.s3

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Validates connectivity and configuration for Amazon Web Services by attempting to resolve credentials and the default region.

AWS S3 Client Configuration

Namespace: org.apache.fineract.infrastructure.s3.LocalstackS3ClientCustomizer

Mechanism: OTHER

Direction: OTHER

Path/Topic: AWS_ENDPOINT_URL (Environment Variable)

Description: Configures the AWS SDK S3 Client to connect to a custom endpoint (LocalStack) for testing purposes.

AWS S3 Configuration

Namespace: org.apache.fineract.infrastructure.s3.S3ClientCustomizer

Mechanism: OTHER

Direction: OTHER

Path/Topic: n/a

Description: Configures the AWS SDK S3 Client Builder

authenticate

Namespace: org.apache.fineract.infrastructure.security.api

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/authentication

Description: Endpoint for user authentication via username/password.

Fetch authenticated user details

Namespace: org.apache.fineract.infrastructure.security.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/userdetails

Description: Endpoint to retrieve details of the currently logged-in user.

Get OTP Delivery Methods

Namespace: org.apache.fineract.infrastructure.security.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/twofactor

Description: Endpoint to retrieve available OTP delivery methods for the user.

Request OTP Token

Namespace: org.apache.fineract.infrastructure.security.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/twofactor

Description: Endpoint to request a new OTP token.

Validate OTP Token

Namespace: org.apache.fineract.infrastructure.security.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/twofactor/validate

Description: Endpoint to validate an OTP token.

Invalidate Token

Namespace: org.apache.fineract.infrastructure.security.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/twofactor/invalidate

Description: Endpoint to invalidate a 2FA access token.

TwoFactor Configuration API

Namespace: org.apache.fineract.infrastructure.security.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/twofactor/configure

Description: API endpoints for configuring Two-Factor Authentication settings.

Authentication API Schemas

Namespace: org.apache.fineract.infrastructure.security.api

Mechanism: REST

Direction: BOTH

Path/Topic: N/A

Description: Defines the Swagger/OpenAPI schemas for the authentication REST API request and response bodies.

Tenant Identifier Filter

Namespace: org.apache.fineract.infrastructure.security.filter

Mechanism: REST

Direction: N/A

Path/Topic: /api/v1/

Description: Intercepts HTTP requests to the API to extract tenant headers and configure the security context.

TwoFactorAuthenticationFilter

Namespace: org.apache.fineract.infrastructure.security.filter

Mechanism: REST

Direction: N/A

Path/Topic: /*

Description: Intercepts HTTP requests to validate a custom Two-Factor Authentication header.

Tenant Authentication Filter

Namespace: org.apache.fineract.infrastructure.security.filter.TenantAwareBasicAuthenticationFilter

Mechanism: REST

Direction: CONSUMER

Path/Topic: /*

Description: Intercepts all HTTP requests to validate the 'Fineract-Platform-TenantId' header and Basic Auth credentials.

Spring Security Context

Namespace: org.apache.fineract.infrastructure.security.service

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Spring Security Context to retrieve authentication details.

Authentication Failure Response

Namespace: org.apache.fineract.infrastructure.security.service.CustomAuthenticationFailureHandler

Mechanism: REST

Direction: PRODUCER

Path/Topic: Dynamic (determined by defaultFailureUrl)

Description: Handles HTTP responses for failed authentication attempts.

Retrieve All SMS

Namespace: org.apache.fineract.infrastructure.sms.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/sms

Description: Endpoint to retrieve all SMS messages.

Create SMS

Namespace: org.apache.fineract.infrastructure.sms.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/sms

Description: Endpoint to create a new SMS message.

Retrieve One SMS

Namespace: org.apache.fineract.infrastructure.sms.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/sms/{resourceId}

Description: Endpoint to retrieve a single SMS message by ID.

Retrieve SMS by Status

Namespace: org.apache.fineract.infrastructure.sms.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/sms/{campaignId}/messageByStatus

Description: Endpoint to retrieve SMS messages for a campaign filtered by status and date range.

Update SMS

Namespace: org.apache.fineract.infrastructure.sms.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/sms/{resourceId}

Description: Endpoint to update an existing SMS message.

Delete SMS

Namespace: org.apache.fineract.infrastructure.sms.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/sms/{resourceId}

Description: Endpoint to delete an SMS message.

SMS Queue Resource

Namespace: org.apache.fineract.infrastructure.sms.data.SmsMessageApiQueueResourceData

Mechanism: REST

Direction: PRODUCER

Path/Topic: /queue

Description: Defines the request body structure for the SMS queue API endpoint.

SMS Report Resource

Namespace: org.apache.fineract.infrastructure.sms.data.SmsMessageApiReportResourceData

Mechanism: REST

Direction: PRODUCER

Path/Topic: /report

Description: This class defines the request body structure for the SMS report endpoint.

SMS Gateway

Namespace: org.apache.fineract.infrastructure.sms.scheduler.SmsMessageScheduledJobServiceImpl

Mechanism: REST

Direction: PRODUCER

Path/Topic: Dynamic (configured via SmsConfigUtils)

Description: Sends SMS message data to an intermediate SMS gateway server.

Spring Integration Channel Interceptor

Namespace: org.apache.fineract.infrastructure.springbatch

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Intercepts messages in a Spring Integration flow to propagate Fineract context (Tenant/User) to the execution thread.

outboundRequests

Namespace: org.apache.fineract.infrastructure.springbatch

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Spring Integration DirectChannel used for internal message routing of outbound requests within the batch manager context.

Spring Integration Channel Interceptor

Namespace: org.apache.fineract.infrastructure.springbatch.OutputChannelInterceptor

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Intercepts Spring Messaging channels to inject Fineract context into StepExecutionRequests.

inboundRequests

Namespace: org.apache.fineract.infrastructure.springbatch.WorkerConfig

Mechanism: OTHER

Direction: BOTH

Path/Topic: N/A

Description: Spring Integration QueueChannel for internal message passing within the batch worker context.

StepExecutionRequest Handler

Namespace: org.apache.fineract.infrastructure.springbatch.messagehandler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes StepExecutionRequests to process batch partitions. Code comments explicitly state a JMS queue is used for message delivery, though the JMS listener annotation is likely configured externally or via Spring Integration XML.

Request Queue (Dynamic)

Namespace: org.apache.fineract.infrastructure.springbatch.messagehandler.jms

Mechanism: JMS-QUEUE

Direction: CONSUMER

Path/Topic: fineractProperties.getRemoteJobMessageHandler().getJms().getRequestQueueName()

Description: Listens for batch job requests on a JMS queue configured via application properties.

BatchWorkerQueue

Namespace: org.apache.fineract.infrastructure.springbatch.messagehandler.jms

Mechanism: JMS-QUEUE

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes JMS messages representing partitioned batch step execution requests.

ActiveMQ Connection Factory

Namespace: org.apache.fineract.infrastructure.springbatch.messagehandler.jms

Mechanism: ACTIVEMQ-QUEUE

Direction: BIDIRECTIONAL

Path/Topic: N/A

Description: Configures the connection factory for the ActiveMQ message broker, enabling the application to produce and consume messages.

Outbound Request Queue

Namespace: org.apache.fineract.infrastructure.springbatch.messagehandler.jms.JmsManagerConfig

Mechanism: JMS-QUEUE

Direction: PRODUCER

Path/Topic: Configured via fineractProperties.getRemoteJobMessageHandler().getJms().getRequestQueueName()

Description: Sends messages to a JMS queue configured in application properties.

Remote Job Message Handler Topic

Namespace: org.apache.fineract.infrastructure.springbatch.messagehandler.kafka

Mechanism: KAFKA-TOPIC

Direction: PRODUCER

Path/Topic: Configured via fineractProperties.getRemoteJobMessageHandler().getKafka().getTopic().getName()

Description: Publishes Spring Batch step execution context messages to a Kafka topic for remote processing.

Kafka Consumer Configuration

Namespace: org.apache.fineract.infrastructure.springbatch.messagehandler.kafka

Mechanism: KAFKA-TOPIC

Direction: CONSUMER

Path/Topic: N/A

Description: Configures the infrastructure for consuming Kafka messages, including deserialization and connection settings.

${fineract.remote-job-message-handler.kafka.topic.name}

Namespace: org.apache.fineract.infrastructure.springbatch.messagehandler.kafka

Mechanism: KAFKA-TOPIC

Direction: CONSUMER

Path/Topic: ${fineract.remote-job-message-handler.kafka.topic.name}

Description: Listens for batch step execution requests distributed via Kafka.

Remote Job Topic

Namespace: org.apache.fineract.infrastructure.springbatch.messagehandler.kafka

Mechanism: KAFKA-TOPIC

Direction: OTHER

Path/Topic: Configured via fineractProperties.getRemoteJobMessageHandler().getKafka().getTopic().getName()

Description: Configures the creation and administration of a Kafka topic used for remote job message handling.

inboundFlow

Namespace: org.apache.fineract.infrastructure.springbatch.messagehandler.spring

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: n/a

Description: Spring Integration flow listening for internal application events

outboundRequests

Namespace: org.apache.fineract.infrastructure.springbatch.messagehandler.spring

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Spring Integration DirectChannel used as the source of messages for the flow.

ApplicationEventPublishingMessageHandler

Namespace: org.apache.fineract.infrastructure.springbatch.messagehandler.spring

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Publishes messages as Spring Application Events.

Cucumber Test Steps

Namespace: org.apache.fineract.infrastructure.sqlbuilder

Mechanism: OTHER

Direction: OTHER

Path/Topic: n/a

Description: Defines Gherkin step definitions for automated testing.

retrieveAll

Namespace: org.apache.fineract.infrastructure.survey.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/likelihood/{ppiName}

Description: Endpoint to retrieve all likelihoods for a given PPI name.

retrieve

Namespace: org.apache.fineract.infrastructure.survey.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/likelihood/{ppiName}/{likelihoodId}

Description: Endpoint to retrieve a specific likelihood by ID.

update

Namespace: org.apache.fineract.infrastructure.survey.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/likelihood/{ppiName}/{likelihoodId}

Description: Endpoint to update a specific likelihood.

Get Poverty Line by PPI Name

Namespace: org.apache.fineract.infrastructure.survey.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/povertyLine/{ppiName}

Description: Retrieves poverty line data for a specific PPI name.

Get Poverty Line by Likelihood

Namespace: org.apache.fineract.infrastructure.survey.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/povertyLine/{ppiName}/{likelihoodId}

Description: Retrieves poverty line data for a specific PPI name and likelihood ID.

retrieveSurveys

Namespace: org.apache.fineract.infrastructure.survey.api.SurveyApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/survey

Description: Endpoint to retrieve all surveys.

retrieveSurvey

Namespace: org.apache.fineract.infrastructure.survey.api.SurveyApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/survey/{surveyName}

Description: Endpoint to retrieve a specific survey by name.

createDatatableEntry

Namespace: org.apache.fineract.infrastructure.survey.api.SurveyApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/survey/{surveyName}/{apptableId}

Description: Endpoint to create a survey entry.

getClientSurveyOverview

Namespace: org.apache.fineract.infrastructure.survey.api.SurveyApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/survey/{surveyName}/{clientId}

Description: Endpoint to get survey scores for a client.

getSurveyEntry

Namespace: org.apache.fineract.infrastructure.survey.api.SurveyApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/survey/{surveyName}/{clientId}/{entryId}

Description: Endpoint to get a specific survey entry.

register

Namespace: org.apache.fineract.infrastructure.survey.api.SurveyApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/survey/register/{surveyName}/{apptable}

Description: Endpoint to register a survey.

deleteDatatableEntries

Namespace: org.apache.fineract.infrastructure.survey.api.SurveyApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/survey/{surveyName}/{clientId}/{fulfilledId}

Description: Endpoint to delete a survey entry.

Survey API Schemas

Namespace: org.apache.fineract.infrastructure.survey.api.SurveyApiResourceSwagger

Mechanism: REST

Direction: BOTH

Path/Topic: N/A

Description: Defines the Swagger/OpenAPI schemas for the Survey API request and response bodies, used to generate API documentation.

LIKELIHOOD UPDATE Command

Namespace: org.apache.fineract.infrastructure.survey.handler.UpdateLikelihoodCommandHandler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: LIKELIHOOD/UPDATE

Description: Registers a command handler for the 'LIKELIHOOD' entity and 'UPDATE' action within the Fineract command processing infrastructure.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/*

Description: The test class acts as a REST client consuming the Fineract API to set up test data (clients, loans, savings) and trigger scheduler jobs.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: Various (dynamic paths for loans, accounts, etc.)

Description: The test class acts as a client consuming the Fineract REST API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/*

Description: The test class acts as a REST client to the Fineract application to perform loan operations.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Calls various Fineract REST endpoints to manage savings accounts, clients, and products.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a client consuming the Fineract REST API to perform operations on Recurring Deposit accounts.

Fineract Batch API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /batches

Description: Invokes the batch processing endpoint to execute multiple commands in a single request.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/*

Description: Consumes the Fineract platform REST API for integration testing.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract API to perform operations on Fixed Deposit products and accounts.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Savings Account API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Integration tests consuming the Savings Account REST API to search transactions.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/...

Description: Consumes the Fineract REST API to manage account number preferences and related entities (Clients, Loans, Savings, Groups, Centers).

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: Various (via helpers)

Description: Interacts with the Fineract platform via HTTP REST API calls using RestAssured.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/*

Description: Consumes the Fineract REST API to perform integration tests.

Create Group

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups

Description: Explicit REST call to create a group within the test setup.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/*

Description: The test class acts as a REST client consuming the Fineract API to create clients, products, and loans, and to retrieve repayment schedules.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /charges (inferred via ChargesHelper)

Description: Consumes the Fineract REST API to perform CRUD operations on Charges.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/*

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: PRODUCER

Path/Topic: Various (via Helper classes)

Description: The test class acts as a REST client to the Fineract application to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /clients, /groups, /loans, /savingsaccounts, /loanTransactions, /notes

Description: The test class consumes the Fineract REST API to perform operations on Clients, Groups, Loans, Savings, and Notes.

Fineract REST API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract API to create resources (clients, accounts) and trigger jobs.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract REST API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: Various (abstracted via helpers)

Description: The test class acts as a REST client consuming the Fineract API to create clients, loan products, and loan applications, and to retrieve repayment schedules.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract REST API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: Various (e.g., /loans, /clients, /loanproducts)

Description: The test class acts as a client consuming the Fineract REST API to perform integration tests.

System Codes API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /codes (inferred)

Description: Consumes the application's REST API to manage system codes and code values.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /clients (and related sub-resources)

Description: Consumes the Fineract REST API to perform integration tests on Client resources.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract Platform REST API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract REST API to perform integration tests.

Funds API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /funds (inferred)

Description: Consumes the Funds REST API to verify application behavior.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes Fineract REST APIs to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Interacts with the Fineract platform REST API to create and retrieve resources.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: Various (via helpers)

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: Various (handled by helpers)

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/*

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/...

Description: Consumes Fineract REST APIs to perform integration tests for loan management.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/*

Description: The test acts as a REST client consuming the Fineract application APIs to create data and trigger jobs.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes Fineract REST APIs to perform integration tests on loan transactions.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: Determined by helper classes (e.g., /financialactivityaccounts)

Description: Consumes the Fineract REST API to test Financial Activity Account operations.

updateBusinessStepOrder

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: PRODUCER

Path/Topic: /jobs/{jobName}/steps (inferred)

Description: Calls the API to update the order of business steps for a specific job.

getConfiguredBusinessStepsByJobName

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: PRODUCER

Path/Topic: /jobs/{jobName}/steps (inferred)

Description: Calls the API to retrieve the current configuration of business steps for a job.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract application APIs to perform operations like creating clients, loans, and transactions.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/loans/{loanId}

Description: Consumes the Fineract REST API to create clients, products, and loans, and to execute commands like 'markAsFraud'.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/*

Description: Consumes Fineract REST APIs to perform integration tests on loan transactions.

Business Configuration API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract Business Configuration REST API to retrieve and update job business steps.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes Fineract REST APIs to perform loan and account operations during testing.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes Fineract REST APIs to perform integration tests.

Get Loan Product Template

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /loanproducts/template

Description: Consumes the Fineract API to retrieve the loan product template configuration. This is done via the `LoanProductHelper` utility.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: Various (managed by helper classes)

Description: Interacts with the Fineract platform via HTTP REST APIs to perform integration tests.

User Administration API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /users, /roles, /staff, /clients

Description: Consumes the application's REST API to manage users, roles, staff, and clients for testing purposes.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /roles, /users, /staff

Description: Consumes Fineract REST APIs to manage Roles, Users, and Staff for testing purposes.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /datatables, /products/share

Description: Interacts with the Fineract Core Banking Platform REST API to manage datatables and share products.

Fineract Savings Account API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: PRODUCER

Path/Topic: /savingsaccounts (inferred)

Description: Interacts with the Fineract backend to manage savings accounts via HTTP requests.

Loan Product API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/loanproducts (inferred)

Description: Consumes the Fineract Loan Product REST API to create, retrieve, and update loan products.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract REST API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Interacts with the Fineract application REST API to perform test operations.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes Fineract REST APIs to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /loanproducts, /clients, /delinquencybuckets

Description: The test class acts as a REST client consuming the Fineract API to create and manage loan products and related entities.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/...

Description: Consumes the Fineract REST API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: Various (handled by Helper classes)

Description: Consumes the Fineract REST API to perform actions and verify audit logs.

Fineract Scheduler API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /jobs (inferred)

Description: Interacts with the Fineract platform's scheduler API to manage jobs, update statuses, and trigger executions.

Fineract REST API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test acts as a REST client consuming Fineract APIs to create resources (accounts, clients, loans) and perform actions (reject loan).

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class consumes REST APIs exposed by the Fineract application to test Loan COB Catch Up and Scheduler functionality.

Get Head Office

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /offices (inferred)

Description: Retrieves the head office configuration via the OfficeHelper.

Create Client

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /clients (inferred)

Description: Sends a request to create a new client via the ClientHelper.

Run Scheduler Job

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /jobs/{jobId} (inferred)

Description: Triggers the execution of a specific scheduler job via the SchedulerJobHelper.

External Services Configuration API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /external-services/{serviceName}/configuration

Description: Consumes REST endpoints to retrieve and update configuration settings for external services like S3 and SMTP.

Notification API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /notifications (implied via NotificationHelper)

Description: Consumes the Notification API to retrieve user notifications.

User API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /users (implied via UserHelper)

Description: Consumes the User API to create a new user for testing purposes.

Client API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /clients (implied via ClientHelper)

Description: Consumes the Client API to create a client and trigger a notification.

Office API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /offices (implied via OfficeHelper)

Description: Consumes the Office API to retrieve head office details.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract REST API to perform integration tests on loan management features.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Calls to the internal application API to manage Hooks and Offices.

Echo Webhook Service

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /{uniqueId}/

Description: External service used to verify webhook delivery.

Office Creation Webhook

Namespace: org.apache.fineract.integrationtests

Mechanism: WEBHOOK

Direction: PRODUCER

Path/Topic: N/A

Description: The test configures the application to send a webhook to an external URL.

Payment Types API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /paymenttypes (inferred)

Description: Consumes the Payment Types REST API to perform integration testing.

Fineract API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /search, /clients

Description: Consumes the Fineract REST API to perform search operations and client management during tests.

Office Management API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes REST endpoints to create, update, and retrieve Office resources.

Currency Management API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /currencies (inferred from helper usage)

Description: Interacts with the application's REST API to retrieve and update currency configurations.

submitApplication2

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: PRODUCER

Path/Topic: /savingsaccounts

Description: Submits a new savings account application to the Fineract backend.

handleCommands6 (approve)

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: PRODUCER

Path/Topic: /savingsaccounts/{savingsId}?command=approve

Description: Sends a command to approve a specific savings account.

handleCommands6 (activate)

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: PRODUCER

Path/Topic: /savingsaccounts/{savingsId}?command=activate

Description: Sends a command to activate a specific savings account.

External Event Configuration API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract REST API to manage external event configurations via the ExternalEventConfigurationHelper.

Loan Product API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /loanproducts (inferred via helpers)

Description: Consumes the Fineract REST API to manage Loan Products.

Fineract REST API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract application's REST APIs to perform integration tests via REST Assured.

Password Preferences API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract REST API to update and retrieve password preference settings.

Fineract Global Configuration API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /configurations (inferred from helper usage)

Description: Consumes the Fineract REST API to retrieve and update global configuration settings.

Templates API - List/Create

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/templates

Description: Endpoint to retrieve the list of templates or create a new template.

Templates API - Get/Delete

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/templates/{id}

Description: Endpoint to retrieve or delete a specific template by ID.

Loan Product API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: PRODUCER

Path/Topic: /loanproducts (inferred)

Description: Calls the application's REST API to create loan products.

Collateral Product API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: Determined by CollateralManagementHelper

Description: Consumes REST APIs to create and update collateral products.

Credit Bureau Configuration API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract REST API to create and update credit bureau configurations.

Working Days API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract REST API to update working days configuration via helper classes.

XBRL Taxonomy API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: Unknown (encapsulated in XBRLIntegrationTestHelper)

Description: Consumes the Fineract REST API to retrieve XBRL taxonomies.

Rates API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract REST API to perform operations on Rates resources (Create, Read, Update).

Product Mix API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes REST APIs to retrieve product mix lists and templates via the ProductMixHelper.

Maker Checker List

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Maker Checker API to retrieve the inbox list via the MakercheckersHelper.

Fineract REST API

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client to interact with the Fineract application APIs.

Swagger UI HTML

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/swagger-ui/index.html

Description: Accesses the Swagger UI index HTML page to verify it is being served.

OpenAPI JSON

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/fineract.json

Description: Accesses the Fineract OpenAPI JSON definition to verify it is being served.

Legacy API Documentation Endpoint

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/legacy-docs/apiLive.htm

Description: Accesses the legacy API documentation HTML page to verify availability.

Actuator Info Endpoint

Namespace: org.apache.fineract.integrationtests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/actuator/info

Description: Consumes the Spring Boot Actuator info endpoint to retrieve build metadata via RestAssured.

Fineract API

Namespace: org.apache.fineract.integrationtests.AccountTransferTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/...

Description: The test class acts as a REST client consuming the Fineract API to perform setup, transfers, and verification.

Fineract API

Namespace: org.apache.fineract.integrationtests.AdvancedPaymentAllocationLoanRepaymentScheduleTest

Mechanism: REST

Direction: N/A

Path/Topic: /fineract-provider/api/v1/loans/*

Description: The test class acts as a REST client to the Fineract platform, invoking endpoints for loan management.

Fineract API

Namespace: org.apache.fineract.integrationtests.BaseLoanIntegrationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract API to perform loan operations and verification.

Fineract API

Namespace: org.apache.fineract.integrationtests.CenterIntegrationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.ClientExternalIdTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /clients, /configurations

Description: Consumes the Fineract REST API to perform integration tests on Client resources.

Fineract API

Namespace: org.apache.fineract.integrationtests.ClientLoanChargeRefundIntegrationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/...

Description: Interacts with the Fineract Core Banking Platform API to perform loan operations.

Fineract API

Namespace: org.apache.fineract.integrationtests.ClientLoanMultipleDisbursementsIntegrationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes Fineract REST APIs to perform loan operations (create, approve, disburse, repay).

Fineract API Client Operations

Namespace: org.apache.fineract.integrationtests.ClientUndoRejectAndWithdrawalIntegrationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/clients

Description: Invokes Fineract REST APIs to create, reject, withdraw, and undo status changes for clients.

WireMock Token Endpoint

Namespace: org.apache.fineract.integrationtests.CreditBureauTest

Mechanism: REST

Direction: PRODUCER

Path/Topic: /token/

Description: Mocked external Credit Bureau authentication endpoint.

WireMock Search Endpoint

Namespace: org.apache.fineract.integrationtests.CreditBureauTest

Mechanism: REST

Direction: PRODUCER

Path/Topic: /search/NRC213

Description: Mocked external Credit Bureau search endpoint to find a user by ID.

WireMock Report Endpoint

Namespace: org.apache.fineract.integrationtests.CreditBureauTest

Mechanism: REST

Direction: PRODUCER

Path/Topic: /report/123456

Description: Mocked external Credit Bureau report retrieval endpoint.

Client Creation

Namespace: org.apache.fineract.integrationtests.DateValidationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /clients

Description: Creates a new client via the API.

Loan Product Creation

Namespace: org.apache.fineract.integrationtests.DateValidationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /loanproducts

Description: Creates a new loan product via the API.

Loan Account Creation

Namespace: org.apache.fineract.integrationtests.DateValidationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /loans

Description: Attempts to create a loan account (expected to fail in this test).

Interop Transaction Request

Namespace: org.apache.fineract.integrationtests.DateValidationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /interop/transactions

Description: Posts an interoperation transaction request.

Fixed Deposit Product Creation

Namespace: org.apache.fineract.integrationtests.DateValidationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fixeddepositproducts

Description: Creates a fixed deposit product.

Fixed Deposit Application

Namespace: org.apache.fineract.integrationtests.DateValidationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fixeddepositaccounts

Description: Applies for a fixed deposit account (expected to fail in this test).

Fineract API

Namespace: org.apache.fineract.integrationtests.DelinquencyBucketsIntegrationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.ExternalIdSupportIntegrationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a client consuming the Fineract REST API to perform integration tests.

Global Configuration API

Namespace: org.apache.fineract.integrationtests.GlobalConfigurationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /configurations (inferred via helper)

Description: The test class acts as a REST client consuming the Fineract Global Configuration API to read and update system settings.

Fineract API

Namespace: org.apache.fineract.integrationtests.GroupSavingsIntegrationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.GroupTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes Fineract REST APIs to perform integration tests on Groups, Clients, Staff, and Loans.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanAccountBackdatedDisbursementTest

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /fineract-provider/api/v1/*

Description: Interacts with the running Fineract application instance to create clients, products, loans, and perform transactions.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanAccountCreditRefundPayoutWithChargebackTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract REST API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanAccountPaymentAllocationWithOverlappingDownPaymentInstallmentTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: Various (handled by helper classes)

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanApplicationApprovalTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes Fineract REST APIs to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanApplicationUndoLastTrancheTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract API to perform operations like creating clients, loans, and processing transactions.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanAuditingIntegrationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanCOBAccountLockCatchupInlineCOBTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract API to perform setup, configuration, and verification steps.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanCatchUpIntegrationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract application REST API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanChargeOffAccountingTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/*

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanChargeSpecificDueDateTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/*

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanDisbursementDetailsIntegrationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/*

Description: Interacts with the Apache Fineract REST API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanMultipleDisbursementRepaymentScheduleTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: Various (e.g., /loans, /clients, /jobs)

Description: Interacts with the Fineract platform via HTTP REST endpoints to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanPostChargeOffScenariosTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Interacts with the Fineract Core Banking Platform API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanProductRepaymentStartDateConfigurationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/*

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanProductWithAdvancedPaymentAllocationIntegrationTests

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/...

Description: The test class acts as a REST client consuming Fineract APIs to create and manage loan products and accounts.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanRepaymentScheduleWithDownPaymentTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract API to create clients, products, and loans, and to retrieve loan schedules.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanRescheduleOnDecliningBalanceLoanTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanRescheduleRequestTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the application's APIs to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanSpecificDueDateChargeAfterMaturityTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanTransactionAuditingIntegrationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: Various (dynamic paths handled by helper classes)

Description: The test acts as a REST client consuming the Fineract API to perform integration testing.

Fineract REST API

Namespace: org.apache.fineract.integrationtests.LoanTransactionChargebackTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/loans

Description: The test class acts as a client consuming the Fineract REST API to perform loan operations.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanTransactionFullAmountChargebackForOverpaidLoanTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/*

Description: Consumes Fineract REST API endpoints to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanTransactionReverseReplayTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: Various (configured via RequestSpecification)

Description: The test class acts as a client consuming the Fineract Platform REST API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanTransactionSummaryTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/*

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.LoanWithWaiveInterestAndWriteOffIntegrationTest

Mechanism: REST

Direction: PRODUCER

Path/Topic: Various (abstracted via helpers)

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.RepaymentWithPostDatedChecksTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract Platform REST API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.SavingsAccountTransactionDatatableIntegrationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract application APIs to perform integration testing.

Fineract API

Namespace: org.apache.fineract.integrationtests.SavingsAccountTransactionTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: Various (e.g., /savingsaccounts, /clients, /batches)

Description: Consumes the Fineract REST API to perform integration tests on savings accounts, clients, and system configurations.

Staff API

Namespace: org.apache.fineract.integrationtests.StaffTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Integration tests consuming the Staff REST API endpoints.

Fineract API

Namespace: org.apache.fineract.integrationtests.UndoLoanDisbursalWithDownPaymentIntegrationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class consumes Fineract REST APIs via helper classes (ClientHelper, LoanTransactionHelper, etc.) to create clients, products, and perform loan operations.

Fineract REST API

Namespace: org.apache.fineract.integrationtests.accounting

Mechanism: REST

Direction: CONSUMER

Path/Topic: Various (delegated to Helper classes)

Description: The test class acts as a REST client consuming the Fineract application APIs to perform setup and validation steps.

Fineract API

Namespace: org.apache.fineract.integrationtests.bulkimport.importhandler.client.ClientEntityImportHandlerTest

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /clients/downloadtemplate, /clients/uploadtemplate, /codes, /staff, /offices

Description: Interacts with the Fineract application REST API to create prerequisites (Staff, Office, Codes) and perform bulk import operations.

Create Client

Namespace: org.apache.fineract.integrationtests.bulkimport.importhandler.loan.LoanImportHandlerTest

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/clients

Description: Creates a new client in the system to be used in the loan import test.

Import Loan Template

Namespace: org.apache.fineract.integrationtests.bulkimport.importhandler.loan.LoanImportHandlerTest

Mechanism: REST

Direction: PRODUCER

Path/Topic: unknown (encapsulated in LoanTransactionHelper)

Description: Uploads the generated Excel file to the bulk import endpoint via a helper class.

Fineract API

Namespace: org.apache.fineract.integrationtests.bulkimport.importhandler.office

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Interacts with the Fineract backend APIs to perform bulk import operations.

Create Client

Namespace: org.apache.fineract.integrationtests.bulkimport.importhandler.savings

Mechanism: REST

Direction: N/A

Path/Topic: /fineract-provider/api/v1/clients

Description: Creates a new client in the system to be used in the import test.

Import Savings Template

Namespace: org.apache.fineract.integrationtests.bulkimport.importhandler.savings

Mechanism: REST

Direction: N/A

Path/Topic: /fineract-provider/api/v1/savings/import

Description: Uploads the populated Excel file to the bulk import endpoint (via SavingsAccountHelper).

Fineract REST API

Namespace: org.apache.fineract.integrationtests.bulkimport.populator.client.ClientEntityWorkbookPopulatorTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test acts as a client consuming the Fineract REST API to create resources and download files.

Fineract API

Namespace: org.apache.fineract.integrationtests.bulkimport.populator.loan

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client, consuming various endpoints of the Fineract application to create test data and retrieve the bulk import workbook.

Office Workbook Retrieval

Namespace: org.apache.fineract.integrationtests.bulkimport.populator.office

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Fetches the Office bulk import Excel workbook from the application server.

Fineract API

Namespace: org.apache.fineract.integrationtests.bulkimport.populator.savings

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test acts as a REST client consuming Fineract APIs to create entities and retrieve the workbook.

Client API

Namespace: org.apache.fineract.integrationtests.client

Mechanism: REST

Direction: CONSUMER

Path/Topic: /clients

Description: Integration tests consuming the Client REST API to create and search for clients.

Fineract API Client Operations

Namespace: org.apache.fineract.integrationtests.client

Mechanism: REST

Direction: CONSUMER

Path/Topic: /clients, /charges, /clients/{clientId}/transactions

Description: Consumes Fineract REST APIs to create clients, manage charges, and handle transactions.

Fineract API Client

Namespace: org.apache.fineract.integrationtests.client

Mechanism: REST

Direction: N/A

Path/Topic: /fineract-provider/api/

Description: Configures and provides a Retrofit-based client to interact with the Fineract REST API.

runReportGetFile

Namespace: org.apache.fineract.integrationtests.client

Mechanism: REST

Direction: CONSUMER

Path/Topic: /runreports/{reportName}

Description: Invokes the Fineract API to run a specific report and retrieve the file or trigger an export.

createOffice

Namespace: org.apache.fineract.integrationtests.client

Mechanism: REST

Direction: CONSUMER

Path/Topic: /offices

Description: Creates a new office resource via the Fineract API.

retrieveOffices

Namespace: org.apache.fineract.integrationtests.client

Mechanism: REST

Direction: CONSUMER

Path/Topic: /offices

Description: Retrieves a list of office resources via the Fineract API.

Retrofit Call Execution

Namespace: org.apache.fineract.integrationtests.client

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Executes a Retrofit HTTP call to verify the response status.

Create Client

Namespace: org.apache.fineract.integrationtests.client.ClientTest

Mechanism: REST

Direction: PRODUCER

Path/Topic: /clients

Description: Calls the Fineract API to create a new client entity.

Retrieve Clients

Namespace: org.apache.fineract.integrationtests.client.ClientTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /clients

Description: Calls the Fineract API to retrieve a paginated list of clients.

retrieveAllDocuments

Namespace: org.apache.fineract.integrationtests.client.DocumentTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /documents/clients/{clientId}

Description: Retrieves all documents for a specific entity (client).

createDocument

Namespace: org.apache.fineract.integrationtests.client.DocumentTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /documents/clients/{clientId}

Description: Uploads a new document for a specific entity.

getDocument

Namespace: org.apache.fineract.integrationtests.client.DocumentTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /documents/clients/{clientId}/{documentId}

Description: Retrieves metadata for a specific document.

downloadFile

Namespace: org.apache.fineract.integrationtests.client.DocumentTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /documents/clients/{clientId}/{documentId}/attachment

Description: Downloads the binary file content of a document.

updateDocument

Namespace: org.apache.fineract.integrationtests.client.DocumentTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /documents/clients/{clientId}/{documentId}

Description: Updates metadata of an existing document.

deleteDocument

Namespace: org.apache.fineract.integrationtests.client.DocumentTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /documents/clients/{clientId}/{documentId}

Description: Deletes a specific document.

Images API

Namespace: org.apache.fineract.integrationtests.client.ImageTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: v1/{entityType}/{entityId}/images

Description: Consumes the Fineract Images API to manage entity images.

ImagesApiWithHeadersForTest

Namespace: org.apache.fineract.integrationtests.client.ImageTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: v1/{entityType}/{entityId}/images

Description: Defines a Retrofit client interface to test specific Accept headers.

Run Reports API

Namespace: org.apache.fineract.integrationtests.client.ReportsTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/runreports/...

Description: Client calls to the Fineract Run Reports API to list and execute reports.

Staff API Client

Namespace: org.apache.fineract.integrationtests.client.StaffTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /staff

Description: Consumes the Fineract Staff REST API to create and retrieve staff members via the generated client wrapper.

Fineract API

Namespace: org.apache.fineract.integrationtests.cob.CobPartitioningTest

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /fineract-provider/api/v1/...

Description: The test acts as a REST client interacting with the Fineract platform API to create resources and trigger processes.

Client API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/clients

Description: Interacts with the Fineract Client API to manage client resources.

Client Search API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/clientSearchV2

Description: Interacts with the Client Search API.

Client Charges API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/clients/{clientId}/charges

Description: Interacts with the Client Charges API to add, pay, or waive charges.

Client Transactions API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/clients/{clientId}/transactions

Description: Interacts with the Client Transactions API to retrieve or undo transactions.

Bulk Import API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/clients/downloadtemplate, /fineract-provider/api/v1/clients/uploadtemplate

Description: Interacts with the Bulk Import API for downloading templates and uploading files.

Fineract API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: Various (configured via RequestSpecification)

Description: Consumes the Fineract Platform REST APIs to perform integration testing.

Get Credit Bureau Configuration

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/CreditBureauConfiguration/config/{creditBureauId}

Description: Retrieves configuration details for a specific credit bureau.

Create Credit Bureau Configuration

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/CreditBureauConfiguration/configuration/{creditBureauId}

Description: Creates a new configuration entry for a credit bureau.

Update Credit Bureau Configuration

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/CreditBureauConfiguration/configuration/{ConfigurationId}

Description: Updates an existing credit bureau configuration.

Get Organization Credit Bureau Configuration

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/CreditBureauConfiguration/organisationCreditBureau

Description: Retrieves the organization-level credit bureau configuration.

Add Organization Credit Bureau

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/CreditBureauConfiguration/organisationCreditBureau/{creditBureauId}

Description: Adds a credit bureau mapping to the organization.

Update Organization Credit Bureau

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/CreditBureauConfiguration/organisationCreditBureau

Description: Updates the organization's credit bureau mapping.

Client Notes API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/clients/{clientId}/notes

Description: API endpoints for managing notes on Clients

Group Notes API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups/{groupId}/notes

Description: API endpoints for managing notes on Groups

Loan Notes API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/loans/{loanId}/notes

Description: API endpoints for managing notes on Loans

Loan Transaction Notes API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/loanTransactions/{loanTransactionId}/notes

Description: API endpoints for managing notes on Loan Transactions

Savings Notes API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/savings/{savingsId}/notes

Description: API endpoints for managing notes on Savings Accounts

Fineract API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract REST API to perform integration tests.

Create Group Calendar

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups/{groupId}/calendars

Description: Creates a calendar for a group via HTTP POST.

Update Group Calendar

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups/{groupId}/calendars/{calendarId}

Description: Updates a calendar for a group via HTTP PUT.

Get Group Details

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups/{groupId}?associations=all

Description: Retrieves group details to verify calendar creation.

Create Center Calendar

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/centers/{centerId}/calendars

Description: Creates a calendar for a center via HTTP POST.

Update Center Calendar

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/centers/{centerId}/calendars/{calendarId}

Description: Updates a calendar for a center via HTTP PUT.

External Asset Owners API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /external-asset-owners/*

Description: Interacts with the Fineract External Asset Owners REST API to manage asset transfers.

Working Days API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/workingdays

Description: API endpoint to manage working days configuration.

Working Days API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/workingdays

Description: API endpoint to retrieve working days configuration.

Payment Types API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/paymenttypes

Description: Interacts with the Fineract Payment Types REST API to perform CRUD operations.

Get Configured Business Steps

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/jobs/{jobName}/steps

Description: Retrieves the configured business steps for a specific job.

Get Available Business Steps

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/jobs/{jobName}/available-steps

Description: Retrieves the available business steps for a specific job.

Update Business Steps

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/jobs/{jobName}/steps

Description: Updates the order or configuration of business steps for a job.

Get Configured Business Steps

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/jobs/{jobName}/steps

Description: Retrieves the configured business steps for a specific job.

Get Available Business Steps

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/jobs/{jobName}/available-steps

Description: Retrieves the available business steps for a specific job.

Update Business Steps

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/jobs/{jobName}/steps

Description: Updates the business steps configuration for a job, requiring an Idempotency-Key header.

Create Holiday

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/holidays

Description: Creates a new holiday resource via the API.

Activate Holiday

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/holidays/{holidayID}?command=activate

Description: Activates an existing holiday resource.

Get Holiday By ID

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/holidays/{holidayID}

Description: Retrieves details of a specific holiday.

Update Business Date

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/businessdate

Description: Updates the business date configuration for a specific type.

Get Business Date By Type

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/businessdate/{type}

Description: Retrieves the business date configuration for a specific type.

Get All Business Dates

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/businessdate

Description: Retrieves all business date configurations.

Password Preferences API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/passwordpreferences

Description: API endpoint to manage password validation policies.

Fulfil Survey API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/survey/ppi_kenya_2009/clientId

Description: Endpoint to submit a filled PPI Kenya 2009 survey.

Retrieve Survey API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/Survey/ppi_kenya_2009/clientid/entryId{generatedClientID}

Description: Endpoint to retrieve a specific survey entry by ID.

Get Credit Report API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/creditBureauIntegration/creditReport

Description: Endpoint to retrieve a credit report configuration/data.

Upload Credit Report API

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/creditBureauIntegration/addCreditReport

Description: Endpoint to upload a credit report file.

Get External Service Configuration

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/externalservice/{serviceName}

Description: Retrieves configuration for a specific external service via the Fineract API.

Update External Service Configuration

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/externalservice/{serviceName}

Description: Updates configuration parameters for a specific external service via the Fineract API.

Create Tax Group

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/taxes/group

Description: API endpoint to create a new tax group definition.

Create Tax Component

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/taxes/component

Description: API endpoint to create a new tax component definition in the system.

Get Notifications

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/notifications

Description: Fetches notifications for the current tenant.

updateJobBusinessStepConfig

Namespace: org.apache.fineract.integrationtests.common

Mechanism: REST

Direction: PRODUCER

Path/Topic: /jobs/{jobName}/steps (inferred from client usage)

Description: Updates the business step configuration for a specific job via the Fineract API client.

Audit API

Namespace: org.apache.fineract.integrationtests.common.AuditHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/audits

Description: Retrieves audit logs from the Fineract platform.

Audit Search Template API

Namespace: org.apache.fineract.integrationtests.common.AuditHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/audits/searchtemplate

Description: Retrieves the search template for audits.

Batch API

Namespace: org.apache.fineract.integrationtests.common.BatchHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/batches

Description: The class sends batch requests to the Fineract Batch API endpoint.

Clients API (via Batch)

Namespace: org.apache.fineract.integrationtests.common.BatchHelper

Mechanism: REST

Direction: PRODUCER

Path/Topic: v1/clients

Description: Constructs payloads to interact with the Clients API.

Loans API (via Batch)

Namespace: org.apache.fineract.integrationtests.common.BatchHelper

Mechanism: REST

Direction: PRODUCER

Path/Topic: v1/loans

Description: Constructs payloads to interact with the Loans API.

Savings API (via Batch)

Namespace: org.apache.fineract.integrationtests.common.BatchHelper

Mechanism: REST

Direction: PRODUCER

Path/Topic: v1/savingsaccounts

Description: Constructs payloads to interact with the Savings Accounts API.

Datatables API (via Batch)

Namespace: org.apache.fineract.integrationtests.common.BatchHelper

Mechanism: REST

Direction: PRODUCER

Path/Topic: v1/datatables

Description: Constructs payloads to interact with the Datatables API.

Reschedule Loans API (via Batch)

Namespace: org.apache.fineract.integrationtests.common.BatchHelper

Mechanism: REST

Direction: PRODUCER

Path/Topic: v1/rescheduleloans

Description: Constructs payloads to interact with the Reschedule Loans API.

Centers API

Namespace: org.apache.fineract.integrationtests.common.CenterHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/centers

Description: API for managing Center resources

Center Details API

Namespace: org.apache.fineract.integrationtests.common.CenterHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/centers/{id}

Description: API for retrieving, updating, or deleting a specific Center

Associate Groups Command

Namespace: org.apache.fineract.integrationtests.common.CenterHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/centers/{id}?command=associateGroups

Description: Command to associate groups with a center

Activate Center Command

Namespace: org.apache.fineract.integrationtests.common.CenterHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/centers/{id}?command=activate

Description: Command to activate a center

Assign Staff Command (Groups API)

Namespace: org.apache.fineract.integrationtests.common.CenterHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups/{groupId}?command=assignStaff

Description: Command to assign staff to a group/center

Unassign Staff Command (Groups API)

Namespace: org.apache.fineract.integrationtests.common.CenterHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups/{groupId}?command=unassignStaff

Description: Command to unassign staff from a group/center

Create Client Collateral

Namespace: org.apache.fineract.integrationtests.common.CollateralManagementHelper

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/clients/{clientId}/collaterals

Description: Creates a new collateral entry for a specific client.

Get Client Collateral

Namespace: org.apache.fineract.integrationtests.common.CollateralManagementHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/clients{clientId}/collaterals/{collateralId}

Description: Retrieves details of a specific collateral entry for a client.

Create Collateral Product

Namespace: org.apache.fineract.integrationtests.common.CollateralManagementHelper

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/collateral-management

Description: Creates a new collateral product definition.

Update Collateral Product

Namespace: org.apache.fineract.integrationtests.common.CollateralManagementHelper

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/collateral-management/{collateralId}

Description: Updates an existing collateral product definition.

Update Client Collateral

Namespace: org.apache.fineract.integrationtests.common.CollateralManagementHelper

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/clients/{clientId}/collaterals/{collateralId}

Description: Updates an existing collateral entry for a client.

Retrieve Currencies

Namespace: org.apache.fineract.integrationtests.common.CurrenciesHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/currencies

Description: Fetches currency configurations from the Fineract platform.

Update Currencies

Namespace: org.apache.fineract.integrationtests.common.CurrenciesHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/currencies

Description: Updates the list of selected currencies for the tenant.

External Event Configuration API

Namespace: org.apache.fineract.integrationtests.common.ExternalEventConfigurationHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/externalevents/configuration

Description: API endpoint to retrieve and manage external event configurations.

Get All Global Configurations

Namespace: org.apache.fineract.integrationtests.common.GlobalConfigurationHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/configurations

Description: Retrieves all global configuration settings.

Get Global Configuration By ID

Namespace: org.apache.fineract.integrationtests.common.GlobalConfigurationHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/configurations/{configId}

Description: Retrieves a specific global configuration by its ID.

Get Global Configuration By Name

Namespace: org.apache.fineract.integrationtests.common.GlobalConfigurationHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/configurations/name/{name}

Description: Retrieves a specific global configuration by its name.

Update Global Configuration

Namespace: org.apache.fineract.integrationtests.common.GlobalConfigurationHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/configurations/{configId}

Description: Updates a global configuration setting (value or enabled flag).

Get Cache Configuration

Namespace: org.apache.fineract.integrationtests.common.GlobalConfigurationHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/caches

Description: Retrieves cache configuration settings.

Update Cache Configuration

Namespace: org.apache.fineract.integrationtests.common.GlobalConfigurationHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/caches

Description: Updates cache configuration settings.

Create Group

Namespace: org.apache.fineract.integrationtests.common.GroupHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups

Description: Creates a new group via the API.

Associate Client

Namespace: org.apache.fineract.integrationtests.common.GroupHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups/{groupId}?command=associateClients

Description: Associates a client with a group.

Disassociate Client

Namespace: org.apache.fineract.integrationtests.common.GroupHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups/{groupId}?command=disassociateClients

Description: Disassociates a client from a group.

Activate Group

Namespace: org.apache.fineract.integrationtests.common.GroupHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups/{groupId}?command=activate

Description: Activates a group.

Update Group

Namespace: org.apache.fineract.integrationtests.common.GroupHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups/{groupId}

Description: Updates group details.

Delete Group

Namespace: org.apache.fineract.integrationtests.common.GroupHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups/{groupId}

Description: Deletes a group.

Assign Staff

Namespace: org.apache.fineract.integrationtests.common.GroupHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups/{groupId}?command=assignStaff

Description: Assigns staff to a group.

Get Group Details

Namespace: org.apache.fineract.integrationtests.common.GroupHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups/{groupId}

Description: Retrieves group details.

Get GLIM Accounts

Namespace: org.apache.fineract.integrationtests.common.GroupHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups/{groupId}/glimaccounts

Description: Retrieves GLIM accounts for a group.

Get GSIM Accounts

Namespace: org.apache.fineract.integrationtests.common.GroupHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups/{groupId}/gsimaccounts

Description: Retrieves GSIM accounts for a group.

Fineract Hooks API

Namespace: org.apache.fineract.integrationtests.common.HookHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/hooks

Description: API endpoints for managing webhooks in the Fineract platform.

Loan Reschedule API

Namespace: org.apache.fineract.integrationtests.common.LoanRescheduleRequestHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/rescheduleloans

Description: API endpoints for managing loan reschedule requests (create, approve, reject, get).

Office Management API

Namespace: org.apache.fineract.integrationtests.common.OfficeHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/offices

Description: Endpoints for creating, retrieving, and updating offices.

Office Template Upload

Namespace: org.apache.fineract.integrationtests.common.OfficeHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/offices/uploadtemplate

Description: Endpoint to upload office data import templates.

Office Template Download

Namespace: org.apache.fineract.integrationtests.common.OfficeHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/offices/downloadtemplate

Description: Endpoint to download the office data import template.

Import Template Location

Namespace: org.apache.fineract.integrationtests.common.OfficeHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/imports/getOutputTemplateLocation

Description: Endpoint to get the location of the output template after import.

Get Product Mix List

Namespace: org.apache.fineract.integrationtests.common.ProductMixHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/loanproducts

Description: Retrieves the list of loan product mixes via HTTP GET.

Get Product Mix Template

Namespace: org.apache.fineract.integrationtests.common.ProductMixHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/loanproducts/template

Description: Retrieves the template for loan product mixes via HTTP GET.

Get All Scheduler Jobs

Namespace: org.apache.fineract.integrationtests.common.SchedulerJobHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/jobs

Description: Retrieves a list of all configured scheduler jobs.

Get Scheduler Job By ID

Namespace: org.apache.fineract.integrationtests.common.SchedulerJobHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/jobs/{jobId}

Description: Retrieves details for a specific scheduler job.

Get Scheduler Status

Namespace: org.apache.fineract.integrationtests.common.SchedulerJobHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/scheduler

Description: Checks if the scheduler is active.

Update Scheduler Job

Namespace: org.apache.fineract.integrationtests.common.SchedulerJobHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/jobs/{jobId}

Description: Updates the configuration (active status) of a scheduler job.

Run Scheduler Job

Namespace: org.apache.fineract.integrationtests.common.SchedulerJobHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/jobs/{jobId}?command=executeJob

Description: Manually triggers the execution of a scheduler job.

Search API

Namespace: org.apache.fineract.integrationtests.common.SearchHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/search

Description: Invokes the Fineract Search API to retrieve resources matching specific criteria.

Create Standing Instruction

Namespace: org.apache.fineract.integrationtests.common.StandingInstructionsHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/standinginstructions

Description: Creates a new standing instruction via the API.

Get Standing Instruction By ID

Namespace: org.apache.fineract.integrationtests.common.StandingInstructionsHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/standinginstructions/{standingInstructionId}

Description: Retrieves a specific standing instruction.

Get Standing Instruction Run History

Namespace: org.apache.fineract.integrationtests.common.StandingInstructionsHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/standinginstructionrunhistory

Description: Retrieves the execution history of standing instructions.

Authentication Login

Namespace: org.apache.fineract.integrationtests.common.Utils

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/authentication

Description: Authenticates the user to obtain a base64 encoded key.

Actuator Health Check

Namespace: org.apache.fineract.integrationtests.common.Utils

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/actuator/health

Description: Checks if the application is up and running before starting tests.

Generic API Calls

Namespace: org.apache.fineract.integrationtests.common.Utils

Mechanism: REST

Direction: CONSUMER

Path/Topic: Dynamic (passed as argument)

Description: The class provides generic wrappers (performServerGet, performServerPost, etc.) to consume any REST endpoint in the application dynamically.

Financial Activity Accounts API

Namespace: org.apache.fineract.integrationtests.common.accounting

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/financialactivityaccounts

Description: API endpoint for managing financial activity account mappings.

Accounting Rules API

Namespace: org.apache.fineract.integrationtests.common.accounting

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/accountingrules

Description: Consumes the Fineract API to manage accounting rules.

Create GL Account

Namespace: org.apache.fineract.integrationtests.common.accounting.AccountHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/glaccounts

Description: API endpoint to create a new General Ledger account.

Get GL Accounts with Running Balance

Namespace: org.apache.fineract.integrationtests.common.accounting.AccountHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/glaccounts

Description: API endpoint to retrieve GL accounts with their running balances.

Get GL Account by ID

Namespace: org.apache.fineract.integrationtests.common.accounting.AccountHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/glaccounts/{accountId}

Description: API endpoint to retrieve a specific GL account by ID with running balance.

Get Journal Entries

Namespace: org.apache.fineract.integrationtests.common.accounting.JournalEntryHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/journalentries

Description: Retrieves accounting journal entries based on various criteria.

runPeriodicAccrualAccounting

Namespace: org.apache.fineract.integrationtests.common.accounting.PeriodicAccrualAccountingHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/runaccruals

Description: Invokes the periodic accrual accounting API endpoint.

Charges API

Namespace: org.apache.fineract.integrationtests.common.charges.ChargesHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/charges

Description: Consumes the Fineract Charges API to manage charge definitions.

Get Maker Checker List

Namespace: org.apache.fineract.integrationtests.common.commands.MakercheckersHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/makercheckers

Description: Retrieves the list of maker-checker entries from the Fineract provider API.

Fixed Deposit Account API

Namespace: org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/fixeddepositaccounts

Description: Main API for managing fixed deposit accounts.

Approve Fixed Deposit

Namespace: org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/fixeddepositaccounts/{id}?command=approve

Description: Command to approve a fixed deposit application.

Undo Approval

Namespace: org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/fixeddepositaccounts/{id}?command=undoapproval

Description: Command to undo the approval of a fixed deposit.

Reject Application

Namespace: org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/fixeddepositaccounts/{id}?command=reject

Description: Command to reject a fixed deposit application.

Withdraw Application

Namespace: org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/fixeddepositaccounts/{id}?command=withdrawnByApplicant

Description: Command for applicant to withdraw the application.

Activate Fixed Deposit

Namespace: org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/fixeddepositaccounts/{id}?command=activate

Description: Command to activate the fixed deposit.

Calculate Interest

Namespace: org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/fixeddepositaccounts/{id}?command=calculateInterest

Description: Command to calculate interest.

Post Interest

Namespace: org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/fixeddepositaccounts/{id}?command=postInterest

Description: Command to post interest.

Premature Close

Namespace: org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/fixeddepositaccounts/{id}?command=prematureClose

Description: Command to close the deposit prematurely.

Get Fixed Deposit Account Status

Namespace: org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountStatusChecker

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/fixeddepositaccounts/{fixedDepositAccountID}

Description: Retrieves the status details of a specific fixed deposit account.

Create Fixed Deposit Product

Namespace: org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositProductHelper

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/fixeddepositproducts

Description: Creates a new fixed deposit product definition.

Retrieve All Fixed Deposit Products

Namespace: org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositProductHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/fixeddepositproducts

Description: Fetches a list of all existing fixed deposit products.

Retrieve Fixed Deposit Product By ID

Namespace: org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositProductHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/fixeddepositproducts/{productId}

Description: Fetches details for a single fixed deposit product.

Retrieve Interest Rate Charts

Namespace: org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositProductHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/interestratecharts

Description: Fetches interest rate chart slabs for a specific product.

Create Fund

Namespace: org.apache.fineract.integrationtests.common.funds.FundsResourceHandler

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/funds

Description: API endpoint to create a new fund.

Retrieve All Funds

Namespace: org.apache.fineract.integrationtests.common.funds.FundsResourceHandler

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/funds

Description: API endpoint to list all funds.

Retrieve Single Fund

Namespace: org.apache.fineract.integrationtests.common.funds.FundsResourceHandler

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/funds/{fundID}

Description: API endpoint to retrieve a specific fund by ID.

Update Fund

Namespace: org.apache.fineract.integrationtests.common.funds.FundsResourceHandler

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/funds/{fundID}

Description: API endpoint to update an existing fund.

Create Loan Product

Namespace: org.apache.fineract.integrationtests.common.loans

Mechanism: REST

Direction: CONSUMER

Path/Topic: /loanproducts

Description: Calls the API to create a new loan product.

Retrieve Loan Product by External ID

Namespace: org.apache.fineract.integrationtests.common.loans

Mechanism: REST

Direction: CONSUMER

Path/Topic: /loanproducts/external-id/{externalId}

Description: Calls the API to retrieve loan product details by external ID.

Retrieve Loan Product by ID

Namespace: org.apache.fineract.integrationtests.common.loans

Mechanism: REST

Direction: CONSUMER

Path/Topic: /loanproducts/{loanProductId}

Description: Calls the API to retrieve loan product details by internal ID.

Update Loan Product by External ID

Namespace: org.apache.fineract.integrationtests.common.loans

Mechanism: REST

Direction: CONSUMER

Path/Topic: /loanproducts/external-id/{externalId}

Description: Calls the API to update a loan product using its external ID.

Get Loan Product Template

Namespace: org.apache.fineract.integrationtests.common.loans

Mechanism: REST

Direction: CONSUMER

Path/Topic: /loanproducts/template

Description: Calls the API to retrieve the loan product template.

Get COB Partitions

Namespace: org.apache.fineract.integrationtests.common.loans

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/internal/cob/partitions/{partitionSize}

Description: Consumes an internal REST API to retrieve COB partitions.

Internal Place Lock on Loan Account

Namespace: org.apache.fineract.integrationtests.common.loans.LoanAccountLockHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/internal/loans/{loanId}/place-lock/{lockOwner}

Description: Calls an internal API endpoint to place a soft lock on a specific loan account.

executeLoanCOBCatchUp

Namespace: org.apache.fineract.integrationtests.common.loans.LoanCOBCatchUpHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Triggers the Loan COB Catch Up process on the Fineract backend.

getOldestCOBProcessedLoan

Namespace: org.apache.fineract.integrationtests.common.loans.LoanCOBCatchUpHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Retrieves the oldest loan processed by the COB Catch Up mechanism.

isCatchUpRunning

Namespace: org.apache.fineract.integrationtests.common.loans.LoanCOBCatchUpHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Checks the running status of the Loan COB Catch Up process.

Get Loan Details

Namespace: org.apache.fineract.integrationtests.common.loans.LoanStatusChecker

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/loans/{loanID}

Description: Fetches the details of a specific loan to inspect its status or sub-status.

Fineract Loan API

Namespace: org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension

Mechanism: REST

Direction: CONSUMER

Path/Topic: /loans/{loanId}/transactions, /loans/{loanId}

Description: Interacts with the Fineract platform via HTTP to manage loan lifecycle states.

Fineract Loan API

Namespace: org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/loans

Description: Consumes the Fineract Loan REST API to perform operations.

Fineract Loan Product API

Namespace: org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/loanproducts

Description: Consumes the Fineract Loan Product REST API.

Fineract Interoperation API

Namespace: org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/interoperation/transactions/{accountNo}/loanrepayment

Description: Consumes the Interoperation API for loan repayments via account number.

SMS Bridge Mock

Namespace: org.apache.fineract.integrationtests.common.organisation

Mechanism: REST

Direction: PRODUCER

Path/Topic: /smsbridges

Description: Mocks the external SMS provider service required by the application to list available SMS bridges.

Fineract API Client

Namespace: org.apache.fineract.integrationtests.common.organisation

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes the Fineract REST API to perform campaign operations (create, update, delete, etc.) via the CampaignsHelper.

SMS Campaigns API

Namespace: org.apache.fineract.integrationtests.common.organisation

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/smscampaigns

Description: API for managing SMS campaigns

SMS Campaigns API - Retrieve

Namespace: org.apache.fineract.integrationtests.common.organisation

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/smscampaigns/{id}

Description: API to retrieve a specific campaign

SMS Campaigns API - Update

Namespace: org.apache.fineract.integrationtests.common.organisation

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/smscampaigns/{id}

Description: API to update a specific campaign

SMS Campaigns API - Delete

Namespace: org.apache.fineract.integrationtests.common.organisation

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/smscampaigns/{id}

Description: API to delete a specific campaign

SMS Campaigns API - Action

Namespace: org.apache.fineract.integrationtests.common.organisation

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/smscampaigns/{id}?command={command}

Description: API to perform actions (activate/close) on a campaign

SMS Campaigns Template API

Namespace: org.apache.fineract.integrationtests.common.organisation

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/smscampaigns/template

Description: API to retrieve campaign templates and options

Entity Datatable Checks API

Namespace: org.apache.fineract.integrationtests.common.organisation

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/entityDatatableChecks

Description: Consumes the Fineract Entity Datatable Checks REST API for integration testing purposes.

Currency API

Namespace: org.apache.fineract.integrationtests.common.organisation.CurrencyHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/currencies

Description: API endpoint to retrieve and update currency configurations.

Fineract API

Namespace: org.apache.fineract.integrationtests.common.organisation.EntityDatatableChecksIntegrationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes Fineract REST APIs to perform integration tests on Datatables, Clients, Groups, Loans, and Savings.

Staff API

Namespace: org.apache.fineract.integrationtests.common.organisation.StaffHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/staff

Description: Integration with the Fineract Staff management REST API endpoints.

Group Transfer API

Namespace: org.apache.fineract.integrationtests.common.organisation.StaffHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/groups/{groupId}?command=transferStaff

Description: Integration with the Fineract Group API to transfer staff.

Delinquency Buckets API

Namespace: org.apache.fineract.integrationtests.common.products

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/delinquency/buckets

Description: API endpoints for managing delinquency buckets.

Delinquency Ranges API

Namespace: org.apache.fineract.integrationtests.common.products

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/delinquency/ranges

Description: API endpoints for managing delinquency ranges.

Provisioning Category API

Namespace: org.apache.fineract.integrationtests.common.provisioning

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/provisioningcategory

Description: Retrieves provisioning categories.

Create Provisioning Criteria API

Namespace: org.apache.fineract.integrationtests.common.provisioning

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/provisioningcriteria

Description: Creates new provisioning criteria.

Provisioning Criteria Detail API

Namespace: org.apache.fineract.integrationtests.common.provisioning

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/provisioningcriteria/{criteriaId}

Description: Retrieves, updates, or deletes a specific provisioning criteria.

Create Provisioning Entries API

Namespace: org.apache.fineract.integrationtests.common.provisioning

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/provisioningentries

Description: Creates provisioning entries.

Update Provisioning Entry API

Namespace: org.apache.fineract.integrationtests.common.provisioning

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/provisioningentries/{entryId}

Description: Updates a provisioning entry with a specific command.

Retrieve Provisioning Entry API

Namespace: org.apache.fineract.integrationtests.common.provisioning

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/provisioningentries/{provisioningEntry}

Description: Retrieves a specific provisioning entry.

Retrieve Related Provisioning Entries API

Namespace: org.apache.fineract.integrationtests.common.provisioning

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/provisioningentries/entries

Description: Retrieves entries related to a specific ID.

Retrieve All Provisioning Entries API

Namespace: org.apache.fineract.integrationtests.common.provisioning

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/provisioningentries

Description: Retrieves all provisioning entries.

Rates API

Namespace: org.apache.fineract.integrationtests.common.rates

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/rates

Description: The Fineract Rates API used to manage rate definitions.

Recurring Deposit Account API

Namespace: org.apache.fineract.integrationtests.common.recurringdeposit.RecurringDepositAccountHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/recurringdepositaccounts

Description: API for managing recurring deposit accounts (create, update, approve, transact).

Get Recurring Deposit Account Status

Namespace: org.apache.fineract.integrationtests.common.recurringdeposit.RecurringDepositAccountStatusChecker

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/recurringdepositaccounts/{recurringDepositAccountID}

Description: Retrieves the status details of a specific recurring deposit account via the Fineract API.

Create Recurring Deposit Product

Namespace: org.apache.fineract.integrationtests.common.recurringdeposit.RecurringDepositProductHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/recurringdepositproducts

Description: Creates a new recurring deposit product definition in the system.

Retrieve All Recurring Deposit Products

Namespace: org.apache.fineract.integrationtests.common.recurringdeposit.RecurringDepositProductHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/recurringdepositproducts

Description: Fetches a list of all recurring deposit products.

Retrieve Recurring Deposit Product By ID

Namespace: org.apache.fineract.integrationtests.common.recurringdeposit.RecurringDepositProductHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/recurringdepositproducts/{productId}

Description: Fetches details of a single recurring deposit product.

Retrieve Interest Rate Charts

Namespace: org.apache.fineract.integrationtests.common.recurringdeposit.RecurringDepositProductHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/interestratecharts

Description: Fetches interest rate chart slabs for a specific product.

Savings Account API

Namespace: org.apache.fineract.integrationtests.common.savings

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/savingsaccounts/{savingsID}

Description: Retrieves status and sub-status information for savings accounts.

Account Transfer API

Namespace: org.apache.fineract.integrationtests.common.savings.AccountTransferHelper

Mechanism: REST

Direction: N/A

Path/Topic: /fineract-provider/api/v1/accounttransfers

Description: Endpoint to execute account transfers between clients/accounts.

Loan Refund By Transfer API

Namespace: org.apache.fineract.integrationtests.common.savings.AccountTransferHelper

Mechanism: REST

Direction: N/A

Path/Topic: /fineract-provider/api/v1/accounttransfers/refundByTransfer

Description: Endpoint to refund a loan via an account transfer.

Savings Account API

Namespace: org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/savingsaccounts

Description: Consumes the Fineract Savings Account REST API to perform CRUD operations and commands on savings accounts.

Create Savings Product

Namespace: org.apache.fineract.integrationtests.common.savings.SavingsProductHelper

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/savingsproducts

Description: Creates a new savings product definition in the system.

Get Savings Product

Namespace: org.apache.fineract.integrationtests.common.savings.SavingsProductHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/savingsproducts/{id}

Description: Retrieves a savings product definition to verify its creation.

Create Share Product Dividend

Namespace: org.apache.fineract.integrationtests.common.shares

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/shareproduct/{productId}/dividend

Description: Creates a new dividend for a share product via the API.

Update Share Product Dividend

Namespace: org.apache.fineract.integrationtests.common.shares

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/shareproduct/{productId}/dividend/{dividendId}

Description: Updates or executes a command on a dividend via the API.

Retrieve Dividend Details

Namespace: org.apache.fineract.integrationtests.common.shares

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/shareproduct/{productId}/dividend/{dividendId}

Description: Fetches details of a specific dividend via the API.

Retrieve All Dividends

Namespace: org.apache.fineract.integrationtests.common.shares

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/shareproduct/{productId}/dividend

Description: Fetches all dividends for a share product via the API.

Create Share Account

Namespace: org.apache.fineract.integrationtests.common.shares

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/accounts/share

Description: Calls the API to create a new share account.

Retrieve Share Account

Namespace: org.apache.fineract.integrationtests.common.shares

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/accounts/share/{id}

Description: Calls the API to retrieve share account details.

Update Share Account

Namespace: org.apache.fineract.integrationtests.common.shares

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/accounts/share/{id}

Description: Calls the API to update a share account.

Share Account Command

Namespace: org.apache.fineract.integrationtests.common.shares

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/accounts/share/{id}?command={command}

Description: Calls the API to execute a command on a share account.

Fineract API

Namespace: org.apache.fineract.integrationtests.common.shares.DividendsIntegrationTests

Mechanism: REST

Direction: CONSUMER

Path/Topic: Dynamic (handled by TransactionHelpers)

Description: Interacts with the Fineract platform via HTTP REST endpoints to manage clients, accounts, and dividends.

Fineract API

Namespace: org.apache.fineract.integrationtests.common.shares.ShareAccountIntegrationTests

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Interacts with the Fineract Core Banking Platform REST API to perform integration tests.

Create Share Product

Namespace: org.apache.fineract.integrationtests.common.shares.ShareProductTransactionHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/products/share

Description: Consumes the API to create a new share product.

Retrieve Share Product

Namespace: org.apache.fineract.integrationtests.common.shares.ShareProductTransactionHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/products/share/{shareProductId}

Description: Consumes the API to retrieve details of a share product.

Update Share Product

Namespace: org.apache.fineract.integrationtests.common.shares.ShareProductTransactionHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/products/share/{shareProductId}

Description: Consumes the API to update an existing share product.

Datatable API

Namespace: org.apache.fineract.integrationtests.common.system

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/datatables

Description: Consumes the Fineract Datatable API to manage datatables and their entries.

Account Number Formats API

Namespace: org.apache.fineract.integrationtests.common.system

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/accountnumberformats

Description: API endpoint for managing account number preferences.

Codes API

Namespace: org.apache.fineract.integrationtests.common.system.CodeHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/codes

Description: API to manage system codes (reference data categories).

Code Values API

Namespace: org.apache.fineract.integrationtests.common.system.CodeHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/codes/{codeId}/codevalues

Description: API to manage specific values within a system code category.

Get Taxonomy List

Namespace: org.apache.fineract.integrationtests.common.xbrl.XBRLIntegrationTestHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/mixtaxonomy

Description: Retrieves the list of XBRL taxonomies via HTTP GET.

Get Taxonomy Mapping

Namespace: org.apache.fineract.integrationtests.common.xbrl.XBRLIntegrationTestHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/mixmapping

Description: Retrieves the XBRL taxonomy mappings via HTTP GET.

Fineract API

Namespace: org.apache.fineract.integrationtests.datatable

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/datatables/*

Description: The test class acts as a REST client consuming the Fineract API to test Datatable functionality.

Fineract API

Namespace: org.apache.fineract.integrationtests.datatable

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming Fineract APIs to create entities and query data tables.

Datatable API

Namespace: org.apache.fineract.integrationtests.datatable

Mechanism: REST

Direction: CONSUMER

Path/Topic: /datatables

Description: The test class acts as a consumer of the Fineract Datatable REST API to create, read, and update datatable definitions.

Create Guarantor

Namespace: org.apache.fineract.integrationtests.guarantor.GuarantorHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/loans/{loanId}/guarantors/

Description: Creates a new guarantor for a loan via the API.

Update Guarantor

Namespace: org.apache.fineract.integrationtests.guarantor.GuarantorHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/loans/{loanId}/guarantors/{guarantorId}

Description: Updates an existing guarantor via the API.

Delete Guarantor

Namespace: org.apache.fineract.integrationtests.guarantor.GuarantorHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/loans/{loanId}/guarantors/{guarantorId}

Description: Deletes a guarantor via the API.

Get Guarantor

Namespace: org.apache.fineract.integrationtests.guarantor.GuarantorHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/loans/{loanId}/guarantors/{guarantorId}

Description: Retrieves a specific guarantor via the API.

Get All Guarantors

Namespace: org.apache.fineract.integrationtests.guarantor.GuarantorHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/loans/{loanId}/guarantors/

Description: Retrieves all guarantors for a loan via the API.

Fineract API

Namespace: org.apache.fineract.integrationtests.guarantor.GuarantorTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes Fineract REST APIs to perform integration testing of the Guarantor module.

Execute Inline Loan COB

Namespace: org.apache.fineract.integrationtests.inlinecob

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/jobs/LOAN_COB/inline

Description: Invokes the Fineract API to run the Loan Close of Business job inline for specific loans.

Fineract API

Namespace: org.apache.fineract.integrationtests.inlinecob.InlineLoanCOBTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming Fineract APIs to create entities, manage loans, and trigger COB processes.

Get Health

Namespace: org.apache.fineract.integrationtests.interoperation.InteropHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/interoperation/health

Description: Checks the health of the interoperation service.

Get Party

Namespace: org.apache.fineract.integrationtests.interoperation.InteropHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/interoperation/parties/{idType}/{idValue}

Description: Retrieves party information by identifier.

Post Party

Namespace: org.apache.fineract.integrationtests.interoperation.InteropHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/interoperation/parties/{idType}/{idValue}

Description: Registers or updates a party.

Delete Party

Namespace: org.apache.fineract.integrationtests.interoperation.InteropHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/interoperation/parties/{idType}/{idValue}

Description: Deletes a party.

Get Transaction Request

Namespace: org.apache.fineract.integrationtests.interoperation.InteropHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/interoperation/transactions/{transactionCode}/requests/{requestCode}

Description: Retrieves a transaction request.

Post Transaction Request

Namespace: org.apache.fineract.integrationtests.interoperation.InteropHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/interoperation/requests

Description: Creates a transaction request.

Get Quote

Namespace: org.apache.fineract.integrationtests.interoperation.InteropHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/interoperation/transactions/{transactionCode}/quotes/{quoteCode}

Description: Retrieves a quote.

Post Quote

Namespace: org.apache.fineract.integrationtests.interoperation.InteropHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/interoperation/quotes

Description: Creates a quote.

Get Transfer

Namespace: org.apache.fineract.integrationtests.interoperation.InteropHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/interoperation/transactions/{transactionCode}/transfers/{transferCode}

Description: Retrieves a transfer.

Post Transfer

Namespace: org.apache.fineract.integrationtests.interoperation.InteropHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/interoperation/transfers

Description: Creates or prepares a transfer.

Fineract API

Namespace: org.apache.fineract.integrationtests.interoperation.InteropTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: Various (managed by helper classes)

Description: The test class acts as a REST client consuming the Fineract API to perform integration tests.

Fineract API

Namespace: org.apache.fineract.integrationtests.investor.externalassetowner

Mechanism: REST

Direction: PRODUCER

Path/Topic: Various (e.g., /loans, /external-asset-owners)

Description: The test class acts as a REST client consuming Fineract APIs to perform operations like creating clients, loans, and managing asset transfers.

Fineract API

Namespace: org.apache.fineract.integrationtests.investor.externalassetowner

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes Fineract REST APIs to perform integration tests.

External Asset Owner API

Namespace: org.apache.fineract.integrationtests.investor.externalassetowner

Mechanism: REST

Direction: CONSUMER

Path/Topic: /external-asset-owners/transfers/search

Description: Consumes the External Asset Owner REST API to search for, initiate, and cancel asset transfers.

Fineract API

Namespace: org.apache.fineract.integrationtests.investor.externalassetowner.InitiateExternalAssetOwnerTransferTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: Interacts with the Fineract platform API to create clients, loans, and manage external asset owner transfers.

Instance Mode Configuration API

Namespace: org.apache.fineract.integrationtests.support.instancemode

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: Calls the application's API to change the instance mode (read/write/batch settings).

Change Instance Mode

Namespace: org.apache.fineract.integrationtests.support.instancemode

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/instance-mode

Description: Updates the operational mode of the Fineract instance via API.

Create Role

Namespace: org.apache.fineract.integrationtests.useradministration.roles

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/roles

Description: Creates a new role via the API.

Get Role Details

Namespace: org.apache.fineract.integrationtests.useradministration.roles

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/roles/{roleId}

Description: Retrieves details of a specific role.

Disable Role

Namespace: org.apache.fineract.integrationtests.useradministration.roles

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/roles/{roleId}?command=disable

Description: Disables a role using a command parameter.

Enable Role

Namespace: org.apache.fineract.integrationtests.useradministration.roles

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/roles/{roleId}?command=enable

Description: Enables a role using a command parameter.

Delete Role

Namespace: org.apache.fineract.integrationtests.useradministration.roles

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/roles/{roleId}?command=enable

Description: Deletes a role.

Update Permissions

Namespace: org.apache.fineract.integrationtests.useradministration.roles

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/roles/{roleId}/permissions

Description: Updates permissions for a role.

Create User

Namespace: org.apache.fineract.integrationtests.useradministration.users

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/users

Description: Creates a new user in the system.

Get Users

Namespace: org.apache.fineract.integrationtests.useradministration.users

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/users

Description: Retrieves a list of all users.

Update User

Namespace: org.apache.fineract.integrationtests.useradministration.users

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/users/{userId}

Description: Updates an existing user.

Delete User

Namespace: org.apache.fineract.integrationtests.useradministration.users

Mechanism: REST

Direction: PRODUCER

Path/Topic: /fineract-provider/api/v1/users/{userId}

Description: Deletes a user from the system.

Fineract API

Namespace: org.apache.fineract.integrationtests.variableinstallments.VariableInstallmentsIntegrationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: N/A

Description: The test class acts as a REST client consuming the Fineract API to create products, clients, loans, and manage installments.

Retrieve Loan Schedule

Namespace: org.apache.fineract.integrationtests.variableinstallments.VariableIntallmentsTransactionHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/loans/{loanId}

Description: Fetches the repayment schedule for a loan via the Fineract API.

Calculate Loan Schedule (Validate Variations)

Namespace: org.apache.fineract.integrationtests.variableinstallments.VariableIntallmentsTransactionHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/loans/{loanId}/schedule

Description: Calculates the loan schedule based on provided variations without persisting them.

Add Variations (Submit Variations)

Namespace: org.apache.fineract.integrationtests.variableinstallments.VariableIntallmentsTransactionHelper

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/loans/{loanId}/schedule

Description: Submits variable installment variations to be added to the loan schedule.

Interoperation API

Namespace: org.apache.fineract.interoperation.api.InteropApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interoperation

Description: Main API resource for interoperation functionality.

Health Check

Namespace: org.apache.fineract.interoperation.api.InteropApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interoperation/health

Description: Health check endpoint.

Get Account Details

Namespace: org.apache.fineract.interoperation.api.InteropApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interoperation/accounts/{accountId}

Description: Endpoint to retrieve account details.

Get Account Transactions

Namespace: org.apache.fineract.interoperation.api.InteropApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interoperation/accounts/{accountId}/transactions

Description: Endpoint to retrieve account transactions.

Get Account Identifiers

Namespace: org.apache.fineract.interoperation.api.InteropApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interoperation/accounts/{accountId}/identifiers

Description: Endpoint to retrieve account identifiers.

Get Account By Identifier

Namespace: org.apache.fineract.interoperation.api.InteropApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interoperation/parties/{idType}/{idValue}

Description: Endpoint to retrieve account by identifier.

Register Account Identifier

Namespace: org.apache.fineract.interoperation.api.InteropApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interoperation/parties/{idType}/{idValue}

Description: Endpoint to register account identifier.

Delete Account Identifier

Namespace: org.apache.fineract.interoperation.api.InteropApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interoperation/parties/{idType}/{idValue}

Description: Endpoint to delete account identifier.

Get Transaction Request

Namespace: org.apache.fineract.interoperation.api.InteropApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interoperation/transactions/{transactionCode}/requests/{requestCode}

Description: Endpoint to get transaction request details.

Create Transaction Request

Namespace: org.apache.fineract.interoperation.api.InteropApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interoperation/requests

Description: Endpoint to create a transaction request.

Get Quote

Namespace: org.apache.fineract.interoperation.api.InteropApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interoperation/transactions/{transactionCode}/quotes/{quoteCode}

Description: Endpoint to get quote details.

Create Quote

Namespace: org.apache.fineract.interoperation.api.InteropApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interoperation/quotes

Description: Endpoint to create a quote.

Get Transfer

Namespace: org.apache.fineract.interoperation.api.InteropApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interoperation/transactions/{transactionCode}/transfers/{transferCode}

Description: Endpoint to get transfer details.

Perform Transfer

Namespace: org.apache.fineract.interoperation.api.InteropApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interoperation/transfers

Description: Endpoint to perform a transfer.

Get Client KYC

Namespace: org.apache.fineract.interoperation.api.InteropApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interoperation/accounts/{accountId}/kyc

Description: Endpoint to get client KYC.

Disburse Loan

Namespace: org.apache.fineract.interoperation.api.InteropApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interoperation/transactions/{accountId}/disburse

Description: Endpoint to disburse a loan.

Loan Repayment

Namespace: org.apache.fineract.interoperation.api.InteropApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interoperation/transactions/{accountId}/loanrepayment

Description: Endpoint to repay a loan.

External Asset Owners API

Namespace: org.apache.fineract.investor.api

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/external-asset-owners

Description: Provides endpoints for managing external asset owners, including loan transfers (sale/buyback), cancellations, and data retrieval.

ExternalAssetOwnerInitiateTransferExceptionMapper

Namespace: org.apache.fineract.investor.exception.exceptionmapper.ExternalAssetOwnerInitiateTransferExceptionMapper

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: JAX-RS ExceptionMapper that maps ExternalAssetOwnerInitiateTransferException to HTTP 403 responses.

LoanStatusChangedBusinessEvent Listener

Namespace: org.apache.fineract.investor.service

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes internal business events triggered when a loan's status changes.

ASSET_OWNER_TRANSACTION CANCEL

Namespace: org.apache.fineract.investor.service.CancelLoanFromExternalAssetOwnerHandler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: ASSET_OWNER_TRANSACTION / CANCEL

Description: Fineract Command Handler for cancelling asset owner transactions.

retrieveTaxonomyMapping

Namespace: org.apache.fineract.mix.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/mixmapping

Description: Endpoint to retrieve MIX taxonomy mapping data.

updateTaxonomyMapping

Namespace: org.apache.fineract.mix.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/mixmapping

Description: Endpoint to update MIX taxonomy mapping configuration.

retrieveXBRLReport

Namespace: org.apache.fineract.mix.api.MixReportApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/mixreport

Description: Endpoint to retrieve XBRL reports based on date range and currency.

retrieveAll

Namespace: org.apache.fineract.mix.api.MixTaxonomyApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/mixtaxonomy

Description: Retrieves the list of Mix Taxonomy data.

XBRLMAPPING UPDATE Command Handler

Namespace: org.apache.fineract.mix.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: XBRLMAPPING/UPDATE

Description: Registers a handler for the Fineract Command Query Separation (CQS) engine to process UPDATE actions on XBRLMAPPING entities.

getAllNotifications

Namespace: org.apache.fineract.notification.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/notifications

Description: Endpoint to retrieve paginated notifications for the user.

update

Namespace: org.apache.fineract.notification.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/notifications

Description: Endpoint to mark notifications as read.

GetNotificationsResponse

Namespace: org.apache.fineract.notification.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: N/A

Description: Defines the schema and example structure for the response body of the notification retrieval REST API endpoint.

NotificationQueue

Namespace: org.apache.fineract.notification.config

Mechanism: ACTIVEMQ-QUEUE

Direction: CONSUMER

Path/Topic: NotificationQueue

Description: JMS Queue used for receiving notification events.

JmsTemplate

Namespace: org.apache.fineract.notification.config

Mechanism: ACTIVEMQ-QUEUE

Direction: PRODUCER

Path/Topic: N/A

Description: JMS Template configured for sending messages to ActiveMQ.

ActiveMQ Notification Listener

Namespace: org.apache.fineract.notification.eventandlistener

Mechanism: ACTIVEMQ-QUEUE

Direction: CONSUMER

Path/Topic: N/A

Description: Consumes JMS messages containing NotificationData objects when ActiveMQ is enabled.

Spring Application Event Bus

Namespace: org.apache.fineract.notification.eventandlistener

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Publishes internal application events using Spring's ApplicationEventPublisher mechanism.

NotificationQueue

Namespace: org.apache.fineract.notification.eventandlistener

Mechanism: ACTIVEMQ-QUEUE

Direction: PRODUCER

Path/Topic: NotificationQueue

Description: ActiveMQ queue used for broadcasting notification events.

Spring Application Event Listener

Namespace: org.apache.fineract.notification.eventandlistener

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Listens for internal Spring application events (NotificationEvent) as an alternative to external messaging when ActiveMQ is disabled.

Actuator Health

Namespace: org.apache.fineract.oauth2tests.OAuth2AuthenticationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/actuator/health

Description: Spring Boot Actuator health check endpoint used to verify service availability.

Keycloak Token Endpoint

Namespace: org.apache.fineract.oauth2tests.OAuth2AuthenticationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /auth/realms/fineract/token

Description: External Identity Provider endpoint used to obtain OAuth2 tokens.

Fineract API - Offices

Namespace: org.apache.fineract.oauth2tests.OAuth2AuthenticationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/offices/1

Description: Protected API endpoint to retrieve office details.

Fineract API - User Details

Namespace: org.apache.fineract.oauth2tests.OAuth2AuthenticationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/userdetails

Description: Protected API endpoint to retrieve current user authentication details.

Create Holiday

Namespace: org.apache.fineract.organisation.holiday.api.HolidaysApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/holidays

Description: Endpoint to create a new holiday.

Activate Holiday

Namespace: org.apache.fineract.organisation.holiday.api.HolidaysApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/holidays/{holidayId}

Description: Endpoint to activate a pending holiday.

Retrieve Holiday

Namespace: org.apache.fineract.organisation.holiday.api.HolidaysApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/holidays/{holidayId}

Description: Endpoint to retrieve a single holiday by ID.

Update Holiday

Namespace: org.apache.fineract.organisation.holiday.api.HolidaysApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/holidays/{holidayId}

Description: Endpoint to update an existing holiday.

Delete Holiday

Namespace: org.apache.fineract.organisation.holiday.api.HolidaysApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/holidays/{holidayId}

Description: Endpoint to soft-delete a holiday.

List Holidays

Namespace: org.apache.fineract.organisation.holiday.api.HolidaysApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/holidays

Description: Endpoint to list holidays with optional filtering.

Retrieve Template

Namespace: org.apache.fineract.organisation.holiday.api.HolidaysApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/holidays/template

Description: Endpoint to retrieve options for repayment schedule updates.

Retrieve Currency Configuration

Namespace: org.apache.fineract.organisation.monetary.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/currencies

Description: Endpoint to retrieve the list of permitted and available currencies.

Update Currency Configuration

Namespace: org.apache.fineract.organisation.monetary.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/currencies

Description: Endpoint to update the list of permitted currencies.

Retrieve Office Transactions

Namespace: org.apache.fineract.organisation.office.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/officetransactions

Description: Endpoint to get a list of office transactions.

New Office Transaction Template

Namespace: org.apache.fineract.organisation.office.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/officetransactions/template

Description: Endpoint to retrieve a template for creating a new office transaction.

Transfer Money

Namespace: org.apache.fineract.organisation.office.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/officetransactions

Description: Endpoint to create a new office transaction (transfer money).

Delete Transaction

Namespace: org.apache.fineract.organisation.office.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/officetransactions/{transactionId}

Description: Endpoint to delete a specific office transaction.

Offices API Schemas

Namespace: org.apache.fineract.organisation.office.api

Mechanism: REST

Direction: BOTH

Path/Topic: N/A

Description: Defines the Swagger/OpenAPI schemas (Request and Response bodies) for the Offices REST API endpoints.

List Offices

Namespace: org.apache.fineract.organisation.office.api.OfficesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/offices

Description: Endpoint to retrieve a list of offices.

Create Office

Namespace: org.apache.fineract.organisation.office.api.OfficesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/offices

Description: Endpoint to create a new office.

Retrieve Office

Namespace: org.apache.fineract.organisation.office.api.OfficesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/offices/{officeId}

Description: Endpoint to retrieve a specific office by ID.

Update Office

Namespace: org.apache.fineract.organisation.office.api.OfficesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/offices/{officeId}

Description: Endpoint to update an existing office.

Retrieve Office by External ID

Namespace: org.apache.fineract.organisation.office.api.OfficesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/offices/external-id/{externalId}

Description: Endpoint to retrieve an office using an external ID.

Download Template

Namespace: org.apache.fineract.organisation.office.api.OfficesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/offices/downloadtemplate

Description: Endpoint to download an Excel template for bulk import.

Upload Template

Namespace: org.apache.fineract.organisation.office.api.OfficesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/offices/uploadtemplate

Description: Endpoint to upload a filled Excel template for bulk import.

Retrieve All Provisioning Categories

Namespace: org.apache.fineract.organisation.provisioning.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/provisioningcategory

Description: Endpoint to retrieve all provisioning categories.

Create Provisioning Category

Namespace: org.apache.fineract.organisation.provisioning.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/provisioningcategory

Description: Endpoint to create a new provisioning category.

Update Provisioning Category

Namespace: org.apache.fineract.organisation.provisioning.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/provisioningcategory/{categoryId}

Description: Endpoint to update an existing provisioning category.

Delete Provisioning Category

Namespace: org.apache.fineract.organisation.provisioning.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/provisioningcategory/{categoryId}

Description: Endpoint to delete a provisioning category.

Provisioning Criteria API

Namespace: org.apache.fineract.organisation.provisioning.api.ProvisioningCriteriaApiResource

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/provisioningcriteria

Description: RESTful endpoints for managing Provisioning Criteria.

PROVISIONCATEGORY UPDATE Command Handler

Namespace: org.apache.fineract.organisation.provisioning.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for the 'UPDATE' action on 'PROVISIONCATEGORY' entities within the Fineract command framework.

PROVISIONCRITERIA CREATE Handler

Namespace: org.apache.fineract.organisation.provisioning.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers as a handler for the internal Command Bus for the entity 'PROVISIONCRITERIA' and action 'CREATE'.

PROVISIONCATEGORY CREATE Command

Namespace: org.apache.fineract.organisation.provisioning.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for the internal command bus to process 'CREATE' actions for 'PROVISIONCATEGORY' entities.

retrieveAll

Namespace: org.apache.fineract.organisation.staff.api.StaffApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/staff

Description: Retrieve Staff

create

Namespace: org.apache.fineract.organisation.staff.api.StaffApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/staff

Description: Create a staff member

retrieveOne

Namespace: org.apache.fineract.organisation.staff.api.StaffApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/staff/{staffId}

Description: Retrieve a Staff Member

update

Namespace: org.apache.fineract.organisation.staff.api.StaffApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/staff/{staffId}

Description: Update a Staff Member

getTemplate

Namespace: org.apache.fineract.organisation.staff.api.StaffApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/staff/downloadtemplate

Description: Download staff import template

postTemplate

Namespace: org.apache.fineract.organisation.staff.api.StaffApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/staff/uploadtemplate

Description: Upload staff template

getJournalData

Namespace: org.apache.fineract.organisation.teller.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/cashiersjournal

Description: REST endpoint to retrieve cashier journal entries.

Get Cashier Data

Namespace: org.apache.fineract.organisation.teller.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/cashiers

Description: Endpoint to retrieve cashier information based on filters.

Get Tellers

Namespace: org.apache.fineract.organisation.teller.api.TellerApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/tellers

Description: Retrieves list of tellers

Create Teller

Namespace: org.apache.fineract.organisation.teller.api.TellerApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/tellers

Description: Creates a new teller

Find Teller

Namespace: org.apache.fineract.organisation.teller.api.TellerApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/tellers/{tellerId}

Description: Retrieves a specific teller

Update Teller

Namespace: org.apache.fineract.organisation.teller.api.TellerApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/tellers/{tellerId}

Description: Updates a specific teller

Delete Teller

Namespace: org.apache.fineract.organisation.teller.api.TellerApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/tellers/{tellerId}

Description: Deletes a specific teller

Get Cashiers

Namespace: org.apache.fineract.organisation.teller.api.TellerApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/tellers/{tellerId}/cashiers

Description: Lists cashiers for a teller

Create Cashier

Namespace: org.apache.fineract.organisation.teller.api.TellerApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/tellers/{tellerId}/cashiers

Description: Allocates a cashier to a teller

Find Cashier

Namespace: org.apache.fineract.organisation.teller.api.TellerApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/tellers/{tellerId}/cashiers/{cashierId}

Description: Retrieves a specific cashier

Update Cashier

Namespace: org.apache.fineract.organisation.teller.api.TellerApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/tellers/{tellerId}/cashiers/{cashierId}

Description: Updates a cashier allocation

Delete Cashier

Namespace: org.apache.fineract.organisation.teller.api.TellerApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/tellers/{tellerId}/cashiers/{cashierId}

Description: Deletes a cashier allocation

Allocate Cash

Namespace: org.apache.fineract.organisation.teller.api.TellerApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/tellers/{tellerId}/cashiers/{cashierId}/allocate

Description: Allocates cash to a cashier

Settle Cash

Namespace: org.apache.fineract.organisation.teller.api.TellerApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/tellers/{tellerId}/cashiers/{cashierId}/settle

Description: Settles cash from a cashier

Get Cashier Transactions

Namespace: org.apache.fineract.organisation.teller.api.TellerApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/tellers/{tellerId}/cashiers/{cashierId}/transactions

Description: Retrieves transactions for a cashier

Get Teller Transactions

Namespace: org.apache.fineract.organisation.teller.api.TellerApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/tellers/{tellerId}/transactions

Description: Retrieves transactions for a teller

Get Teller Journals

Namespace: org.apache.fineract.organisation.teller.api.TellerApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/tellers/{tellerId}/journals

Description: Retrieves journals for a teller

List Working days

Namespace: org.apache.fineract.organisation.workingdays.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/workingdays

Description: Retrieves the list of working days configuration.

Update a Working Day

Namespace: org.apache.fineract.organisation.workingdays.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/workingdays

Description: Updates the configuration for working days.

Working Days Template

Namespace: org.apache.fineract.organisation.workingdays.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/workingdays/template

Description: Retrieves template data for working days UI.

Retrieve Template

Namespace: org.apache.fineract.portfolio.account.api

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/standinginstructions/template

Description: Endpoint to retrieve standing instruction template data.

Create Standing Instruction

Namespace: org.apache.fineract.portfolio.account.api

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/standinginstructions

Description: Endpoint to create a new standing instruction.

Update/Delete Standing Instruction

Namespace: org.apache.fineract.portfolio.account.api

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/standinginstructions/{standingInstructionId}

Description: Endpoint to update or delete a standing instruction.

List Standing Instructions

Namespace: org.apache.fineract.portfolio.account.api

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/standinginstructions

Description: Endpoint to list standing instructions with filtering.

Retrieve Standing Instruction

Namespace: org.apache.fineract.portfolio.account.api

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/standinginstructions/{standingInstructionId}

Description: Endpoint to retrieve a specific standing instruction.

retrieveAll

Namespace: org.apache.fineract.portfolio.account.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/standinginstructionrunhistory

Description: Endpoint to retrieve standing instruction run history

Retrieve Account Transfer Template

Namespace: org.apache.fineract.portfolio.account.api.AccountTransfersApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/accounttransfers/template

Description: Retrieves a template for creating account transfers.

Create new Transfer

Namespace: org.apache.fineract.portfolio.account.api.AccountTransfersApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/accounttransfers

Description: Creates a new transfer of monetary funds.

List account transfers

Namespace: org.apache.fineract.portfolio.account.api.AccountTransfersApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/accounttransfers

Description: Lists account transfers with pagination and search.

Retrieve account transfer

Namespace: org.apache.fineract.portfolio.account.api.AccountTransfersApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/accounttransfers/{transferId}

Description: Retrieves a specific account transfer by ID.

Retrieve Refund Template

Namespace: org.apache.fineract.portfolio.account.api.AccountTransfersApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/accounttransfers/templateRefundByTransfer

Description: Retrieves a template for refunding a loan by transfer.

Refund by Transfer

Namespace: org.apache.fineract.portfolio.account.api.AccountTransfersApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/accounttransfers/refundByTransfer

Description: Executes a refund of an active loan by transfer.

Retrieve Share Account Template

Namespace: org.apache.fineract.portfolio.accounts.api.AccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/accounts/{type}/template

Description: Retrieves the template data required for creating a share account.

Retrieve Share Account

Namespace: org.apache.fineract.portfolio.accounts.api.AccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/accounts/{type}/{accountId}

Description: Retrieves details of a specific share account.

List Share Accounts

Namespace: org.apache.fineract.portfolio.accounts.api.AccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/accounts/{type}

Description: Lists share applications or accounts with pagination.

Create Share Account

Namespace: org.apache.fineract.portfolio.accounts.api.AccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/accounts/{type}

Description: Submits a new share application.

Handle Account Commands

Namespace: org.apache.fineract.portfolio.accounts.api.AccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/accounts/{type}/{accountId}

Description: Performs actions like approve, reject, activate, close, or redeem on a share account.

Update Share Account

Namespace: org.apache.fineract.portfolio.accounts.api.AccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/accounts/{type}/{accountId}

Description: Modifies a share application.

Download Template

Namespace: org.apache.fineract.portfolio.accounts.api.AccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/accounts/{type}/downloadtemplate

Description: Downloads an Excel template for bulk import.

Upload Template

Namespace: org.apache.fineract.portfolio.accounts.api.AccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/accounts/{type}/uploadtemplate

Description: Uploads a populated Excel template for bulk import.

getAddresses

Namespace: org.apache.fineract.portfolio.address.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fieldconfiguration/{entity}

Description: Retrieves the Entity Field Configuration for a specific entity.

Calendar Management API

Namespace: org.apache.fineract.portfolio.calendar.api.CalendarsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/{entityType}/{entityId}/calendars

Description: API endpoints for managing calendars associated with entities.

CALENDAR UPDATE Command Handler

Namespace: org.apache.fineract.portfolio.calendar.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for UPDATE actions on the CALENDAR entity via the Fineract Command framework.

retrieveAllCharges

Namespace: org.apache.fineract.portfolio.charge.api.ChargesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/charges

Description: Retrieve list of defined charges

retrieveCharge

Namespace: org.apache.fineract.portfolio.charge.api.ChargesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/charges/{chargeId}

Description: Retrieve details of a specific charge

retrieveNewChargeDetails

Namespace: org.apache.fineract.portfolio.charge.api.ChargesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/charges/template

Description: Retrieve charge template

createCharge

Namespace: org.apache.fineract.portfolio.charge.api.ChargesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/charges

Description: Create a new charge

updateCharge

Namespace: org.apache.fineract.portfolio.charge.api.ChargesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/charges/{chargeId}

Description: Update an existing charge

deleteCharge

Namespace: org.apache.fineract.portfolio.charge.api.ChargesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/charges/{chargeId}

Description: Delete a charge

Spring Cache

Namespace: org.apache.fineract.portfolio.charge.service.ChargeReadPlatformServiceImpl

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: The method 'retrieveAllCharges' is annotated with @Cacheable(value = "charges", ...), indicating it integrates with a caching mechanism (like EhCache, Redis, or an in-memory map) managed by Spring's cache abstraction layer. This caches the full list of charges to improve performance for subsequent requests.

retrieveAllClientIdentifiers

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/identifiers

Description: List all Identifiers for a Client

newClientIdentifierDetails

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/identifiers/template

Description: Retrieve Client Identifier Details Template

createClientIdentifier

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/identifiers

Description: Create an Identifier for a Client

retrieveClientIdentifiers

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/identifiers/{identifierId}

Description: Retrieve a specific Client Identifier

updateClientIdentifer

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/identifiers/{identifierId}

Description: Update a Client Identifier

deleteClientIdentifier

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/identifiers/{identifierId}

Description: Delete a Client Identifier

getAddressesTemplate

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/client/addresses/template

Description: Endpoint to retrieve an address template

addClientAddress

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/client/{clientid}/addresses

Description: Endpoint to create a new address for a client

getAddresses

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/client/{clientid}/addresses

Description: Endpoint to list addresses for a client with optional filtering

updateClientAddress

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/client/{clientid}/addresses

Description: Endpoint to update an existing client address

Get Family Member

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/familymembers/{familyMemberId}

Description: Retrieves a single family member by ID.

Get Family Members

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/familymembers

Description: Retrieves all family members for a client.

Get Template

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/familymembers/template

Description: Retrieves a template for creating a family member.

Update Family Member

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/familymembers/{familyMemberId}

Description: Updates an existing family member.

Add Family Member

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/familymembers

Description: Creates a new family member.

Delete Family Member

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/familymembers/{familyMemberId}

Description: Deletes a family member.

GetClientsClientIdTransactionsResponse

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /clients/{clientId}/transactions

Description: Defines the response schema for retrieving a paginated list of client transactions.

GetClientsClientIdTransactionsTransactionIdResponse

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /clients/{clientId}/transactions/{transactionId}

Description: Defines the response schema for retrieving a specific client transaction by ID.

PostClientsClientIdTransactionsTransactionIdResponse

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /clients/{clientId}/transactions/{transactionId}

Description: Defines the response schema for modifying a specific client transaction (e.g., undoing a transaction).

Get Client Audit Fields

Namespace: org.apache.fineract.portfolio.client.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/internal/client/{clientId}/audit

Description: Endpoint to retrieve audit information (created/modified details) for a specific client.

List Client Charges

Namespace: org.apache.fineract.portfolio.client.api.ClientChargesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/charges

Description: Retrieves a paginated list of charges for a client.

Retrieve Template

Namespace: org.apache.fineract.portfolio.client.api.ClientChargesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/charges/template

Description: Retrieves a template for creating a new client charge.

Retrieve Client Charge

Namespace: org.apache.fineract.portfolio.client.api.ClientChargesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/charges/{chargeId}

Description: Retrieves a specific client charge.

Add Client Charge

Namespace: org.apache.fineract.portfolio.client.api.ClientChargesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/charges

Description: Creates a new charge for a client.

Pay, Waive, or Inactivate Charge

Namespace: org.apache.fineract.portfolio.client.api.ClientChargesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/charges/{chargeId}

Description: Performs actions (pay, waive, inactivate) on a client charge based on the command parameter.

Delete Client Charge

Namespace: org.apache.fineract.portfolio.client.api.ClientChargesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/charges/{chargeId}

Description: Deletes a client charge.

List Client Transactions (Internal ID)

Namespace: org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/transactions

Description: Retrieve all transactions for a client using internal ID

Retrieve Client Transaction (Internal ID)

Namespace: org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/transactions/{transactionId}

Description: Retrieve a specific transaction using internal IDs

Undo Client Transaction (Internal ID)

Namespace: org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/transactions/{transactionId}

Description: Undo a specific transaction using internal IDs

List Client Transactions (External ID)

Namespace: org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/external-id/{clientExternalId}/transactions

Description: Retrieve all transactions for a client using external ID

Retrieve Client Transaction (External ID)

Namespace: org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/external-id/{clientExternalId}/transactions/{transactionId}

Description: Retrieve a specific transaction using external client ID

Undo Client Transaction (External ID)

Namespace: org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/external-id/{clientExternalId}/transactions/{transactionId}

Description: Undo a specific transaction using external client ID

Retrieve Client Transaction (External Transaction ID)

Namespace: org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/transactions/external-id/{transactionExternalId}

Description: Retrieve a specific transaction using external transaction ID

Retrieve Client Transaction (Both External IDs)

Namespace: org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/external-id/{clientExternalId}/transactions/external-id/{transactionExternalId}

Description: Retrieve a specific transaction using both external client and transaction IDs

Undo Client Transaction (External Transaction ID)

Namespace: org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/transactions/external-id/{transactionExternalId}

Description: Undo a specific transaction using external transaction ID

Undo Client Transaction (Both External IDs)

Namespace: org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/external-id/{clientExternalId}/transactions/external-id/{transactionExternalId}

Description: Undo a specific transaction using both external client and transaction IDs

Retrieve Client Template

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/template

Description: Retrieve Client Details Template

List Clients

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients

Description: List Clients with pagination and sorting

Retrieve Client

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}

Description: Retrieve a Client by ID

Create Client

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients

Description: Create a Client

Update Client

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}

Description: Update a Client

Delete Client

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}

Description: Delete a Client

Activate/Command Client

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}

Description: Activate, Close, Reject, Withdraw, etc.

Retrieve Client Accounts

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/accounts

Description: Retrieve client accounts overview

Download Template

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/downloadtemplate

Description: Download client import template

Upload Template

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/uploadtemplate

Description: Upload client template

Retrieve Obligee Details

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/obligeedetails

Description: Retrieve client obligee details

Retrieve Transfer Proposal

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/transferproposaldate

Description: Retrieve client transfer template

Retrieve Client by External ID

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/external-id/{externalId}

Description: Retrieve a Client by External Id

Retrieve Accounts by External ID

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/external-id/{externalId}/accounts

Description: Retrieve client accounts overview by External Id

Update Client by External ID

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/external-id/{externalId}

Description: Update a Client using the External Id

Command Client by External ID

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/external-id/{externalId}

Description: Activate/Command Client using External Id

Delete Client by External ID

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/external-id/{externalId}

Description: Delete a Client using External Id

Retrieve Obligee by External ID

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/external-id/{externalId}/obligeedetails

Description: Retrieve client obligee details using External Id

Retrieve Transfer Proposal by External ID

Namespace: org.apache.fineract.portfolio.client.api.ClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/external-id/{externalId}/transferproposaldate

Description: Retrieve client transfer template using External Id

searchByText

Namespace: org.apache.fineract.portfolio.client.api.v2.search.ClientSearchV2ApiResource

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v2/clients/search

Description: API endpoint for searching clients by text.

CLIENT_CHARGE_ACTION_CREATE

Namespace: org.apache.fineract.portfolio.client.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Internal command handler registration for creating client charges. This handler is mapped to the 'CLIENT_CHARGES' resource and 'CREATE' action via the Fineract Command Bus.

CLIENT CREATE Command Handler

Namespace: org.apache.fineract.portfolio.client.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: CLIENT/CREATE

Description: Registers as a handler for the CREATE action on the CLIENT entity within the Fineract command processing framework.

BusinessEventNotifierService

Namespace: org.apache.fineract.portfolio.client.service.ClientWritePlatformServiceJpaRepositoryImpl

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Publishes business events (ClientCreateBusinessEvent, ClientActivateBusinessEvent, ClientRejectBusinessEvent) to the internal event handling system.

Loan Collateral API

Namespace: org.apache.fineract.portfolio.collateral.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/{loanId}/collaterals

Description: API endpoints for managing loan collaterals.

Get Client Collaterals

Namespace: org.apache.fineract.portfolio.collateralmanagement.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/clients/{clientId}/collaterals

Description: Retrieve a list of collateral products for a client.

Get Client Collateral Data

Namespace: org.apache.fineract.portfolio.collateralmanagement.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/clients/{clientId}/collaterals/{clientCollateralId}

Description: Retrieve details of a specific client collateral.

Get Client Collateral Template

Namespace: org.apache.fineract.portfolio.collateralmanagement.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/clients/{clientId}/collaterals/template

Description: Retrieve the template for creating client collateral.

Add Client Collateral

Namespace: org.apache.fineract.portfolio.collateralmanagement.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/collaterals

Description: Create a new collateral entry for a client.

Update Client Collateral

Namespace: org.apache.fineract.portfolio.collateralmanagement.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/collaterals/{collateralId}

Description: Update an existing collateral entry.

Delete Client Collateral

Namespace: org.apache.fineract.portfolio.collateralmanagement.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/clients/{clientId}/collaterals/{collateralId}

Description: Delete a client collateral entry.

createCollateral

Namespace: org.apache.fineract.portfolio.collateralmanagement.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/collateral-management

Description: Endpoint to create a new collateral product.

getCollateral

Namespace: org.apache.fineract.portfolio.collateralmanagement.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/collateral-management/{collateralId}

Description: Endpoint to fetch a specific collateral product by ID.

getAllCollaterals

Namespace: org.apache.fineract.portfolio.collateralmanagement.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/collateral-management

Description: Endpoint to fetch all collateral products.

getCollateralTemplate

Namespace: org.apache.fineract.portfolio.collateralmanagement.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/collateral-management/template

Description: Endpoint to fetch the template (currencies) for creating collaterals.

updateCollateral

Namespace: org.apache.fineract.portfolio.collateralmanagement.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/collateral-management/{collateralId}

Description: Endpoint to update an existing collateral product.

deleteCollateral

Namespace: org.apache.fineract.portfolio.collateralmanagement.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/collateral-management/{collateralId}

Description: Endpoint to delete a collateral product.

deleteLoanCollateral

Namespace: org.apache.fineract.portfolio.collateralmanagement.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loan-collateral-management/{id}

Description: Endpoint to delete a loan collateral entry.

getLoanCollateral

Namespace: org.apache.fineract.portfolio.collateralmanagement.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loan-collateral-management/{collateralId}

Description: Endpoint to retrieve details of a loan collateral entry.

generateCollectionSheet

Namespace: org.apache.fineract.portfolio.collectionsheet.api

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/collectionsheet

Description: Generates or saves individual collection sheets based on the command parameter.

COLLECTIONSHEET SAVE Command Handler

Namespace: org.apache.fineract.portfolio.collectionsheet.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for the SAVE action on the COLLECTIONSHEET entity using the Fineract Command framework.

getDelinquencyRanges

Namespace: org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/delinquency/ranges

Description: List all Delinquency Ranges

getDelinquencyRange

Namespace: org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/delinquency/ranges/{delinquencyRangeId}

Description: Retrieve a specific Delinquency Range based on the Id

createDelinquencyRange

Namespace: org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/delinquency/ranges

Description: Create Delinquency Range

updateDelinquencyRange

Namespace: org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/delinquency/ranges/{delinquencyRangeId}

Description: Update Delinquency Range based on the Id

deleteDelinquencyRange

Namespace: org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/delinquency/ranges/{delinquencyRangeId}

Description: Delete Delinquency Range based on the Id

getDelinquencyBuckets

Namespace: org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/delinquency/buckets

Description: List all Delinquency Buckets

getDelinquencyBucket

Namespace: org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/delinquency/buckets/{delinquencyBucketId}

Description: Retrieve a specific Delinquency Bucket based on the Id

createDelinquencyBucket

Namespace: org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/delinquency/buckets

Description: Create Delinquency Bucket

updateDelinquencyBucket

Namespace: org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/delinquency/buckets/{delinquencyBucketId}

Description: Update Delinquency Bucket based on the Id

deleteDelinquencyBucket

Namespace: org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/delinquency/buckets/{delinquencyBucketId}

Description: Delete Delinquency Bucket based on the Id

Create Floating Rate

Namespace: org.apache.fineract.portfolio.floatingrates.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/floatingrates

Description: Endpoint to create a new floating rate.

List Floating Rates

Namespace: org.apache.fineract.portfolio.floatingrates.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/floatingrates

Description: Endpoint to retrieve all floating rates.

Retrieve Floating Rate

Namespace: org.apache.fineract.portfolio.floatingrates.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/floatingrates/{floatingRateId}

Description: Endpoint to retrieve a single floating rate by ID.

Update Floating Rate

Namespace: org.apache.fineract.portfolio.floatingrates.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/floatingrates/{floatingRateId}

Description: Endpoint to update an existing floating rate.

FLOATINGRATE UPDATE Command Handler

Namespace: org.apache.fineract.portfolio.floatingrates.handler.UpdateFloatingRateCommandHandler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for the 'UPDATE' action on the 'FLOATINGRATE' entity within the application's command processing framework.

retrieveFunds

Namespace: org.apache.fineract.portfolio.fund.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/funds

Description: Endpoint to retrieve a list of funds.

createFund

Namespace: org.apache.fineract.portfolio.fund.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/funds

Description: Endpoint to create a new fund.

retrieveFund

Namespace: org.apache.fineract.portfolio.fund.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/funds/{fundId}

Description: Endpoint to retrieve a specific fund by ID.

updateFund

Namespace: org.apache.fineract.portfolio.fund.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/funds/{fundId}

Description: Endpoint to update an existing fund.

CREATE FUND Command Handler

Namespace: org.apache.fineract.portfolio.fund.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Fineract Command Handler registered for Entity 'FUND' and Action 'CREATE'.

Groups API

Namespace: org.apache.fineract.portfolio.group.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/groups

Description: RESTful endpoints for managing Groups.

Retrieve Center Template

Namespace: org.apache.fineract.portfolio.group.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/centers/template

Description: Endpoint to retrieve a template for creating or closing a center.

List Centers

Namespace: org.apache.fineract.portfolio.group.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/centers

Description: Endpoint to retrieve a paginated list of centers.

Retrieve Center

Namespace: org.apache.fineract.portfolio.group.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/centers/{centerId}

Description: Endpoint to retrieve details of a specific center.

Create Center

Namespace: org.apache.fineract.portfolio.group.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/centers

Description: Endpoint to create a new center.

Update Center

Namespace: org.apache.fineract.portfolio.group.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/centers/{centerId}

Description: Endpoint to update an existing center.

Delete Center

Namespace: org.apache.fineract.portfolio.group.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/centers/{centerId}

Description: Endpoint to delete a center.

Center Actions

Namespace: org.apache.fineract.portfolio.group.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/centers/{centerId}

Description: Endpoint to perform actions like activate, close, or manage groups for a center.

Retrieve Center Accounts

Namespace: org.apache.fineract.portfolio.group.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/centers/{centerId}/accounts

Description: Endpoint to retrieve account summaries for a center.

Download Template

Namespace: org.apache.fineract.portfolio.group.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/centers/downloadtemplate

Description: Endpoint to download the bulk import Excel template.

Upload Template

Namespace: org.apache.fineract.portfolio.group.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/centers/uploadtemplate

Description: Endpoint to upload a bulk import Excel file.

retrieveAllGroups

Namespace: org.apache.fineract.portfolio.group.api.GroupsLevelApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/grouplevels

Description: API endpoint to retrieve all group levels.

CommandType CENTER CLOSE

Namespace: org.apache.fineract.portfolio.group.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for the CLOSE action on CENTER entities within the Fineract command processing framework.

BusinessEventNotifierService

Namespace: org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformServiceJpaRepositoryImpl

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Publishes business events (CentersCreateBusinessEvent, GroupsCreateBusinessEvent) to an internal event handling system.

Retrieve Chart Template

Namespace: org.apache.fineract.portfolio.interestratechart.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interestratecharts/template

Description: Retrieves a template for creating a new interest rate chart.

Retrieve All Charts

Namespace: org.apache.fineract.portfolio.interestratechart.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interestratecharts

Description: Retrieves all interest rate charts, optionally filtered by product ID.

Retrieve One Chart

Namespace: org.apache.fineract.portfolio.interestratechart.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interestratecharts/{chartId}

Description: Retrieves a specific interest rate chart by ID.

Create Chart

Namespace: org.apache.fineract.portfolio.interestratechart.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interestratecharts

Description: Creates a new interest rate chart.

Update Chart

Namespace: org.apache.fineract.portfolio.interestratechart.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interestratecharts/{chartId}

Description: Updates an existing interest rate chart.

Delete Chart

Namespace: org.apache.fineract.portfolio.interestratechart.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/interestratecharts/{chartId}

Description: Deletes an interest rate chart.

Retrieve Template

Namespace: org.apache.fineract.portfolio.interestratechart.api.InterestRateChartSlabsApiResource

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/interestratecharts/{chartId}/chartslabs/template

Description: Endpoint to retrieve a template for creating a new interest rate chart slab.

Retrieve All Slabs

Namespace: org.apache.fineract.portfolio.interestratechart.api.InterestRateChartSlabsApiResource

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/interestratecharts/{chartId}/chartslabs

Description: Endpoint to retrieve all slabs associated with a chart.

Retrieve One Slab

Namespace: org.apache.fineract.portfolio.interestratechart.api.InterestRateChartSlabsApiResource

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/interestratecharts/{chartId}/chartslabs/{chartSlabId}

Description: Endpoint to retrieve a single slab by ID.

Create Slab

Namespace: org.apache.fineract.portfolio.interestratechart.api.InterestRateChartSlabsApiResource

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/interestratecharts/{chartId}/chartslabs

Description: Endpoint to create a new interest rate slab.

Update Slab

Namespace: org.apache.fineract.portfolio.interestratechart.api.InterestRateChartSlabsApiResource

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/interestratecharts/{chartId}/chartslabs/{chartSlabId}

Description: Endpoint to update an existing slab.

Delete Slab

Namespace: org.apache.fineract.portfolio.interestratechart.api.InterestRateChartSlabsApiResource

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/interestratecharts/{chartId}/chartslabs/{chartSlabId}

Description: Endpoint to delete a slab.

Loan Charges API

Namespace: org.apache.fineract.portfolio.loanaccount.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans

Description: REST API endpoints for managing loan charges.

Loan Schedule Endpoint

Namespace: org.apache.fineract.portfolio.loanaccount.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/{loanId}/schedule

Description: Endpoint to calculate loan schedules or manage loan term variations.

loanReassignmentTemplate

Namespace: org.apache.fineract.portfolio.loanaccount.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/loanreassignment/template

Description: Endpoint to retrieve template data for bulk loan reassignment.

loanReassignment

Namespace: org.apache.fineract.portfolio.loanaccount.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/loanreassignment

Description: Endpoint to execute the bulk loan reassignment command.

updateDisbursementDate

Namespace: org.apache.fineract.portfolio.loanaccount.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/loans/{loanId}/disbursements/{disbursementId}

Description: Updates the disbursement date for a specific loan disbursement.

addAndDeleteDisbursementDetail

Namespace: org.apache.fineract.portfolio.loanaccount.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/loans/{loanId}/disbursements/editDisbursements

Description: Adds or deletes disbursement details for a loan.

retriveDetail

Namespace: org.apache.fineract.portfolio.loanaccount.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/loans/{loanId}/disbursements/{disbursementId}

Description: Retrieves details of a specific disbursement.

Get Loan Audit Fields

Namespace: org.apache.fineract.portfolio.loanaccount.api.InternalLoanInformationApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/internal/loan/{loanId}/audit

Description: Endpoint to retrieve audit metadata for a loan.

Get Loan Transaction Audit Fields

Namespace: org.apache.fineract.portfolio.loanaccount.api.InternalLoanInformationApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/internal/loan/{loanId}/transaction/{transactionId}/audit

Description: Endpoint to retrieve audit metadata for a loan transaction.

Get Loans By Status

Namespace: org.apache.fineract.portfolio.loanaccount.api.InternalLoanInformationApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/internal/loan/status/{statusId}

Description: Endpoint to retrieve a list of loan IDs matching a status.

Get Advanced Payment Allocation Rules

Namespace: org.apache.fineract.portfolio.loanaccount.api.InternalLoanInformationApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/internal/loan/{loanId}/advanced-payment-allocation-rules

Description: Endpoint to retrieve payment allocation rules for a loan.

Loan Transactions API

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoanTransactionsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans

Description: API endpoints for managing loan transactions (retrieval, execution, adjustment).

Retrieve Loan Approval Template

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/{loanId}/template

Description: Endpoint to retrieve the approval template for a loan.

Retrieve Loan Template

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/template

Description: Endpoint to retrieve a template for creating a new loan application.

Retrieve Loan

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/{loanId}

Description: Endpoint to retrieve details of a specific loan.

List Loans

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans

Description: Endpoint to list loans with pagination and search.

Calculate Schedule or Submit Application

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans

Description: Endpoint to calculate loan schedule or submit a new application.

Modify Loan Application

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/{loanId}

Description: Endpoint to modify an existing loan application.

Delete Loan Application

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/{loanId}

Description: Endpoint to delete a loan application.

State Transitions

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/{loanId}

Description: Endpoint to perform state transitions (approve, disburse, etc.) on a loan.

Download Loan Template

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/downloadtemplate

Description: Endpoint to download Excel template for loan import.

Get GLIM Repayment Template

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/glimAccount/{glimId}

Description: Endpoint to get repayment template for GLIM account.

GLIM State Transitions

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/glimAccount/{glimId}

Description: Endpoint for GLIM loan state transitions.

Download Repayment Template

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/repayments/downloadtemplate

Description: Endpoint to download Excel template for repayment import.

Upload Loan Template

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/uploadtemplate

Description: Endpoint to upload loan import file.

Upload Repayment Template

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/repayments/uploadtemplate

Description: Endpoint to upload repayment import file.

Get Delinquency Tags

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/{loanId}/delinquencytags

Description: Endpoint to get delinquency tag history.

Retrieve Approval Template (External ID)

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/external-id/{loanExternalId}/template

Description: Endpoint to retrieve approval template using external ID.

Retrieve Loan (External ID)

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/external-id/{loanExternalId}

Description: Endpoint to retrieve loan details using external ID.

Modify Loan (External ID)

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/external-id/{loanExternalId}

Description: Endpoint to modify loan using external ID.

Delete Loan (External ID)

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/external-id/{loanExternalId}

Description: Endpoint to delete loan using external ID.

State Transitions (External ID)

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/external-id/{loanExternalId}

Description: Endpoint for state transitions using external ID.

Get Delinquency Tags (External ID)

Namespace: org.apache.fineract.portfolio.loanaccount.api.LoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/external-id/{loanExternalId}/delinquencytags

Description: Endpoint to get delinquency tags using external ID.

Guarantors API

Namespace: org.apache.fineract.portfolio.loanaccount.guarantor.api.GuarantorsApiResource

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/loans/{loanId}/guarantors

Description: RESTful endpoints for managing loan guarantors.

GUARANTOR DELETE Command Handler

Namespace: org.apache.fineract.portfolio.loanaccount.guarantor.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for the internal command processing system for the GUARANTOR entity with action DELETE.

Command Handler (LOAN REPAYMENT)

Namespace: org.apache.fineract.portfolio.loanaccount.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for the internal command processing framework for Entity 'LOAN' and Action 'REPAYMENT'.

LOAN APPROVALUNDO Command Handler

Namespace: org.apache.fineract.portfolio.loanaccount.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for the internal command bus to process LOAN APPROVALUNDO actions.

LOANCHARGE DELETE Command Handler

Namespace: org.apache.fineract.portfolio.loanaccount.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for the internal command bus to process DELETE actions on LOANCHARGE entities.

Fineract Command Handler

Namespace: org.apache.fineract.portfolio.loanaccount.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: LOANCHARGE / UPDATE

Description: Registers as a handler for the Fineract Command Processing infrastructure via @CommandType.

GLIMLOAN REPAYMENT Command Handler

Namespace: org.apache.fineract.portfolio.loanaccount.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for 'GLIMLOAN' entity 'REPAYMENT' actions within the Fineract command processing framework.

LOAN WRITEOFF Command Handler

Namespace: org.apache.fineract.portfolio.loanaccount.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for the 'WRITEOFF' action on 'LOAN' entities within the Fineract command processing framework.

LOAN UNDOCHARGEOFF

Namespace: org.apache.fineract.portfolio.loanaccount.handler.UndoChargeOffLoanCommandHandler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Fineract Command Handler registered for the LOAN entity and UNDOCHARGEOFF action.

AddAccrualEntriesTasklet

Namespace: org.apache.fineract.portfolio.loanaccount.jobs.addaccrualentries

Mechanism: OTHER

Direction: BOTH

Path/Topic: N/A

Description: Spring Batch Tasklet execution point

ADD_PERIODIC_ACCRUAL_ENTRIES_FOR_LOANS_WITH_INCOME_POSTED_AS_TRANSACTIONS

Namespace: org.apache.fineract.portfolio.loanaccount.jobs.addperiodicaccrualentriesforloanswithincomepostedastransactions

Mechanism: OTHER

Direction: OTHER

Path/Topic: N/A

Description: Spring Batch Job definition for processing periodic accrual entries.

APPLY_CHARGE_TO_OVERDUE_LOAN_INSTALLMENT

Namespace: org.apache.fineract.portfolio.loanaccount.jobs.applychargetooverdueloaninstallment.ApplyChargeToOverdueLoanInstallmentConfig

Mechanism: OTHER

Direction: OTHER

Path/Topic: N/A

Description: Spring Batch Job definition for applying charges to overdue loans.

Spring Batch Tasklet

Namespace: org.apache.fineract.portfolio.loanaccount.jobs.applychargetooverdueloaninstallment.ApplyChargeToOverdueLoanInstallmentTasklet

Mechanism: OTHER

Direction: OTHER

Path/Topic: N/A

Description: Implements a Spring Batch Tasklet to run as a background job step.

BusinessEventNotifierService

Namespace: org.apache.fineract.portfolio.loanaccount.jobs.applyholidaystoloans

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Publishes internal business events when a loan is rescheduled due to a holiday.

Retrieve Reschedule Reasons Template

Namespace: org.apache.fineract.portfolio.loanaccount.rescheduleloan.api.RescheduleLoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/rescheduleloans/template

Description: Endpoint to retrieve template data for creating reschedule requests.

Read Loan Reschedule Request

Namespace: org.apache.fineract.portfolio.loanaccount.rescheduleloan.api.RescheduleLoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/rescheduleloans/{scheduleId}

Description: Endpoint to retrieve a specific request or preview a schedule.

Create Loan Reschedule Request

Namespace: org.apache.fineract.portfolio.loanaccount.rescheduleloan.api.RescheduleLoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/rescheduleloans

Description: Endpoint to submit a new loan reschedule request.

Update Loan Reschedule Request

Namespace: org.apache.fineract.portfolio.loanaccount.rescheduleloan.api.RescheduleLoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/rescheduleloans/{scheduleId}

Description: Endpoint to approve or reject a reschedule request.

Retrieve All Reschedule Requests

Namespace: org.apache.fineract.portfolio.loanaccount.rescheduleloan.api.RescheduleLoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/rescheduleloans

Description: Endpoint to list reschedule requests with optional filtering.

BusinessEventNotifierService

Namespace: org.apache.fineract.portfolio.loanaccount.service

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Internal application event bus for notifying business events.

LoanStatusChangedBusinessEvent Listener

Namespace: org.apache.fineract.portfolio.loanaccount.service

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Listens for internal business events indicating a change in loan status.

BusinessEventNotifierService

Namespace: org.apache.fineract.portfolio.loanaccount.service.LoanApplicationWritePlatformServiceJpaRepositoryImpl

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Publishes internal business events when loan states change (Created, Approved, Rejected, Undo Approval).

BusinessEventNotifierService

Namespace: org.apache.fineract.portfolio.loanaccount.service.LoanWritePlatformServiceJpaRepositoryImpl

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Internal event notification service used to broadcast business events (e.g., LoanDisbursalBusinessEvent) to other parts of the system.

Create Loan Product

Namespace: org.apache.fineract.portfolio.loanproduct.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loanproducts

Description: Endpoint to create a new loan product.

Retrieve All Loan Products

Namespace: org.apache.fineract.portfolio.loanproduct.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loanproducts

Description: Endpoint to list all loan products.

Retrieve Template

Namespace: org.apache.fineract.portfolio.loanproduct.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loanproducts/template

Description: Endpoint to retrieve a template for creating loan products.

Retrieve Loan Product

Namespace: org.apache.fineract.portfolio.loanproduct.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loanproducts/{productId}

Description: Endpoint to retrieve a single loan product by ID.

Update Loan Product

Namespace: org.apache.fineract.portfolio.loanproduct.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loanproducts/{productId}

Description: Endpoint to update a loan product by ID.

Retrieve Loan Product by External ID

Namespace: org.apache.fineract.portfolio.loanproduct.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loanproducts/external-id/{externalProductId}

Description: Endpoint to retrieve a single loan product by its external ID.

Update Loan Product by External ID

Namespace: org.apache.fineract.portfolio.loanproduct.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loanproducts/external-id/{externalProductId}

Description: Endpoint to update a loan product by its external ID.

Fineract Command Handler

Namespace: org.apache.fineract.portfolio.loanproduct.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for the CREATE action on LOANPRODUCT entities via the Fineract Command framework annotation @CommandType.

Product Mix API

Namespace: org.apache.fineract.portfolio.loanproduct.productmix.api.ProductMixApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loanproducts/{productId}/productmix

Description: RESTful endpoints for managing loan product mix configurations.

Meetings API

Namespace: org.apache.fineract.portfolio.meeting.api.MeetingsApiResource

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/{entityType}/{entityId}/meetings

Description: API endpoints for managing meetings and attendance.

Notes API

Namespace: org.apache.fineract.portfolio.note.api.NotesApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/{resourceType}/{resourceId}/notes

Description: RESTful endpoints for managing notes on various resources.

getAllPaymentTypes

Namespace: org.apache.fineract.portfolio.paymenttype.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/paymenttypes

Description: Retrieve all Payment Types

retrieveOnePaymentType

Namespace: org.apache.fineract.portfolio.paymenttype.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/paymenttypes/{paymentTypeId}

Description: Retrieve a Payment Type

createPaymentType

Namespace: org.apache.fineract.portfolio.paymenttype.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/paymenttypes

Description: Create a Payment Type

updatePaymentType

Namespace: org.apache.fineract.portfolio.paymenttype.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/paymenttypes/{paymentTypeId}

Description: Update a Payment Type

deleteCode

Namespace: org.apache.fineract.portfolio.paymenttype.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/paymenttypes/{paymentTypeId}

Description: Delete a Payment Type

Payment Types API Schemas

Namespace: org.apache.fineract.portfolio.paymenttype.api

Mechanism: REST

Direction: BOTH

Path/Topic: /paymenttypes (implied by schema names)

Description: Defines the Swagger/OpenAPI schemas (Request and Response bodies) for Payment Type REST operations.

Products API

Namespace: org.apache.fineract.portfolio.products.api.ProductsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/products/{type}

Description: RESTful endpoints for managing products.

retrieveRate

Namespace: org.apache.fineract.portfolio.rate.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/rates/{rateId}

Description: Endpoint to retrieve a single rate by ID.

createRate

Namespace: org.apache.fineract.portfolio.rate.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/rates

Description: Endpoint to create a new rate.

getAllRates

Namespace: org.apache.fineract.portfolio.rate.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/rates

Description: Endpoint to retrieve all rates.

updateRate

Namespace: org.apache.fineract.portfolio.rate.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/rates/{rateId}

Description: Endpoint to update an existing rate.

Get All Post Dated Checks

Namespace: org.apache.fineract.portfolio.repaymentwithpostdatedchecks.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/{loanId}/postdatedchecks

Description: Endpoint to retrieve all post-dated checks for a loan.

Get Post Dated Check

Namespace: org.apache.fineract.portfolio.repaymentwithpostdatedchecks.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/{loanId}/postdatedchecks/{installmentId}

Description: Endpoint to retrieve a specific post-dated check by installment ID.

Update Post Dated Check

Namespace: org.apache.fineract.portfolio.repaymentwithpostdatedchecks.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/{loanId}/postdatedchecks/{postDatedCheckId}

Description: Endpoint to update a post-dated check or mark it as bounced.

Delete Post Dated Check

Namespace: org.apache.fineract.portfolio.repaymentwithpostdatedchecks.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/loans/{loanId}/postdatedchecks/{postDatedCheckId}

Description: Endpoint to delete a post-dated check.

Fineract Command Handler

Namespace: org.apache.fineract.portfolio.repaymentwithpostdatedchecks.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for the REPAYMENT_WITH_POSTDATEDCHECKS entity and BOUNCE action.

REPAYMENT_WITH_POSTDATEDCHECKS UPDATE

Namespace: org.apache.fineract.portfolio.repaymentwithpostdatedchecks.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Internal Command Handler for updating post-dated checks.

Create Recurring Deposit Product

Namespace: org.apache.fineract.portfolio.savings.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/recurringdepositproducts

Description: Endpoint to create a new recurring deposit product definition.

Update Recurring Deposit Product

Namespace: org.apache.fineract.portfolio.savings.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/recurringdepositproducts/{productId}

Description: Endpoint to update an existing recurring deposit product.

List Recurring Deposit Products

Namespace: org.apache.fineract.portfolio.savings.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/recurringdepositproducts

Description: Endpoint to retrieve all recurring deposit products.

Retrieve Recurring Deposit Product

Namespace: org.apache.fineract.portfolio.savings.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/recurringdepositproducts/{productId}

Description: Endpoint to retrieve a single recurring deposit product by ID.

Retrieve Template

Namespace: org.apache.fineract.portfolio.savings.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/recurringdepositproducts/template

Description: Endpoint to retrieve a template with default values and options for creating a product.

Delete Recurring Deposit Product

Namespace: org.apache.fineract.portfolio.savings.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/recurringdepositproducts/{productId}

Description: Endpoint to delete a recurring deposit product.

Savings Account Charges API

Namespace: org.apache.fineract.portfolio.savings.api

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/savingsaccounts/{savingsAccountId}/charges

Description: API endpoints for managing charges on savings accounts.

Retrieve Transaction Template

Namespace: org.apache.fineract.portfolio.savings.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/savingsaccounts/{savingsId}/transactions/template

Description: Retrieves the template data required for creating a new savings transaction.

Retrieve Transaction

Namespace: org.apache.fineract.portfolio.savings.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/savingsaccounts/{savingsId}/transactions/{transactionId}

Description: Retrieves a specific savings account transaction.

Search Transactions

Namespace: org.apache.fineract.portfolio.savings.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/savingsaccounts/{savingsId}/transactions/search

Description: Searches for transactions based on query parameters.

Advanced Query

Namespace: org.apache.fineract.portfolio.savings.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/savingsaccounts/{savingsId}/transactions/query

Description: Executes an advanced search query for transactions.

Execute Transaction

Namespace: org.apache.fineract.portfolio.savings.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/savingsaccounts/{savingsId}/transactions

Description: Performs a transaction (deposit, withdrawal, etc.) based on the command parameter.

Adjust Transaction

Namespace: org.apache.fineract.portfolio.savings.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/savingsaccounts/{savingsId}/transactions/{transactionId}

Description: Modifies an existing transaction (reverse, undo, etc.) based on the command parameter.

Fixed Deposit Account Transactions API

Namespace: org.apache.fineract.portfolio.savings.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositaccounts/{fixedDepositAccountId}/transactions

Description: API endpoints for managing fixed deposit account transactions.

retrieveAll

Namespace: org.apache.fineract.portfolio.savings.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/savingsaccounts/{savingsId}/onholdtransactions

Description: Endpoint to retrieve on-hold transactions for a savings account.

Retrieve Template

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositaccounts/template

Description: Retrieve Fixed Deposit Account Template

List Accounts

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositaccounts

Description: List Fixed deposit applications/accounts

Submit Application

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositaccounts

Description: Submit new fixed deposit application

Retrieve One

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositaccounts/{accountId}

Description: Retrieve a fixed deposit application/account

Update Application

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositaccounts/{accountId}

Description: Modify a fixed deposit application

Handle Commands

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositaccounts/{accountId}

Description: Approve, Reject, Activate, Close, Calculate Interest, etc.

Delete Application

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositaccounts/{accountId}

Description: Delete a fixed deposit application

Account Closure Template

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositaccounts/{accountId}/template

Description: Retrieve account closure template

Download Template

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositaccounts/downloadtemplate

Description: Download fixed deposit import template

Upload Template

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositaccounts/uploadtemplate

Description: Upload fixed deposit import template

Download Transaction Template

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositaccounts/transaction/downloadtemplate

Description: Download fixed deposit transaction import template

Upload Transaction Template

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositaccounts/transaction/uploadtemplate

Description: Upload fixed deposit transaction import template

Create Fixed Deposit Product

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositProductsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositproducts

Description: Endpoint to create a new fixed deposit product definition.

Update Fixed Deposit Product

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositProductsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositproducts/{productId}

Description: Endpoint to update an existing fixed deposit product.

List Fixed Deposit Products

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositProductsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositproducts

Description: Endpoint to retrieve a list of all fixed deposit products.

Retrieve Fixed Deposit Product

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositProductsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositproducts/{productId}

Description: Endpoint to retrieve a single fixed deposit product by ID.

Retrieve Template

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositProductsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositproducts/template

Description: Endpoint to retrieve template data for creating a fixed deposit product.

Delete Fixed Deposit Product

Namespace: org.apache.fineract.portfolio.savings.api.FixedDepositProductsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/fixeddepositproducts/{productId}

Description: Endpoint to delete a fixed deposit product.

Recurring Deposit Account Transactions API

Namespace: org.apache.fineract.portfolio.savings.api.RecurringDepositAccountTransactionsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/recurringdepositaccounts/{recurringDepositAccountId}/transactions

Description: API endpoints for managing transactions on recurring deposit accounts.

Retrieve Template

Namespace: org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/recurringdepositaccounts/template

Description: Retrieve recurring Deposit Account Template

List Accounts

Namespace: org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/recurringdepositaccounts

Description: List Recurring deposit applications/accounts

Submit Application

Namespace: org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/recurringdepositaccounts

Description: Submit new recurring deposit application

Retrieve One

Namespace: org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/recurringdepositaccounts/{accountId}

Description: Retrieve a recurring deposit application/account

Update Application

Namespace: org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/recurringdepositaccounts/{accountId}

Description: Modify a recurring deposit application

Handle Commands

Namespace: org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/recurringdepositaccounts/{accountId}

Description: Perform actions like approve, reject, activate, close, etc.

Delete Application

Namespace: org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/recurringdepositaccounts/{accountId}

Description: Delete a recurring deposit application

Closure Template

Namespace: org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/recurringdepositaccounts/{accountId}/template

Description: Retrieve account closure template

Download Import Template

Namespace: org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/recurringdepositaccounts/downloadtemplate

Description: Download bulk import template for accounts

Upload Import Template

Namespace: org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/recurringdepositaccounts/uploadtemplate

Description: Upload bulk import template for accounts

Download Transaction Template

Namespace: org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/recurringdepositaccounts/transactions/downloadtemplate

Description: Download bulk import template for transactions

Upload Transaction Template

Namespace: org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/recurringdepositaccounts/transactions/uploadtemplate

Description: Upload bulk import template for transactions

Savings Account API

Namespace: org.apache.fineract.portfolio.savings.api.SavingsAccountsApiResource

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/savingsaccounts

Description: Exposes RESTful endpoints for managing savings accounts.

Create Savings Product

Namespace: org.apache.fineract.portfolio.savings.api.SavingsProductsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/savingsproducts

Description: Endpoint to create a new savings product.

Update Savings Product

Namespace: org.apache.fineract.portfolio.savings.api.SavingsProductsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/savingsproducts/{productId}

Description: Endpoint to update an existing savings product.

List Savings Products

Namespace: org.apache.fineract.portfolio.savings.api.SavingsProductsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/savingsproducts

Description: Endpoint to retrieve all savings products.

Retrieve Savings Product

Namespace: org.apache.fineract.portfolio.savings.api.SavingsProductsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/savingsproducts/{productId}

Description: Endpoint to retrieve a single savings product by ID.

Retrieve Template

Namespace: org.apache.fineract.portfolio.savings.api.SavingsProductsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/savingsproducts/template

Description: Endpoint to retrieve a template with defaults and options for creating a savings product.

Delete Savings Product

Namespace: org.apache.fineract.portfolio.savings.api.SavingsProductsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/savingsproducts/{productId}

Description: Endpoint to delete a savings product.

SAVINGSACCOUNT | APPLYANNUALFEE

Namespace: org.apache.fineract.portfolio.savings.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers as a command handler in the Fineract CQRS system via the @CommandType annotation.

RECURRINGDEPOSITACCOUNT | CALCULATEINTEREST

Namespace: org.apache.fineract.portfolio.savings.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Fineract Command Handler registration via @CommandType annotation. This integrates the class into the application's command processing pipeline.

Command Handler: FIXEDDEPOSITACCOUNT - CALCULATEINTEREST

Namespace: org.apache.fineract.portfolio.savings.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for the internal command dispatching system to process interest calculation requests for fixed deposit accounts.

FIXEDDEPOSITACCOUNT UNDOTRANSACTION

Namespace: org.apache.fineract.portfolio.savings.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a command handler for the 'UNDOTRANSACTION' action on 'FIXEDDEPOSITACCOUNT' entities within the Fineract command processing framework.

RECURRINGDEPOSITACCOUNT.UPDATEDEPOSITAMOUNT

Namespace: org.apache.fineract.portfolio.savings.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Internal Command Handler integration point for Fineract's CQRS command processing pipeline.

Command Handler Registration

Namespace: org.apache.fineract.portfolio.savings.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers as a handler for SAVINGSACCOUNT DELETE commands via the @CommandType annotation, integrating with the application's internal command processing bus.

RECURRINGDEPOSITACCOUNT CLOSE

Namespace: org.apache.fineract.portfolio.savings.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: n/a

Description: Fineract Command Handler for closing recurring deposit accounts

CommandType Annotation

Namespace: org.apache.fineract.portfolio.savings.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: Entity: FIXEDDEPOSITACCOUNT, Action: CLOSE

Description: Registers this class as a handler for internal command processing within the Fineract framework.

Command Handler Registration

Namespace: org.apache.fineract.portfolio.savings.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers as a handler for SAVINGSACCOUNT entity and UNBLOCKDEBIT action via the Fineract Command framework.

SAVINGSACCOUNT CALCULATEINTEREST

Namespace: org.apache.fineract.portfolio.savings.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Internal Command Handler registered via @CommandType to process 'CALCULATEINTEREST' actions for 'SAVINGSACCOUNT' entities.

SAVINGSACCOUNT-ACTIVATE

Namespace: org.apache.fineract.portfolio.savings.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Fineract Command Handler for activating savings accounts, mapped via @CommandType annotation.

Command Handler (SAVINGSACCOUNT | BLOCK)

Namespace: org.apache.fineract.portfolio.savings.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for the internal command processing engine for the entity 'SAVINGSACCOUNT' and action 'BLOCK'.

SAVINGSACCOUNTCHARGE CREATE Command

Namespace: org.apache.fineract.portfolio.savings.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Internal Fineract Command Handler for creating savings account charges

Command Handler Registration

Namespace: org.apache.fineract.portfolio.savings.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: SAVINGSPRODUCT/DELETE

Description: Registers this class as a handler for the internal command processing bus via the @CommandType annotation.

Fixed Deposit Account Application Deletion Command

Namespace: org.apache.fineract.portfolio.savings.handler.FixedDepositAccountApplicationDeletionCommandHandler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: This class acts as a handler for an internal command within the Apache Fineract framework, following a CQRS pattern. It is registered via the @CommandType annotation to listen for 'DELETE' commands on the 'FIXEDDEPOSITACCOUNT' entity. When such a command is dispatched by the internal command bus, this handler's processCommand method is invoked to execute the deletion logic.

FIXEDDEPOSITACCOUNT.ADJUSTTRANSACTION

Namespace: org.apache.fineract.portfolio.savings.handler.FixedDepositTransactionAdjustmentCommandHandler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: This handler is registered to process internal commands for adjusting a transaction on a fixed deposit account. It is invoked by the application's command bus/dispatcher when a command with entity 'FIXEDDEPOSITACCOUNT' and action 'ADJUSTTRANSACTION' is submitted. The command is typically triggered by an API call, but this class is one step removed from the direct API endpoint.

GSIMACCOUNT DEPOSIT Command Handler

Namespace: org.apache.fineract.portfolio.savings.handler.GSIMDepositCommandHandler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for the internal command bus for Entity 'GSIMACCOUNT' and Action 'DEPOSIT' via the @CommandType annotation.

APPLY_ANNUAL_FEE_FOR_SAVINGS

Namespace: org.apache.fineract.portfolio.savings.jobs.applyannualfeeforsavings

Mechanism: OTHER

Direction: BOTH

Path/Topic: N/A

Description: Spring Batch Job definition used by the application scheduler to apply annual fees.

PAY_DUE_SAVINGS_CHARGES

Namespace: org.apache.fineract.portfolio.savings.jobs.payduesavingscharges

Mechanism: OTHER

Direction: OTHER

Path/Topic: N/A

Description: Spring Batch Job definition for processing due savings charges

TRANSFER_INTEREST_TO_SAVINGS

Namespace: org.apache.fineract.portfolio.savings.jobs.transferinteresttosavings

Mechanism: OTHER

Direction: BOTH

Path/Topic: N/A

Description: Defines a Spring Batch Job for transferring interest to savings, which is likely triggered by an internal scheduler.

UpdateSavingsDormantAccountsTasklet

Namespace: org.apache.fineract.portfolio.savings.jobs.updatesavingsdormantaccounts.UpdateSavingsDormantAccountsTasklet

Mechanism: OTHER

Direction: N/A

Path/Topic: N/A

Description: Spring Batch Tasklet execution logic for updating savings account statuses.

BusinessEventNotifierService

Namespace: org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformServiceJpaRepositoryImpl

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Internal event bus to notify other parts of the system about business events.

retrieveAdHocSearchQueryTemplate

Namespace: org.apache.fineract.portfolio.search.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/search/template

Description: Retrieves the ad-hoc search query template.

searchData

Namespace: org.apache.fineract.portfolio.search.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/search

Description: Searches for resources (clients, groups, loans) based on query parameters.

advancedSearch

Namespace: org.apache.fineract.portfolio.search.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/search/advance

Description: Performs an advanced ad-hoc search using a JSON request body.

Get Template

Namespace: org.apache.fineract.portfolio.self.account.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/self/beneficiaries/tpt/template

Description: Retrieves template data for creating a beneficiary.

Add Beneficiary

Namespace: org.apache.fineract.portfolio.self.account.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/self/beneficiaries/tpt

Description: Adds a new third-party beneficiary.

Update Beneficiary

Namespace: org.apache.fineract.portfolio.self.account.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/self/beneficiaries/tpt/{beneficiaryId}

Description: Updates an existing beneficiary.

Delete Beneficiary

Namespace: org.apache.fineract.portfolio.self.account.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/self/beneficiaries/tpt/{beneficiaryId}

Description: Deletes a beneficiary.

Retrieve All

Namespace: org.apache.fineract.portfolio.self.account.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/self/beneficiaries/tpt

Description: Retrieves all beneficiaries for the user.

Self Account transfer

Namespace: org.apache.fineract.portfolio.self.account.api

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/self/accounttransfers

Description: API endpoints for self-service account transfers

retrieveAll

Namespace: org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/clients

Description: List Clients associated to the user

retrieveOne

Namespace: org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/clients/{clientId}

Description: Retrieve a Client

retrieveAssociatedAccounts

Namespace: org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/clients/{clientId}/accounts

Description: Retrieve client accounts overview

retrieveImage

Namespace: org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/clients/{clientId}/images

Description: Retrieve Client Image

retrieveAllClientCharges

Namespace: org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/clients/{clientId}/charges

Description: List Client Charges

retrieveClientCharge

Namespace: org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/clients/{clientId}/charges/{chargeId}

Description: Retrieve a Client Charge

retrieveAllClientTransactions

Namespace: org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/clients/{clientId}/transactions

Description: List Client Transactions

retrieveClientTransaction

Namespace: org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/clients/{clientId}/transactions/{transactionId}

Description: Retrieve a Client Transaction

addNewClientImage

Namespace: org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/clients/{clientId}/images

Description: Add new client image (Multipart)

addNewClientImage

Namespace: org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/clients/{clientId}/images

Description: Add new client image (JSON/Text)

deleteClientImage

Namespace: org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/clients/{clientId}/images

Description: Delete Client Image

retrieveObligeeDetails

Namespace: org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/clients/{clientId}/obligeedetails

Description: Retrieve Obligee Details

REST Request Validation

Namespace: org.apache.fineract.portfolio.self.client.data.SelfClientDataValidator

Mechanism: REST

Direction: CONSUMER

Path/Topic: n/a

Description: Consumes JAX-RS UriInfo to validate incoming HTTP query parameters for client data operations.

Self Loans API Schemas

Namespace: org.apache.fineract.portfolio.self.loanaccount.api

Mechanism: REST

Direction: BOTH

Path/Topic: /self/loans (implied by schema names)

Description: Defines the JSON schemas (Requests and Responses) for the Self Service Loans REST API. While this file does not contain the JAX-RS annotations, it defines the contract for endpoints such as retrieving loan details, creating loans, and updating loan status.

Retrieve Loan

Namespace: org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/loans/{loanId}

Description: Endpoint to retrieve a single loan by ID.

Retrieve Transaction

Namespace: org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/loans/{loanId}/transactions/{transactionId}

Description: Endpoint to retrieve a specific transaction for a loan.

List Loan Charges

Namespace: org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/loans/{loanId}/charges

Description: Endpoint to list all charges for a loan.

Retrieve Loan Charge

Namespace: org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/loans/{loanId}/charges/{chargeId}

Description: Endpoint to retrieve a specific charge for a loan.

Retrieve Loan Template

Namespace: org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/loans/template

Description: Endpoint to retrieve loan template data for UI construction.

Calculate Schedule or Submit Application

Namespace: org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/loans

Description: Endpoint to calculate repayment schedule or submit a new loan application.

Modify Loan Application

Namespace: org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/loans/{loanId}

Description: Endpoint to modify a pending loan application.

State Transitions

Namespace: org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/loans/{loanId}

Description: Endpoint for loan state transitions (e.g., withdrawal).

Retrieve Guarantors

Namespace: org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/loans/{loanId}/guarantors

Description: Endpoint to retrieve guarantors for a loan.

Link/Delink Accounts

Namespace: org.apache.fineract.portfolio.self.pockets.api.PocketApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/pockets

Description: Endpoint to link or delink accounts to/from a pocket.

Retrieve Linked Accounts

Namespace: org.apache.fineract.portfolio.self.pockets.api.PocketApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/pockets

Description: Endpoint to retrieve all accounts linked to the pocket.

Fineract Command Bus

Namespace: org.apache.fineract.portfolio.self.pockets.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers as a handler for the 'DELINKACCOUNTS' action on the 'POCKET' entity via the @CommandType annotation.

retrieveAllLoanProducts

Namespace: org.apache.fineract.portfolio.self.products.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/loanproducts

Description: Endpoint to retrieve all loan products for self-service.

retrieveLoanProductDetails

Namespace: org.apache.fineract.portfolio.self.products.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/loanproducts/{productId}

Description: Endpoint to retrieve details of a specific loan product.

retrieveAll

Namespace: org.apache.fineract.portfolio.self.products.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/savingsproducts

Description: Endpoint to retrieve all savings products for a self-service client.

retrieveOne

Namespace: org.apache.fineract.portfolio.self.products.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/savingsproducts/{productId}

Description: Endpoint to retrieve a single savings product by ID.

retrieveProduct

Namespace: org.apache.fineract.portfolio.self.products.api.SelfShareProductsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/products/share/{productId}

Description: Endpoint to retrieve a single share product by ID.

retrieveAllProducts

Namespace: org.apache.fineract.portfolio.self.products.api.SelfShareProductsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/products/share

Description: Endpoint to retrieve all share products.

createSelfServiceRegistrationRequest

Namespace: org.apache.fineract.portfolio.self.registration.api

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/self/registration

Description: Endpoint for submitting a self-service registration request.

createSelfServiceUser

Namespace: org.apache.fineract.portfolio.self.registration.api

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: /v1/self/registration/user

Description: Endpoint for creating a self-service user.

GmailBackedPlatformEmailService

Namespace: org.apache.fineract.portfolio.self.registration.service.SelfServiceRegistrationWritePlatformServiceImpl

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Sends authorization emails to users via an internal email service wrapper.

SmsMessageScheduledJobService

Namespace: org.apache.fineract.portfolio.self.registration.service.SelfServiceRegistrationWritePlatformServiceImpl

Mechanism: OTHER

Direction: PRODUCER

Path/Topic: N/A

Description: Queues and triggers SMS messages for delivery via an internal job service.

runReport

Namespace: org.apache.fineract.portfolio.self.runreport.SelfRunReportApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/runreports/{reportName}

Description: Endpoint to run a report for self-service users.

Retrieve Savings Account

Namespace: org.apache.fineract.portfolio.self.savings.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/savingsaccounts/{accountId}

Description: Endpoint to retrieve a single savings account for the authenticated user.

Retrieve Savings Transaction

Namespace: org.apache.fineract.portfolio.self.savings.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/savingsaccounts/{accountId}/transactions/{transactionId}

Description: Endpoint to retrieve a specific transaction for a savings account.

List Savings Charges

Namespace: org.apache.fineract.portfolio.self.savings.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/savingsaccounts/{accountId}/charges

Description: Endpoint to list charges for a savings account.

Retrieve Savings Charge

Namespace: org.apache.fineract.portfolio.self.savings.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/savingsaccounts/{accountId}/charges/{savingsAccountChargeId}

Description: Endpoint to retrieve a specific charge for a savings account.

Retrieve Template

Namespace: org.apache.fineract.portfolio.self.savings.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/savingsaccounts/template

Description: Endpoint to retrieve a savings account application template.

Submit Application

Namespace: org.apache.fineract.portfolio.self.savings.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/savingsaccounts

Description: Endpoint to submit a new savings account application.

Modify Application

Namespace: org.apache.fineract.portfolio.self.savings.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/self/savingsaccounts/{accountId}

Description: Endpoint to modify an existing savings account application.

Update User

Namespace: org.apache.fineract.portfolio.self.security.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/user

Description: API endpoint for self-service users to update their own profile information.

Self Authentication

Namespace: org.apache.fineract.portfolio.self.security.api

Mechanism: REST

Direction: PRODUCER

Path/Topic: /v1/self/authentication

Description: Endpoint for self-service user authentication.

Fetch Authenticated User Details

Namespace: org.apache.fineract.portfolio.self.security.api.SelfUserDetailsApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/userdetails

Description: Endpoint to retrieve the authenticated user's details, roles, and permissions.

Retrieve Share Account Template

Namespace: org.apache.fineract.portfolio.self.shareaccounts.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/shareaccounts/template

Description: Endpoint to retrieve data required to create a share account application.

Submit new share application

Namespace: org.apache.fineract.portfolio.self.shareaccounts.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/shareaccounts

Description: Endpoint to submit a new share account application.

Retrieve a share application/account

Namespace: org.apache.fineract.portfolio.self.shareaccounts.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/shareaccounts/{accountId}

Description: Endpoint to retrieve details of a specific share account.

findByClient

Namespace: org.apache.fineract.portfolio.self.spm.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/surveys/scorecards/clients/{clientId}

Description: Endpoint to retrieve scorecards for a specific client.

createScorecard

Namespace: org.apache.fineract.portfolio.self.spm.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/surveys/scorecards/{surveyId}

Description: Endpoint to create a new scorecard for a survey.

fetchAllSurveys

Namespace: org.apache.fineract.portfolio.self.spm.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/self/surveys

Description: Endpoint to retrieve active surveys for self-service users.

SHAREACCOUNT REJECT Command

Namespace: org.apache.fineract.portfolio.shareaccounts.handler.RejectShareAccountCommandHandler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers as a handler for the SHAREACCOUNT entity and REJECT action within the Fineract command processing framework via @CommandType.

Retrieve All Dividends

Namespace: org.apache.fineract.portfolio.shareproducts.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/shareproduct/{productId}/dividend

Description: Retrieves a list of dividends for a share product.

Retrieve Dividend Details

Namespace: org.apache.fineract.portfolio.shareproducts.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/shareproduct/{productId}/dividend/{dividendId}

Description: Retrieves details of a specific dividend.

Create Dividend

Namespace: org.apache.fineract.portfolio.shareproducts.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/shareproduct/{productId}/dividend

Description: Creates a new dividend payout.

Update Dividend

Namespace: org.apache.fineract.portfolio.shareproducts.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/shareproduct/{productId}/dividend/{dividendId}

Description: Updates (approves) a dividend payout.

Delete Dividend

Namespace: org.apache.fineract.portfolio.shareproducts.api

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/shareproduct/{productId}/dividend/{dividendId}

Description: Deletes a dividend payout.

Command Handler

Namespace: org.apache.fineract.portfolio.shareproducts.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: SHAREPRODUCT / DELETE_DIVIDEND

Description: Registers as a handler for the Fineract Command Processing infrastructure.

List Tax Groups

Namespace: org.apache.fineract.portfolio.tax.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/taxes/group

Description: Retrieves a list of all tax groups.

Retrieve Tax Group

Namespace: org.apache.fineract.portfolio.tax.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/taxes/group/{taxGroupId}

Description: Retrieves a specific tax group by ID.

Retrieve Tax Group Template

Namespace: org.apache.fineract.portfolio.tax.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/taxes/group/template

Description: Retrieves a template for creating a tax group.

Create Tax Group

Namespace: org.apache.fineract.portfolio.tax.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/taxes/group

Description: Creates a new tax group.

Update Tax Group

Namespace: org.apache.fineract.portfolio.tax.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/taxes/group/{taxGroupId}

Description: Updates an existing tax group.

Tax Component API Schemas

Namespace: org.apache.fineract.portfolio.tax.api

Mechanism: REST

Direction: BOTH

Path/Topic: N/A

Description: Defines the request and response body schemas for Tax Component REST API operations, used by Swagger to generate API documentation.

List Tax Components

Namespace: org.apache.fineract.portfolio.tax.api.TaxComponentApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/taxes/component

Description: Endpoint to retrieve all tax components.

Retrieve Tax Component

Namespace: org.apache.fineract.portfolio.tax.api.TaxComponentApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/taxes/component/{taxComponentId}

Description: Endpoint to retrieve a single tax component by ID.

Retrieve Template

Namespace: org.apache.fineract.portfolio.tax.api.TaxComponentApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/taxes/component/template

Description: Endpoint to retrieve a tax component template.

Create Tax Component

Namespace: org.apache.fineract.portfolio.tax.api.TaxComponentApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/taxes/component

Description: Endpoint to create a new tax component.

Update Tax Component

Namespace: org.apache.fineract.portfolio.tax.api.TaxComponentApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/taxes/component/{taxComponentId}

Description: Endpoint to update an existing tax component.

CommandType: CLIENT - PROPOSEANDACCEPTTRANSFER

Namespace: org.apache.fineract.portfolio.transfer.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers a handler for the PROPOSEANDACCEPTTRANSFER action on the CLIENT entity within the Fineract command framework.

REJECTTRANSFER

Namespace: org.apache.fineract.portfolio.transfer.handler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Fineract Command Handler for the 'REJECTTRANSFER' action on the 'CLIENT' entity. This is part of the internal command processing pipeline, likely triggered via a generic REST command endpoint.

fetchLookupTables

Namespace: org.apache.fineract.spm.api.LookupTableApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/surveys/{surveyId}/lookuptables

Description: List all Lookup Table entries for a survey

findLookupTable

Namespace: org.apache.fineract.spm.api.LookupTableApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/surveys/{surveyId}/lookuptables/{key}

Description: Retrieve a Lookup Table entry by key

createLookupTable

Namespace: org.apache.fineract.spm.api.LookupTableApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/surveys/{surveyId}/lookuptables

Description: Create a Lookup Table entry

List Scorecards by Survey

Namespace: org.apache.fineract.spm.api.ScorecardApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/surveys/scorecards/{surveyId}

Description: Endpoint to retrieve all scorecards for a given survey ID.

Create Scorecard

Namespace: org.apache.fineract.spm.api.ScorecardApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/surveys/scorecards/{surveyId}

Description: Endpoint to create a new scorecard entry.

List Scorecards by Survey and Client

Namespace: org.apache.fineract.spm.api.ScorecardApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/surveys/scorecards/{surveyId}/clients/{clientId}

Description: Endpoint to retrieve scorecards for a specific survey and client.

List Scorecards by Client

Namespace: org.apache.fineract.spm.api.ScorecardApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/surveys/scorecards/clients/{clientId}

Description: Endpoint to retrieve all scorecards for a specific client.

List all Surveys

Namespace: org.apache.fineract.spm.api.SpmApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/surveys

Description: Endpoint to retrieve a list of surveys, optionally filtering for active ones.

Retrieve a Survey

Namespace: org.apache.fineract.spm.api.SpmApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/surveys/{id}

Description: Endpoint to retrieve a specific survey by ID.

Create a Survey

Namespace: org.apache.fineract.spm.api.SpmApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/surveys

Description: Endpoint to create a new survey.

Edit Survey

Namespace: org.apache.fineract.spm.api.SpmApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/surveys/{id}

Description: Endpoint to update an existing survey.

Activate/Deactivate Survey

Namespace: org.apache.fineract.spm.api.SpmApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/surveys/{id}

Description: Endpoint to change the status of a survey via a command query parameter.

Retrieve All Templates

Namespace: org.apache.fineract.template.api.TemplatesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/templates

Description: Get a list of all templates or filter by type and entity.

Retrieve Template Details

Namespace: org.apache.fineract.template.api.TemplatesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/templates/template

Description: Get template metadata/structure.

Create Template

Namespace: org.apache.fineract.template.api.TemplatesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/templates

Description: Create a new template.

Retrieve One Template

Namespace: org.apache.fineract.template.api.TemplatesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/templates/{templateId}

Description: Get a specific template by ID.

Get Template By Template

Namespace: org.apache.fineract.template.api.TemplatesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/templates/{templateId}/template

Description: Get template data for a specific ID.

Update Template

Namespace: org.apache.fineract.template.api.TemplatesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/templates/{templateId}

Description: Update an existing template.

Delete Template

Namespace: org.apache.fineract.template.api.TemplatesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/templates/{templateId}

Description: Delete a template.

Merge Template

Namespace: org.apache.fineract.template.api.TemplatesApiResource

Mechanism: REST

Direction: CONSUMER

Path/Topic: /v1/templates/{templateId}

Description: Merge a template with data to produce a document.

TEMPLATE UPDATE Command Handler

Namespace: org.apache.fineract.template.handler.UpdateTemplateCommandHandler

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Registers as a handler for UPDATE actions on TEMPLATE entities via the Fineract Command processing infrastructure.

Template Data Mappers

Namespace: org.apache.fineract.template.service

Mechanism: REST

Direction: CONSUMER

Path/Topic: Dynamic (defined in template mappers)

Description: Fetches JSON data from dynamic URLs defined in the template configuration to populate the template context.

Authentication API

Namespace: org.apache.fineract.twofactortests.TwoFactorAuthenticationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/authentication

Description: Endpoint for user login and authentication.

Two-Factor API

Namespace: org.apache.fineract.twofactortests.TwoFactorAuthenticationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/api/v1/twofactor

Description: Endpoints for managing 2FA: requesting tokens, validating tokens, and configuration.

Actuator Health

Namespace: org.apache.fineract.twofactortests.TwoFactorAuthenticationTest

Mechanism: REST

Direction: CONSUMER

Path/Topic: /fineract-provider/actuator/health

Description: Spring Boot Actuator health check endpoint.

SMTP Mock

Namespace: org.apache.fineract.twofactortests.TwoFactorAuthenticationTest

Mechanism: OTHER

Direction: CONSUMER

Path/Topic: N/A

Description: Interacts with a mocked SMTP server (GreenMail) to intercept emails sent by the application.

Retrieve All Users

Namespace: org.apache.fineract.useradministration.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/users

Description: Endpoint to retrieve a list of all users.

Retrieve One User

Namespace: org.apache.fineract.useradministration.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/users/{userId}

Description: Endpoint to retrieve a single user by ID.

Retrieve User Template

Namespace: org.apache.fineract.useradministration.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/users/template

Description: Endpoint to retrieve a user creation template.

Create User

Namespace: org.apache.fineract.useradministration.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/users

Description: Endpoint to create a new user.

Update User

Namespace: org.apache.fineract.useradministration.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/users/{userId}

Description: Endpoint to update an existing user.

Delete User

Namespace: org.apache.fineract.useradministration.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/users/{userId}

Description: Endpoint to delete a user.

Download Template

Namespace: org.apache.fineract.useradministration.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/users/downloadtemplate

Description: Endpoint to download Excel template for bulk import.

Upload Template

Namespace: org.apache.fineract.useradministration.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/users/uploadtemplate

Description: Endpoint to upload Excel template for bulk import.

Permissions API

Namespace: org.apache.fineract.useradministration.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/permissions

Description: API endpoint for managing application permissions.

Update Permissions API

Namespace: org.apache.fineract.useradministration.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/permissions

Description: API endpoint for updating permission settings (Maker-Checker).

Retrieve Password Preferences

Namespace: org.apache.fineract.useradministration.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/passwordpreferences

Description: Endpoint to retrieve the active password validation policy.

Update Password Preferences

Namespace: org.apache.fineract.useradministration.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/passwordpreferences

Description: Endpoint to update the password validation policy.

Retrieve Password Preferences Template

Namespace: org.apache.fineract.useradministration.api

Mechanism: REST

Direction: N/A

Path/Topic: /v1/passwordpreferences/template

Description: Endpoint to list all available password validation policies.

Roles API Schemas

Namespace: org.apache.fineract.useradministration.api

Mechanism: REST

Direction: BOTH

Path/Topic: /roles (inferred)

Description: Defines the Swagger/OpenAPI schemas (Request and Response bodies) for the Roles management REST API. These schemas model the data structures for creating, retrieving, updating, and deleting roles and their permissions.

retrieveAllRoles

Namespace: org.apache.fineract.useradministration.api.RolesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/roles

Description: List all roles

createRole

Namespace: org.apache.fineract.useradministration.api.RolesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/roles

Description: Create a new role

retrieveRole

Namespace: org.apache.fineract.useradministration.api.RolesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/roles/{roleId}

Description: Retrieve a specific role

actionsOnRoles

Namespace: org.apache.fineract.useradministration.api.RolesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/roles/{roleId}

Description: Enable or Disable a role

updateRole

Namespace: org.apache.fineract.useradministration.api.RolesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/roles/{roleId}

Description: Update a role

retrieveRolePermissions

Namespace: org.apache.fineract.useradministration.api.RolesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/roles/{roleId}/permissions

Description: Retrieve permissions for a role

updateRolePermissions

Namespace: org.apache.fineract.useradministration.api.RolesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/roles/{roleId}/permissions

Description: Update permissions for a role

deleteRole

Namespace: org.apache.fineract.useradministration.api.RolesApiResource

Mechanism: REST

Direction: N/A

Path/Topic: /v1/roles/{roleId}

Description: Delete a role

jQuery.ajax

Namespace: window

Mechanism: REST

Direction: BIDIRECTIONAL

Path/Topic: Dynamic (determined by url parameter)

Description: Performs asynchronous HTTP requests to fetch or send data to a server.