Instantly share code, notes, and snippets.

Embed
What would you like to do?
GSoC 2018 Project Documentation

Google Summer Of Code 2018 Report

Organisation : Apache Software Foundation

Project-Name : Group Loan Management Service

Student : Ruphine Kengne

Mentors: Isaac Kamga and Yannick Awasum

Project Description :

This project involves providing a user interface for the group service into fims-web-app. This user interface is to consume the existing endpoints already available in the backend (Fineract-cn-group) and to extend the backend to include support for group savings and group loan functionalities. On the UI, you can create/view/edit group definition, create/view/edit groups, change the group states, view meeting information and sign-off meetings.

  • Link to the Fineract-cn-fims-web-app repository can be found Here
  • Link to the Fineract-cn-group repository can be found Here
  • Link to the Fineract-cn-demo-server can be found Here which starts and provision all services and its Installation Process is available Here

Project Github Repo :

Frontend : Working repository Here
Backend : Working repository Here

Commit made during gsoc :

Frontend :Commits
Backend : Not yet merged

Project Implementation

Work-done on the Frontend (User Interface)

Before creating a group, you have to first create group definition for the group, that is some preliminary information is needed like the minimum and maximum size of the group to be created,description, the estimated number of meetings for the group, the frequency for the meeting and so on. An identifier is provided for the group definition which link the group definition to the group it is defining. After creating the group, you activate the group, view the meeting information generated for that group and sign-off meetings for that group.

Manage Group page



Create Group Definition page

Field to be filled :

  • identifier : it uniquely identify a group definition and its maps to only one group. No two group can have the same group definition identifier
  • Minimal size : specifies the minimum size for the group to be created
  • Maximal size : specifies the maximum size for the group to be created
  • description : Describe the group to be created Cycle details : This is to provide information for the group meeting. Fields required here are
  • Number of meetings : Estimated number of meetings the group is expected to have
  • Frequency : specifies whether the meeting will take place daily, weekly, fortnightly or monthly
  • Adjustment : select either next business day or skip.



Create Group page

Fields to be filled are :

  • identifier : uniquely identifies a group
  • Name : name of the group
  • groupDefinitionIdentifier : the identifier for the group definition which map to this group and has already been created
  • Weekday : select the weekday for the meeting
  • Office : assign an office to the group
  • Assign Employee to group : assign an employee to manage the group
  • Assign Leaders to group : A drop down list of members belonging to the organization will appear from which you will select the leaders for the group
  • Assign Members to group : select the members for the group from the drop down list that will appear ( Including the leaders because a leader is also a member)
  • Group address : Provide the meeting location for the group which include the street, city and the country. Then you submit the form.



Group Dashboard

On the dashboard we also see information like the assigned employee to the group, the office identifier, who created the group and when , and who lastly modified the group. The following are also found on the dashboard page,

  • Meeting Information : click to view meeting information generated by the backend for that group
  • Sign off Meeting : UI filled at the end of a meeting session
  • Activity : keep track of all the activities effectuated on a group like, when was it activated and by who
  • Status : Change the state of the group like activating , closing or reopening



Activate Group

After creating a group, its state is Pending and it has to be activated

View Meeting Information

All meeting sequence generated by the backend are displayed and when clicked,the attendance sheet will be shown

Sign Off Meeting page

This UI is filled at the end of a meeting. Fields like meeting sequence, current cycle, duration have to be filled and the attendance sheet has to be updated.

Change the state of the Group

The state of the group can be changed to Pending, Closed and Active Here is where to change its state
Note : All meetings must be sign off before closing a group

You can access more detailed information about my work here

Unit test was wriiten to test group form

Work-done on the Backend

The existing backend did not have some features which I needed so I had to implement them before carrying out this project

  • Permmittable groupIds for Groups were not implemented in the backend. I had to implement that to allow role and permissions to group on the frontend.Without this feature implemented in the backend and used in the frontend, no UI will be accessed.
  • I implemented Update Group and update Group definition request (endpoints).
  • Design databases for Group savings and Group Loan account

Group Savings

Group savings account is created for saving products already defined in the system;they inherit the rules and default from the saving product definition. A savings account is created only if the product is in an Active state and the group is active too. By default, all members of a group are part of all the savings accounts of the group. The members are allowed to deposit and withdraw from the saving account. When a transaction (deposit/withdrawal) is made, the users selects a member name form a list of approved group members belonging to the group. A group can have multiple accounts of the same or different products but a single account cannot be given to multiple groups. A savings account cannot be deleted. A group saving account has fields like account owner, account name, status,and other fields inherited from the saving product definition.

Tables :

      -m_savings_account
      -m_charge
      -field_officer
      -group
      -m_saving_officer
      -m_saving_officer_assignment
      -m_saving_account_charge_paid_by
      -m_saving_charge
      -m_savings_product_has_m_charge
      -m_savings_product
      -m_savings_transaction
      -payment_detail
      -payment_type
      -tax_group

Group Loans

Grop loan accounts is created for all active products in the system; they inherit the rules and defaults from the loan products definition. A group can have multiple loan accounts but a single account cannot be given to multiple groups. With group loans, the group as a whole is responsible for repayment and fees, and each individual in the group has a designated responsibility to pay their part of the debt.The group provide credit worthiness to all ist members.

Tables :

      -m_charge
      -group
      -m_loan
      -m_loan_charge
      -m_loan_recalculation_details
      -m_loan_charge_paid_by
      -m_loan_disbursement_details
      -m_loan_installment_charge
      -m_loan_interest_recalculation_additional_details
      -m_loan_officer_assignment_history
      -m_loan_overdue_installment_charge
      -m_loan_repayment_schedule
      -m_loan_transaction
      -m_loan_reschedule_request_term_variation_mapping
      -m_loan_term_variation
      -m_loan_topup
      -m_loan_tranche_charges
      -m_loan_tranche_disbursement_charge
      -m_loan_transaction_repayment_schedule_mapping
      -m_loan_product
      -m_fund
      -m_product_loan_configurable_attributes_fields
      -m_product_loan_guarantee_details
      -m_product_loan_recalculation_details
      -m_product_loan_floating_rates
      -m_product_loan_variable_installment_config
      -m_product_loan_charge
      -m_product_loan_variations_borrower_cycle

Work Left

What left now is to implement the saving and the loans products in the backend.

Link to Pull Request

  1. Pull request (front-end) : https://github.com/apache/fineract-cn-fims-web-app/pull/6 : https://github.com/apache/fineract-cn-fims-web-app/pull/7
  2. Pull request (Back-end) : https://github.com/apache/fineract-cn-group/pull/7

Conclusion

Contributing to Apache Fineract CN has been an amazing experience, I have learned a lot of things from the Fineract community and have improved on my engineering especially by working on cloud native applications and Micro-services. I will like to thank Apache Software Foundation for giving me this opportunity and I would like to thank Edward Cable (CEO of Mifos Initiative) for being of great help during the whole GSOC period and finally I will like to thank my mentor (Isaac Kamga and Yannick Awasum) who have guided me through till the end of this summer internship.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment