# apache/fineract architecture

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

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

## Overview

Apache Fineract is an extensible core-banking platform. Its user-facing workflow is authenticated, tenant-scoped API requests that read or change banking data and return results; the README documents that API workflow, while sampled code exposes selected search, accounting, and end-of-day services. The graph preserves major domain branches visible in the tree and indexed modules. Source evidence is partial, so only directly shown calls are connected; most unsampled domain wiring is intentionally left unspecified.

Main entry points: [`fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/search/ClientSearchService.java`](https://github.com/apache/fineract/blob/develop/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/search/ClientSearchService.java) (Client Search), [`fineract-investor/src/main/java/org/apache/fineract/investor/service/search/ExternalAssetOwnerSearchService.java`](https://github.com/apache/fineract/blob/develop/fineract-investor/src/main/java/org/apache/fineract/investor/service/search/ExternalAssetOwnerSearchService.java) (Investor Search), [`fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/PostgreSQLQueryService.java`](https://github.com/apache/fineract/blob/develop/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/PostgreSQLQueryService.java) (PostgreSQL Metadata), [`fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/ProgressiveLoanInterestScheduleModelParserService.java`](https://github.com/apache/fineract/blob/develop/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/ProgressiveLoanInterestScheduleModelParserService.java) (Progressive Schedule)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and Search"]
  node_clientsearch["Client Search"]
  node_clientrepo[("Client Repository")]
  node_clientmapper["Client Mapper"]
  node_adhocsearch["Ad Hoc Search"]
  node_savingssearch["Savings Tx Search"]
  node_investorsearch["Investor Search"]
  node_investorrepo[("Investor Repository")]
  node_investormapper["Investor Mapper"]
end

subgraph group_banking["Banking Operations"]
  node_loan["Loan Servicing"]
  node_progressive["Progressive Schedule"]
  node_progressivemodel["Interest Schedule Model"]
  node_reschedule["Loan Rescheduling"]
  node_cob["End-of-Day Processing"]
  node_loanids["Loan COB IDs"]
  node_savingsids["Savings COB IDs"]
  node_workingcapital["Working Capital"]
  node_workingschedule["Amortization Schedule"]
  node_workingmodel["Projected Schedule Model"]
end

subgraph group_accounting["Accounting"]
  node_accounting["General Ledger"]
  node_journals["Journal Entries"]
  node_accrual["Periodic Accruals"]
  node_closures["GL Closures"]
  node_financialactivity["Activity Accounts"]
  node_provisioning["Provisioning"]
end

subgraph group_platform["Platform Services"]
  node_dbquery["Database Query Router"]
  node_postgres["PostgreSQL Metadata"]
  node_database[("Tenant Database")]
  node_content["Content Storage"]
  node_s3content["S3 Content Store"]
  node_security["Tenant Authentication"]
end

node_caller(("API Client"))

node_caller -.->|"requests search"| node_clientsearch
node_clientsearch -->|"queries"| node_clientrepo
node_clientsearch -->|"maps results"| node_clientmapper
node_investorsearch -->|"searches"| node_investorrepo
node_investorsearch -->|"maps results"| node_investormapper
node_loanids -->|"extends retrieval"| node_cob
node_progressive -->|"parses into"| node_progressivemodel
node_workingschedule -->|"parses into"| node_workingmodel
node_dbquery -->|"dispatches queries"| node_postgres
node_postgres -->|"reads metadata"| node_database

click node_clientsearch "https://github.com/apache/fineract/blob/develop/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/search/ClientSearchService.java"
click node_clientrepo "https://github.com/apache/fineract/blob/develop/fineract-core/src/main/java/org/apache/fineract/portfolio/client/domain/ClientRepository.java"
click node_clientmapper "https://github.com/apache/fineract/blob/develop/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/search/mapper/ClientSearchDataMapper.java"
click node_adhocsearch "https://github.com/apache/fineract/blob/develop/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/service/SearchReadService.java"
click node_savingssearch "https://github.com/apache/fineract/blob/develop/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/service/search/SavingsAccountTransactionSearchService.java"
click node_investorsearch "https://github.com/apache/fineract/blob/develop/fineract-investor/src/main/java/org/apache/fineract/investor/service/search/ExternalAssetOwnerSearchService.java"
click node_investorrepo "https://github.com/apache/fineract/blob/develop/fineract-investor/src/main/java/org/apache/fineract/investor/domain/search/SearchingExternalAssetOwnerRepository.java"
click node_investormapper "https://github.com/apache/fineract/blob/develop/fineract-investor/src/main/java/org/apache/fineract/investor/service/search/mapper/ExternalAssetOwnerSearchDataMapper.java"
click node_loan "https://github.com/apache/fineract/blob/develop/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainService.java"
click node_progressive "https://github.com/apache/fineract/blob/develop/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/ProgressiveLoanInterestScheduleModelParserService.java"
click node_progressivemodel "https://github.com/apache/fineract/blob/develop/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/calc/data/ProgressiveLoanInterestScheduleModel.java"
click node_reschedule "https://github.com/apache/fineract/blob/develop/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanReschedulePreviewPlatformService.java"
click node_cob "https://github.com/apache/fineract/blob/develop/fineract-cob/src/main/java/org/apache/fineract/cob/service/RetrieveIdService.java"
click node_loanids "https://github.com/apache/fineract/blob/develop/fineract-loan/src/main/java/org/apache/fineract/cob/service/RetrieveLoanIdService.java"
click node_savingsids "https://github.com/apache/fineract/blob/develop/fineract-savings/src/main/java/org/apache/fineract/cob/savings/RetrieveSavingsIdService.java"
click node_workingcapital "https://github.com/apache/fineract/blob/develop/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/domain/WorkingCapitalLoanWriteOffDomainService.java"
click node_workingschedule "https://github.com/apache/fineract/blob/develop/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/ProjectedAmortizationScheduleModelParserService.java"
click node_workingmodel "https://github.com/apache/fineract/blob/develop/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/calc/ProjectedAmortizationScheduleModel.java"
click node_accounting "https://github.com/apache/fineract/blob/develop/fineract-accounting/src/main/java/org/apache/fineract/accounting/glaccount/api/GLAccountsApiResource.java"
click node_journals "https://github.com/apache/fineract/blob/develop/fineract-accounting/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryWritePlatformService.java"
click node_accrual "https://github.com/apache/fineract/blob/develop/fineract-accounting/src/main/java/org/apache/fineract/accounting/accrual/service/AccrualAccountingWritePlatformService.java"
click node_closures "https://github.com/apache/fineract/blob/develop/fineract-accounting/src/main/java/org/apache/fineract/accounting/closure/service/GLClosureWritePlatformService.java"
click node_financialactivity "https://github.com/apache/fineract/blob/develop/fineract-accounting/src/main/java/org/apache/fineract/accounting/financialactivityaccount/service/FinancialActivityAccountWritePlatformServiceImpl.java"
click node_provisioning "https://github.com/apache/fineract/blob/develop/fineract-accounting/src/main/java/org/apache/fineract/accounting/provisioning/service/ProvisioningEntriesReadPlatformService.java"
click node_dbquery "https://github.com/apache/fineract/blob/develop/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseIndependentQueryService.java"
click node_postgres "https://github.com/apache/fineract/blob/develop/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/PostgreSQLQueryService.java"
click node_content "https://github.com/apache/fineract/blob/develop/fineract-document/src/main/java/org/apache/fineract/infrastructure/contentstore/service/FileContentStoreService.java"
click node_s3content "https://github.com/apache/fineract/blob/develop/fineract-document/src/main/java/org/apache/fineract/infrastructure/contentstore/service/S3ContentStoreService.java"
click node_security "https://github.com/apache/fineract/blob/develop/fineract-security/src/main/java/org/apache/fineract/infrastructure/security/service/AuthTenantDetailsService.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_clientsearch,node_clientrepo,node_clientmapper,node_adhocsearch,node_savingssearch,node_investorsearch,node_investorrepo,node_investormapper,node_caller toneBlue
class node_loan,node_progressive,node_progressivemodel,node_reschedule,node_cob,node_loanids,node_savingsids,node_workingcapital,node_workingschedule,node_workingmodel toneAmber
class node_accounting,node_journals,node_accrual,node_closures,node_financialactivity,node_provisioning toneMint
class node_dbquery,node_postgres,node_database,node_content,node_s3content,node_security toneRose
```

## Components

### API and Search

- [Client Search](https://github.com/apache/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 Repository](https://github.com/apache/fineract/blob/develop/fineract-core/src/main/java/org/apache/fineract/portfolio/client/domain/ClientRepository.java): `fineract-core/src/main/java/org/apache/fineract/portfolio/client/domain/ClientRepository.java`
- [Client Mapper](https://github.com/apache/fineract/blob/develop/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/search/mapper/ClientSearchDataMapper.java): `fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/search/mapper/ClientSearchDataMapper.java`
- [Ad Hoc Search](https://github.com/apache/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`
- [Savings Tx Search](https://github.com/apache/fineract/blob/develop/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/service/search/SavingsAccountTransactionSearchService.java): `fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/service/search/SavingsAccountTransactionSearchService.java`
- [Investor Search](https://github.com/apache/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`
- [Investor Repository](https://github.com/apache/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`
- [Investor Mapper](https://github.com/apache/fineract/blob/develop/fineract-investor/src/main/java/org/apache/fineract/investor/service/search/mapper/ExternalAssetOwnerSearchDataMapper.java): `fineract-investor/src/main/java/org/apache/fineract/investor/service/search/mapper/ExternalAssetOwnerSearchDataMapper.java`

### Banking Operations

- [Loan Servicing](https://github.com/apache/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`
- [Progressive Schedule](https://github.com/apache/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`
- [Interest Schedule Model](https://github.com/apache/fineract/blob/develop/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/calc/data/ProgressiveLoanInterestScheduleModel.java): `fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/calc/data/ProgressiveLoanInterestScheduleModel.java`
- [Loan Rescheduling](https://github.com/apache/fineract/blob/develop/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanReschedulePreviewPlatformService.java): `fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanReschedulePreviewPlatformService.java`
- [End-of-Day Processing](https://github.com/apache/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`
- [Loan COB IDs](https://github.com/apache/fineract/blob/develop/fineract-loan/src/main/java/org/apache/fineract/cob/service/RetrieveLoanIdService.java): `fineract-loan/src/main/java/org/apache/fineract/cob/service/RetrieveLoanIdService.java`
- [Savings COB IDs](https://github.com/apache/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`
- [Working Capital](https://github.com/apache/fineract/blob/develop/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/domain/WorkingCapitalLoanWriteOffDomainService.java): `fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/domain/WorkingCapitalLoanWriteOffDomainService.java`
- [Amortization Schedule](https://github.com/apache/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`
- [Projected Schedule Model](https://github.com/apache/fineract/blob/develop/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/calc/ProjectedAmortizationScheduleModel.java): `fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/calc/ProjectedAmortizationScheduleModel.java`

### Accounting

- [General Ledger](https://github.com/apache/fineract/blob/develop/fineract-accounting/src/main/java/org/apache/fineract/accounting/glaccount/api/GLAccountsApiResource.java): `fineract-accounting/src/main/java/org/apache/fineract/accounting/glaccount/api/GLAccountsApiResource.java`
- [Journal Entries](https://github.com/apache/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`
- [Periodic Accruals](https://github.com/apache/fineract/blob/develop/fineract-accounting/src/main/java/org/apache/fineract/accounting/accrual/service/AccrualAccountingWritePlatformService.java): `fineract-accounting/src/main/java/org/apache/fineract/accounting/accrual/service/AccrualAccountingWritePlatformService.java`
- [GL Closures](https://github.com/apache/fineract/blob/develop/fineract-accounting/src/main/java/org/apache/fineract/accounting/closure/service/GLClosureWritePlatformService.java): `fineract-accounting/src/main/java/org/apache/fineract/accounting/closure/service/GLClosureWritePlatformService.java`
- [Activity Accounts](https://github.com/apache/fineract/blob/develop/fineract-accounting/src/main/java/org/apache/fineract/accounting/financialactivityaccount/service/FinancialActivityAccountWritePlatformServiceImpl.java): `fineract-accounting/src/main/java/org/apache/fineract/accounting/financialactivityaccount/service/FinancialActivityAccountWritePlatformServiceImpl.java`
- [Provisioning](https://github.com/apache/fineract/blob/develop/fineract-accounting/src/main/java/org/apache/fineract/accounting/provisioning/service/ProvisioningEntriesReadPlatformService.java): `fineract-accounting/src/main/java/org/apache/fineract/accounting/provisioning/service/ProvisioningEntriesReadPlatformService.java`

### Platform Services

- [Database Query Router](https://github.com/apache/fineract/blob/develop/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseIndependentQueryService.java): `fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseIndependentQueryService.java`
- [PostgreSQL Metadata](https://github.com/apache/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`
- **Tenant Database**
- [Content Storage](https://github.com/apache/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/apache/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`
- [Tenant Authentication](https://github.com/apache/fineract/blob/develop/fineract-security/src/main/java/org/apache/fineract/infrastructure/security/service/AuthTenantDetailsService.java): `fineract-security/src/main/java/org/apache/fineract/infrastructure/security/service/AuthTenantDetailsService.java`

### Other components

- **API Client**

## Connections

- API Client → Client Search: requests search (evidence: `README.md`)
- Client Search → Client Repository: queries (evidence: `fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/search/ClientSearchService.java`)
- Client Search → Client Mapper: maps results (evidence: `fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/search/ClientSearchService.java`)
- Investor Search → Investor Repository: searches (evidence: `fineract-investor/src/main/java/org/apache/fineract/investor/service/search/ExternalAssetOwnerSearchService.java`)
- Investor Search → Investor Mapper: maps results (evidence: `fineract-investor/src/main/java/org/apache/fineract/investor/service/search/ExternalAssetOwnerSearchService.java`)
- Loan COB IDs → End-of-Day Processing: extends retrieval (evidence: `fineract-loan/src/main/java/org/apache/fineract/cob/service/RetrieveLoanIdService.java`)
- Progressive Schedule → Interest Schedule Model: parses into (evidence: `fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/ProgressiveLoanInterestScheduleModelParserService.java`)
- Amortization Schedule → Projected Schedule Model: parses into (evidence: `fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/ProjectedAmortizationScheduleModelParserService.java`)
- Database Query Router → PostgreSQL Metadata: dispatches queries (evidence: `fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseIndependentQueryService.java`)
- PostgreSQL Metadata → Tenant Database: reads metadata (evidence: `fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/PostgreSQLQueryService.java`)
