Configuration Guide

Mifos 2 Configuration Guide

Mifos Configuration

The following topics are for system administrators and Mifos specialists configuring Mifos who are deploying Mifos.

Table of Contents

  • Mifos Configuration
  • Overview
  • Before you run Mifos...
    • About the One-Time Settings
    • Using a Custom Chart of Accounts
    • Creating your own Financial Action Mappings
    • Customizing the Application Configuration File
      • Locale
      • Accounting
      • Calendar
      • Clients
      • Process
      • Reporting
      • Batch Jobs
    • Adjusting Session Timeout
    • Scheduling Batch Jobs
    • Customizing your Database Connection
      • Mifos version 1.2 and older
      • Mifos versions greater than 1.2 and upgrades
    • Database-Configured Settings
  • Before your users access Mifos...
    • Starting Mifos
    • Customizing the User Interface
      • User Interface Labels
      • List Box Items (Look-Up Options)
      • Required and Hidden Fields
      • Create Additional Fields
    • Defining Office Hierarchy
    • Creating Roles
    • Creating Users
    • Configuring Payment Types
    • Configuring Payment Order
    • Setting Lateness and Dormancy Definitions
    • Defining Holidays
    • Information on Reporting and PPI Surveys
    • Configuring Mifos to work with Cloud Foundry

Overview

The topics assume that you have installed Mifos and configured its third-party applications as described in Installing Mifos, and that you are ready to configure the administrative settings in Mifos. After you configure these settings, your Mifos deployment will be ready for you or someone else to create loan and savings products, add new clients and groups, open accounts for clients and groups, and configure reporting.

The administrative configuration process involves two groups of settings, which should be configured at two different times:

  • Before you run Mifos: Certain administrative settings can only be configured when Mifos is not running. Among them are settings whose default values you have only one opportunity to change-before you run Mifos for the first time.
  • Before your users access Mifos: There are also administrative settings you should configure before your users access Mifos. You configure these settings via the Mifos user interface, on the Admin tab.

Note for version 1.0 users: Changes since Mifos version 1.0 include moving install-time settings out of the database and into plain-text files. If you are using Mifos version 1.0, see Configuring Mifos version 1.0.

 

Before you run Mifos...

This section describes the install-time settings in Mifos, or those that can only be configured when Mifos is not running. It also describes install-time settings whose values can only be changed to non-default values once, before you run Mifos for the first time.

 

About the One-Time Settings

When Mifos runs for the first time, it writes values to its database. Although many of these values can be changed later, some cannot. Specifically, the values from the Chart of Accounts can only be written to the database once. Similarly, TRAPDOOR properties in the application configuration file can only be assigned non-default values once, before you run Mifos for the first time. After that point, a TRAPDOOR property value can only be changed to its default setting.

 

Using a Custom Chart of Accounts

The Chart of Accounts used by Mifos can be customized to exclude certain General Ledger (GL) accounts or use a different hierarchy of accounts. Note that you have only one opportunity to make these customizations, before you run Mifos for the first time.

To customize the Chart of Accounts:

  1. Create a copy of the default Chart of Accounts configuration file that ships with Mifos and name itmifosChartOfAccounts.custom.xml.
  2. Customize mifosChartofAccounts.custom.xml as described in Chart of Accounts.
  3. Mifos 1.6.x and earlier: Place your customized file on the app server classpath before you run your first instance of Mifos in your final, production environment.
  4. Mifos versions greater than 1.6.x and trunk development:: Place your customized file in one of the MifosConfigurationLocations before you run your first instance of Mifos in your final, production environment.

Note: Once Mifos is deployed, you won't be able to delete GL accounts or change the account hierarchy. See the bulleted lists below for more information.

After Mifos is deployed, you can only make the following changes to your GL accounts:

  • Add new GL accounts (excluding top-level accounts)
  • Change account names (excluding top-level accounts)

You cannot make the following GL account changes after Mifos is deployed:

  • Delete GL accounts
  • Create new top-level accounts
  • Modify top-level account names
  • Modify the account hierarchy (moving parents/children)
  • Modify GL codes
 

Creating your own Financial Action Mappings

Unlike the Chart of Accounts, financial action mappings can be customized any time Mifos is not running.

GL accounts are used in conjunction with particular actions. For example, when principal is added to a new loan account (a credit), Mifos choses a GL account based on a mapping. The default mappings that Mifos uses are stored in applicationContext.xml, a file that ships with Mifos. For Mifos to function correctly, all actions must be mapped to an existing GL account.

To customize the financial action mappings:

  1. Create a file named mifosBeanConfig.custom.xml.
  2. Customize mifosBeanConfig.custom.xml (see the example below).
  3. Mifos 1.6.x and earlier: Place your customized file on the app server classpath before you run your first instance of Mifos in your final, production environment.
  4. Mifos versions greater than 1.6.x and trunk development:: Place your customized file in one of the MifosConfigurationLocations before you run your first instance of Mifos in your final, production environment.
  5. The mappings will take effect once Mifos is restarted.

Example

Use the following as a starting point for creating your own mifosBeanConfig.custom.xml:

		<?xml version="1.0" encoding="UTF-8"?>
<beans
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
         " title="http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">">http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    <bean id = "financialRules"
       class="org.mifos.accounts.financial.util.helpers.FinancialRules"
       abstract="false" factory-method="getInstance">
       <property name="actionToDebitAccount">
           <map>
               <entry key="PRINCIPALPOSTING" value="11201"/>
               <entry key="INTERESTPOSTING" value="11201"/>
               <entry key="FEEPOSTING" value="11201"/>
               <entry key="PENALTYPOSTING" value="11200"/>
               <entry key="ROUNDING" value="31401"/>
               <entry key="MANDATORYDEPOSIT" value="11201"/>
               <entry key="VOLUNTARYDEPOSIT" value="11201"/>
               <entry key="MANDATORYWITHDRAWAL" value="24000"/>
               <entry key="VOLUNTARYWITHDRAWAL" value="23000"/>
               <entry key="SAVINGS_INTERESTPOSTING" value="41000"/>
               <entry key="DISBURSAL" value="13101"/>
               <entry key="MISCFEEPOSTING" value="11201"/>
               <entry key="MISCPENALTYPOSTING" value="11201"/>
               <entry key="CUSTOMERACCOUNTMISCFEESPOSTING" value="11201"/>
               <entry key="MANDATORYDEPOSIT_ADJUSTMENT" value="24000"/>
               <entry key="VOLUNTARYDEPOSIT_ADJUSTMENT" value="23000"/>
               <entry key="MANDATORYWITHDRAWAL_ADJUSTMENT" value="11201"/>
               <entry key="VOLUNTARYWITHDRAWAL_ADJUSTMENT" value="11201"/>
               <entry key="WRITEOFF" value="13201"/>
               <entry key="RESCHEDULE" value="11201"/>
           </map>
       </property>
       <property name="actionToCreditAccount">
           <map>
               <entry key="PRINCIPALPOSTING" value="13100"/>
               <entry key="INTERESTPOSTING" value="31100"/>
               <entry key="FEEPOSTING" value="31300"/>
               <entry key="PENALTYPOSTING" value="31102"/>
               <entry key="ROUNDING" value="31401"/>
               <entry key="MANDATORYDEPOSIT" value="24000"/>
               <entry key="VOLUNTARYDEPOSIT" value="23000"/>
               <entry key="MANDATORYWITHDRAWAL" value="11201"/>
               <entry key="VOLUNTARYWITHDRAWAL" value="11201"/>
               <entry key="SAVINGS_INTERESTPOSTING" value="24100"/>
               <entry key="DISBURSAL" value="11201"/>
               <entry key="MISCFEEPOSTING" value="31301"/>
               <entry key="MISCPENALTYPOSTING" value="31102"/>
               <entry key="CUSTOMERACCOUNTMISCFEESPOSTING" value="31301"/>
               <entry key="MANDATORYDEPOSIT_ADJUSTMENT" value="11201"/> 
               <entry key="VOLUNTARYDEPOSIT_ADJUSTMENT" value="11201"/>
               <entry key="MANDATORYWITHDRAWAL_ADJUSTMENT" value="24000"/>
               <entry key="VOLUNTARYWITHDRAWAL_ADJUSTMENT" value="23000"/>
               <entry key="WRITEOFF" value="13101"/>
               <entry key="RESCHEDULE" value="13101"/>
           </map>
       </property>
   </bean>
</beans>

You may notice that other unrelated sections from applicationContext.xml have been omitted. This is intentional. The code that parses this XML configuration file allows for partial changes, and only those settings specific to financial action mappings inmifosBeanConfig.custom.xml can be customized.

Action names are actually constants in the FinancialActionConstants enum class. All actions must be mapped (except, currently, PENALTYPOSTING and REVERSAL_ADJUSTMENT) because Mifos assumes they are. For example, Mifos expects the mapping to contain a ROUNDING account. If the mapping doesn't exist, the application may crash or corrupt data because it cannot find an account with which to resolve rounded amounts.

Values may be changed, but they must point to GL account codes as specified in the Chart of Accounts.

 

Customizing the Application Configuration File

Mifos ships with a default application configuration file (applicationConfiguration.default.properties) that controls many aspects of how Mifos is set up, including which currency and locale it uses, its accounting rules, and many other important settings. You should never edit this default configuration file directly. Instead, use the file applicationConfiguration.custom.properties to override the values you want to change:

To use the custom application configuration file:

  1. Open the file applicationConfiguration.custom.properties in the conf folder of the Mifos install package. This file contains all the same properties and values as the default version.
  2. Uncomment the properties whose values you want to change and edit the values. Pay special attention to TRAPDOOR properties.
  3. Mifos 1.2.x and earlier: create a file named applicationConfiguration.custom.properties and place it on the app server classpath .
  4. Mifos versions greater than 1.2.x and trunk development: create a file named applicationConfiguration.custom.properties in one of the MifosConfigurationLocations.
 

Locale

The following settings in your applicationConfiguration.custom.properties file control locale in Mifos.

Language

In Mifos, settings for country and language work together to create a locale-specific user interface. Choose the language you want first, then use the CountryCode value that must be paired with that language.

Property name: Localization.LanguageCode
Mutability: Always
Options: EN (English), ES (Spanish), FR (French)
Default: EN

Use the following table to determine which LanguageCodes and CountryCodes must be paired with one another:




For locales using this language...use this CountryCodeand this LanguageCode
SpanishESES
FrenchFRFR
EnglishGBEN

Example: Setting Localization.LanguageCode to FR and Localization.CountryCode to FR cause Mifos to display a French user interface.

 
Country

In Mifos, settings for country and language work together to create a locale-specific user interface. To get the language you want, it's possible that you will have to use a country code that doesn't reflect where Mifos will be installed.

Property name: Localization.CountryCode
Mutability: Always
Options: ES (Spain), FR (France), GB (Great Britain)
Default: GB

Use the following table to determine which LanguageCodes and CountryCodes must be paired with one another:




For locales using this language...use this CountryCodeand this LanguageCode
SpanishESES
FrenchFRFR
EnglishGBEN

Example: Setting Localization.LanguageCode to FR and Localization.CountryCode to FR cause Mifos to display a French user interface.

 
Direction

If you are using a language that requires right-to-left, this setting can be used to set the direction of the text.  By default, this should be set to auto.  If your locale is set up correctly, the direction should be automatically set and this direction does not need to be changed.

Property name: Localization.Direction
Mutability: Always
Options: auto, ltr, rtl
Default: auto
 

Accounting

The accounting settings in applicationConfiguration.custom.properties tell Mifos which currency you want to use and provide information it needs to calculate repayment schedules, including how many decimal places of precision should be used, and how repayments should be rounded and adjusted.

Currency

The currency that Mifos uses.

This setting causes Mifos to use currency set internally, in its calculations and database. Externally, you will see no effect. The user interface does not display currency symbols ($, £, etc.). This is a known issue.  This sets the default currency in Mifos.  All accounting rules without a currency code on the property applies to the default currency.

Property name: AccountingRules.CurrencyCode
MutabilityTRAPDOOR
Options: 3 letter Alphabetical codes from this list - `ISO 4217 currency codes <http://www.iso.org/iso/support/currency_codes_list-1.htm>`_
Default: INR

ExampleAccountingRules.CurrencyCode=INR causes Mifos to use the Indian rupee as the currency.

 If you want to use an additional currency for loan products, the setting is used to set an additional currency code.  Use the currency code to set specific rounding rules below for that currency.
Property name: AccountingRules.AdditionalCurrencyCodes
MutabilityTRAPDOOR
Options: any currency code
Default: none
Number of interest-bearing days

The number of days per year that should be used by Mifos in its interest calculations.

This setting does not apply to meeting scheduling. The meeting calendar always has 365 days. This setting also doesn't apply to fees and penalties calculation and repayment schedule generation. Because of its dependencies, once you configure this setting, you should not change it. For example, in the case of a moratorium, the loan schedule is recalculated, and changing the number of interest-bearing days in a year could change the calculation results.

Property name: AccountingRules.NumberOfInterestDays
Mutability: Always
Options: 360 or 365
Default: 365

ExampleAccountingRules.NumberOfInterestDays=365 causes Mifos to use 365 days in its interest calculations.

 
Number of digits after decimal

The number of digits after the decimal that Mifos will carry for the currency.

This setting interacts with the rounding mode settings: Rounding mode for currencyRounding mode for repayments, and Rounding mode for final payment.

While most MFIs use a value that represents the currency's finest level of precision, some do not. For example, the Tunisian dinar's smallest denomination is the milem, which is 1/1000 of a dinar. Instead of setting AccountingRules.DigitsAfterDecimal to 3, which would represent the dinar's finest level of precision, a Tunisian MFI might set AccountingRules.DigitsAfterDecimal to 2 (1/100 of a dinar).

Property name: AccountingRules.DigitsAfterDecimal
Mutability: Always
Options: 0 - 5
Default: 1

Example: If AccountingRules.CurrencyCode=USD and AccountingRules.DigitsAfterDecimal=2, the number of digits Mifos will carry represents the currency's finest level of precision (1/100 of a dollar, or a penny).

If you want to set a different digits after decimal that Mifos will carry for an additional currency, set another property with the currency code in the property name.  For example, if Mifos has been configured with an additional currency LBP, to set a different digits after decimal that Mifos will cary for LBP, use the property name AccountingRules.DigitsAfterDecimal.LBP.
Number of digits after decimal for interest

The number of digits after the decimal that Mifos will carry for interest.

Property name: AccountingRules.DigitsAfterDecimalForInterest
Mutability: Always
Options: 0 - 5
Default: 5

If you want to set a different digits after decimal that Mifos will carry for interest in an additional currency, set another property with the currency code in the property name.  For example, if Mifos has been configured with an additional currency LBP, to set a different digits after decimal for interest that Mifos will cary for LBP, use the property name AccountingRules.DigitsAfterDecimalForInterest.LBP.

 
Number of digits after decimal for cash flow validations

The number of digits after the decimal that Mifos will carry for cash flow warning threshold.

Property name: AccountingRules.DigitsAfterDecimalForCashFlowValidations
Mutability: Always
Options: 0 - 2
Default: 2
 
Maximum interest rate

The maximum allowable interest rate.

Unless you're advised otherwise by a Mifos specialist, use the default value for this setting (999).

Property name: AccountingRules.MaxInterest
Mutability: Always
Options: 0 - 999
Default: 999 (recommended)

ExampleAccountingRules.MaxInterest=999 means that the interest rate Mifos uses for its calculations can be as high as 999%.

 
Minimum interest rate

The minimum allowable interest rate.

Unless you're advised otherwise by a Mifos specialist, use the default value for this setting (0).

Property name: AccountingRules.MinInterest
Mutability: Always
Options: 0 - 999
Default: 0 (recommended)

ExampleAccountingRules.MinInterest=0 means that the interest rate Mifos uses for its calculations can be as low as 0%.

Minimum Cash Flow Threshold

The minimum allowable cash flow threshold

Property name: AccountingRules.MinCashFlowThreshold
Mutability: Always
Options: 0 - 99
Default: 0

ExampleAccountingRules.MinCashFlowThreshold=0 means that the minimum allowed cash flow threshold for a loan product is 0.

Minimum Cash Flow Threshold

The maximum allowable cash flow threshold

Property name: AccountingRules.MaxCashFlowThreshold
Mutability: Always
Options: 0 - 99
Default: 99

ExampleAccountingRules.MaxCashFlowThreshold=99 means that the maximum allowed cash flow threshold for a loan product is 99.

Minimum Repayment Capacity
The minimum allowable Repayment Capacity.
 
Property name: AccountingRules.MinRepaymentCapacity
Mutability: always
Options: 150 - 1000
Default:: 150
 
Example: AccountingRules.MinRepaymentCapacity=150 means that the minimum allowed repayment capacity for a loan product is 150.
Maximum Repayment Capacity
The maximum allowable Repayment Capacity.
 
Property name: AccountingRules.MaxRepaymentCapacity
Mutability: always
Options: 150 - 1000
Default:: 1000
 

Example: AccountingRules.MaxRepaymentCapacity=1000 means that the maximum allowed repayment capacity for a loan product is 1000.

Minimum Indebtedness Ratio
The minimum allowable Indebtedness Ratio.
 
Property name: AccountingRules.MinIndebtednessRatio
Mutability: always
Options: 0 - 50
Default:: 0
 

Example: AccountingRules.MinIndebtednessRatio=0 means that the mimimum indebtedness ratio for a loan product is 0.

Maximum Indebtedness Ratio
The maximum allowable Indebtedness Ratio.
 
 
Property name: AccountingRules.MaxIndebtednessRatio
Mutability: always
Options: 0 - 50
Default:: 50
 

Example:AccountingRules.MaxIndebtednessRatio=50 means that the maximum indebtedness ratio for a loan product is 50.
 

Rounding mode for currency

How Mifos rounds currency amounts.

This setting interacts with Number of digits after decimal.

Property name: AccountingRules.CurrencyRoundingMode
Mutability: Always
Options: HALF_UP, FLOOR, CEILING
Default: HALF_UP

Example: Assuming that Number of digits after decimal is set to 1, a value of...

  • HALF_UP means that if the discarded digit is 5 or greater, the next digit is rounded up. 42.45 rounds to 42.5. 42.44 rounds to 42.4.
  • FLOOR rounds the amount down to the nearest digit even if the discarded digit is 5 or greater. 42.45 rounds to 42.4.
  • CEILING means that if the discarded digit is anything but zero, the next digit is rounded up. 42.41 rounds to 42.5.
 
Rounding mode for repayments

How Mifos rounds repayment amounts when it calculates repayment schedules except for the last scheduled repayment.

This setting interacts with Number of digits after decimal.

Property name: AccountingRules.InitialRoundingMode
Mutability: Always
Options: HALF_UP, FLOOR, CEILING
Default: HALF_UP

Example: Assuming that Number of digits after decimal is set to 2, a value of...

  • HALF_UP means that if the discarded digit is 5 or greater, the next digit is rounded up. 42.485 rounds to 42.49. 42.481 rounds to 42.48.
  • FLOOR rounds the amount down to the nearest digit even if the discarded digit is 5 or greater. 42.486 rounds to 42.48.
  • CEILING means that if the discarded digit is anything but zero, the next digit is rounded up. 42.481 rounds to 42.49.
 
Rounding precision for repayments

The decimal place repayments are rounded to when Mifos calculates the loan repayment schedule.

The precision you use must be equal to or less precise than what you specify for Number of digits after decimal. This setting does not affect the last repayment use Rounding precision for final payment instead.

Property name: AccountingRules.InitialRoundOffMultiple
Mutability: Always
Options: 1, 0.5, 0.1, 0.01, 0.001
Default: 1

Example: If the currency is...

  • INR, a value of 1 rounds to the closest whole rupee.
  • GBP, a value of 0.5 rounds to the closest 50 pence.
  • USD, a value of 0.1 rounds to the closest dime. If Number of digits after decimal is set to 1, this is the limit of precision, even though this currency has a smaller denomination (the penny).

How rounding interacts with Number of digits after decimal: The value you use for Rounding precision for repayments cannot be more precise than what you use for Number of digits after decimal. For example, you cannot specify 2 for Number of digits after decimal and 0.001 (which requires three digits after the decimal) for Rounding precision for repayments. You can specify 3 forNumber of digits after decimal and 0.01 for Rounding precision for repayments. Note that in this latter situation, the amounts stored in the database will use three decimal places but the amounts that you view in the Mifos user interface will use two.

If you want to set a different Initial Round Off Multiple in an additional currency, set another property with the currency code in the property name.  For example, if Mifos has been configured with an additional currency LBP, to set a different Initial Round Off Multiple, use the property name AccountingRules.InitialRoundOffMultiple.LBP.
Rounding mode for final payment

How Mifos rounds the final scheduled repayment.

See Rounding rules for loan payment schedules for a discussion of why you may choose to use a different rounding mode for the final repayment versus other repayments.

Property name: AccountingRules.FinalRoundingMode
Mutability: Always
Options: HALF_UP, FLOOR, CEILING
Default: CEILING

Example: Assuming that Number of digits after decimal is set to 2, a value of...

  • HALF_UP means that if the discarded digit is 5 or greater, the next digit is rounded up. 42.485 rounds to 42.49. 42.481 rounds to 42.48.
  • FLOOR rounds the amount down to the nearest digit even if the discarded digit is 5 or greater. 42.486 rounds to 42.48.
  • CEILING means that if the discarded digit is anything but zero, the next digit is rounded up. 42.481 rounds to 42.49.
 
Rounding precision for final payment

The decimal place the final repayment is rounded to when Mifos calculates the loan repayment schedule.

The decimal place you choose can't have a greater precision than what you specify for Number of digits after decimal. In addition, the degree of precision used for the final repayment cannot be greater than what you use for the other repayments see the examples.  Also, the setting must be greater or equal precision than InitialRoundingOffMultiple.

Property name: AccountingRules.FinalRoundOffMultiple
Mutability: Always
Options: 1, 0.5, 0.1, 0.01, 0.001
Default: 1

Example: If the currency is...

  • INR, a value of 1 rounds to the closest whole rupee.
  • GBP, a value of 0.5 rounds to the closest 50 pence.
  • USD, a value of 0.1 rounds to the closest dime. If Number of digits after decimal is set to 1, this is the limit of precision, even though this currency has a smaller unit (the penny).

How rounding interacts with Number of digits after decimal: The value of Rounding precision for repayments cannot be more precise than that of Number of digits after decimal. For example, you cannot specify 2 for Number of digits after decimal and0.001 (which requires three digits after the decimal) for Rounding precision for repayments. You can specify 3 for Number of digits after decimal and 0.01 for Rounding precision for repayments. Note that in this latter situation, the amounts stored in the database will use three decimal places but the amounts that you view in the Mifos user interface will use two.

About the precision used for final repayments: The precision you use for Rounding precision for final payments must be equal to or less precise than the precision you use for Rounding precision for repayments. For example, if you set Rounding precision for repayments to 0.5, you can only set Rounding precision for final repayments to 0.5 or 1 you can't set Rounding precision for final repayment to a finer degree of precision (0.1, 0.01, 0.001).

If you want to set a different Final Round Off Multiple in an additional currency, set another property with the currency code in the property name.  For example, if Mifos has been configured with an additional currency LBP, to set a different Final Round Off Multiple, use the property name AccountingRules.FinalRoundOffMultiple.LBP.

 

Calendar

In Mifos, the fiscal year starts on January 1 and ends December 31. Use the Calendar section ofapplictionConfiguration.custom.properties to configure other aspects of the MFI's calendar, including which days are working days and how repayment meetings should be handled if a meeting falls on on a non-working day.

 
Working days

The days of the week that are workdays.

Mifos uses the first day you specify as the start of the fiscal week. It uses the days you do not specify as non-workdays. You must specify at least one workday. Each workday you specify should be separated by a comma with no spaces on either side.

Property name: FiscalCalendarRules.WorkingDays
Mutability: Always
Options: MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
Default: MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY

ExampleFiscalCalendarRules.WorkingDays=MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY causes Mifos to treat Monday as the start of the fiscal week, for reporting purposes, and Sunday as a non-workday.

 
Schedule for meeting on non-working day

How Mifos handles rescheduling a repayment or meeting when it falls on a non-workday.  There is still an existing issue here with same_day option.  Issue MIFOS-2226.

This property applies to non-workdays.  Mifos can either schedule the repayment or meeting for the same day (regardless of it being a non-workday), the next workday, or the next scheduled meeting or repayment.

Property name: FiscalCalendarRules.ScheduleMeetingIfNonWorkingDay
Mutability: Always
Options: same_day, next_working_day, next_meeting_or_repayment
Default: same_day

Example: If FiscalCalendarRules.ScheduleMeetingIfNonWorkingDay=same_day, repayments or meetings that fall on a non-workday will still be scheduled for that day. If the value is set to next_working_day, a repayment or meeting that falls on a non-workday will be rescheduled for the next workday.

 

Clients

Use the Client section of applicationConfiguration.custom.properties to refine how Mifos represents the MFI's hierarchy and control which entities can apply for loans.  This section also has settings on client information.

Center hierarchy exists

Does the MFI have one or more centers in its hierarchy? By default, Mifos assumes that an office is at the top of the hierarchy, followed by centers, groups, then clients.

Property name: ClientRules.CenterHierarchyExists
MutabilityTRAPDOOR
Options: true (yes), false (no)
Default: true

ExampleClientRules.CenterHierarchyExists=false causes Mifos to use a hierarchy of 1. Office, 2. Groups, and 3. Clients instead of 1. Office, 2. Centers, 3. Groups, and 4. Clients. In other words, with a value of false, Center is excluded from Mifos' representation of the MFI's hierachy. Options involving centers are also removed from the Mifos user interface. For example, the Create new center option is removed from the left navigation bar of the Clients & Accounts tab. 

Client can exist outside group

Can clients be independent of groups or must all clients belong to a group? By default, Mifos assumes that a new client can be created without that client needing to be part of a group. Instead, the client need only belong to an office.

Property name: ClientRules.ClientCanExistOutsideGroup
MutabilityTRAPDOOR
Options: true (yes), false (no)
Default: true

ExampleClientRules.ClientCanExistOutsideGroup=true allows you to create a new client that is assigned directly to an office instead of to a group, then to an office. To use this capability, when you are prompted to select a group in the new client creation process, click the link that reads "Click here to continue if group membership is not required for your client".

 
Group can apply for loan

Can groups apply for loans in addition to clients or can only clients apply for loans? By default, Mifos assumes that the entity applying for a loan can be a group or a client.

Property name: ClientRules.GroupCanApplyLoans
MutabilityTRAPDOOR
Options: true (yes), false (no)
Default: true

ExampleClientRules.GroupCanApplyLoans=true allows groups, as well as clients, to apply for loans.

Minimum Age for New Clients

Set the minimum age for new clients entered into Mifos.  Setting this value to 0 means a minimum age will not be enforced.

Property name: ClientRules.MinimumAgeForNewClients
Mutability: Always
Options: 0 -150
Default: 0

ExampleClientRules.MinimumAgeForNewClients=30 when entering a client, if their birthdate shows the client is younger than 30 years old, an error message will be displayed and the client cannot be entered.

Maximum Age for New Clients

Set the maximum age for new clients entered into Mifos.  Set this value to 150 if you do not want this enforced.

Property name: ClientRules.MaximumAgeForNewClients

Mutability: Always
Options: 0 -150
Default: 0

ExampleClientRules.MaximumAgeForNewClients=60 when entering a client, if their birthdate shows the client is older than 60 years old, an error message will be displayed and the client cannot be entered.

Process

Use the Process section in applicationConfiguration.custom.properties to include or exclude optional steps when Mifos creates clients, groups, and accounts.  These settings will be DEPRECATED in the release after Mifos 2.0.

Client pending approval state enabled
Property name: ProcessFlow.ClientPendingApprovalStateEnabled
MutabilityTRAPDOOR
Options: true (yes), false (no)
Default: true

Workaround for setting to false In the Mifos database, execute the following command: UPDATE CUSTOMER_STATE SETCURRENTLY_IN_USE=0 WHERE STATUS_ID=2;

To approve a newly added client:

  1. After you create a client in Mifos, click View client details now > Edit client status.
  2. In the <client name> - Change status pane, select Active then enter a Note.
  3. Click Preview > Submit
 
Group pending approval state enabled

If you use the default setting (true), an approval step is added to the process of adding a new group. Specifically, instead of a newly added group going straight to Active status, it goes to an Application Pending Approval status. Because of a problem with this property (issue 2252), don't use the properties file to set it to false. Instead, use the workaround below.

Property name: ProcessFlow.GroupPendingApprovalStateEnabled
MutabilityTRAPDOOR
Options: true (yes), false (no)
Default: true

Workaround for setting to false In the Mifos database, execute the following command: UPDATE CUSTOMER_STATE SETCURRENTLY_IN_USE=0 WHERE STATUS_ID=8

To approve a newly added group:

  1. After you create a group in Mifos, click View group details now > Edit group status.
  2. In the <group name> - Change status pane, select Active and enter a Note.
  3. Click Preview > Submit.
Loan pending approval state enabled

If you use the default setting (true), loans will go into pending approval after it is created. If you set this to false, loans are directly approved. We do not recommend this

Property name: ProcessFlow.LoanPendingApprovalStateEnabled
MutabilityTRAPDOOR
Options: true (yes), false (no)
Default: true

Workaround for setting to false In the Mifos database, execute the following command: UPDATE ACCOUNT_STATE SETCURRENTLY_IN_USE=0 WHERE ACCOUNT_STATE_ID=2

To approve a newly created loan account:

  1. After you create the account in Mifos, click View loan account details now > Edit account status.
  2. In the <account name> - Change status pane, select Application Approved then enter a Note.
  3. Click Preview > Submit.
Savings pending approval state enabled

If you use the default setting (true), an approval step is added to the process of creating a new savings account for a group or client. Because of a problem with this property (issue 2252), don't use the properties file to set it to false. Instead, use the workaround below.

Property name: ProcessFlow.SavingsPendingApprovalStateEnabled
MutabilityTRAPDOOR
Options: true (yes), false (no)
Default: true

Workaround for setting to false In the Mifos database, execute the following command: UPDATE ACCOUNT_STATE SETCURRENTLY_IN_USE=0 WHERE ACCOUNT_STATE_ID=14

To approve a newly created savings account:

  1. After you create the account in Mifos, click View savings account details now > Edit account status.
  2. In the <account name> - Change status pane, select Application Approved then enter a Note.
  3. Click Preview > Submit.
 

Reporting

Use the Reporting section in applictionConfiguration.custom.properties to customize some of the reporting- and repayment-related capabilities in Mifos.

Upload Storage Directory

Allows Mifos to upload both admin documents and report templates at a non-volatile location. A custom upload storage directory is reflected on the System Information page.

Property name: GeneralConfig.UploadStorageDirectory
Mutability: Always
Options: $HOME stands for home directory of the logged in user  character '/' between sub-directories, or an absolute path C:/reports (use forward slash for paths on windows)
Default: $HOME/.mifos/uploads

Example:  GeneralConfig.UploadStorageDirectory=C:/reports 

Allow backdated transactions

Allows Mifos to accept transactions dated earlier than the current date.

Property name: BackDatedTransactionsAllowed
Mutability: Always
Options: true (yes), false (no)
Default: true

ExampleBackDatedTransactionsAllowed=true allows users to enter transactions that have dates earlier than the date on which the transactions are entered in Mifos. If the value is set to false, transactions must use the current date.

Collection sheet data generation

This setting has no effect--it works with a collection sheet batch job that was disabled in Mifos version 1.1. When the collection sheet batch job is enabled, this setting allows you to generate collection sheet data for a future meeting. The value you specify represents the difference (in days) between the current day and the future meeting day for which you want to generate collection sheet data.

Property name: CollectionSheet.DaysInAdvance
Mutability: Always
Default: 1

Example: If you set CollectionSheet.DaysInAdvance to 1, the batch job will generate collection sheet data for tomorrow's meetings (1 day from today). If you set it to 2, it will generate data for meetings that happen the day after tomorrow (2 days from today).

Branch Manager name

This setting is currently invalid.

Property name: RolesAndPermissions.BranchManager.RoleName

Import Transaction Order

If you are using a plugin in Mifos that needs an order of accounts set for which the transactions should be applied, use this setting. 

This example is for the MPESA plugin

Property name: ke.co.safaricom.MPesaXlsImporter.ImportTransactionOrder
Mutability: Always
Default: none

Example:  ke.co.safaricom.MPesaXlsImporter.ImportTransactionOrder = AL1, NL1, SP1

where AL1, NL1, and SP1 are short names of the products to which you want to apply the transactions to. 

 
MPESA Max Disbursal Limit

If you are using the MPESA plugin in Mifos for Loan Disbursals, MPESA has a maximum limit for Loan Disbursals.  The default is at 50000 right now.

Property name: MPESA.DisbursalMax
Mutability: Always
Default: 50000

Example: MPESA.DisbursalMax=50000
 

Batch Jobs

Use the Batch Jobs section in applicationConfiguration.custom.properties to customize the batch job settings in Mifos.

 

Batch Size for Batch Jobs

You can set Hibernate cache size for batch jobs. 

Property name: GeneralConfig.BatchSizeForBatchJobs
Mutability: Always
Default: none

Example:  GeneralConfig.BatchSizeForBatchJobs = 50
 
Record Committing Size for Batch Jobs
This is the size of number of accounts to be stored in the database cache before they are committed
 
Property name: GeneralConfig.RecordCommittingSizeForBatchJobs
Mutability: Always
Default: none

Example:  GeneralConfig.RecordCommittingSizeForBatchJobs = 1000
 

Adjusting Session Timeout

By default, Mifos gives users up to 30 minutes of inactivity before it times out their sessions and requires them to log in again. To change this value, edit the following section in the deployment descriptor file, web.xml, which ships in the Mifos WAR at WEB-INF:

		<session-config>
  <session-timeout>30</session-timeout>
</session-config>
 

Scheduling Batch Jobs

The data that you and other Mifos users work with is maintained by batch jobs, which are a series of scripts that are executed on the computer where Mifos is installed. These scripts perform calculations, act on the Mifos database, and ensure, for example, that the repayment information entered in Mifos today is reflected in the reports that are generated tomorrow. Keep the following tips in mind with regard to batch jobs:

  • By default, the Mifos batch jobs are scheduled to run every day at midnight.
  • For the batch jobs to run, the computer where Mifos is installed must be running.
  • If a user is logged in when the batch jobs start to run, they will be automatically logged out. No logins are permitted until the batch jobs complete.
  • Reports that are generated before the batch jobs are complete will not reflect the results of the batch jobs.

Batch jobs are scheduled in task.xml. In Mifos version 1.3 and later, task.xml is placed in one of the MifosConfigurationLocations. In earlier versions, task.xml can be customized by editing the Mifos WAR (WEB-INF/classes/org/mifos/framework/util/resources/batchjobs).

There is a 'Batch Jobs' page to display information about configured batch jobs. You can check the latest batch job status, its next start time and trigger details. Moreover, you can start selected batch jobs on-demand.

See Managing Batch Jobs in Mifos for more information.

Customizing your Database Connection

Mifos version 1.2.x and older

You can customize various aspects of your database connection, such as which host to connect to, the database name, your user name and password, as well as the connection pool settings, by placing a file called deploymifosDB.properties on the app server classpath while Mifos is not running. A sample of this file is in the Mifos install package, in the conf folder.

Note: The file deploymifosDB.properties is based on hibernate.properties. If the latter changes in a future release of Mifos, your copy of deploymifosDB.properties may also require changes.

Mifos versions greater than 1.2.x and upgrades

See MigratingToPostV12DatabaseConfiguration for modifying your database connection if you upgrade from version 1.2.x to 1.3.x (or later). See LocalPropertiesFile if you've started with Mifos version 1.3.x (or later, including trunk development builds).

 

Database-Configured Settings

Some Mifos features are configured directly in the database. The settings described below are located in the config_key_value_integertable in the Mifos schema:

  • Loan Schedule Independent of Meeting (LSIM) allows loan payments to be scheduled independent of the meeting schedule. This feature is disabled by default. Note that this feature has some known issues (see issue 2005). To enable this feature, set the flag forrepaymentSchedulesIndependentOfMeetingIsEnabled to 1 and apply your change.
  • The value for Minimum Days Between Disbursal and First Repayment is used when Loan Schedule Independent of Meeting is enabled. This setting determines how tight the interval can be between disbursing a loan and requiring the first repayment for same. The default value is 1, which ensures that a loan disbursal and the first repayment can never be less than one day apart.
  • The value for Maximum Days Between Disbursal and First Repayment Day is used when Loan Schedule Independent of Meeting is enabled. This setting limits the number of days that can pass between disbursing a loan and requiring the first repayment for same. The default value is 365.
  • Loan with Individual Monitoring can be used when a group opens a loan account. It lets you specify, at disbursal time, how much of the total loan amount each group member will receive. This feature is disabled by default. To enable it, set the flag forloanIndividualMonitoringIsEnabled to 1.
 
 

Before your users access Mifos...

After you define the administrative settings that can only be configured when Mifos is not running (including the one-time settings), it's time to configure some of the settings on the Admin tab in Mifos. Not every setting on the Admin tab is described here, just the fundamental ones that must be configured before another Mifos system user defines items like products, clients, groups, accounts, meeting schedules, and surveys.

 

Starting Mifos

To access the settings on the Admin tab, you need to start the Mifos application.

To start Mifos:

  1. Execute the Tomcat script named startup.sh/.bat in CATALINA_HOME/bin (for example, C:\Program Files\Apache Software Foundation\Tomcat 6.0\bin), or if Tomcat was installed as a service on Windows, navigate to Control Panel > Administrative Tools >Services to verify that the status of the Mifos service is Started.
  2. Next, visit http:///localhost:8080//mifos in a web browser.
  3. Enter mifos as your Username and testmifos as your Password.
 

Customizing the User Interface

The options in the Data Display and Rules group allow you to customize certain labels and list-box items, hide or require certain fields, and define new fields for additional information you want to collect.

 

User Interface Labels

To define labels:

  1. On the Admin tab, click the Define labels link under Data Display and Rules.
  2. Edit the label name you want to change.
  3. Click Submit.
 

List Box Items (Look-Up Options)

You can use Define Look-Up Options to populate the contents of list boxes. Once you add a look-up option and Mifos is in production, you should not remove it because it may be in use. Additional look-up options can be added after Mifos is in production.

To create new list box items or edit existing items:

  1. On the Admin tab, click Define Look-up Options.
  2. Add or edit the options.
  3. Click Submit
 

Required and Hidden Fields

Use the Define mandatory/hidden fields link to designate which fields are viewable in various parts of Mifos, which are required, and which are hidden. Some sites that have interfaced with other systems have found the External id field useful as a required field.

To make a field viewable, required, or hidden:

  1. On the Admin tab, click the Define mandatory/hidden fields link.
  2. Make your selections. If both the Hidden and Mandatory check boxes are cleared, the field is viewable and users can supply information for it, but it is not required. If the Mandatory check box is selected, a user cannot submit their changes without filling in that option. If Hidden is selected, the field is not within view.
  3. Click Submit.
 

Create Additional Fields

Use the Define additional fields option to create a new user interface option, for example, to collect information from clients that isn't already requested by Mifos. Use the View additional fields option to see which new options have already been created.

To create a new field:

  1. On the Admin tab, click Define additional fields.
  2. Select the Mifos category under which your new field will appear. If you select Clients, for example, your new field will appear in the user interface options for new client creation.
  3. Provide text for the new label and whether the field's value is numerical or text. Optionally, you can also designate whether the field is mandatory and you can provide a default value for the option.
  4. Click Preview > Submit.
  5. To view your new field, click View additional fields then select the category.
 

Defining Office Hierarchy

Office hierarchy is Mifos' view of how your MFI is organized. Mifos uses the office hierarchy information you provide for a wide variety of essential actions, including creating users defining new clients and groups, managing transactions, and reporting. At minimum, Mifos requires two levels of hierarchy: a Head Office, provided by default (Mifos HO), and at least one Branch Office. At maximum, there can be five levels: Head Office, Regional Office, Sub-Regional Office, Area Office, and Branch Office.

Defining office hierarchy in Mifos involves first removing office types that aren't represented in your organization and then adding those offices that are.

To remove office types:

  1. On the Admin tab in Mifos, click the View office hierarchy link under Offices.
  2. Clear the check box(es) for office types that don't represent your MFI's organization. For example, if one or more Division offices aren't in your oganization's structure, clear the Division check box. You cannot remove Head Office and Branch Office as office types. They are required.
  3. Click Preview > Submit.

To add offices:

  1. On the Admin tab, click the Define a new office link under Offices.
  2. Provide information for the new office. Any office types you removed in the above procedure are absent from the Office type list. You can only have one Head Office.
  3. Click Preview > Submit.
 

Creating Roles

After you define your MFI's office hierarchy in Mifos, it's time to create roles, which are collections of actions that a user can perform in Mifos.

To create a role:

  1. On the Admin tab, click Manage roles and permissions under System users.
  2. Note that the Admin role is the only pre-defined role. Click the new Role link to create a new role.
  3. Provide a Role Name and select actions or groups of actions that a person can perform in this role.
  4. Click Preview > Submit.
 

Creating Users

Once you define roles in Mifos you can create the users who will be assigned those roles. There are two types of users in Mifos: Loan Officers or Non-Loan Officers. A Loan Officer can only belong to a Branch Office.

To create a user:

  1. On the Admin tab, click Define new system user under System users.
  2. Click the office to which the user will belong.
  3. Provide information for the user, including their User Hierarchy (Non-Loan Officer or Loan Officer).
  4. Add Role(s) that the user will perform.
  5. Click Preview > Submit.
 

Configuring Payment Types

Mifos uses Cash as the default value for accepted payments.

To specify a different or additional payment type: On the Admin tab under Data Display and Rules, click Define Lookup options.  Payment Modes can be added or changed here.

To specify what payment types are accepted for each type of transaction: On the Admin tab under Organization Preferences, click Define accepted payment types.

 

Configuring Payment Order

Most MFIs are applied following loan repayment order:
1. Penalty
2. Fees
3. Interest
4. Principal
as is the standard in banking solutions.

MFIs, which have a need to modify this repayment order, can do it by configure this repayment order in Mifos config file.

After enabling this option, all overdue interests will be paid first, before principal amount.

To configure repayment order open applicationConfiguration.custom.properties file and set:

OverdueInterestPaidFirst=true (always repay overdue interest first)
OverdueInterestPaidFirst=false (standard payment order)

 

Setting Lateness and Dormancy Definitions

Before loan and savings products can be defined, the default loan lateness and savings dormancy definitions should be reviewed and changed, if necessary. Both of these settings are configured on the Admin tab via the View lateness/dormancy definition link.

  • The loan lateness definition is the number of days of non-payment that can pass before Mifos changes a loan account's status fromActive in good standing to Active-Bad Standing. The default value is 10 days.
  • The savings dormancy definition is the number of days of inactivity after which Mifos changes the status of a savings account fromActive to On Hold. The default value is 30 days.
 

Defining Holidays

So that it can correctly calculate repayment schedules, Mifos needs to know what your MFI's holidays are and how you would like repayments handled if a repayment happens to fall on a holiday. Mifos can either schedule the repayment for the same day (regardless of it being a holiday), the next workday, or the next scheduled meeting or repayment. Note that in Mifos, holidays are different from non-workdays.

To define a holiday:

  1. On the Admin tab, click Define new holidays under Organization Preferences.
  2. Provide information about the holiday and select a Repayment Rule.
  3. Click Preview > Submit.
 

Information on Reporting and PPI Surveys

As a system administrator you may also be reponsible for setting up reports for your users and adding a PPI survey to your deployment. Use the following links for more information:

  • Reporting in Mifos: Describes how to use BIRT (Business Intelligence Reporting Tools) to build and upload non-standard reports.
  • PPI Survey Conventions: Adding a PPI survey must be done at the source code level and requires assistance from a Mifos specialist. Use this link to learn about some of the requirements.

Configuring Mifos to work with Cloud Foundry

Cloud Foundry is an open platform as a service, providing a choice of clouds, developer frameworks and application services. You can place there your application so others may see it in web. Thanks to Cloud Foundry you don't have to worry about infrastructure such as servers. If you want to provide data access to your database created in cloud, you need to  configure your system variables.

There is a JSON array under VCAP_SERVICES that has complete information for the bound services. System variable which contains JSON document looks like following:

export VCAP_SERVICES='{"mysql-5.1":[
    {
        "name":"mysql-4f700",
        "label":"mysql-5.1",
        "plan":"free",
        "tags":["mysql","mysql-5.1","relational"],
        "credentials":{
            "name":"mifos",
            "hostname":"localhost",
            "host":"localhost",
            "port":3306,
            "user":"mifos",
            "username":"mifos",
            "password":"mifos"
        }
    },
]}'

AttributeExplanation
nameThe name of database
hostname/hostDatabase address
portNumber of port
username/userName of user
passwordPassword

 

Note: Variable VCAP_SERVICES has priority (before properties).