Interesting Tech Questions

Summary

The project offers some unique and interesting challenges for the technologist:

  • build a system that is easy to run, easy to maintain, and doesn't rely on heavy-duty servers or costly development tools;
  • create a flexibile and wholly extensible architecture that can accomodate new features and interfaces;
  • develop for an industry that operates at the limit of stable electrical grids, having unreliable telecommunications, and for users that may not have used a computer before;
  • work on implementations of the software for both highly distributed operations and highly centralized requirements;
  • develop a banking application for the unique procedures of a microfinance institution including using groups as co-guarantors or pooling repayments.
  • make the software available in dozens of languages, supporting multiple languages, currencies, and display formats.
  • provide a high level of built in parameterization so that customized code bases do not create forks in the source code.
  • handle currency calculations correctly, with proper levels of control over precision and rounding.
  • support work flow flexibility

Some Technical Issues

Distributed Data

MFIs often, but not always have multiple branches. If multiple branches exist, sometimes they are administratively managed by the Area offices, and in really large organizations, the Zonal offices control the area offices. Such management may include various process steps that effect data entry in each entity. In some situations the entire branch operates essentially as an independent entity, managing its own cash flow and loan portfolio. It may receive cash infusions from the head office or not. In other situations the branch is a mere organizational hub, and data is managed centrally.

The branch is sometimes the place where the loan payments (transaction) and savings deposit (transaction) occurs, but most of the time, the transactions all occur in the field. In some situations these most common of all transactions occur via third parties, such as local formally recognized banks.

Because data connectivity can vary from very good to non-existent, the design of the distrubuted data can be challenging. Issues of non-repudiation of transactions, for instance, becomes a key part of the design for larger organizations.

To complicate things, loan histories of clients moving from one branch to another should be available in some format.

Multi-lingual and localization

The specifications start with this short list of languages:

  • English
  • Spanish
  • Arabic
  • French
  • Chinese
  • Hindi

but others are possible.

Because Microfinance is global in scope but not very deep in any one country (excepting a few), almost any country is possible as a client market.

Some links to notes on localization i18n

`Sun Microsystems Internationalization article <http://www.multilingual.com/FMPro?-db=archives&-format=ad%2fselected%5fresults.html&-lay=cgi&-sortfield=magazine%20number&-sortorder=descend&-op=eq&Ad%20Type=reprint&-max=1817529521&-recid=33252&-token=%5bFMP-currenttoken%5d&-find=>`_

Free/Open Source Software Guide to Localization

Currency Internationalization, Multiple Currency and Foreign Exchange

The Introduction of the Euro and the Rounding of Currency Amounts

World Currency and Abbreviations

Unicode/ISO 10646 World Currency Symbols

Useful links but information might or might not be accurate:

Information on number of decimal places used in currencies and other details on their representation

Information which countries have adopted the Euro and when, and what rate was used in converting their previous currencies into the Euro

Font packs which may add some degree of Unicode support to Windows and Mac computers

Lists available Unicode currency symbols(to view this you will need Acrobat Reader)

Tests your browser for support for Unicode currency symbols

Work flow

Because of the variation in workflow at each organization, it is thought that there are a couple of different coding strategies available to the project.

  1. Create a function based application with tasks but very little business logic. Not ideal, but some aspect of this is inevitable.
  2. Create an ERP like system - too much for Microfinance industry.
  3. Create a connection to configured workflow plug-ins or integration. See `Open Source Workflow <http://www.gripopprocessen.nl/index.php?id=35&type=1>`_
  4. Develop a message based system. Use internal addressing, track threads and responses to handle multiple steps, and allow for a variety of processes but minimal pre-coded business logic. You might call this the Lotus Notes approach.

Currency and transactions

All currency and multiple currencies.

Notes on currency calculations and issues of rounding

http://www.boic.com/numfaq.htm Although C/C++'s native numeric data types, Int, Double, Float, Long, etc. work fine in many situations, their underlying binary representation and limited precision present problems that become more apparent as the number of significant digits increases. Thus for example one loses accuracy because of rounding, or worse, results can be grossly in error because of failure to detect the truncation of high-order digits in a calculation that produces an overflow.

Monetary Calculation Pattern - Framework

Posted by: Jason - on August 30, 2004 in response to Message #134439 0 replies in this thread Firstly, as someone who programs for a major financial institution, I can assure you that doubles are not sufficient in all cases, and that using them will denote your solution as naively charming.

Specifically, when one is trying to work with things like, say, accounting cost percentages for deferred fees on 10 million dollar notional balances, the math reaches out beyond sixteen decimal places of precision and can most definately led to rounding errors and discrepancies that can shave not merely pennies, but dollars. Doubles and financial calculations simply do not mix - it is hard to overstress this point. An entry-class Monetary object and library must offer support for BigDecimals. More at http://www.theserverside.com/patterns/thread.tss?thread_id=28063
. he goes on to say... See, for example, Generative Programming by Czarnecki and Eisenecker. Or google various jdk discussion boards for threads on aspects of the Money class, and it's lack in java. The Standard Template Library (STL) of C/C++ may also prove to be an eye-opener, in it's framing and solution of the configurable libraries thoughtspace.