Conditions
The message models can be found in Semantic Treehouse. There you can also find example messages and validation artifacts in both XML and JSON.
The REST API specifications can be found here: Inquiry Pay Equity API specifications. The condition schema can be found here
For nearly all benefit components, certain conditions may apply. This means that the component is or is not applicable to workers who meet these conditions. For example:
- An overtime allowance might only be applicable up to a certain salary scale.
- An allowance for home working costs might be applicable only for specific job functions.
- A youth salary scale might only apply to employees within a certain age range.
To specify these conditions, most benefit component elements (like those in remuneration, allowance, leave, etc.) can have a conditions list element. This element can contain zero, one, or many (0..n) condition objects. A benefit component typically applies to workers who satisfy all specified conditions within that list.
Condition types
SETU has identified various conditions. To enable automation in evaluating these conditions, the SETU standard introduces structured conditionType objects. Version 2.0 of the standard includes several concrete condition types:
Age: Condition based on the age of the employee (in years).EmploymentDuration: Based on the length of time an employee has been employed (tenure).Occurrence: A condition based on time or a specific event.PositionProfile: Related to specific job functions or roles by referencingpositionId.SalaryScale: Based on the salary scale range and optionally salary steps.Text: A textual condition type to be used when no other structured type fits.
Combination Types
Complex conditions can be created using combination types:
AllOf: All nested conditions must be met.AnyOf: At least one nested condition must be met.Not: The nested condition must NOT be met.
Each structured condition type uses an operator (e.g. eq, neq, gt, gte, lt, lte, in) to define the comparison logic.
Example JSON
The examples below illustrate how the conditions element is used in various parts of the pay equity specification.
1. Position Profile-based Condition
This example shows a condition applied to an entire remuneration block, making it applicable only to specific job functions (Team Lead or Manager).
{
"remuneration": [
{
"origin": { "type": "CollectiveLabourAgreement" },
// ... other remuneration details ...
"conditions": [
{
"conditionType": "PositionProfile", // Specifies the condition relates to job functions.
"operator": "in", // Restrict to 'in' operator to check against a list.
"positionProfileIds": ["TeamLead", "Manager"] // The list of applicable position IDs.
}
]
}
]
}
2. Age-based Condition
A specific salary step that applies only if the employee is 18 years or older but younger than 19.
{
"salaryStep": [
{
"name": "Pay for youth: Age 18",
"value": 1850.75,
"conditions": [
{
"conditionType": "Age", // Condition based on employee age.
"operator": "eq", // Greater than or equal to.
"age": 18 // Age value in years.
},
]
}
]
}
3. Occurrence Condition
Occurrence conditions allow for specifying timing based on events, fixed dates, or recurring intervals.
3.a Relative Occurrence
This example shows a condition for sick pay that changes after 1 year (P1Y) of sick leave to 70% percent of the salary.
{
"conditions": [
{
"conditionType": "Occurrence", // Condition based on a time or event.
"occurrence": {
"occurrenceType": "Relative", // Timing relative to an event.
"event": "SickLeave", // The triggering event (e.g., start of illness).
"offset": "P1Y" // The relative time offset (1 year).
}
}
]
}
3.b Single Occurrence (Fixed Date)
Specifies a condition that is met on a specific date.
{
"conditions": [
{
"conditionType": "Occurrence",
"occurrence": {
"occurrenceType": "SingleOccurrence", // A one-time occurrence.
"date": "2026-12-15" // The specific fixed date.
}
}
]
}
3.c Recurring Occurrence
Specifies a condition that repeats according to an interval.
{
"conditions": [
{
"conditionType": "Occurrence",
"occurrence": {
"occurrenceType": "Recurring", // An event that repeats.
"recurringInterval": "R/2026-5/P1Y" // Every year recurring in May (ISO 8601-1 repeating interval).
}
}
]
}
4. Textual Condition
When no structured logic is available, use the Text condition type.
{
"conditions": [
{
"conditionType": "Text", // Fallback for unstructured conditions.
"description": "Based on individual performance review results." // Human-readable explanation.
}
]
}
5. Combination Condition (AllOf)
This example shows how to combine multiple conditions. In this case, both the Age and Position Profile conditions must be met.
{
"conditions": [
{
"conditionType": "AllOf",
"conditions": [
{
"conditionType": "Age",
"operator": "gte",
"age": 21
},
{
"conditionType": "PositionProfile",
"operator": "in",
"positionProfileIds": ["SeniorDeveloper"]
}
]
}
]
}
JSON Schema Structure
Concrete condition types are implemented as a oneOf structure in the JSON schema, discriminated by the conditionType property.
Condition:
oneOf:
- $ref: './condition-types/Age.yaml'
- $ref: './condition-types/EmploymentDuration.yaml'
- $ref: './condition-types/Occurrence.yaml'
- $ref: './condition-types/PositionProfile.yaml'
- $ref: './condition-types/SalaryScale.yaml'
- $ref: './condition-types/Text.yaml'
- $ref: './condition-types/combinations/AllOf.yaml'
- $ref: './condition-types/combinations/AnyOf.yaml'
- $ref: './condition-types/combinations/Not.yaml'