In a Position’s Billing Settings, is a value for Billing Overtime Rules.
This combo box refers to the records available via API at /overtime-rules .
[GET] /overtime-rules/2
{
"name": "Billing Regular (8x1.5 / 12x2.0)",
"periodLength": "WEEKLY",
"ruleType": "BILLING",
"rules": {},
"id": 2
}
When a BOR is selected, it gets stored in the Position data as a Billing Setting:
[GET] /positions/381?include=billingSetting
{
"name": "5355362 - Location @ 123 Street, City - Security Guard",
"description": "CM",
"customId": "SG123",
"status": "ACTIVE",
"account": 313,
"contract": 11,
"nonBillable": false,
"shiftMemo": "Access\r\nElevator Control\r\nSecurity presence",
"beginDate": "2022-01-23T00:00:00+00:00",
"endDate": null,
"breakRule": null,
"taxClass": 1,
"payCodeLabel": null,
"id": 381,
"billingSetting": {
"type": "HOURLY",
"billItem": 1,
"rate": 24.86,
"discountRate": 0,
"holidayGroup": 1,
"billBreaks": "ALL",
"holiday": "RATE",
"holidayRate": 62.15,
"holidayMultiplier": 1.5,
==> "overtimeRule": 2,
"id": 381
}
}
When working with the Pay-run Items entity by direct API or abstracted TQL, you can conditionally report on items that are Overtime Billable or not by checking if overtimeRule contains a value or not. This was done for a customer recently using Apogee who exported their pay-run via TQL.
A TQL conditional like this was used to select the OT rate or the base rate depending on if an overtimeRule had been selected:
IF(shift.position.billingSetting.overtimeRule IS NULL OR shift.position.billingSetting.overtimeRule = "", round(baseRate*100),round(rate*100)) `Level`,