Business system

Osool Daema Contracting Application

A bilingual contract and client management system for a company operating in Saudi Arabia and the UAE, with automated documents, installments and a client portal.

Osool Daema Contracting Application
Type
Contract & client management system
Domain
Contracting · Saudi Arabia & UAE
My role
Backend developer · system design & development
Stack
Laravel 9 · PHP 8 · MySQL

Overview

This is an end-to-end contract and client management system for Alosool Aldaema, a company operating across Saudi Arabia and the United Arab Emirates. It centralises clients, contracts, installments, payments and document generation.

The system has a full admin panel for the operations team and a client portal for customers. Both are bilingual and support workflows that differ by branch and country.

The challenge

The company issues many contracts, each with its own installments, fees and paperwork, under rules that change between branches and countries. Doing this by hand is slow and error-prone. The system needed to calculate amounts correctly, generate every document automatically, track payments, and keep clients informed.

My role

I designed and built the system's back end and admin panel: the calculation engine, document generation, roles and permissions, and the client portal.

Technical challenges

  • Rules that vary by place. Ratios, fees and document templates differ by branch and country, so nothing could be hard-coded.
  • Accurate calculations. Contract values, installments, VAT, legal fees and other ratios must always add up.
  • Many document types. Contracts, sponsorship forms, receipts, bonds and endorsements are all generated from live data, in more than one language.
  • Controlled changes. Contracts can be credited or rolled back, so changes need admin-level locking and review.

Outcomes

Contracts, installments and payments now live in one system. Documents are generated automatically from contract data, clients receive SMS updates and can follow their contracts online, and managers can see team activity and contract numbers in reports.

Lessons learned

  • Make business rules data, not code, when they change by branch or country.
  • PHP 8 enums keep statuses and types clear and reduce repeated code.
  • Generated documents save the most time when templates are built from the start.
What was built

Admin panel and client portal

Contracts & documents

  • Branch-specific contract generation
  • Sponsorship forms, receipts and bonds
  • Contract credits with admin locking
  • Full contract lifecycle tracking

Finance

  • Calculator for installments, VAT and legal fees
  • Installment schedules and statuses
  • Payments linked to approved contracts
  • Default and branch-specific ratios

Clients & operations

  • Client records, cases and notes
  • SMS notifications to clients
  • Admins, roles and admin reports
  • Branches, countries and nationalities

Client portal

  • Secure login and profile
  • View and download contracts
  • Installment schedules and due dates
  • Payment history
Important decisions

Key decisions and trade-offs

Configurable ratios

Problem
Fees and percentages differ between branches and countries.
Decision
Ratios and pricing rules stored as data, with defaults and branch overrides.
Trade-off
New branches need no code changes; configuration must be validated.

Automatic documents

Problem
Every contract needs several official documents in more than one language.
Decision
Documents generated from contract data using region-specific templates.
Trade-off
Consistent paperwork in seconds; templates must be maintained per region.

PHP 8 enums

Problem
Statuses and types appear across many modules.
Decision
Extensive use of PHP 8 enums for statuses, types and categories.
Trade-off
Clearer, safer code; enum changes touch several modules.
Capabilities

What the system covers

Contracts
Calculator engine
Installments
Payments
Document generation
Sponsors
Client cases
Client notes
SMS notifications
Roles & permissions
Multilingual
Multi-country branches
Next step

Have a technical challenge?

Tell me about your application, your goals and your constraints. We'll work out the right next step together.