IbnKhafagah for Development SINCE 2018
ERP & Business Systems

AKC — Contracts, HR & Accounting ERP

An operating system for a services company running four different contract types at once — individuals, companies, owners’ associations and chalets — each with its own pricing, invoicing and field-service cycle, wired into double-entry accounting, HR and a vehicle fleet.

  • Client AKC
  • Delivered 2026
  • Our role Full analysis and build: database, admin panel, and the API for the technicians’ app

Overview

Individual, company, association and chalet contracts with offers and payments; journal entries and chart of accounts; vehicle fleet with faults and fuel; payroll, loans, penalties and leave.

01The challenge

The client sells the same service four different ways, each with its own rules: individual contracts priced per visit, company contracts per building, association contracts per unit with a recurring split invoice, and chalets seasonally. Forcing them into a single contracts table would have produced a table half of whose columns are always empty.

On top of that, every fault report runs a chain — intake, technician assignment, site visit, spare parts, customer rating — and each step creates a financial obligation that must reach both the ledger and the technician’s monthly statement.

02What we built

We split each contract type into its own table, screens and pricing logic, with a shared layer for payments, notes and price offers. Fields stayed meaningful, and no type had to work around another type’s constraints.

The finance side runs on a real chart of accounts and journal entries, with an account-mapping layer that decides which account receives which movement — so invoices, extracts, salaries and fuel all post their entries automatically. Balance sheet, profit and loss, customer/supplier/employee statements and trial balance are all derived from there.

Because technicians work on site, they got their own API: today’s jobs, photo and invoice upload from the field, notes, and live location tracking — with real-time push over WebSockets and Firebase.

03The outcome

The four contract types are now run from one system without any of them being forced into another’s mould, and recurring association invoices are issued and split across units automatically instead of being recalculated by hand every month.

The financial side closes: every field cost — a spare part, fuel, a loan, a penalty — has its entry and its account, so any customer, employee or supplier statement is ready on demand instead of being assembled from scattered files.

◆

What the system does

The modules that were delivered and put into daily use.

  • 01

    Four independent contract types (individuals, companies, associations, chalets) with price offers, payments and notes on each.

  • 02

    A fault lifecycle: intake, technician assignment, site visit, spare parts, attachments and photos, customer rating and a full step log.

  • 03

    Double-entry accounting: chart of accounts, account groups, journal entries and a mapping layer that routes each movement type.

  • 04

    Ready financial reports: trial balance, balance sheet, profit and loss, and customer, supplier and employee statements.

  • 05

    HR: payroll and extracts, loans and penalties, leave, dues, custody items and per-employee attachments.

  • 06

    Vehicle fleet: holders, faults, fuel and oil, mileage records, attachments and notes.

  • 07

    Warehousing and custody: items, suppliers, per-item movement history, employee custody and branch stock.

  • 08

    A technicians’ app API: today’s jobs, on-site invoice and photo upload, notes and live location.

  • 09

    Real-time notifications over WebSockets and Firebase, and a system log recording who changed what and when.

◇

Technologies used

What this system is actually built on — not a generic list.

Core

Laravel 10 PHP 8.3 MySQL Blade Livewire

Realtime & Mobile

Laravel WebSockets Pusher Firebase Sanctum

Documents

DomPDF mPDF Maatwebsite Excel QR Code Barcode

Operations

Laravel Telescope Google Auth Guzzle