Use this skill when bulk loading FSL ServiceResource records, ServiceResourceSkill data, skill certifications, capacity-based resource setup, and availability patterns. Trigger keywords: FSL resource migration, ServiceResourceSkill bulk load, skill certification tracking FSL, capacity-based resource, service resource availability. NOT for user provisioning, ServiceResource creation via UI, or ServiceTerritoryMember setup (covered by fsl-territory-data-setup).
This skill activates when a data migration or org setup requires bulk loading FSL resource and skill data: Skill definitions, ServiceResource records, ServiceResourceSkill assignments, SkillRequirement mappings, and ServiceResourceCapacity records. Skill data has strict insert-order dependencies, a non-obvious numeric SkillLevel scale, and certification tracking behaviors that differ from typical HR system models.
Gather this context before working on anything in this domain:
The correct sequence:
ServiceResourceSkill.SkillLevel is a numeric field ranging from 0 to 99999. Source systems typically use text labels ("Beginner", "Intermediate", "Expert") or percentage scores. You must establish an explicit numeric mapping:
Example mapping: Beginner = 1, Intermediate = 50, Expert = 99, Certified = 99999.
SkillRequirement.MinimumSkillLevel on Work Types sets the minimum skill level a resource must have to be scheduled for that work type. If a resource's SkillLevel < MinimumSkillLevel, the scheduling policy will exclude that resource.
FSL does not have a dedicated certification object. Certifications are tracked by the EffectiveStartDate and EffectiveEndDate fields on ServiceResourceSkill:
EffectiveEndDate is considered currently activeEffectiveEndDate in the past is expired but the record is NOT auto-deletedCritical: If a certification expires (EffectiveEndDate reached), the resource will no longer match SkillRequirements for work types that require that skill — but only if the scheduling policy evaluates certification dates.
Capacity-based resources represent crews or shift-based workers who are scheduled by capacity (hours available) rather than by individual appointment slot. To configure:
ServiceResource.IsCapacityBased = true on the resource recordServiceResourceCapacity records specifying capacity hours per time periodAttempting to create ServiceResourceCapacity records for a resource where IsCapacityBased = false fails with a validation error.
When to use: Migrating technician skill data from a legacy field service system or HR system.
How it works:
SkillLevel mapping example:
Source: "Certified HVAC Technician"
FSL SkillLevel: 99
FSL SkillRequirement.MinimumSkillLevel on HVAC Work Type: 90
Result: Resource qualifies for HVAC appointments
When to use: Source system tracks certification expiry dates that affect scheduling eligibility.
How it works: Load ServiceResourceSkill.EffectiveEndDate from the source certification expiry date. Build a scheduled report or Flow that queries skills with EffectiveEndDate < TODAY() and notifies the operations team to arrange recertification.
SELECT ServiceResource.Name, Skill.MasterLabel, EffectiveEndDate
FROM ServiceResourceSkill
WHERE EffectiveEndDate < TODAY()
ORDER BY EffectiveEndDate ASC
| Situation | Recommended Approach | Reason |
|---|---|---|
| Individual technician | ServiceResource with ResourceType = Technician | Standard scheduling model |
| Crew (multiple people one schedule) | ServiceResource with IsCapacityBased = true | Capacity scheduling model |
| Certification expiry tracking | EffectiveEndDate on ServiceResourceSkill | No native cert object — date range is the mechanism |
| Text skill levels from source | Define numeric mapping table, transform on load | SkillLevel is numeric 0-99999, cannot accept text |
| Skill no longer valid | Set EffectiveEndDate to expiry date, do NOT delete | Delete breaks history; expiry date preserves record |
IsCapacityBased = true.SkillRequirement.MinimumSkillLevel values align with the loaded SkillLevel scale.Non-obvious platform behaviors that cause real production problems:
EffectiveEndDate > TODAY() OR EffectiveEndDate = NULL.| Artifact | Description |
|---|---|
| Skill load CSV template | Template with Skill MasterLabel, Description, and External ID columns |
| ServiceResourceSkill load CSV | Template with ServiceResource, Skill, SkillLevel, EffectiveStartDate, EffectiveEndDate columns |
| SkillLevel mapping table | Source-to-FSL numeric mapping for skill levels |