# openmf/fineract architecture

> Architecture diagram of the GitHub repository openmf/fineract, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/openmf/fineract
- Repository: https://github.com/openmf/fineract

## Overview

Apache Fineract is a modular core-banking platform. Its documented entry workflow is an authenticated, tenant-scoped REST request that produces a banking result; the README demonstrates listing clients. The tree shows broader banking domains including loans, savings, transfers, accounting, and customer notes. Sampled code confirms selected search, database-metadata, content-storage, and business-day processing responsibilities, but most domain wiring was not sampled, so those connections are not asserted here.

Main entry points: [`fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/search/ClientSearchService.java`](https://github.com/openmf/fineract/blob/develop/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/search/ClientSearchService.java) (Client search), [`fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseQueryService.java`](https://github.com/openmf/fineract/blob/develop/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseQueryService.java) (Database metadata), [`fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/PostgreSQLQueryService.java`](https://github.com/openmf/fineract/blob/develop/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/PostgreSQLQueryService.java) (PostgreSQL adapter), [`fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/MySQLQueryService.java`](https://github.com/openmf/fineract/blob/develop/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/MySQLQueryService.java) (MySQL adapter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_banking["Banking domains"]
  node_client_search["Client search"]
  node_client_data[("Client records<br/>[Component.java]")]
  node_account_transfers["Account transfers"]
  node_standing_instructions["Scheduled transfers"]
  node_transfer_state[("Transfer records")]
  node_accounting["Accounting"]
  node_closures["GL closures"]
  node_savings["Savings accounts"]
  node_savings_model[("Savings state")]
end

subgraph group_lending["Credit operations"]
  node_loans["Loan accounts"]
  node_loan_model[("Loan state<br/>[Loan.java]")]
  node_loan_schedule["Loan schedules"]
  node_working_capital["Working capital"]
end

subgraph group_platform["Platform services"]
  node_cob["Business-day processing"]
  node_savings_cob["Savings COB IDs"]
  node_search["Ad hoc search"]
  node_db_query["Database metadata"]
  node_postgres["PostgreSQL adapter"]
  node_mysql["MySQL adapter"]
  node_content_store["File content store"]
  node_s3_store["S3 content store"]
end

subgraph group_extensions["Extensions"]
  node_notes["Customer notes"]
  node_events["External events"]
  node_investor_search["Investor search"]
  node_external_owner_repo[("Asset-owner data")]
end

node_user(("API client"))

node_user -->|"requests clients"| node_client_search
node_client_search -->|"searches records"| node_client_data
node_postgres -->|"implements"| node_db_query
node_mysql -->|"implements"| node_db_query
node_investor_search -->|"searches and maps"| node_external_owner_repo
node_content_store -.->|"alternative backend"| node_s3_store

click node_client_search "https://github.com/openmf/fineract/blob/develop/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/search/ClientSearchService.java"
click node_client_data "https://github.com/openmf/fineract/blob/develop/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Component.java"
click node_account_transfers "https://github.com/openmf/fineract/blob/develop/fineract-account-transfer/src/main/java/org/apache/fineract/portfolio/account/api/AccountTransfersApiResource.java"
click node_standing_instructions "https://github.com/openmf/fineract/blob/develop/fineract-account-transfer/src/main/java/org/apache/fineract/portfolio/account/jobs/executestandinginstructions/StandingInstructionItemProcessor.java"
click node_transfer_state "https://github.com/openmf/fineract/blob/develop/fineract-account-transfer/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferRepository.java"
click node_accounting "https://github.com/openmf/fineract/blob/develop/fineract-accounting/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryWritePlatformService.java"
click node_closures "https://github.com/openmf/fineract/blob/develop/fineract-accounting/src/main/java/org/apache/fineract/accounting/closure/api/GLClosuresApiResource.java"
click node_savings "https://github.com/openmf/fineract/blob/develop/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformService.java"
click node_savings_model "https://github.com/openmf/fineract/blob/develop/fineract-core/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionData.java"
click node_loans "https://github.com/openmf/fineract/blob/develop/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainService.java"
click node_loan_model "https://github.com/openmf/fineract/blob/develop/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java"
click node_loan_schedule "https://github.com/openmf/fineract/blob/develop/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/ProgressiveLoanInterestScheduleModelParserService.java"
click node_working_capital "https://github.com/openmf/fineract/blob/develop/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/ProjectedAmortizationScheduleModelParserService.java"
click node_cob "https://github.com/openmf/fineract/blob/develop/fineract-cob/src/main/java/org/apache/fineract/cob/service/RetrieveIdService.java"
click node_savings_cob "https://github.com/openmf/fineract/blob/develop/fineract-savings/src/main/java/org/apache/fineract/cob/savings/RetrieveSavingsIdService.java"
click node_search "https://github.com/openmf/fineract/blob/develop/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/service/SearchReadService.java"
click node_db_query "https://github.com/openmf/fineract/blob/develop/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseQueryService.java"
click node_postgres "https://github.com/openmf/fineract/blob/develop/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/PostgreSQLQueryService.java"
click node_mysql "https://github.com/openmf/fineract/blob/develop/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/MySQLQueryService.java"
click node_content_store "https://github.com/openmf/fineract/blob/develop/fineract-document/src/main/java/org/apache/fineract/infrastructure/contentstore/service/FileContentStoreService.java"
click node_s3_store "https://github.com/openmf/fineract/blob/develop/fineract-document/src/main/java/org/apache/fineract/infrastructure/contentstore/service/S3ContentStoreService.java"
click node_notes "https://github.com/openmf/fineract/blob/develop/custom/acme/note/service/src/main/java/com/acme/fineract/portfolio/note/service/AcmeNoteWritePlatformService.java"
click node_events "https://github.com/openmf/fineract/blob/develop/custom/acme/event/externalevent/src/main/java/com/acme/fineract/event/externalevent/AcmeExternalEventSourceProviderConfig.java"
click node_investor_search "https://github.com/openmf/fineract/blob/develop/fineract-investor/src/main/java/org/apache/fineract/investor/service/search/ExternalAssetOwnerSearchService.java"
click node_external_owner_repo "https://github.com/openmf/fineract/blob/develop/fineract-investor/src/main/java/org/apache/fineract/investor/domain/search/SearchingExternalAssetOwnerRepository.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_client_search,node_client_data,node_account_transfers,node_standing_instructions,node_transfer_state,node_accounting,node_closures,node_savings,node_savings_model,node_user toneBlue
class node_loans,node_loan_model,node_loan_schedule,node_working_capital toneAmber
class node_cob,node_savings_cob,node_search,node_db_query,node_postgres,node_mysql,node_content_store,node_s3_store toneMint
class node_notes,node_events,node_investor_search,node_external_owner_repo toneRose
```

## Components

### Banking domains

- [Client search](https://github.com/openmf/fineract/blob/develop/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/search/ClientSearchService.java): `fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/search/ClientSearchService.java`
- [Client records](https://github.com/openmf/fineract/blob/develop/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Component.java): `fineract-provider/src/main/java/org/apache/fineract/spm/domain/Component.java`
- [Account transfers](https://github.com/openmf/fineract/blob/develop/fineract-account-transfer/src/main/java/org/apache/fineract/portfolio/account/api/AccountTransfersApiResource.java): `fineract-account-transfer/src/main/java/org/apache/fineract/portfolio/account/api/AccountTransfersApiResource.java`
- [Scheduled transfers](https://github.com/openmf/fineract/blob/develop/fineract-account-transfer/src/main/java/org/apache/fineract/portfolio/account/jobs/executestandinginstructions/StandingInstructionItemProcessor.java): `fineract-account-transfer/src/main/java/org/apache/fineract/portfolio/account/jobs/executestandinginstructions/StandingInstructionItemProcessor.java`
- [Transfer records](https://github.com/openmf/fineract/blob/develop/fineract-account-transfer/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferRepository.java): `fineract-account-transfer/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferRepository.java`
- [Accounting](https://github.com/openmf/fineract/blob/develop/fineract-accounting/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryWritePlatformService.java): `fineract-accounting/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryWritePlatformService.java`
- [GL closures](https://github.com/openmf/fineract/blob/develop/fineract-accounting/src/main/java/org/apache/fineract/accounting/closure/api/GLClosuresApiResource.java): `fineract-accounting/src/main/java/org/apache/fineract/accounting/closure/api/GLClosuresApiResource.java`
- [Savings accounts](https://github.com/openmf/fineract/blob/develop/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformService.java): `fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformService.java`
- [Savings state](https://github.com/openmf/fineract/blob/develop/fineract-core/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionData.java): `fineract-core/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionData.java`

### Credit operations

- [Loan accounts](https://github.com/openmf/fineract/blob/develop/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainService.java): `fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainService.java`
- [Loan state](https://github.com/openmf/fineract/blob/develop/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java): `fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java`
- [Loan schedules](https://github.com/openmf/fineract/blob/develop/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/ProgressiveLoanInterestScheduleModelParserService.java): `fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/ProgressiveLoanInterestScheduleModelParserService.java`
- [Working capital](https://github.com/openmf/fineract/blob/develop/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/ProjectedAmortizationScheduleModelParserService.java): `fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/ProjectedAmortizationScheduleModelParserService.java`

### Platform services

- [Business-day processing](https://github.com/openmf/fineract/blob/develop/fineract-cob/src/main/java/org/apache/fineract/cob/service/RetrieveIdService.java): `fineract-cob/src/main/java/org/apache/fineract/cob/service/RetrieveIdService.java`
- [Savings COB IDs](https://github.com/openmf/fineract/blob/develop/fineract-savings/src/main/java/org/apache/fineract/cob/savings/RetrieveSavingsIdService.java): `fineract-savings/src/main/java/org/apache/fineract/cob/savings/RetrieveSavingsIdService.java`
- [Ad hoc search](https://github.com/openmf/fineract/blob/develop/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/service/SearchReadService.java): `fineract-provider/src/main/java/org/apache/fineract/portfolio/search/service/SearchReadService.java`
- [Database metadata](https://github.com/openmf/fineract/blob/develop/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseQueryService.java): `fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseQueryService.java`
- [PostgreSQL adapter](https://github.com/openmf/fineract/blob/develop/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/PostgreSQLQueryService.java): `fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/PostgreSQLQueryService.java`
- [MySQL adapter](https://github.com/openmf/fineract/blob/develop/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/MySQLQueryService.java): `fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/MySQLQueryService.java`
- [File content store](https://github.com/openmf/fineract/blob/develop/fineract-document/src/main/java/org/apache/fineract/infrastructure/contentstore/service/FileContentStoreService.java): `fineract-document/src/main/java/org/apache/fineract/infrastructure/contentstore/service/FileContentStoreService.java`
- [S3 content store](https://github.com/openmf/fineract/blob/develop/fineract-document/src/main/java/org/apache/fineract/infrastructure/contentstore/service/S3ContentStoreService.java): `fineract-document/src/main/java/org/apache/fineract/infrastructure/contentstore/service/S3ContentStoreService.java`

### Extensions

- [Customer notes](https://github.com/openmf/fineract/blob/develop/custom/acme/note/service/src/main/java/com/acme/fineract/portfolio/note/service/AcmeNoteWritePlatformService.java): `custom/acme/note/service/src/main/java/com/acme/fineract/portfolio/note/service/AcmeNoteWritePlatformService.java`
- [External events](https://github.com/openmf/fineract/blob/develop/custom/acme/event/externalevent/src/main/java/com/acme/fineract/event/externalevent/AcmeExternalEventSourceProviderConfig.java): `custom/acme/event/externalevent/src/main/java/com/acme/fineract/event/externalevent/AcmeExternalEventSourceProviderConfig.java`
- [Investor search](https://github.com/openmf/fineract/blob/develop/fineract-investor/src/main/java/org/apache/fineract/investor/service/search/ExternalAssetOwnerSearchService.java): `fineract-investor/src/main/java/org/apache/fineract/investor/service/search/ExternalAssetOwnerSearchService.java`
- [Asset-owner data](https://github.com/openmf/fineract/blob/develop/fineract-investor/src/main/java/org/apache/fineract/investor/domain/search/SearchingExternalAssetOwnerRepository.java): `fineract-investor/src/main/java/org/apache/fineract/investor/domain/search/SearchingExternalAssetOwnerRepository.java`

### Other components

- **API client**

## Connections

- API client → Client search: requests clients (evidence: `README.md`)
- Client search → Client records: searches records (evidence: `fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/search/ClientSearchService.java`)
- PostgreSQL adapter → Database metadata: implements (evidence: `fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/PostgreSQLQueryService.java`)
- MySQL adapter → Database metadata: implements (evidence: `fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/MySQLQueryService.java`)
- Investor search → Asset-owner data: searches and maps (evidence: `fineract-investor/src/main/java/org/apache/fineract/investor/service/search/ExternalAssetOwnerSearchService.java`)
- File content store → S3 content store: alternative backend
