Case Studies
The British International School
300+ Employees | International School | Faculty, Staff, Administrators, LT Substitutes
Odoo Enterprise 18 on Odoo.SH (Deep HRMS Customization) · HRMS transformation — Employee, Payroll, Contracts, Time Off, Documents, Bank Integration — as foundation for full ERP
Executive Summary
Before
Four disconnected platforms — Yomly for HR, Excel for payroll, PandaDoc for contracts, Google Forms for leave — held together by manual reconciliation. Every payroll cycle ran through five rounds of verification. 1000+ employee documents scattered across drives with no expiry tracking. UAE gratuity, end-of-service, and Standard Chartered Bank exports calculated by hand.
After
- ✓Single ERP backbone replacing Yomly, Excel, PandaDoc, Google Forms, and Eteach — one platform, one data model, one audit trail.
- ✓800+ team hours across 64 tasks delivered in 5 months — 300+ employees, 200+ contracts, and 1000+ documents migrated with zero historical loss.
- ✓Payroll engine with 10+ UAE-compliant allowance and deduction types, automated Standard Chartered Bank file export, and native gratuity and prorated-salary handling.
- ✓Six custom modules (65+ Python files) architected for maintainability, with the Odoo 18 → 19 upgrade path already validated during this implementation.
The Challenge
The school ran its HR across four disconnected platforms — Yomly for employee records, Excel for payroll, PandaDoc for contracts, Google Forms for leave — held together by manual reconciliation. Every payroll cycle demanded five rounds of cross-system verification before numbers could be trusted. UAE gratuity, end-of-service, and Standard Chartered Bank exports were calculated by hand.
Four platforms, one employee lifecycle — Yomly + Excel + PandaDoc + Google Forms + Eteach, stitched together by re-entry. No single source of truth for something as basic as "who currently works here." Each payroll cycle consumed a week of reconciliation before Finance could close the month.
UAE payroll at international-school complexity — 10+ allowance types (Management Points, Housing, Creche, Flights, Education, Phone, Uniform, Leaders in Learning, Transportation, Relocation), UAE end-of-service gratuity, FTE-based part-time for teachers, hourly rules for support staff, mid-month joiners needing off-cycle pay runs, and Standard Chartered Bank file exports with strict column mapping. Excel had stopped being a tool and become a liability.
Expat faculty lifecycle — 200+ active contracts with fixed terms, family visas, dependent healthcare, and digital signatures required across timezones. Contract drafts traveled Word → PDF → PandaDoc → email chains; when a clause changed mid-process, the audit trail broke silently.
Dual-calendar time off — UAE weekends, school calendar, national holidays, and leave types counted either in calendar days (weekends included) or working days depending on policy. Yomly couldn't model the distinction, so HR ran a separate spreadsheet per leave category.
Document sprawl and expiry blindness — 1000+ employee documents (passports, Emirates IDs, visas, qualifications) spread across shared drives, inboxes, and Yomly exports. Expiry tracking was manual; compliance gaps surfaced only when someone happened to notice.
The Solution
Employee core, rebuilt for international faculty — First/Middle/Last separation for visa compliance, Arabic name support, Employee Group classification (Faculty / Staff / Administrator / LT Substitute / Consultant) driving conditional UI and payroll rules, dual coding (auto Odoo code + legacy Internal Employee Code preserved from Yomly for audit continuity), Passport/Emirates ID expiry tracking with alerts, and a Family Wizard that captures spouse and dependents in under 60 seconds with two-way sync to Contacts.
Payroll engine calibrated to UAE labour law — the payslip module (20 files) and management points module (10 files) deliver salary structures with 10+ allowance and deduction rules, digitized Management Points with semester-expiring allowances, contract-level configurable benefits feeding payslips, FTE-based part-time for teachers and hourly for support staff, prorated salary for mid-month moves, additional pay runs for off-cycle contracts, UAE-compliant end-of-service gratuity, and native Standard Chartered Bank file export with BANK/CASH split-sheet Excel for Finance.
Contract lifecycle on Odoo Sign — Template-driven contract PDF, Odoo Sign replacing PandaDoc for digital signatures, mass contract sending for term renewals with delivery-status tracking, Exit Date cascade from Employee to all active contracts and salary attachments in one action, and automatic sync of Job Position / Department / Email / Mobile from contract back to employee card (read-only) to eliminate drift.
Time off under dual-calendar logic — 56+ development hours for configurable calendar-day vs working-day calculation per leave type, multi-level approval workflows, real-time balance display inside the employee payroll view, and unpaid-leave handling that prorates against full-time salary — quietly fixing a silent edge case that had produced payroll errors under Yomly for years.
Documents, inverted from Employee-first to Category-first — HR-only, required, and general document tiers separated at workspace level with role-based access. A dedicated Leavers archive preserves history without cluttering active operations. 1000+ migrated documents auto-linked to employees via Internal Employee Code. Passport, Emirates ID, and contract expiry fields now drive alerts inside Odoo itself.
Migration without compromise — A 9-step import sequence (Management Points → Employees → Contracts → Salary Structures → Attachments → Time Off config → Documents → Access Rights → historical payslips) moved 300+ employees, 200+ contracts, and 1000+ documents from Yomly with zero historical loss. Legacy identifiers preserved for audit; outdated fields (Religion, Visa Number, Previous Employment) dropped per the school's current policy.
Modules Implemented
Have a Similar Challenge?
Let's discuss how we can achieve similar results for your business.