You can give a user a work schedule in shifts for each day in their user profile. This way absence.io knows how many hours every employee is expected to work and when these hours should be worked in.
The shifts are considered to be the core working hours of each user. In reports you can then differentiate between work done outside and inside the employees shifts.
Any employees scheduled hours are changed according to holidays and absences taken by the employee. If there is a holiday or absence on any given day with scheduled work hours, absence.io will null these hours (ie. the shift is no longer expected to be worked. Any tracked time is considered overtime while not tracking time will not count towards missed hours).
You can enable the setting "counts as work" for leave types like home office to make sure these leaves do not change the work schedule.
Note: If you care only about the total worked hours (not wether they where inside or outside of schedule) absence.io shows your employees total tracked work balance compared to the total expected work hours (as defined in shifts) in several places like reports and the time sheet. This probably means you want to apply a flexitime work time policy at your organisation.