Android Client (Field Officer App) — Development Plan 2026

Android Client (Field Officer App) — Development Plan 2026

Android Client (Field Officer App) — Development Plan 2026

Repository: openMF/android-client
API Instance: tt.mifos.community (Tenant: dev)
API Docs: Apache Fineract Swagger
Goal: Build complete Client, Loan, and Savings flows with an interactive Field Officer Dashboard


Table of Contents

#

Section

Description

#

Section

Description

1

Client Module — Complete Flow

Client lifecycle: list, create, detail, actions, data tables

2

Loan Module — Complete Flow

Loan lifecycle: products, application, detail, actions, transactions, charges, guarantors, collateral

3

Savings Module — Complete Flow

Savings lifecycle: products, application, detail, actions, transactions, charges

4

Interactive Dashboard

Portfolio summary, action items, quick actions, widgets

5

Supporting Modules

Groups, documents, maker-checker, standing instructions, reporting

6

Screen Inventory — 33 Screens

All screens across Client, Loan, Savings, Dashboard, Supporting

7

Deployment — Multi-Platform Release

Android, iOS, Desktop, Web via KMP

8

One-Click Deployment — Mifos X Launchpad

Self-hosted Fineract backend for testing

9

Development Phases

5 phases from February to September 2026


Current API Inventory

Resource

Count

Details

Resource

Count

Details

Clients

111

Active, Closed, Transfer in progress, Rejected

Loan Products

3

PERSONAL, BRONZE, Business (USD)

Savings Products

2

WALLET, AHORRO (USD)

Offices

5

Head Office, Branch Office 1, Office Of Doraemon, Mobile Office, Telegraph

Charges

10

Client (4), Loan (2), Savings (1), Share (3)

Reports

200+

Table, Pentaho, SMS, Email types


1. Client Module — Complete Flow

1.1 Client List and Search

Feature

API Endpoint

Description

Feature

API Endpoint

Description

List all clients

GET /clients

Paginated list: displayName, accountNo, status, officeId, officeName

Search clients

GET /clients?sqlSearch={query}

Search by name, account number, external ID

Filter by office

GET /clients?officeId={id}

Filter by branch

Filter by status

GET /clients?status={status}

Active (300), Closed (600), Transfer (303,304), Rejected (700)

Sort clients

GET /clients?orderBy={field}&sortOrder={asc/desc}

Sort by name, account number, date

1.2 Client Creation

Feature

API Endpoint

Description

Feature

API Endpoint

Description

Client template

GET /clients/template

officeOptions, staffOptions, savingsProductOptions, genderOptions, clientTypeOptions, clientClassificationOptions, datatables

Create client

POST /clients

officeId, firstname, lastname, mobileNo, dateOfBirth, genderId, externalId, submittedOnDate, activationDate, savingsProductId, staffId

Client with address

POST /clients (with address)

addressTypeId, street, city, stateProvinceId, countryId, postalCode

Client with family

POST /clients (with familyMembers)

familyMembers[]: firstName, relationship, gender, dateOfBirth, profession

Required Fields:

Field

Type

Description

Field

Type

Description

officeId

Integer

Branch office (e.g. 1 = Head Office)

firstname

String

Client first name

lastname

String

Client last name

active

Boolean

true = activate immediately

activationDate

String

Date of activation (dd MMMM yyyy)

dateFormat

String

"dd MMMM yyyy"

locale

String

"en"

Optional Fields:

Field

Type

Description

Field

Type

Description

mobileNo

String

Mobile phone number

dateOfBirth

String

Date of birth

genderId

Integer

Gender code value ID

externalId

String

External system ID

staffId

Integer

Assigned field officer

savingsProductId

Integer

Default savings product

clientTypeId

Integer

Client type code value

clientClassificationId

Integer

Classification code value

submittedOnDate

String

Application submission date

1.3 Client Detail View

Feature

API Endpoint

Description

Feature

API Endpoint

Description

Client details

GET /clients/{clientId}

Full profile: displayName, accountNo, status, timeline, groups, staffName

Client accounts

GET /clients/{clientId}/accounts

loanAccounts[], savingsAccounts[], shareAccounts[]

Client image

GET /clients/{clientId}/images

Profile photo (Base64 or URL)

Upload image

POST /clients/{clientId}/images

Upload profile photo

Client identifiers

GET /clients/{clientId}/identifiers

ID documents (National ID, Passport, etc.)

Client documents

GET /clients/{clientId}/documents

Uploaded documents (PDF, images)

Client notes

GET /clients/{clientId}/notes

Field officer notes

Client charges

GET /clients/{clientId}/charges

Registration Fee, KYC Penalty, Membership Renewal, Test Charge

Client Detail Fields:

Field

Example

Description

Field

Example

Description

id

1

Client internal ID

accountNo

"000000001"

Account number

externalId

null

External system ID

status.value

"Active"

Current status

active

true

Is active

displayName

"John Doe"

Full name

officeId

1

Branch office ID

officeName

"Head Office"

Branch name

staffId

1

Assigned staff ID

staffName

"Field Officer"

Assigned staff name

timeline.activatedOnDate

[2024,1,15]

Activation date

dateOfBirth

[1990,5,20]

Date of birth

gender.value

"Male"

Gender

mobileNo

"1234567890"

Mobile number

1.4 Client Actions

Action

API Endpoint

Description

Action

API Endpoint

Description

Activate client

POST /clients/{clientId}?command=activate

Activate a pending client

Close client

POST /clients/{clientId}?command=close

Close client (closureReasonId, closureDate)

Reject client

POST /clients/{clientId}?command=reject

Reject application (rejectionReasonId, rejectionDate)

Withdraw application

POST /clients/{clientId}?command=withdraw

Withdraw application (withdrawalReasonId, withdrawalDate)

Reactivate client

POST /clients/{clientId}?command=reactivate

Reactivate closed client (reactivationDate)

Transfer client

POST /clients/{clientId}?command=proposeTransfer

Propose transfer to another office (destinationOfficeId, transferDate)

Accept transfer

POST /clients/{clientId}?command=acceptTransfer

Accept incoming transfer

Reject transfer

POST /clients/{clientId}?command=rejectTransfer

Reject incoming transfer

Withdraw transfer

POST /clients/{clientId}?command=withdrawTransfer

Withdraw transfer proposal

Assign staff

POST /clients/{clientId}?command=assignStaff

Assign field officer (staffId)

Unassign staff

POST /clients/{clientId}?command=unassignStaff

Remove field officer

Update client

PUT /clients/{clientId}

Update client details

Delete client

DELETE /clients/{clientId}

Delete pending client

1.5 Client Data Tables

Feature

API Endpoint

Description

Feature

API Endpoint

Description

List datatables

GET /datatables?apptable=m_client

Custom data tables for clients

Read datatable

GET /datatables/{datatableName}/{clientId}

Read custom data for client

Create entry

POST /datatables/{datatableName}/{clientId}

Add custom data entry

Update entry

PUT /datatables/{datatableName}/{clientId}

Update custom data

Delete entry

DELETE /datatables/{datatableName}/{clientId}

Remove custom data

1.6 Client Identifiers

Feature

API Endpoint

Description

Feature

API Endpoint

Description

List identifiers

GET /clients/{clientId}/identifiers

All identity documents

Create identifier

POST /clients/{clientId}/identifiers

documentTypeId, documentKey, description, status

Update identifier

PUT /clients/{clientId}/identifiers/{identifierId}

Update document details

Delete identifier