xMatix
Sign in Request demo
xMatix
PRODUCTS
SalesField Sales & SFACRMRewardsClaimsInventoryProcurementWarehouse ManagementField ServiceServiceSupportTelephony & MessagingFinance & AccountingPayrollExpense ManagementCommercePortalsAnalytics & ReportingData StudioMobile AppSee all products →
PLATFORM
Platform overviewApp BuilderAutomationIntegrationsSecurity & GovernanceChange ManagementDevelopers
SENSE AI
Sense AI overviewSense AssistSense ControlSense VisionAI StudioTrust & governanceIn Claude & ChatGPTUse cases
SOLUTIONS
Auto DMSConsumer Goods DMSSales Force Automation (SFA) FMCG & DistributionManufacturing & Dealer NetworksAutomotive & DealershipsPharma & HealthcareConsumer DurablesAgri-InputsBuilding MaterialsService NetworksWarehousing & 3PLFinancial AccountingERP SoftwareIndia GST ComplianceUAE VAT & e-InvoicingSaudi ZATCA & VATAll solutions →
RESOURCES
Knowledge CenterDeveloper & CLIBlogGuidesWhat is xMatix?Company facts
COMPANY
AboutCareersPartnersEventsContactAuthorsLegal
Sign in Request demo
Home/Docs/Field Service/Resource availability and slot holds
CONCEPT · Last reviewed

Resource availability and slot holds

"Is this person free?" is answered by three separate mechanisms in xMatix, and they do not share one engine. Resource Availability records hold a person's dated attendance and are what the dispatch console reads. Branch Time Slots and their per-date bookings are what the web and mobile booking wizards offer and consume. The newer appointment-scheduling engine models bookable resources, capacity claims and expiring holds, but no shipped screen calls it yet. This page describes each as it actually behaves, so an administrator knows which record to inspect when an availability outcome looks wrong.

Dated attendance: Resource Availability

A Resource Availability record is one attendance day for one resource: the Resource, the Date, an Availability Type, the branch it belongs to, the check-in and check-out times and branches where they happened, an optional link to the Leave Request that caused it, and Penalty Hours. The duration on the record is calculated from the punches. Records are created only by the mobile check-in flow, always with Availability Type Present. Leave approval doesn't create or change them, so Leave, Holiday, Weekend, Absent and Half Day rows exist only where someone added or imported them by hand. The list isn't in a standard app menu. See Mobile attendance for the full record.

The shipped Availability Type values are Present, Leave, Weekend, Holiday, Absent and Half Day.

How the dispatch console reads it

For the selected day the dispatch console loads every Resource Availability row for that date and every Leave Request overlapping it, then classifies each resource:

  • The availability type is matched by substring: anything containing "leave" is leave, "half" is half day, "holiday" is holiday, "week" is week off (which is how Weekend is shown as Week off). Any other value — including Absent and any custom value — is treated as present.
  • A Leave Request overlapping the day overrides the attendance row and marks the resource on leave unless its status contains "reject" or "cancel". There is no check for an Approved status: a pending leave request already counts as leave.
  • A resource with no row is inferred Absent only when at least one other resource has data that day; on a day with no attendance data at all the console shows no marker rather than painting everyone absent.

Optimize day and Get candidates skip lanes classified leave, holiday or week off. They do not skip half day or absent lanes, so review those before accepting an optimized result. Penalty hours are stored on the record but no allocation path reads them.

For a dispatch exception, inspect the exact resource, local date, stored availability type and any overlapping leave request's status, then compare with what the Board or Gantt shows.

Branch time slots: the booking path in use today

The Booking Wizard widget in the web app and the mobile app books product demos into Branch Time Slots. A slot belongs to a branch and carries a Transaction Type (Delivery, Product Demo At Site or Service Appointment), a start and end time, a capacity per weekday, an Active flag, and optional narrowing by item, item group, service type and service job type. A Branch Time Slot Booking is the per-date record for one slot: Booking Date, Capacity and Capacity Utilized. Setting slots up, every field and every refusal message are covered in Branch time slots.

How it behaves:

  • The wizard lists the branch's Active slots of the matching transaction type, item scope and service type, and shows the places left for the chosen date: that date's booking record capacity (or else the slot's weekday capacity) minus the places used. Branch holidays, past dates and weekdays with capacity 0 cannot be picked.
  • Saving a confirmed, not-cancelled product demo takes one place on the date's booking record and checks the slot on the server. A full date is refused ("The time slot '…' is fully booked on …"), so two bookings for the last place cannot both succeed. Cancelling, moving or deleting the demo gives the place back.
  • A slot whose Active flag was never switched on is not offered and is refused with "The selected time slot is inactive." — switch Active on when creating slots.
  • An empty weekday capacity is saved as 0, which closes that weekday. Enter a capacity for every day the branch takes bookings.

Before publishing a slot, verify its branch, transaction type, times, weekday capacities and that Active is on. After a booking, verify the Branch Time Slot Booking row for that date exists and its utilized count moved.

The appointment-scheduling engine

A newer scheduling model exists in the platform: Appointment Types (duration, buffers, resource requirements, lead time, advance window, cancellation cutoff, reschedule limit, overbook percentage), Appointment Slot Templates released into dated Appointment Slots, Bookable Resources (a person, asset or facility with a branch, an effective window and a concurrent capacity), Resource Bookings (the capacity claims) and Appointment Holds. Its records appear in the CRM settings app where the module has been enabled, and its availability and hold endpoints are live in the API.

What it enforces when it is called:

  • Candidates for a requirement are bookable resources that are active, of the required kind, inside their effective window, and either organization-wide or in the slot's branch. A person requirement narrowed by skill needs an active Resource Skill whose catalog Skill name matches — proficiency, skill validity dates and working hours are not applied, and the bookable resource's business-hours reference is stored but read by nothing.
  • Capacity counts overlapping Hard resource bookings against the resource's concurrent capacity; soft bookings are ignored. Candidates are offered least-loaded first. A claim spans the appointment plus the type's before and after buffers.
  • Holds take one place on a slot atomically — a full slot refuses the hold — for a configurable lifetime (default 10 minutes), and a sweep expires overdue holds and returns their capacity.

What is not yet wired: no web, mobile or portal screen calls the availability or hold endpoints — the booking wizards above still use branch time slots — and the hold-to-booking conversion has no caller. So a configured hold duration does not protect any shipped booking flow today, and the engine's tighter checks do not apply to demo and opportunity bookings. When race-free last-slot booking is a requirement, test two simultaneous sessions against the exact flow you deploy.

Common questions

Why is a technician still shown on the Gantt when attendance says Absent?

Because the console's exclusions are leave, holiday and week off. Absent and Half Day are shown with their own marker but are not excluded, and an unrecognised availability value is classified present. Treat the marker as a warning and move the assignment by hand.

Why did a pending leave request take someone off the day?

Any Leave Request overlapping the day counts as leave unless its status contains "reject" or "cancel". Approval is not required for the console's classification.

Can two people book the last place in a branch time slot?

No. The places left that the wizard shows are only a guide; the check that counts is made when the product demo is saved. A save that would go over the date's capacity is refused with "The time slot '…' is fully booked on …", so the second person picks another slot or date. See Branch time slots.

Does every booking channel use holds?

No. Hold services exist and work when called, but no shipped booking surface calls them. Verify the channel you operate rather than relying on the presence of hold records.