mizan.dev
All work

FinTech · Microfinance

Microfinance ERP

Full ERP for a microfinance institution — double-entry accounting, HRM with payroll automation, real-time WebSocket payment confirmations, and role-based access for 4 user types.

LaravelWebSocket (Reverb)RedisMySQLPHP 8

Accounting

Double-entry

User roles

4

Realtime

WebSocket

Modules

2 core

Overview

A microfinance institution needed a purpose-built ERP to manage its financial operations and human resources. The system had to be reliable enough for financial record-keeping, flexible enough for multiple branch roles, and fast enough for high-frequency accounting and HR API calls.

Accounting Module

Built a complete double-entry accounting system from scratch: chart of accounts, journal entries with debit/credit validation, general ledger, trial balance, and financial statement generation. Every transaction is immutable once posted — corrections go through reversing journal entries, preserving a full audit trail.

Financial statements (income statement, balance sheet, cash flow) are generated on demand. Expensive aggregation queries are cached in Redis so repeated report runs don't hammer the database.

HRM Module

The HR module covers employee profiles, contract management, shift scheduling, and daily attendance tracking via clock-in/out. Leave management supports multiple leave types with an approval workflow.

Payroll is computed automatically at month-end from scheduled shifts, actual attendance, approved leaves, and configured deductions — producing a downloadable payroll register for finance review before disbursement.

Real-Time Payment Confirmations

Payment confirmations (loan disbursements, repayments, fee collections) are broadcast to the relevant branch dashboard in real-time via WebSocket (Laravel Reverb). Staff see payment status updates instantly without refreshing — critical for branches processing dozens of transactions per hour.

Role-Based Access & Audit Logging

Four distinct user roles — branch manager, accountant, HR officer, and admin — each with a scoped permission set enforced at the API and middleware layer. Every state mutation (posting a journal, approving leave, running payroll) is logged with user, timestamp, and before/after values.

Tech Stack

  • Backend: Laravel, PHP 8, MySQL
  • Realtime: Laravel Reverb (WebSocket), Redis caching
  • Auth: Role-based access control (RBAC)