Skip to content

Formulas

Basic Formulas

This page provides more information about the use of formulas when creating custom items. To learn more about custom items, go to:

To create a formula for a custom item, you should have already selected the type of custom item, given it a name, and selected "Formula" from the Input Type drop-down menu. An additional field will then appear:

  1. Enter a Formula by starting with an "=".
  2. You can then also enter variables, numbers, and basic mathematical operators such as +, -, *, /, and ( ).

Examples of basic formulas that could be entered in the Formula field are the following:

  • = normal_rate * 40 * 25
  • = (basic_salary + normal_pay) / 4.3333 * 0.3333
  • = max(0, 300 - mtd_before_current('raf_contribution'))

Variables and functions which can be used when creating formulas are:

Variables

  • basic_salary: Basic Salary (salaried employees)
  • normal_pay: Basic Hourly Pay (hourly paid employees)
  • normal_rate: Hourly Rate
  • shifts_worked: Number of shifts worked
  • total_income: Total income
  • periods_in_year
  • hourly_paid
  • weeks
  • default_days_worked: For monthly employees, equal to their full days per week (Regular Hours) x 4.333. For weekly paid employees, full days per week (Regular Hours).
  • days_with_leave_for_system_type:
    • For example: = normal_rate * days_with_leave_for_system_type('unpaid'). This would be the number of days taken with unpaid leave. Note: This considers days with unpaid leave, not days of unpaid leave.
  • raf_contribution: The total amount contributed to a Retirement Annuity Fund – to be used with the mtd_before_current function. (It includes the contributions of both the employee and employer.)

Functions

  • min: Used to select the lowest of the values in the list provided to it.
    • For example: = min(50,100) = 50
  • max: Used to select the highest of the values in the list provided to it.
    • For example: = max(50,100) = 100
  • round: The number in brackets will be rounded up or down depending on the decimal. This functions as per the regular rounding of numbers.
    • For example: = round(1.1) = 1, and = round(1.5) = 2
  • ceiling: Rounds up the number in brackets to the nearest whole number.
    • For example: = ceiling(1.1) = 2
  • floor: Rounds down the number in brackets to the nearest whole number. The number will always be rounded down regardless of the decimal point.
    • For example: = floor(1.1) = 1, and = floor(2.7) = 2
  • mtd_before_current: This function accepts a string argument representing an account name, e.g. 'basic_salary'. It will return the month-to-date value of the given account – but excluding the value for the current payslip.
    • For example: = max(0, 300 - mtd_before_current('raf_contribution')). When used in the Amount field, this will result in a R 300 RAF Deduction on the first payslip in any given month for non-monthly employees. Note that you can use this formula when adding the Retirement Annuity Fund system item to the employee's profile.

Example 1: Bargaining Council Levy

An employer must make a contribution that is 0.32% of the employee's hourly pay, with a maximum contribution of R 4.26. Since there is a maximum, the formula must select the lowest of option (1), which is R 4.26, and option (2), which is the employee's pay multiplied by 0.32%.

= min(4.26, (normal_pay * 0.0032))

Example 2: Trade Union deduction

An employee must make a contribution of 1% of their hourly pay, plus R 1.80. Before the R 1.80 is added, the minimum contribution is R 9.13, and the maximum contribution is R 16.73.

= min(16.73, (max(9.13, (normal_pay * 0.01)))) + 1.80

"IF" Statements

General IF statements

The IF function returns one value if the specified condition is true and another if it's false. The IF statement is also known as a logical formula: If, then, else. If something is true, then do this; else/otherwise, do that.

The IF statement works as follows:

if (condition, true statement, false statement)

For example: Suppose that the company deducts a staff social fund contribution based on how much an employee earns. If the employee's salary is greater than R 10,000, then the contribution is R 100, but if the employee earns less than R 10,000, then the contribution is R 80.

The formula will be written as:

= if (basic_salary>10000, 100, 80)

This means that if the basic salary is greater than 10 000, the result will be 100, and if it's less, it will be 80.

Nested IF statements

A nested IF statement is an IF statement within an IF statement. It works as follows:

if (condition, true statement, if (condition, true statement, false statement))

For example: Suppose that the company deducts a staff social fund contribution based on how much an employee earns. If the employee's salary is greater than R 10,000, then the contribution is R 100, but if the employees earns between R 5,000 and R 10,000, then the contribution is R 80, and if they earn less than R 5,000, it is R 60.

The formula will be written as follows:

= if (basic_salary>10000, 100, if (basic_salary<5000, 60, 80))

This means that if the basic_salary is greater than 10 000, the result will be 100. Otherwise, if the salary is less than 5 000, the result will be 60; otherwise, it will be 80.