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
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
Backend : Not yet merged
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.
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
View Meeting Information
Sign Off Meeting page
Change the state of the Group
You can access more detailed information about my work here
Unit test was wriiten to test group form
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 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.
-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
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.
-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
What left now is to implement the saving and the loans products in the backend.
- 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
- Pull request (Back-end) : https://github.com/apache/fineract-cn-group/pull/7
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.
- Email : firstname.lastname@example.org
- Github : https://github.com/kengneruphine
- LinkedIn : https://www.linkedin.com/in/tcheukounang-kengne-grace-6a5169124/