Exclude the first business day of each month from SLA calculation
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
an hour ago
Hi everyone,
I'm looking for the best approach to implement a specific SLA requirement.
We have an SLA Definition applied to a Catalog Item, using a business schedule (Monday through Friday).
The requirement is that the first business day of every month should not be counted toward the SLA duration.
For example:
- If July 1st is a Sunday, it is already excluded because it's outside the business schedule.
- July 2nd (Monday) would normally count as SLA time.
- However, our business rule requires that July 2nd should also be excluded, because it is the first business day of the month.
- The SLA should start counting from the second business day of the month.
This should happen every month, regardless of which weekday the month starts on.
I'm trying to determine the best implementation approach while following ServiceNow best practices.
Some ideas I considered:
- Creating a custom Schedule that dynamically excludes the first business day of each month.
- Using an SLA Condition or custom logic to delay the SLA start.
- Modifying the SLA calculation through a Script Include or another supported extension point.
- Using Schedule Spans generated automatically.
Has anyone implemented a similar requirement?
What would be the most maintainable and recommended solution?
Thanks in advance!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
28m ago
Hello @Carlos Petrucio,
Do this in the Schedule, not in the SLA. Keep the SLA Definition dead simple (start on create, stop on resolve, standard schedule) and let the schedule engine own the exclusion, that's what "Show Schedule" and duration calculations already trust.
The catch is that out of the box, ServiceNow schedule entries don't have a "first business day of the month" pattern. The Repeat options on a schedule entry (Yearly, Monthly by fixed weekday like "2nd Saturday") only handle fixed weekday positions, not "whichever day is first after the weekend/holiday", which shifts month to month. So you can't build this as one static recurring entry.
What actually works and stays maintainable:
- Build a child holiday-style schedule and attach it to your base Mon-Fri schedule via Related Schedules (cmn_other_schedule), same pattern used for public holidays.
- In that child schedule, add one Excluded type schedule entry (cmn_schedule_span) per month, for the specific calculated date, exactly the way holiday entries are added.
- Since you already know your business days for the year, you can just pre-populate all 12 exclusion dates in one shot, no script needed, and update it once a year like a holiday calendar.
- If you'd rather it be fully dynamic, use a small monthly Scheduled Job that runs on the 1st, walks forward using GlideSchedule against the base schedule to find the first in-schedule day, and inserts that single Excluded span into the child schedule.
Avoid the SLA Condition/script-include route to delay the start timestamp. It works for the "when does the SLA start counting" number, but it breaks Show Schedule, pause/resume math, and any reporting that trusts the schedule object as the source of truth for business time.
References
Thank you,
Vikram Karety
Octigo Solutions INC