Mifos User Documentation Portal
  • Overview and Background
    • History and Background
    • Mifos Vision, Mission & Values
    • Who Mifos is For
    • How Mifos is Used
    • The Mifos Stack
      • Overview
    • Mifos v/s Fineract
    • Community app v/s Webapps
  • General Contributing Guidelines
    • Upstream Development Approach
      • Contribution Process
      • The Apache Way
    • Contributors Guide
    • Contribution Guidelines: Android Project
    • Contribution Guidelines: Web Project
  • Getting Started
    • Getting started with Git & Github
    • Postman integration with Gitbook for testing
    • Testing framework-Web
    • Testing framework-Android
    • Mifos CI/CD tools and instructions
  • External 3rd Apps
    • Pentaho Reporting Plugin
    • Payment Hub
  • MifosX
    • Overview
    • User Manual
      • How to Use This Manual
      • For All Users
        • General Navigation
          • Sign In Page
          • Welcome Page
          • Dashboard Page
          • List Page
          • Menu Page
          • Form Page
          • Clients-Groups-Centers Navigation
          • Navigation Tool
          • Global Search
          • Loan Product and Accounting with Mifos
        • Reports
          • Standard Reports Shipped in Mifos X
          • Standard Reports Field Descriptions
          • Custom Reports
            • Creating Simple Pentaho Report and Embedding it to Mifos X
          • XBRL Reporting
      • For Administrators (Mifos X Platform)
        • Initial System Set Up
        • Administration
          • Users
          • Organization
            • Manage Offices
            • Currency Configuration
            • Manage Holidays
            • Manage Funds
            • Manage Employees
            • Bulk Loan Reassignment
            • Standing Instructions History
            • Teller / Cashier Management
            • Fund Mapping
            • Working Days
            • Password preferences
            • Payment type
            • Loan Provisioning Criteria
            • SMS Campaigns
            • Message Gateway Configuration
            • Daily Teller Cash Management
            • Entity Data Table Checks
          • System
            • Manage Data Tables
            • Audit Trails
            • Manage Codes
            • Manage Reports
            • Manage Roles and Permissions
            • Manage Scheduler Jobs
            • Configure Maker-Checker Tasks
            • Global Configuration
            • Manage Hooks
              • Steps for creating sms bridge
            • Account Number Preferences
            • Entity To Entity Mapping
              • External Services
          • Products
            • Loan Products
              • Loan Product Fields
                • Accounting Loan Product Fields
                • Configuring and Disbursing of Top-Up Loan
                • Declining Balance Interest Calculation
                • Enabling Floating Rate
                • Enabling Variable Installments
                • Flat interest calculation
                • Loan Product Fields—Additional Fields for Loans with Variable Terms based on Loan Cycle
                • Recalculate Interest
                • Tranche Loan Fields
              • Setting up Minimum Days between Disbursal and First Repayment
              • Product Mix
            • Charges
            • Floating Rate
            • Savings Products
              • Saving Product Fields
                • Accounting Saving Product Fields
            • Fixed Deposit Products
              • Fixed Deposit Product Fields
                • Accounting Fixed and Recurring Deposit Product Fields
              • Interest rate chart with amount range
            • Recurring Deposit
              • Recurring Deposit Product Fields
            • Interest Calculations for Deposit Products
            • Overdraft Product
            • Share products
              • Dividends
            • Manage Tax configuration
          • Templates
          • mifos dropdown
        • Clients, Groups and Centers
          • Manage Clients
            • Client Life Cycle Statuses
            • Client Relationship Management
          • Manage Groups
          • Manage Centers
        • Accounting
          • Chart of Accounts - General Ledger Setup
            • Default COA sql script
          • Accounts linked to Financial Activities
          • Migrate opening balances (Office-wise)
          • Accounting Rules
          • Provisioning Entries
          • Print General Ledger Listing
          • How To Enter GL Opening Balance
        • Configure Notifications
      • For Operational Users (Mifos X Web App)
        • Accounting operations
          • Add Journal Entries
          • Searching Accounting Transactions
          • Frequent Postings
          • Advanced Accounting Rules
          • Closing Entries
          • Accruals
        • Accounts and Transactions
          • Cash Transaction Processing
          • Deposit Accounts
            • Mifos X Saving Accounts
              • How to Activate a Saving Account
              • How to Add a Charge to a Saving Account
              • How to Approve a Saving Account Application
              • How to Calculate Interest for a Saving Account
              • How to Close a Saving Account
              • How to Create a Saving Account Application
                • Saving Account Fields
              • How to create overdraft account (Draft)
              • How to Delete a Saving Account Application
              • How to Make a Deposit to a Saving Account
              • How to Make a Withdrawal from a Saving Account
              • How to Modify a Saving Account Application
              • How to Post Interest to a Saving Account
              • How to Reject a Saving Account Application
              • How to Transfer funds from a Saving Account
              • How to Withdraw a Saving Account Application
            • Standing Instructions
              • How to Set up a Standing Instruction
                • Standing Instruction Form Fields
            • Term Deposit Accounts (Fixed Deposit / Recurring Deposit)
              • How to Activate a Term Deposit Account
              • How to Add a Charge to a Term Deposit Account
              • How to Approve a Term Deposit Account Application
              • How to Calculate Interest for a Term Deposit Account
              • How to Create a Term Deposit Account Application
                • Term Deposit Account Fields
              • How to Delete a Term Deposit Account Application
              • How to Make a Deposit to a Recurring Term Deposit Account
              • How to Modify a Term Deposit Account Application
              • How to Post Interest to a Term Deposit Account
              • How to Reject a Term Deposit Account Application
              • How to Withdraw a Term Deposit Account Application
            • Creating Recurring Deposit Account:
          • Loan Accounts
            • How to Create a Loan Account Application
              • Loan Account Fields
            • How to Make Repayments on a Client Loan Account
            • Track Loan Performance History
            • How to Approve a Loan Account Application
            • How to Add a Charge to a Loan Account
            • How to Modify a Loan Account Application
            • How to Assign a Loan Officer
            • How to Reject a Loan Account Application
            • How to Withdraw a Loan Account Application
            • How to Delete a Loan Account Application
            • How to Add Collateral to a Loan Account
            • How to Add/Remove/Modify a Guarantor to a Loan Account
            • How to Manage Loan Account Disbursement
            • How to Make Repayments on a Group Loan Account
            • Using collection sheet or other payment types for making payments
            • How to Waive Interest for a Loan Account
            • How to Write-off a Loan Account
            • How to Close a Loan Account as Rescheduled
            • How to Close a Loan Account
            • Making Prepay of the loan
            • How to Prepay a Loan Account
            • How To Create Group Loan Account
            • How to Process Bulk JLG Loan Application
            • How to generate - Loan transactions report
            • How to reschedule loan
            • How to provide floating rates
            • How to provide variable installments
            • How to create new loan - Interest Recalculation
            • Tranche loan process
            • Loan with term vary based on loan cycle
            • How to Place Guarantee Funds On-Hold?
          • Overdraft account
          • Saving Accounts
            • How To Create Group Saving Account
          • Share Accounts
        • Checker Inbox & Tasks
      • Side Bar - Features
        • Checker inbox and tasks
        • Collection sheet
        • Help.
        • Individual collection sheet
        • Keyboard short-cuts
        • Navigation
      • Others - mifos dropdown
        • Help
        • Profile
        • Settings
          • Date format
          • Language
        • Signout
      • Data Import Tool
        • Getting started with - Data Import Tool
        • Installing Data Import Tool
      • Glossary of Terms
      • Index
      • Reporting Documentation
      • Mobile Money Tool
    • User Space
      • New Feature Request Content
      • Recommended System Requirement
      • MifosX Overview
      • Installation guide
        • Upgrading Mifosx
        • Install MifosX on Windows
        • Install MifosX on Linux
        • Install MifosX on AWS
      • Release Notes
        • Release 1 and Features List
        • Release 2 and Features List
      • User Manual
        • How to Use This Manual
        • For All Users
          • General Navigation
            • Sign In Page
        • For Administrators
          • Initial System Set Up
        • For Operationals
      • Roadmap
      • Frequently Asked Questions (FAQs)
      • Demo Server Details
    • Developer Space
      • Setting Up Dev Environment
        • Setting up Frontend - community-app
      • Setting up MifosX from latest builds
      • Contributors Guide
      • Customising MifosX
      • Additional features
        • Data import tool
        • SMS campaigns
        • Pentaho reports
      • How Mifosx works
      • Adding a new tenant to MifosX instance
      • Using REST client for testing
      • API documentation
      • Scaling MifosX
      • Upgrading MifosX
      • Troubleshooting guide
  • Core Banking & Embedded Finance
    • Core Banking
      • Overview
    • Embedded Finance
      • Overview
  • Application Framework
    • Payment Hub EE
  • Main Platforms
    • Fineract 1.x
      • Apache Fineract
      • Apache Fineract Client
    • Fineract CN
      • Overview
      • User Manual
  • Staff UI Platforms
    • Fineract 1.x
      • Community-App
      • Web-App
      • Web Self-Service App
        • Online Banking App 2.0 User Manual
          • Developer Environment Setup for Online Banking App 2.0
      • Mobile Field Officer Applications
        • Android Client
          • User Manual
    • Fineract CN
      • Digital Bank User Interface
      • Mobile Field Officer Applications
        • Fineract CN Mobile
  • Customer UI Platforms
    • Fineract 1.x
      • Mobile Banking
        • Mifos Mobile
      • Mobile Wallets
      • Online Banking
    • Fineract CN
      • Mobile Banking
        • Fineract CN Mobile
        • Mifos Mobile CN
      • Mobile Wallets
      • Online Banking
  • Ancillary Tools
    • Fineract 1.x
      • Message Gateway
      • Mifos Passcode
      • PPI Vision
      • DevOps Tooling
      • Fineract Android SDK
      • MifosX Admin
      • Mifos ChatBot
      • Data Import Tool
    • Fineract CN
      • Fineract CN Containers
      • Fineract CN Terraform
  • Payment and Process Orchestration
    • Fineract 1.x
      • Payment Hub
      • Fineract Pentaho
    • Fineract CN
      • Staff Interfaces
        • Digital Bank UI
      • Customer Interfaces
        • Fineract CN Mobile
        • Mifos Mobile CN
        • Fineract CN Mobile
      • Ancillary Tools
        • Fineract CN Terraform
        • Fineract CN Containers
    • Payment Hub EE
Powered by GitBook
On this page
  • INTRODUCTION
  • MIFOS X FINANCIAL SERVICE ENGINE
  • ARCHITECTURE
  • REFERENCES

Was this helpful?

  1. MifosX
  2. Developer Space

How Mifosx works

(Architectural explanation)

PreviousPentaho reportsNextAdding a new tenant to MifosX instance

Last updated 4 years ago

Was this helpful?

BANKS, SACCOS, CO-OPERATIVES, CREDIT UNIONS, DIGITAL PLATFORMS

INTRODUCTION

Mifos X Software Platform (simply “the Platform”) is built around a multitenant, service oriented, and tiered architecture, and can be deployed in a SaaS[1] (Software as a Service) model or on-premises.

The foundation forms a robust but flexible data model which is ready-made for extensions and customizations. An API provides access to all basic functions grouped in modules.

Java was selected as a suitable high-level language allowing the rapid customization of code required for each individual circumstance yet has a large number of powerful libraries available.

MIFOS X FINANCIAL SERVICE ENGINE

The Mifos X Financial Service Engine (simply “the Engine”) is a scalable and extensible framework written in Java, and licensed under the Apache License 2.0[2].

The main design principle of the Engine is CQRS[3] (Command Query Responsibility Segregation), a pattern that separates commands and queries into different models and services. This approach has multiple benefits: 1) State changes (commands) are persisted, providing an audit of all changes, 2) fine grained control and extension of state changes, and 3) scalability based on consumer behavior and real system load.

Based on a tiered architecture the Engine provides multiple layers to separate concerns and allow reusability.

API LAYER

The API Layer is built entirely as a RESTful[4] Webservice, using JSON[5] to transmit data, and utilizes standard HTTP Methods for interactions. The main components of this layer are:

  • Resources: Every module is exposed via a URI [5] (Unique Resource Identifier).

  • Access Control: Early exit if a consumer lacks authorization for a queried Resource.

  • Data marshaling: Any data transmitted to and from the API is de-/serialized using JSON.

The API is exposed via HTTPS to encrypt all data and secure the communication. OAuth2 is used for authorization.

Stateless by nature the API Layer can be scaled based on the actual load and even used in high availability scenarios.

SERVICE LAYER

The Service Layer provides module specific business logic and rules, role based access control[7] and a XBRL[8] compliant reporting engine. Transaction awareness and data validity is encapsulated, and extension points are available to enhance built-in workflows.

Cross concerns like Security or Transactions are part of the core framework and provided via AOP[9] (Aspect Oriented Programming).

The Service Layer has horizontal and vertical layers.

Services, command, and event handlers form horizontal layers; functional modules form vertical layers.

The top-level modules are shown in the diagram.

DATA LAYER

The Data Layer provides module specific access to data stores. Data integrity is reached by using the ACID[10] principal and well defined data relations. Write and read operations are encapsulated in different repositories to define a clean responsibility separation.

The Data Layer uses two cache strategies to cache data efficiently; database and 2nd level caching.

  • Database caching stores records on the database level and is useful for reporting, batch jobs, and low-level SQL queries.

  • 2nd Level caching stores data objects on the application level and keeps database turnarounds on a very low level allowing fast in-memory access of frequent data.

ARCHITECTURE

The Engine’s architecture was designed with a focus on modern, scalable and extensible technologies ready to run in the cloud. All components where selected based on their maturity, proven reliability and cost efficiency.

It is our goal to provide a software that is deployable with effectively no cost that can grow with the customer need over time using well known best practices and support from a wide range of communities.

The basic Mifos X Financial Service Engine architecture is as follows:

MIFOS X COMMUNITY APP

Mifos X Community App (simply “the Community App”) is a browser based Single Page Application[11] (SPA) built entirely with HTML, JavaScript and CSS. Resources are loaded dynamically and added to the page as necessary.

All user interactions, workflows, and application logic take place in the browser and does not create load on the Engine. Ajax[12] is used to send data to and receive data from the Engine asynchronous, and bidirectional model binding update views automatically.

Based on AngularJS, the Community App is built on the MVC[13] (Model-View-Controller) pattern and uses templates to render dynamic content. To provide a responsive and modern look and feel Bootstrap is part of the application stack.

The basic Mifos X Community App components are as follows:

Resource Component

REFERENCES

DISCLAIMER

https://

https://

Mifos Initiative is approved by the Internal Revenue Service as a 501 (C) (3) tax-exempt organization, and all donations are tax deductible to the extent provided by law. The Mifos Initiative's Federal Identification Number (EIN) is 45-3613178. This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit

http://en.wikipedia.org/wiki/Software_as_a_service
www.apache.org/licenses/LICENSE-2.0
http://martinfowler.com/bliki/CQRS.html
http://en.wikipedia.org/wiki/Representational_state_transfer
http://json.org/
http://en.wikipedia.org/wiki/Uniform_resource_identifier
http://en.wikipedia.org/wiki/Role-based_access_control
www.xbrl.org/
http://en.wikipedia.org/wiki/Aspect-oriented_programming
http://en.wikipedia.org/wiki/ACID
http://en.wikipedia.org/wiki/Single-page_application
http://en.wikipedia.org/wiki/Ajax_(programming)
http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
http://creativecommons.org/licenses/by-sa/4.0/.