@salesforce/afv-skills 1.64.0 → 1.65.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/package.json +1 -1
  2. package/skills/agentforce-gpt-email-generation-configure/SKILL.md +312 -0
  3. package/skills/agentforce-wizard-ui-forecasting-analytics-components-configure/SKILL.md +64 -0
  4. package/skills/agentforce-wizard-ui-sales-einstein-components-configure/SKILL.md +46 -0
  5. package/skills/automation-company-profile-info-query/SKILL.md +51 -0
  6. package/skills/automation-digital-wallet-configure/SKILL.md +689 -0
  7. package/skills/automation-flow-coordinate/SKILL.md +95 -0
  8. package/skills/automation-flow-coordinate/references/elements/action-call/action-call.md +1569 -0
  9. package/skills/automation-flow-coordinate/references/elements/action-call/conversation-messaging.md +96 -0
  10. package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-sms-message.json +23 -0
  11. package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-to-journey-no-fields.json +31 -0
  12. package/skills/automation-flow-coordinate/references/elements/action-call/send-to-journey.md +179 -0
  13. package/skills/automation-flow-coordinate/references/elements/exit-rule/examples/event-email-link-click.json +13 -0
  14. package/skills/automation-flow-coordinate/references/elements/exit-rule/exit-rule.md +83 -0
  15. package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/examples/forward-to-bot-or-agent.json +69 -0
  16. package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/forward-to-bot-or-agent.md +274 -0
  17. package/skills/automation-flow-coordinate/references/elements/start/audience-common.md +192 -0
  18. package/skills/automation-flow-coordinate/references/elements/start/automation-event-triggered.md +130 -0
  19. package/skills/automation-flow-coordinate/references/elements/start/data-cloud-data-change-triggered.md +92 -0
  20. package/skills/automation-flow-coordinate/references/elements/start/form-submission-triggered.md +88 -0
  21. package/skills/automation-flow-coordinate/references/elements/start/segment-triggered.md +152 -0
  22. package/skills/automation-flow-coordinate/references/elements/start/start.md +539 -0
  23. package/skills/automation-flow-coordinate/references/elements/subflow/subflow.md +152 -0
  24. package/skills/automation-flow-coordinate/references/elements/wait/wait.md +497 -0
  25. package/skills/automation-flow-coordinate/references/recipes/author/author.md +868 -0
  26. package/skills/automation-flow-coordinate/references/recipes/summarize/element-generic.md +300 -0
  27. package/skills/automation-flow-coordinate/references/recipes/summarize/reference-resolution.md +292 -0
  28. package/skills/automation-flow-coordinate/references/recipes/summarize/summarize.md +323 -0
  29. package/skills/automation-flow-coordinate/references/recipes/testing/examples/debug-output-template.md +109 -0
  30. package/skills/automation-flow-coordinate/references/recipes/testing/shape.md +219 -0
  31. package/skills/automation-flow-coordinate/references/recipes/testing/shared-stages/intent-analyzer.md +180 -0
  32. package/skills/automation-flow-coordinate/references/recipes/testing/workflows/debug.md +175 -0
  33. package/skills/automation-flow-coordinate/references/recipes/testing/workflows/promote.md +255 -0
  34. package/skills/automation-flow-coordinate/references/recipes/testing/workflows/save-debug.md +212 -0
  35. package/skills/automation-flow-coordinate/references/resources/variable/variable.md +171 -0
  36. package/skills/automation-flow-coordinate/references/shared/anti-patterns.md +786 -0
  37. package/skills/automation-flow-coordinate/references/shared/end/end.md +267 -0
  38. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/README.md +69 -0
  39. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/predictions.jsonl +80 -0
  40. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/prompts.jsonl +116 -0
  41. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/flow-type-resolver.md +321 -0
  42. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/taxonomy.json +320 -0
  43. package/skills/automation-flow-coordinate/references/shared/server-functions.md +597 -0
  44. package/skills/automotive-cloud-appraisal-management-settings-configure/SKILL.md +69 -0
  45. package/skills/automotive-cloud-dealer-essentials-configure/SKILL.md +78 -0
  46. package/skills/automotive-cloud-ground-agent-data-pipelines-configure/SKILL.md +373 -0
  47. package/skills/automotive-cloud-ground-mfg-agent-data-pipelines-configure/SKILL.md +273 -0
  48. package/skills/automotive-cloud-mfg-agent-data-pipelines-configure/SKILL.md +259 -0
  49. package/skills/automotive-cloud-mfg-sales-concierge-agent-create/SKILL.md +369 -0
  50. package/skills/automotive-cloud-mfg-sales-concierge-foundation-configure/SKILL.md +542 -0
  51. package/skills/automotive-cloud-mfg-sales-concierge-foundation-coordinate/SKILL.md +159 -0
  52. package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-agent-create/SKILL.md +349 -0
  53. package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-configure/SKILL.md +505 -0
  54. package/skills/automotive-cloud-sales-concierge-agent-create/SKILL.md +380 -0
  55. package/skills/automotive-cloud-sales-concierge-foundation-configure/SKILL.md +567 -0
  56. package/skills/automotive-cloud-sales-concierge-foundation-coordinate/SKILL.md +159 -0
  57. package/skills/automotive-cloud-sales-concierge-orchestrator-agent-create/SKILL.md +360 -0
  58. package/skills/automotive-cloud-sales-concierge-orchestrator-configure/SKILL.md +539 -0
  59. package/skills/automotive-cloud-sales-concierge-search-grounding-configure/SKILL.md +358 -0
  60. package/skills/commerce-b2b-merchant-quote-configure/SKILL.md +602 -0
  61. package/skills/commerce-b2b-store-configure/SKILL.md +251 -0
  62. package/skills/commerce-credit-memo-create/SKILL.md +139 -0
  63. package/skills/commerce-delivery-business-hours-configure/SKILL.md +277 -0
  64. package/skills/commerce-delivery-estimation-apply/SKILL.md +155 -0
  65. package/skills/commerce-delivery-estimation-configure/SKILL.md +377 -0
  66. package/skills/commerce-delivery-routing-specs-integrate/SKILL.md +174 -0
  67. package/skills/commerce-estimate-bopis-query/SKILL.md +279 -0
  68. package/skills/commerce-estimate-delivery-date-query/SKILL.md +349 -0
  69. package/skills/commerce-fees-apply/SKILL.md +227 -0
  70. package/skills/commerce-fulfillment-routing-analyze/SKILL.md +200 -0
  71. package/skills/commerce-guest-buyer-create/SKILL.md +173 -0
  72. package/skills/commerce-location-bopis-configure/SKILL.md +378 -0
  73. package/skills/commerce-location-business-hours-configure/SKILL.md +235 -0
  74. package/skills/commerce-location-delivery-processing-time-configure/SKILL.md +309 -0
  75. package/skills/commerce-location-graph-integrate/SKILL.md +131 -0
  76. package/skills/commerce-location-shipping-carrier-method-configure/SKILL.md +755 -0
  77. package/skills/commerce-location-temporary-operating-hours-configure/SKILL.md +331 -0
  78. package/skills/commerce-merchant-buyer-groups-configure/SKILL.md +579 -0
  79. package/skills/commerce-merchant-buyer-user-onboarding-create/SKILL.md +626 -0
  80. package/skills/commerce-merchant-catalog-configure/SKILL.md +614 -0
  81. package/skills/commerce-merchant-extension-provider-configure/SKILL.md +368 -0
  82. package/skills/commerce-merchant-insights-account-health-churn-analyze/SKILL.md +118 -0
  83. package/skills/commerce-merchant-insights-inventory-returns-analyze/SKILL.md +65 -0
  84. package/skills/commerce-merchant-insights-order-shopper-get/SKILL.md +90 -0
  85. package/skills/commerce-merchant-insights-product-performance-analyze/SKILL.md +72 -0
  86. package/skills/commerce-merchant-insights-query/SKILL.md +279 -0
  87. package/skills/commerce-merchant-storefront-guest-access-configure/SKILL.md +656 -0
  88. package/skills/commerce-order-summary-change-apply/SKILL.md +375 -0
  89. package/skills/commerce-product-details-get/SKILL.md +363 -0
  90. package/skills/commerce-product-search/SKILL.md +563 -0
  91. package/skills/commerce-react-storefront-create/SKILL.md +350 -0
  92. package/skills/commerce-return-order-summary-create/SKILL.md +513 -0
  93. package/skills/commerce-search-relevance-analyze/SKILL.md +757 -0
  94. package/skills/commerce-temporary-processing-time-override-create/SKILL.md +274 -0
  95. package/skills/communications-initial-setup-configure/SKILL.md +630 -0
  96. package/skills/communications-multisite-configure/SKILL.md +571 -0
  97. package/skills/communications-revenue-cloud-settings-configure/SKILL.md +74 -0
  98. package/skills/communications-smb-fiber-catalog-create/SKILL.md +413 -0
  99. package/skills/communications-tmf-integrate/SKILL.md +1368 -0
  100. package/skills/consumer-goods-visit-activity-act4-questions-assign/SKILL.md +448 -0
  101. package/skills/consumer-goods-visit-activity-act5-standard-create/SKILL.md +269 -0
  102. package/skills/consumer-goods-visit-activity-act6-assortment-configure/SKILL.md +271 -0
  103. package/skills/consumer-goods-visit-activity-act7-account-scoping-create/SKILL.md +382 -0
  104. package/skills/consumer-goods-visit-activity-act8-plan-attach-create/SKILL.md +373 -0
  105. package/skills/consumer-goods-visit-activity-act9-proof-validate/SKILL.md +389 -0
  106. package/skills/consumer-goods-visit-and-activity-act1-specification-create/SKILL.md +338 -0
  107. package/skills/consumer-goods-visit-and-activity-act2-template-create/SKILL.md +547 -0
  108. package/skills/consumer-goods-visit-and-activity-act3-definition-create/SKILL.md +346 -0
  109. package/skills/consumer-goods-visit-and-activity-configure/SKILL.md +1110 -0
  110. package/skills/crm-analytics-adoption-insights-configure/SKILL.md +224 -0
  111. package/skills/crm-analytics-custom-report-type-lightning-configure/SKILL.md +418 -0
  112. package/skills/crm-analytics-dashboards-configure/SKILL.md +731 -0
  113. package/skills/crm-analytics-operational-analytics-metadata-bridge-migrate/SKILL.md +233 -0
  114. package/skills/crm-analytics-report-notifications-ui-configure/SKILL.md +184 -0
  115. package/skills/crm-analytics-sharing-inheritance-coverage-analyze/SKILL.md +167 -0
  116. package/skills/crm-analytics-sonic-getting-started-configure/SKILL.md +55 -0
  117. package/skills/crm-analytics-tableau-next-app-deploy/SKILL.md +1350 -0
  118. package/skills/crm-analytics-tableau-next-c360-basemodel-validate/SKILL.md +1862 -0
  119. package/skills/crm-analytics-tableau-next-datacloud-validate/SKILL.md +83 -0
  120. package/skills/crm-analytics-tableau-next-provisioning-validate/SKILL.md +81 -0
  121. package/skills/data360-activation-create/SKILL.md +104 -0
  122. package/skills/data360-activation-external-platform-get/SKILL.md +49 -0
  123. package/skills/data360-activation-target-create/SKILL.md +93 -0
  124. package/skills/data360-activation-v2-create/SKILL.md +456 -0
  125. package/skills/data360-audience-dmo-get/SKILL.md +38 -0
  126. package/skills/data360-calculated-affinity-create/SKILL.md +82 -0
  127. package/skills/data360-calculated-insight-create/SKILL.md +148 -0
  128. package/skills/data360-catalog-metadata-create/SKILL.md +183 -0
  129. package/skills/data360-code-extension-create/SKILL.md +115 -0
  130. package/skills/data360-communication-capping-create/SKILL.md +227 -0
  131. package/skills/data360-connection-create/SKILL.md +491 -0
  132. package/skills/data360-content-lens-create/SKILL.md +181 -0
  133. package/skills/data360-data-action-create/SKILL.md +126 -0
  134. package/skills/data360-data-action-target-create/SKILL.md +181 -0
  135. package/skills/data360-data-clean-room-create/SKILL.md +238 -0
  136. package/skills/data360-data-governance-create/SKILL.md +746 -0
  137. package/skills/data360-data-graph-create/SKILL.md +82 -0
  138. package/skills/data360-data-harmonized-model-object-reference-create/SKILL.md +38 -0
  139. package/skills/data360-data-lake-object-create/SKILL.md +207 -0
  140. package/skills/data360-data-model-object-catalog-get/SKILL.md +49 -0
  141. package/skills/data360-data-model-object-create/SKILL.md +128 -0
  142. package/skills/data360-data-model-object-mapping-create/SKILL.md +106 -0
  143. package/skills/data360-data-space-create/SKILL.md +161 -0
  144. package/skills/data360-data-streams-create/SKILL.md +324 -0
  145. package/skills/data360-engagement-signal-get/SKILL.md +38 -0
  146. package/skills/data360-experiment-create/SKILL.md +82 -0
  147. package/skills/data360-goal-based-campaign-create/SKILL.md +192 -0
  148. package/skills/data360-harmonization-process-history-get/SKILL.md +38 -0
  149. package/skills/data360-harmonized-unstructured-dmo-create/SKILL.md +84 -0
  150. package/skills/data360-identity-resolution-create/SKILL.md +115 -0
  151. package/skills/data360-intelligent-document-processing-create/SKILL.md +148 -0
  152. package/skills/data360-knowledge-graph-construction-create/SKILL.md +93 -0
  153. package/skills/data360-knowledge-graph-create/SKILL.md +216 -0
  154. package/skills/data360-knowledge-space-mcp-configure/SKILL.md +475 -0
  155. package/skills/data360-machine-learning-mcp-configure/SKILL.md +697 -0
  156. package/skills/data360-multi-org-mcp-configure/SKILL.md +117 -0
  157. package/skills/data360-secondary-index-mcp-configure/SKILL.md +126 -0
  158. package/skills/data360-segment-mcp-configure/SKILL.md +159 -0
  159. package/skills/data360-semantic-calculated-dimension-mcp-configure/SKILL.md +93 -0
  160. package/skills/data360-semantic-calculated-measurement-mcp-configure/SKILL.md +93 -0
  161. package/skills/data360-semantic-data-object-mcp-configure/SKILL.md +93 -0
  162. package/skills/data360-semantic-dimension-mcp-configure/SKILL.md +38 -0
  163. package/skills/data360-semantic-engine-mcp-configure/SKILL.md +62 -0
  164. package/skills/data360-semantic-measurement-mcp-configure/SKILL.md +38 -0
  165. package/skills/data360-semantic-metric-mcp-configure/SKILL.md +93 -0
  166. package/skills/data360-semantic-model-mcp-configure/SKILL.md +115 -0
  167. package/skills/data360-standard-mapping-mcp-configure/SKILL.md +38 -0
  168. package/skills/data360-tenant-lifecycle-mcp-configure/SKILL.md +73 -0
  169. package/skills/experience-afv-query/SKILL.md +234 -0
  170. package/skills/experience-agentforce-vibes-in-react-configure/SKILL.md +63 -0
  171. package/skills/experience-apex-components-configure/SKILL.md +69 -0
  172. package/skills/experience-apex-pages-configure/SKILL.md +107 -0
  173. package/skills/experience-app-home-configure/SKILL.md +76 -0
  174. package/skills/experience-aura-lightning-out-access-configure/SKILL.md +58 -0
  175. package/skills/experience-briefcase-configure/SKILL.md +287 -0
  176. package/skills/experience-community-flexi-page-list-create/SKILL.md +74 -0
  177. package/skills/experience-community-template-definition-list-query/SKILL.md +48 -0
  178. package/skills/experience-community-theme-definition-list-query/SKILL.md +38 -0
  179. package/skills/experience-content-assets-configure/SKILL.md +86 -0
  180. package/skills/experience-custom-domain-create/SKILL.md +727 -0
  181. package/skills/experience-defer-rendering-workspace-page-setup-configure/SKILL.md +41 -0
  182. package/skills/experience-field-service-app-builder-configure/SKILL.md +187 -0
  183. package/skills/experience-flow-category-configure/SKILL.md +117 -0
  184. package/skills/experience-formula-configure/SKILL.md +358 -0
  185. package/skills/experience-global-actions-configure/SKILL.md +69 -0
  186. package/skills/experience-global-publisher-layouts-configure/SKILL.md +79 -0
  187. package/skills/experience-instrumentation-configure/SKILL.md +64 -0
  188. package/skills/experience-lex-engagement-configure/SKILL.md +50 -0
  189. package/skills/experience-lightning-bolt-open/SKILL.md +12 -0
  190. package/skills/experience-lightning-out-configure/SKILL.md +129 -0
  191. package/skills/experience-lightning-preview-configure/SKILL.md +67 -0
  192. package/skills/experience-lightning-types-query/SKILL.md +98 -0
  193. package/skills/experience-malware-scan-configure/SKILL.md +71 -0
  194. package/skills/experience-my-salesforce-configure/SKILL.md +126 -0
  195. package/skills/experience-navigation-menus-configure/SKILL.md +235 -0
  196. package/skills/experience-notification-types-configure/SKILL.md +206 -0
  197. package/skills/experience-notifications-configure/SKILL.md +75 -0
  198. package/skills/experience-record-discovery-query/SKILL.md +227 -0
  199. package/skills/experience-regenerate-previews-open/SKILL.md +94 -0
  200. package/skills/experience-sales-cloud-mab-configure/SKILL.md +254 -0
  201. package/skills/experience-schema-builder-open/SKILL.md +38 -0
  202. package/skills/experience-simple-record-home-configure/SKILL.md +110 -0
  203. package/skills/experience-static-resources-configure/SKILL.md +74 -0
  204. package/skills/field-service-data-capture-form-deployer-configure/SKILL.md +23 -2
  205. package/skills/field-service-data-capture-form-designer-configure/SKILL.md +13 -3
  206. package/skills/field-service-mobile-branding-configure/SKILL.md +17 -3
  207. package/skills/field-service-objective-designer-configure/SKILL.md +72 -379
  208. package/skills/field-service-prework-brief-deployer-configure/SKILL.md +10 -537
  209. package/skills/field-service-scheduling-policy-designer-query/SKILL.md +65 -1093
  210. package/skills/field-service-setup-coordinate/SKILL.md +62 -0
  211. package/skills/field-service-sobject-create-configure/SKILL.md +13 -213
  212. package/skills/field-service-voice-to-form-configure/SKILL.md +40 -11
  213. package/skills/field-service-work-plan-configure/SKILL.md +253 -0
  214. package/skills/field-service-work-rule-designer-configure/SKILL.md +121 -95
  215. package/skills/fsc-actionable-segmentation-settings-configure/SKILL.md +180 -0
  216. package/skills/fsc-digital-origination-bre-decision-matrix-foundation-create/SKILL.md +196 -0
  217. package/skills/fsc-digital-origination-bre-disclosures-consent-configure/SKILL.md +106 -0
  218. package/skills/fsc-digital-origination-bre-document-upload-configure/SKILL.md +96 -0
  219. package/skills/fsc-digital-origination-bre-permissions-assign/SKILL.md +111 -0
  220. package/skills/fsc-digital-origination-bre-setup-coordinate/SKILL.md +250 -0
  221. package/skills/fsc-digital-origination-bre-stp-eligibility-configure/SKILL.md +122 -0
  222. package/skills/fsc-digital-origination-coordinate/SKILL.md +653 -0
  223. package/skills/fsc-digital-origination-demo-run/SKILL.md +225 -0
  224. package/skills/fsc-digital-origination-execution-guardrails-validate/SKILL.md +112 -0
  225. package/skills/fsc-digital-origination-initial-setup-configure/SKILL.md +396 -0
  226. package/skills/fsc-digital-origination-pricing-setup-coordinate/SKILL.md +336 -0
  227. package/skills/fsc-digital-origination-pricing-setup-data-foundation-create/SKILL.md +208 -0
  228. package/skills/fsc-digital-origination-pricing-setup-procedure-create/SKILL.md +375 -0
  229. package/skills/fsc-digital-origination-product-setup-act1-permissions-assign/SKILL.md +83 -0
  230. package/skills/fsc-digital-origination-product-setup-coordinate/SKILL.md +248 -0
  231. package/skills/fsc-digital-origination-sample-data-create/SKILL.md +206 -0
  232. package/skills/fsc-document-checklist-settings-configure/SKILL.md +57 -0
  233. package/skills/fsc-flexible-hierarchy-configure/SKILL.md +148 -0
  234. package/skills/fsc-flexible-hierarchy-foundation-configure/SKILL.md +1430 -0
  235. package/skills/fsc-flexible-hierarchy-graph-config-create/SKILL.md +471 -0
  236. package/skills/fsc-flexible-hierarchy-rule-based-graph-deploy/SKILL.md +429 -0
  237. package/skills/fsc-pricing-product-configurator-configure/SKILL.md +150 -0
  238. package/skills/fsc-pricing-salesforce-omnistudio-switch/SKILL.md +123 -0
  239. package/skills/fsc-product-act2-catalog-categories-create/SKILL.md +82 -0
  240. package/skills/fsc-product-act3-attributes-create/SKILL.md +249 -0
  241. package/skills/fsc-product-act4-classification-assignment-create/SKILL.md +196 -0
  242. package/skills/fsc-product-act5-considerations-get/SKILL.md +44 -0
  243. package/skills/fsc-stage-management-apex-flow-deploy/SKILL.md +384 -0
  244. package/skills/fsc-stage-management-compliant-data-sharing-configure/SKILL.md +144 -0
  245. package/skills/fsc-stage-management-decision-matrices-create/SKILL.md +107 -0
  246. package/skills/fsc-stage-management-definition-assignments-create/SKILL.md +189 -0
  247. package/skills/fsc-stage-management-definition-create/SKILL.md +108 -0
  248. package/skills/fsc-stage-management-permissions-assign/SKILL.md +143 -0
  249. package/skills/fsc-stage-management-transitions-configure/SKILL.md +139 -0
  250. package/skills/health-cloud-appt-booking-config-configure/SKILL.md +135 -0
  251. package/skills/health-cloud-appt-booking-url-config-configure/SKILL.md +134 -0
  252. package/skills/health-cloud-care-provider-affl-role-config-configure/SKILL.md +136 -0
  253. package/skills/health-cloud-care-provider-search-config-configure/SKILL.md +134 -0
  254. package/skills/health-cloud-care-requests-create/SKILL.md +178 -0
  255. package/skills/health-cloud-initial-configure/SKILL.md +511 -0
  256. package/skills/health-cloud-patient-appointment-scheduling-configure/SKILL.md +1374 -0
  257. package/skills/health-cloud-provider-search-settings-configure/SKILL.md +924 -0
  258. package/skills/health-cloud-referral-management-coordinate/SKILL.md +513 -0
  259. package/skills/health-cloud-timeline-configure/SKILL.md +622 -0
  260. package/skills/health-cloud-virtual-visit-config-configure/SKILL.md +135 -0
  261. package/skills/industries-account-score-settings-query/SKILL.md +78 -0
  262. package/skills/industries-actionable-list-data-sources-dmo-configure/SKILL.md +177 -0
  263. package/skills/industries-ad-product-availability-search/SKILL.md +399 -0
  264. package/skills/industries-advanced-account-forecast-settings-configure/SKILL.md +628 -0
  265. package/skills/industries-advanced-therapy-management-settings-configure/SKILL.md +73 -0
  266. package/skills/industries-atm-settings-starter-configure/SKILL.md +76 -0
  267. package/skills/industries-batch-document-ai-configure/SKILL.md +196 -0
  268. package/skills/industries-behavioral-health-app-settings-configure/SKILL.md +71 -0
  269. package/skills/industries-branch-management-settings-configure/SKILL.md +89 -0
  270. package/skills/industries-bre-decision-table-access-configure/SKILL.md +367 -0
  271. package/skills/industries-brokerage-settings-configure/SKILL.md +41 -0
  272. package/skills/industries-calendar-sync-settings-configure/SKILL.md +89 -0
  273. package/skills/industries-care-request-settings-configure/SKILL.md +218 -0
  274. package/skills/industries-case-management-intelligence-settings-configure/SKILL.md +54 -0
  275. package/skills/industries-catalog-process-attributes-products-configure/SKILL.md +380 -0
  276. package/skills/industries-catalog-process-fulfillment-configure/SKILL.md +216 -0
  277. package/skills/industries-catalog-process-intake-configure/SKILL.md +219 -0
  278. package/skills/industries-catalog-process-knowledge-configure/SKILL.md +153 -0
  279. package/skills/industries-catalog-process-preprocessor-configure/SKILL.md +168 -0
  280. package/skills/industries-cds-general-settings-configure/SKILL.md +69 -0
  281. package/skills/industries-claim-financial-settings-configure/SKILL.md +169 -0
  282. package/skills/industries-clinical-data-model-settings-configure/SKILL.md +136 -0
  283. package/skills/industries-clinical-data-model-settings-starter-configure/SKILL.md +105 -0
  284. package/skills/industries-collection-plan-settings-configure/SKILL.md +132 -0
  285. package/skills/industries-comms-service-console-settings-configure/SKILL.md +159 -0
  286. package/skills/industries-compliance-configure/SKILL.md +102 -0
  287. package/skills/industries-compliance-document-extraction-setup-configure/SKILL.md +76 -0
  288. package/skills/industries-contact-center-app-layout-configure/SKILL.md +88 -0
  289. package/skills/industries-contact-center-components-configure/SKILL.md +96 -0
  290. package/skills/industries-contact-center-path-knowledge-configure/SKILL.md +95 -0
  291. package/skills/industries-contact-center-user-access-assign/SKILL.md +96 -0
  292. package/skills/industries-course-waitlist-config-configure/SKILL.md +162 -0
  293. package/skills/industries-crisis-center-settings-configure/SKILL.md +84 -0
  294. package/skills/industries-custom-object-settings-configure/SKILL.md +94 -0
  295. package/skills/industries-data-cloud-integration-configure/SKILL.md +88 -0
  296. package/skills/industries-data-space-feature-mappings-configure/SKILL.md +245 -0
  297. package/skills/industries-decision-matrix-builder-configure/SKILL.md +78 -0
  298. package/skills/industries-decision-table-hbase-configure/SKILL.md +87 -0
  299. package/skills/industries-decision-table-version-configure/SKILL.md +74 -0
  300. package/skills/industries-decision-tables-builder-configure/SKILL.md +253 -0
  301. package/skills/industries-decision-tables-configure/SKILL.md +439 -0
  302. package/skills/industries-energy-utilities-configure/SKILL.md +251 -0
  303. package/skills/industries-eu-cloud-multisite-configure/SKILL.md +1008 -0
  304. package/skills/industries-eu-new-connections-configure/SKILL.md +30 -0
  305. package/skills/industries-explainability-msg-template-configure/SKILL.md +135 -0
  306. package/skills/industries-expression-set-message-token-configure/SKILL.md +135 -0
  307. package/skills/industries-field-service-settings-configure/SKILL.md +82 -0
  308. package/skills/industries-form-framework-settings-configure/SKILL.md +30 -0
  309. package/skills/industries-fsc-ai-settings-configure/SKILL.md +57 -0
  310. package/skills/industries-fsc-association-engine-settings-configure/SKILL.md +172 -0
  311. package/skills/industries-fsc-b2b-settings-configure/SKILL.md +61 -0
  312. package/skills/industries-fsc-insurance-settings-configure/SKILL.md +58 -0
  313. package/skills/industries-fsc-visa-fulfillment-setup-configure/SKILL.md +103 -0
  314. package/skills/industries-fsc-wealth-agent-settings-configure/SKILL.md +117 -0
  315. package/skills/industries-fsc-wealth-settings-configure/SKILL.md +99 -0
  316. package/skills/industries-fundraising-gift-entry-settings-configure/SKILL.md +120 -0
  317. package/skills/industries-fundraising-rfm-configure/SKILL.md +128 -0
  318. package/skills/industries-fundraising-settings-configure/SKILL.md +145 -0
  319. package/skills/industries-fundraising-source-code-gen-configure/SKILL.md +299 -0
  320. package/skills/industries-google-maps-api-key-settings-configure/SKILL.md +87 -0
  321. package/skills/industries-grantmaking-intelligence-settings-open/SKILL.md +58 -0
  322. package/skills/industries-hc-score-category-settings-configure/SKILL.md +167 -0
  323. package/skills/industries-health-engagement-settings-configure/SKILL.md +218 -0
  324. package/skills/industries-home-health-agentforce-setup-configure/SKILL.md +131 -0
  325. package/skills/industries-home-health-bundling-policy-create/SKILL.md +50 -0
  326. package/skills/industries-home-health-entity-labels-configure/SKILL.md +29 -0
  327. package/skills/industries-home-health-fsl-package-deploy/SKILL.md +71 -0
  328. package/skills/industries-home-health-fsl-settings-validate/SKILL.md +27 -0
  329. package/skills/industries-home-health-guided-setup-care-and-skill-get/SKILL.md +80 -0
  330. package/skills/industries-home-health-guided-setup-configure/SKILL.md +836 -0
  331. package/skills/industries-home-health-guided-setup-enable-org-fsl-get/SKILL.md +55 -0
  332. package/skills/industries-home-health-guided-setup-get-org-ready-get/SKILL.md +61 -0
  333. package/skills/industries-home-health-licenses-assign/SKILL.md +27 -0
  334. package/skills/industries-home-health-operating-hours-create/SKILL.md +40 -0
  335. package/skills/industries-home-health-scheduling-policy-create/SKILL.md +41 -0
  336. package/skills/industries-home-health-service-objective-create/SKILL.md +22 -0
  337. package/skills/industries-home-health-skills-create/SKILL.md +31 -0
  338. package/skills/industries-home-health-users-create/SKILL.md +29 -0
  339. package/skills/industries-icm-act3-toggles-configure/SKILL.md +198 -0
  340. package/skills/industries-icm-act5-genai-suggested-assessments-configure/SKILL.md +361 -0
  341. package/skills/industries-icm-act6-mcg-integration-configure/SKILL.md +550 -0
  342. package/skills/industries-integrated-care-management-configure/SKILL.md +168 -0
  343. package/skills/industries-object-enablement-configure/SKILL.md +86 -0
  344. package/skills/industries-tpm-system-processing-service-configure/SKILL.md +64 -0
  345. package/skills/integration-apex-settings-configure/SKILL.md +61 -0
  346. package/skills/marketing-e360-email-archiving-configure/SKILL.md +73 -0
  347. package/skills/platform-custom-permissions-configure/SKILL.md +687 -0
  348. package/skills/platform-label-workbench-import-create/SKILL.md +67 -0
  349. package/skills/platform-privacy-agent-settings-configure/SKILL.md +752 -0
@@ -0,0 +1,253 @@
1
+ ---
2
+ name: field-service-work-plan-configure
3
+ description: "Use this skill when users want to configure org-level Salesforce Field Service Work Plans settings and template-to-record custom field mappings. Trigger when users mention work, plan, settings, work plan settings."
4
+ metadata:
5
+ version: "1.0"
6
+ accessCheck: "(FieldServiceAccessCheck.ORG_HAS_WORK_PLANS_GENERAL) || (FieldServiceAccessCheck.ORG_PERMISSION_FIELD_SERVICE) || (FieldServiceSettingAccessCheck.ORG_PERMISSION_WORK_PLANS_DURATION) || (OldAccessCheck.USER_HAS_CUSTOMIZE_APPLICATION_OR_SYS_ADMIN)"
7
+ ---
8
+
9
+ # Managing Work Plan Settings
10
+
11
+ ## When to Use This Skill
12
+
13
+ Configure org-level Salesforce Field Service Work Plans settings and
14
+ template-to-record custom field mappings. Covers the auto-generation,
15
+ manual-status-update, and hide-not-applicable toggles, the work-order
16
+ duration source, and custom field mappings from Work Plan Template / Work
17
+ Step Template / Work Plan Template Entry to the generated Work Plan and
18
+ Work Step records. Use for Field Service Work Plans configuration and
19
+ field mapping — NOT for unrelated "work", "plan", or "settings" requests
20
+ outside Field Service Work Plans.
21
+
22
+ ## Critical Constraints
23
+
24
+ **Preconditions:**
25
+
26
+ - Field Service feature must be enabled at the org level (FieldServiceAccessCheck.ORG_PERMISSION_FIELD_SERVICE). When off, getWorkPlansSettingsConfiguration short-circuits at the fieldServicePerm check and returns only fieldServicePerm + hasCustomizeApplicationPerm. (check: `FieldServiceAccessCheck.ORG_PERMISSION_FIELD_SERVICE`)
27
+ - Work Plans General feature must be on at org level (FieldServiceAccessCheck.ORG_HAS_WORK_PLANS_GENERAL). hasAccess() AND-combines this with the Customize Application/Sys Admin perm; without it saveWorkPlansSettings throws NoAccessException. (check: `FieldServiceAccessCheck.ORG_HAS_WORK_PLANS_GENERAL`)
28
+ - Customize Application permission OR System Administrator (OldAccessCheck.USER_HAS_CUSTOMIZE_APPLICATION_OR_SYS_ADMIN). Required by hasAccess(); save throws NoAccessException otherwise. (check: `OldAccessCheck.USER_HAS_CUSTOMIZE_APPLICATION_OR_SYS_ADMIN`)
29
+ - workOrderDurationSource write additionally requires FieldServiceSettingAccessCheck.ORG_PERMISSION_WORK_PLANS_DURATION; without it the duration write is silently skipped (other toggles still persist). (check: `FieldServiceSettingAccessCheck.ORG_PERMISSION_WORK_PLANS_DURATION`)
30
+
31
+ **Operational rules:**
32
+
33
+ - WHAT WORK PLANS ARE
34
+ Field Service Work Plans give front-line and back-office workers an
35
+ ordered checklist of "work steps" on a Work Order (WO) or Work Order Line
36
+ Item (WOLI), so jobs are completed consistently. The feature has a
37
+ reusable "library" plus generated instances:
38
+ - Work Step Template (WST): a reusable task (may carry a quick action or
39
+ a Field Service mobile flow).
40
+ - Work Plan Template (WPT): a reusable ordered list of steps.
41
+ - Work Plan Template Entry (WPTE): a WST placed into a WPT.
42
+ - Work Plan Selection Rule (WPSR): logic that picks which WPT(s) apply to
43
+ a WO/WOLI (by work type, asset, location, service contract, etc.).
44
+ NOTE: selection rules support STANDARD fields only.
45
+ - Work Plan (WP) / Work Step (WS): the point-in-time instances generated
46
+ onto the WO/WOLI from the templates (WP↔WS is master-detail).
47
+ On WO/WOLI create, the WPSR is evaluated → the matching WPT + its WSTs are
48
+ copied into a WP + WS set on the record.
49
+ - SCOPE OF THIS SKILL
50
+ This skill is the ORG-LEVEL Work Plans SETTINGS page (Setup → Work Plans).
51
+ It owns: the three org toggles (auto-generation, manual work-step status
52
+ update, hide-not-applicable), the work-order duration source, and the
53
+ CUSTOM FIELD MAPPINGS. It does NOT create the library records or generate
54
+ plans — see "broader feature" below.
55
+ - CUSTOM FIELD MAPPING
56
+ Standard fields are auto-mapped from templates to the generated records and
57
+ CANNOT be changed (WPT→WP: Name, Description, Execution Order; WST/WPTE→WS:
58
+ Action Definition, Action Type, Description, Execution Order, Name, Work
59
+ Plan Execution Order). Custom field mapping lets an admin (Customize
60
+ Application) carry CUSTOM template fields onto the generated WP/WS records —
61
+ e.g. a procedures-doc URL, a compliance picklist, or a "mandatory" flag on a
62
+ step. Three fixed mapping types: WorkPlanTemplate→WorkPlan,
63
+ WorkStepTemplate→WorkStep, WorkPlanTemplateEntry→WorkStep.
64
+ Workflow:
65
+ 1. getObjectMappingConfiguration_3 — the authoritative field-discovery +
66
+ read step. Returns the SUPPORTED source custom fields (allSourceFields[],
67
+ already filtered — no External Lookup / Encrypted Text / Rollup) with
68
+ their allowed, type-compatible targetFields[], plus the current
69
+ mappings. Do NOT use a raw FieldDefinition/describe query to pick
70
+ fields — it returns more than the mapper supports.
71
+ 2. saveWorkPlansSettings_2 with hasMappedFieldDataChanged=true and the
72
+ mappedFieldData composite (see that step's notes for the exact
73
+ {sourceEntity, targetEntity, mappedFields} shape; all five hasXChanged
74
+ flags must be present even on a mappings-only save). Only map a source
75
+ field to a target drawn from that source field's targetFields[]. Two
76
+ mappings that share a target object (WST→WS and WPTE→WS both target
77
+ WorkStep) must use DISTINCT target fields.
78
+ 3. Re-read via getObjectMappingConfiguration_3 to confirm persistence
79
+ (save returns a bare true). Mappings persist as FieldServiceSettings
80
+ metadata (Tooling API), not org prefs.
81
+ - BROADER FEATURE (outside this settings page)
82
+ Building the library and generating plans is done elsewhere and is
83
+ supported by standard/public APIs — this skill can guide a user there:
84
+ - Create/manage WorkPlanTemplate, WorkStepTemplate, WorkPlanTemplateEntry,
85
+ WorkPlanSelectionRule, WorkPlan, WorkStep as standard sObjects (REST/
86
+ SOQL/Tooling); the record-level Generate / Add / Delete Work Plans and
87
+ Add Work Steps actions live on the WO/WOLI (see the sibling controllers
88
+ generate-work-plans, add-work-plans, delete-work-plans,
89
+ add-work-steps-to-work-plan, update-work-plan-template-entry — separate
90
+ from this settings page).
91
+ - Typical setup order: (1) Enable Work Plans + add the WO/WOLI related
92
+ lists and the Generate/Add/Delete actions (Object Manager); (2) assign
93
+ user permissions (CRUD + View All on WPT/WST/WPSR; Read/Update on WP/WS;
94
+ Run Flows for mobile-flow steps); (3) build WSTs, WPTs, WPTEs, and
95
+ selection rules; (4) map custom fields (this page); (5) generate plans.
96
+ - PUBLIC DOCS
97
+ - Intro: https://help.salesforce.com/s/articleView?id=service.fs_work_plans_intro.htm&type=5
98
+ - Enable: https://help.salesforce.com/s/articleView?id=service.fs_work_plans_enable.htm&type=5
99
+ - Customize settings: https://help.salesforce.com/s/articleView?id=service.fs_work_plans_customize_settings.htm&type=5
100
+ - Assign permissions: https://help.salesforce.com/s/articleView?id=service.fs_work_plans_assign_user_perms.htm&type=5
101
+ - Map custom fields: https://help.salesforce.com/s/articleView?id=service.fs_work_plans_map_custom_fields.htm&type=5
102
+ - Selection rules: https://help.salesforce.com/s/articleView?id=service.fs_work_plans_create_selection_rules.htm&type=5
103
+ - Generate plans: https://help.salesforce.com/s/articleView?id=service.fs_work_plans_generate_work_plans.htm&type=5
104
+
105
+ ## Operations Reference
106
+
107
+ Operations grouped by purpose. Use these as the building blocks for the workflows above.
108
+
109
+ ### Summary
110
+
111
+ | Operation | Purpose | Status | Call | Depends on |
112
+ |-----------|---------|--------|------|------------|
113
+ | `getWorkPlansSettingsConfiguration_1` | read | implemented | `GET /headless/invoke/service/fieldservice/work-plans-settings/get-work-plans-settings-configuration` | — |
114
+ | `saveWorkPlansSettings_2` | write | implemented | `PATCH /headless/invoke/service/fieldservice/work-plans-settings/save-work-plans-settings` | `getWorkPlansSettingsConfiguration_1` |
115
+ | `getObjectMappingConfiguration_3` | read | implemented | `GET /headless/invoke/service/fieldservice/field-service-object-mapping/get-object-mapping-configuration` | `getWorkPlansSettingsConfiguration_1` |
116
+
117
+ ### Read operations
118
+
119
+ #### `getWorkPlansSettingsConfiguration_1`
120
+
121
+ Returns WorkPlansSettingsConfiguration: toggle values, workOrderDurationSource picklist with conditional workOrderDurationSourceOptions, and gating booleans the agent uses to decide which controls are mutable. AURA-IS-CANONICAL — no public Connect/Tooling/Metadata equivalent.
122
+
123
+ **Call:** `GET /headless/invoke/service/fieldservice/work-plans-settings/get-work-plans-settings-configuration` — status: `implemented`
124
+
125
+ **Output:** WorkPlansSettingsConfiguration object. Toggle values:
126
+ isWorkPlansAutoGenerationEnabled, isWorkStepManualStatusUpdateEnabled,
127
+ isWorkStepsHideNotApplicableEnabled, workOrderDurationSource (string,
128
+ nullable). Gating booleans: fieldServicePerm, fieldServiceOrgPref,
129
+ hasWorkPlansDurationPerm, hasCustomizeApplicationPerm. When the duration
130
+ perm is granted, workOrderDurationSourceOptions is also returned (the
131
+ picklist for the duration source). mappingTypes is a fixed 3-element
132
+ array: WorkPlans_WorkPlanTemplate_WorkPlan,
133
+ WorkPlans_WorkStepTemplate_WorkStep,
134
+ WorkPlans_WorkPlanTemplateEntry_WorkStep — used by the save step's
135
+ optional mappedFieldData composite upsert. When Field Service is off
136
+ (fieldServicePerm=false), the response short-circuits and returns only
137
+ fieldServicePerm + hasCustomizeApplicationPerm.
138
+
139
+ #### `getObjectMappingConfiguration_3`
140
+
141
+ THE field-discovery + read step for custom field mapping — use this
142
+ (not a raw FieldDefinition/describe query) to learn which fields can be
143
+ mapped. Returns an array; each element (one per requested mappingType)
144
+ has: type (the mappingType), sourceApiName + sourceLabel (source object,
145
+ e.g. WorkPlanTemplate), targetApiName + targetLabel (target object, e.g.
146
+ WorkPlan), allSourceFields[] and mappedFields.
147
+ - allSourceFields[]: the ONLY custom source fields that may be mapped.
148
+ The controller already filters out unsupported source types (External
149
+ Lookup, Encrypted Text, Rollup Summary). Each entry has value (source
150
+ field API name) + targetFields[]: the allowed targets for THAT source
151
+ field — restricted to data-type-compatible custom fields on the target
152
+ object, plus a "None" ({value:""}) option. Only pair a source field
153
+ with a target from its own targetFields[] list.
154
+ - mappedFields: the currently-configured {sourceFieldApiName:
155
+ targetFieldApiName} map for this mappingType.
156
+ Empty allSourceFields / mappedFields means no custom fields are defined
157
+ or none are mapped yet. This is the READ half of the workflow; the WRITE
158
+ half is saveWorkPlansSettings with mappedFieldData. Backed by the
159
+ embedded customFieldMapperSetupWrapper UI subcomponent on the Work Plan
160
+ Settings page.
161
+
162
+ **Call:** `GET /headless/invoke/service/fieldservice/field-service-object-mapping/get-object-mapping-configuration` — status: `implemented`
163
+
164
+ **Inputs:**
165
+
166
+ - `mappingTypes` *(`List`)* — List of mappingType enum values to fetch. The three valid values
167
+ (from getWorkPlansSettingsConfiguration's mappingTypes[]):
168
+ WorkPlans_WorkPlanTemplate_WorkPlan (WorkPlanTemplate→WorkPlan),
169
+ WorkPlans_WorkStepTemplate_WorkStep (WorkStepTemplate→WorkStep),
170
+ WorkPlans_WorkPlanTemplateEntry_WorkStep (WorkPlanTemplateEntry→WorkStep).
171
+
172
+ **Depends on:** `getWorkPlansSettingsConfiguration_1`
173
+
174
+ ### Write operations
175
+
176
+ #### `saveWorkPlansSettings_2`
177
+
178
+ Persist Work Plans toggles. workPlansSettings map MUST include all five
179
+ pairs (hasIsWorkPlansAutoGenerationEnabledChanged,
180
+ hasIsWorkStepManualStatusUpdateEnabledChanged,
181
+ hasIsWorkStepsHideNotApplicableEnabledChanged,
182
+ hasWorkOrderDurationSourceChanged, hasMappedFieldDataChanged) + their
183
+ matching new values; a missing hasXChanged key raises 500
184
+ CONTROLLER_ERROR. Duration-source writes require the WORK_PLANS_DURATION
185
+ org perm — without it the write is silently skipped while save still
186
+ returns true. Optional mappedFieldData drives a composite upsert against
187
+ one of the fixed mappingTypes returned by the GET step. Throws
188
+ NoAccessException without Customize Application + Work Plans General.
189
+ Returns bare true — verify persistence by re-reading via
190
+ getWorkPlansSettingsConfiguration. AURA-IS-CANONICAL — controller value-add
191
+ (gate + batch + mappedFieldData).
192
+
193
+ **Call:** `PATCH /headless/invoke/service/fieldservice/work-plans-settings/save-work-plans-settings` — status: `implemented`
194
+
195
+ **Inputs:**
196
+
197
+ - `workPlansSettings` *(`LinkedHashMap`)*
198
+
199
+ **Depends on:** `getWorkPlansSettingsConfiguration_1`
200
+
201
+ **Rollback:** getWorkPlansSettingsConfiguration_1
202
+
203
+ **Notes:** payload_contract: workPlansSettings map keys (all five hasXChanged flags are REQUIRED to
204
+ avoid a 500 NPE; matching value fields are read only when the
205
+ corresponding hasXChanged is true):
206
+ hasIsWorkPlansAutoGenerationEnabledChanged + isWorkPlansAutoGenerationEnabled (boolean)
207
+ hasIsWorkStepManualStatusUpdateEnabledChanged + isWorkStepManualStatusUpdateEnabled (boolean)
208
+ hasIsWorkStepsHideNotApplicableEnabledChanged + isWorkStepsHideNotApplicableEnabled (boolean)
209
+ hasWorkOrderDurationSourceChanged + workOrderDurationSource (string or null)
210
+ hasMappedFieldDataChanged + mappedFieldData (composite upsert object or null); error_contracts: {'empty_or_partial_payload': "Missing workPlansSettings input OR missing any hasXChanged key →\n500 CONTROLLER_ERROR (the controller unboxes booleans without null\nchecks). Send all five hasXChanged keys explicitly, even the ones\nyou don't intend to change (set those to false).", 'missing_access': 'NoAccessException when Customize Application or Sys Admin perm is\nabsent, or when Work Plans General feature is off at the org level.', 'duration_perm_silently_skipped': 'When the Work Plans Duration org permission is not granted, a\nworkOrderDurationSource write is dropped silently; save still\nreturns true. Confirm hasWorkPlansDurationPerm=true from the read\nstep before setting hasWorkOrderDurationSourceChanged=true.', 'error_message_shapes': 'Two distinct 500 CONTROLLER_ERROR message shapes distinguish payload\ndefects — inspect the error body to pick the fix:\n - Outer-null (body={} or workPlansSettings unset): the error\n reports that "workPlansSettings" is null → wrap the input in the\n workPlansSettings key.\n - Inner-null (workPlansSettings present but a hasXChanged key\n missing): the error names the missing flag directly\n (e.g. hasMappedFieldDataChanged) → default the named flag to\n false. On some orgs the message instead reports a null value for\n the workPlansSettings map lookup without naming the flag.', 'mapping_type_enum_mismatch': 'When hasMappedFieldDataChanged=true AND mappedFieldData contains a key\nthat isn\'t one of the three mappingTypes enum values, save fails with\n500 CONTROLLER_ERROR "No enum constant MappingType.<attempted-key>" —\ncomposite keys are validated pre-mutation against the mapping-type\nenum. Fix: cross-check mappedFieldData keys against mappingTypes[]\nreturned by getWorkPlansSettingsConfiguration_1 before sending.', 'mapping_data_type_mismatch': 'Catch-all 500 CONTROLLER_ERROR "We can\'t map these fields. Verify that\nthe data type details of the source and target fields match." raised\nwhen the Tooling upsert of FieldServiceSettings rejects the mapping.\nIt is NOT limited to data-type mismatches — verified against a live\norg, it also fires when:\n - source/target field data types are incompatible;\n - sourceEntity or targetEntity is omitted from a mappedFieldData\n entry (the controller builds a null ObjectMapping);\n - two mappings that share a target entity point at the SAME target\n field (e.g. WorkStepTemplate→WorkStep and\n WorkPlanTemplateEntry→WorkStep both mapping to\n WorkStep.Custom_text_field__c) — each target field on a shared\n target object can be the destination of only one source mapping.\nThe write is atomic: on this error NOTHING persists (state unchanged).\nFix: build mappings ONLY from getObjectMappingConfiguration_3 — pick a\nsource field from allSourceFields[] and a target from that field\'s own\ntargetFields[] list (both are already filtered to supported +\ntype-compatible fields); always include sourceEntity + targetEntity;\nand give each target field on a shared target object a distinct source\nmapping. Safest pattern: read the current valid config and modify it.'}; flag_gate_semantics: Flag-gate is STRICT. When hasXChanged=false the paired value is
211
+ silently ignored — sending a new value alongside flag=false never
212
+ writes and never errors. Consequence: all-hasXChanged=false is a
213
+ safe no-op payload (idempotent contract). Corollary: to guarantee a
214
+ write happens, set hasXChanged=true and populate the paired value.; loose_schema_tolerance: Unknown keys in the workPlansSettings map are silently dropped — the
215
+ server returns 200 true with no error and does not persist the typo.
216
+ Callers get no server-side signal on misspelled flag names. Validate
217
+ against payload_contract keys client-side before send.; mapping_types_enum: ['WorkPlans_WorkPlanTemplate_WorkPlan', 'WorkPlans_WorkStepTemplate_WorkStep', 'WorkPlans_WorkPlanTemplateEntry_WorkStep']; mapped_field_data: Optional composite upsert of custom field mappings. Set
218
+ hasMappedFieldDataChanged=true and populate mappedFieldData; leave both
219
+ unset/false on a toggles-only save. mappedFieldData is a MAP keyed by
220
+ mappingType enum name; the VALUE under each key is an object with THREE
221
+ fields (NOT a bare {source:target} map):
222
+ {
223
+ "<mappingType>": {
224
+ "sourceEntity": "<source object API name>", # e.g. WorkPlanTemplate
225
+ "targetEntity": "<target object API name>", # e.g. WorkPlan
226
+ "mappedFields": { "<sourceFieldApiName>": "<targetFieldApiName>" }
227
+ }
228
+ }
229
+ sourceEntity/targetEntity come from sourceApiName/targetApiName in the
230
+ getObjectMappingConfiguration_3 read; each sourceField + targetField pair
231
+ in mappedFields MUST come from that read's allSourceFields[] (the source)
232
+ and that source field's targetFields[] (the allowed, type-compatible
233
+ target). Omitting sourceEntity or targetEntity makes the controller build
234
+ a null ObjectMapping and the Tooling upsert fails with
235
+ dataTypeMismatchError. Persistence is a Tooling API upsert of the
236
+ FieldServiceSettings metadata record (ObjectMappingItem[]) — mappings
237
+ survive as org metadata, not an org pref. Verified example against a
238
+ live org (200 true, idempotent re-apply):
239
+ "mappedFieldData": {
240
+ "WorkPlans_WorkPlanTemplate_WorkPlan": {
241
+ "sourceEntity": "WorkPlanTemplate", "targetEntity": "WorkPlan",
242
+ "mappedFields": {"Custom_text_field__c": "Custom_text_field__c"}},
243
+ "WorkPlans_WorkStepTemplate_WorkStep": {
244
+ "sourceEntity": "WorkStepTemplate", "targetEntity": "WorkStep",
245
+ "mappedFields": {"Custom_text_field__c": "Custom_text_field__c"}},
246
+ "WorkPlans_WorkPlanTemplateEntry_WorkStep": {
247
+ "sourceEntity": "WorkPlanTemplateEntry", "targetEntity": "WorkStep",
248
+ "mappedFields": {"Custom_text_field__c": "Custom_text_field_2__c"}}
249
+ }; idempotency: Save is idempotent for toggles — re-issuing the same payload is a safe
250
+ no-op. All-hasXChanged=false is also a safe no-op (flag-gate strict).
251
+ To roll back a toggle change: (1) capture the GET response before save;
252
+ (2) re-PATCH with hasXChanged=true for each changed pair and the prior
253
+ value.
@@ -1,10 +1,8 @@
1
1
  ---
2
2
  name: field-service-work-rule-designer-configure
3
- description: "Designs the work rules for a Salesforce Field Service scheduling policy — the hard filters that determine which resources and time slots are eligible for an appointment. Step 2 of the three-part scheduling policy design flow; receives the policy block from sfs-scheduling-policy-designer and delegates to sfs-service-objective-designer when complete. Use this skill when a user wants to design or configure the work rules (hard eligibility filters) for a Field Service scheduling policy."
4
- user-invocable: false
3
+ description: "Designs the work rules for a Salesforce Field Service scheduling policy — the hard filters that determine which resources and time slots are eligible for an appointment. Step 2 of the three-part scheduling policy design flow. Receives the policy block from sfs-scheduling-policy-designer and delegates to sfs-service-objective-designer when complete."
5
4
  metadata:
6
5
  version: "1.0"
7
- domains: ["Field Service"]
8
6
  ---
9
7
 
10
8
  # Salesforce Field Service – Work Rule Designer
@@ -42,139 +40,119 @@ Each row: **name — engine (DB/Apex) — what it does.** "DB w/ ESO" means the
42
40
  | **TimeSlot Designated Work** | Apex | Reserves a time slot/shift for a specific work type — only that type schedules in that window. All-or-nothing rule (no relevance groups). |
43
41
  | **Service Crew Resources Availability** | Apex | Ensures a crew-type resource is only assigned when the crew meets the parent record's minimum crew size. |
44
42
 
45
- ### Requirements mapping
46
-
47
- Don't start from the rule list — start from **what the business needs**, then map each requirement to the rule(s) that satisfy it. Walk the user through this mapping:
48
-
49
- | If the requirement is… | Use this work rule |
50
- |---|---|
51
- | Resources need specific skills / proficiency levels | **Match Skills**; **Extended Match** |
52
- | Non-skill matching factors (e.g., serviceable postal codes) | **Match Boolean**; **Match Skills**; **Extended Match** |
53
- | Breaks during the day / specific or multiple breaks | **Service Resource Availability** (+ work rule entries for multiple breaks, ESO) |
54
- | Can work go into overtime? Can resources travel outside working hours? | **Service Resource Availability** |
55
- | Max number / duration of appointments per resource per day | **Count Rule** |
56
- | A specific resource **must** be assigned | **Required Resources** |
57
- | A specific resource **must not** be assigned | **Excluded Resources** |
58
- | Customer has specific service-call time windows | **Service Appointment Visiting Hours** |
59
- | Ensure crew-type resources get scheduled | **Service Crew Resources Availability** |
60
- | Appointments have arrival windows / required arrival times | **Match Time Rule** |
61
- | Cap travel distance from home / control travel cost across large territories | **Maximum Travel from Home** — ask whether the cap is by **distance** or by **travel time** (see note below) |
62
- | Assign specific work types to a resource for part/all of a day | **TimeSlot Designated Work** |
63
- | Restrict work to the resource's **primary and secondary** service territory memberships | **Working Territories** |
43
+ ### Interview order — MANDATORY
64
44
 
65
- Always include exactly one **Service Resource Availability** rule — the only mandatory rule this skill emits. Never emit Earliest Start Permitted or Due Date — provisioned automatically.
45
+ Walk through the 16 work rule types **in the exact order of the table in *The 16 work rule types* above** — top to bottom, one rule at a time. **Do NOT split the interview into a separate "which rules apply" pass and a later "configure them" pass, and do NOT reorder the rules.** For each rule, in order:
66
46
 
67
- **Arrival Window Match Time rules (opt-in default pair).** If the user wants appointments to honor customer **arrival windows**, ask them to confirm, and if they agree, emit **two** Match Time rules with these exact default settings — do not ask the user to fill these in, they are the standard arrival-window configuration:
47
+ 1. **Decide whether it applies.** Service Resource Availability is always in (no question). For every other rule, either the user's stated business needs already make it obviously needed, or ask the short **Applies when / ask** question in that rule's entry below. Interpret the user's needs against the *What it does* column — e.g. "resources need the right skills" → Match Skills; "cap travel from home" → Maximum Travel from Home.
48
+ 2. **If it applies and it has configuration, ask that rule's config question(s) right now** — before moving on to the next rule. Never defer configuration to the end. If the rule is selection-only (no config), just confirm it and continue.
68
49
 
69
- | Setting | Rule A | Rule B |
70
- |---|---|---|
71
- | Name | `Arrival Window Start` | `Arrival Window End` |
72
- | Service Schedule Time Property | `SchedStartTime` | `SchedStartTime` |
73
- | Service Time Operator | `Later than or Equal to` | `Before or Equal to` |
74
- | Service Time Property | `ArrivalWindowStartTime` | `ArrivalWindowEndTime` |
75
- | Pass Empty Values | `true` | `true` |
50
+ Then continue to the next rule in the table. Ask one question at a time. Only after you have walked all 16 rules is the rule list final.
76
51
 
77
- Emit each as a Match Time work rule whose `params` carry those four values (keys `serviceScheduleTimeProperty`, `serviceTimeOperator`, `serviceTimeProperty`, `passEmptyValues`). These are separate from the mandatory Earliest Start Permitted / Due Date rules (never emitted).
52
+ **Do NOT ask a relevance-group / subset question on every rule.** Most rules apply policy-wide, and asking "all or a subset?" after each one is noise. Instead:
78
53
 
79
- **Interpreting and emitting break times (clock time vs. shift-start offset):** A Service Resource Availability rule expresses breaks in one of two shapes, and **this skill decides the shape and emits the values the data-layer skill needs** — the data-layer skill never receives a clock time it has to convert. Choose the shape as follows:
80
-
81
- - **One fixed daily break at an absolute clock time** (e.g. "30 minutes at 12:00 every day") → emit it as an **absolute** break: `{ "mode": "absolute", "startClock": "12:00", "durationMinutes": 30 }`. No offset math, no working-day start needed.
82
- - **One or more breaks defined as an offset from the start of the working day** (e.g. "a 30-minute lunch starting 3 hours into the shift") → emit each as an **offset** break, in **minutes from the start of the working day**: `{ "mode": "offset", "earliestStartOffsetMinutes": 180, "latestEndOffsetMinutes": 240, "durationMinutes": 30 }`. All three of `earliestStartOffsetMinutes`, `latestEndOffsetMinutes`, and `durationMinutes` are **mandatory** for an offset break. **When the user states the break in offset terms already** (e.g. "3 hours after the start of day"), that offset *is* `earliestStartOffsetMinutes` (180) — **do not ask for the working-day start; you don't need it.**
83
- - **Breaks given as clock times but there is more than one** (e.g. "15 minutes at 10:00 and 30 minutes at 12:00") → you must use the **offset** shape, which means **converting each clock time into an offset from the start of the working day**. You cannot do that without knowing when the day starts, so **ask the user for the shift / working-day start**, then compute `earliestStartOffsetMinutes = (break start clock − day start)` in minutes for each break. Never assume the day starts at midnight (that would turn "10:00" into a wrong 600-minute offset). *(Only ask for the day start in this clock-time case — never when the break is already expressed as an offset.)*
54
+ - **React to scoping the user volunteers.** If while answering a rule's question the user signals the rule is only for a specific scenario, workforce, or work type — e.g. "only for part-time techs," "just for installation jobs," "tighter cap in France" — *then* pursue it: confirm the basis (Service Territory Member for a resource subset, Service Appointment for a work subset), get the Boolean field name, and record `relevanceGroup: { basis, booleanField }` on that rule. (First check the rule supports that basis under ES&O — see *Relevance Groups*.)
55
+ - **Otherwise sweep for it once, at the end.** After all 16 rules are walked, ask a single closing question: *"Are there any constraints here that should apply only to a certain part of your workforce or to certain types of work — rather than to everyone/everything? For example, different break or travel limits for part-time vs. full-time techs, or stricter handling for a specific work type or region."* Only if the user says yes do you scope the affected rules (per the *Relevance Groups* section). If no, leave every `relevanceGroup` null.
84
56
 
85
- **Always emit `latestEndOffsetMinutes` for every offset break — ask for it directly, do not fabricate a window.** The earliest start comes from what the user stated (an offset, or a converted clock time) — **do not invent ± tolerance windows around it** (no "±1 hour" / "±2 hour" options). If the user only gave a break start (or a duration with no stated finish-by), **ask them plainly for the latest the break may end**, phrased in the *same terms they used*: if they gave an offset ("starts 3 hours after start of day"), ask "what is the latest it may end, as time after the start of the day?" and convert (e.g. "4 hours after start" → 240); if they gave a clock time, ask for a clock time and convert with the day start. If the user says the break is fixed/pinned with no flex, set `latestEndOffsetMinutes = earliestStartOffsetMinutes + durationMinutes`. Never emit an offset break missing any of the three fields, and never guess the latest-end. If a break requirement is too involved to convert reliably, ask clarifying questions or recommend the manual approach rather than guessing.
57
+ Always include exactly one **Service Resource Availability** rule — the only mandatory rule this skill emits. Never emit Earliest Start Permitted or Due Date — provisioned automatically.
86
58
 
87
- **Maximum Travel from Home — establish the cap type, not the unit.** When a requirement caps how far a resource may travel from home, **ask the user whether the cap is by distance or by travel time** — the two are configured differently and the data-layer skill needs to know which. Emit the value and the type in `params`: `{ "maxTravelFromHome": 50, "maxTravelFromHomeType": "Distance" | "Travel Time" }`. Interpret the user's phrasing to set the *type* — "50 miles"/"50 km" ⇒ `Distance`, "45 minutes" ⇒ `Travel Time` — but **do not ask for or emit a distance unit (miles vs km): it is not part of the work-rule config**; the unit is governed by the org's locale/distance settings elsewhere, so the rule stores only the number. For `Travel Time` the value is minutes. Never emit the cap value without its type.
59
+ ---
88
60
 
89
- ### Per-rule configuration
61
+ ### The rules, in interview order
90
62
 
91
- Once the requirements mapping has selected which rules to build, configure the specifics for each. The **`Emit` line gives the exact `params` keys** — use these verbatim so the data-layer skill can map them. Only configure rules the user selected; skip the rest.
63
+ Take these in the order shown — it matches the table above. For each entry: **Applies when** tells you how to decide it's needed; **Ask** lists the config questions to ask *immediately* on a yes; **Emit** gives the exact `params` keys — use them verbatim so the data-layer skill can map them.
92
64
 
93
65
  ---
94
66
 
95
- **Service Resource Availability** *(always present)*
96
- Gate: Always included — no selection needed.
67
+ **1. Service Resource Availability** *(always present — the only mandatory rule)*
68
+ Applies when: always. No applicability question.
97
69
  Ask:
98
70
  - "Can work run into **overtime**?" (yes/no)
99
71
  - "Can resources **travel outside working hours** to/from home?" — if yes, ask how many minutes from home (to first job) and to home (from last job); "no limit" = 120; "no" = 0 for both
100
- - Breaks interview (see *Interpreting and emitting break times*)
72
+ - Breaks interview (see *Interpreting and emitting break times* below)
101
73
 
102
74
  Emit: `{ "enableOvertime": true|false, "travelFromHomeMinutes": <number>, "travelToHomeMinutes": <number>, "breaks": [ … ] }`
103
- Note: Travel values are minutes — 0 = no travel outside working hours, 120 = effectively unlimited. If user gives no availability detail, emit baseline (`enableOvertime: false`, travel keys and breaks omitted).
75
+ Note: Travel values are minutes — 0 = no travel outside working hours, 120 = effectively unlimited. If the user gives no availability detail, emit baseline (`enableOvertime: false`, travel keys and breaks omitted).
104
76
 
105
77
  ---
106
78
 
107
- **Match Time Rule** *(arrival windows)*
108
- Gate: Only if selected in requirements mapping.
109
- Ask: "Should appointments honor customer **arrival windows**?"
110
- Emit: Two default rules from the Arrival Window table — no further questions.
79
+ **2. Match Time Rule** *(arrival windows)*
80
+ Applies when: appointments should honor customer **arrival windows** / required arrival times. Ask: "Should appointments honor customer arrival windows?"
81
+ Emit: on a yes, emit the **two** default rules from the *Arrival Window Match Time rules* table below — do not ask the user to fill these in.
111
82
 
112
83
  ---
113
84
 
114
- **Match Skills**
115
- Gate: Only if selected in requirements mapping.
85
+ **3. Match Skills**
86
+ Applies when: resources need specific skills / proficiency levels.
116
87
  Ask: "Should the resource also **meet a minimum skill level** (proficiency), or is simply *having* the skill enough?"
117
88
  Emit: `{ "matchSkillLevel": true|false }`
118
89
  Note: Do not ask about skill-type AND/OR logic — this skill does not configure `skillTypeLogic`.
119
90
 
120
91
  ---
121
92
 
122
- **Match Fields**
123
- Gate: Only if selected in requirements mapping.
93
+ **4. Match Fields**
94
+ Applies when: one appointment field must match one resource field (1:1). (For one appointment field vs. multiple resource values, use Extended Match instead.)
124
95
  Ask: "Which Service Appointment field must match which Service Resource field, and with what operator?"
125
96
  Emit: `{ "serviceProperty": "<SA field>", "resourceProperty": "<resource field>", "booleanOperator": "=" }`
126
97
  Note: Operator is one of `=`, `>=`, `<=`, `>`, `<` (default `=`). Field names are the customer's own — pass through as given.
127
98
 
128
99
  ---
129
100
 
130
- **Match Boolean**
131
- Gate: Only if selected in requirements mapping.
101
+ **5. Match Boolean**
102
+ Applies when: a checkbox on the resource must be true/false — including non-skill matching factors (e.g., serviceable postal codes).
132
103
  Ask: "Which checkbox field on the resource must be true (or false)?"
133
104
  Emit: `{ "resourceProperty": "<resource field>", "value": true|false }`
134
105
  Note: Max 5 Match Boolean rules per policy.
135
106
 
136
107
  ---
137
108
 
138
- **Maximum Travel from Home**
139
- Gate: Only if selected in requirements mapping.
140
- Ask: "Is the cap by **distance** or by **travel time**?" (see cap-type note in Requirements mapping)
141
- Emit: `{ "maxTravelFromHome": <number>, "maxTravelFromHomeType": "Distance"|"Travel Time" }`
142
- Note: Distance unit (miles vs km) is not part of the rule — governed by org locale. For Travel Time, value is minutes.
109
+ **6. Extended Match** *(advisory only — data-layer skill will not build this)*
110
+ Applies when: custom-criteria matching via a junction object (e.g., serviceable postal codes, product lines).
111
+ Ask: None — no params to collect. Advise the user to set up before deploying:
112
+ 1. A junction object with exactly **two** Master-Detail relationships (to Service Resource + matched object) — packaged trigger requires exactly two or the rule fails
113
+ 2. A Service Appointment Lookup field driving the match; a reference field on the junction matched against it
114
+ 3. Once those exist, create and configure the rule manually in Setup (Field Service Settings → Scheduling → Work Rules)
115
+
116
+ Capture intended objects/fields in `prerequisites` as advisory text — do not emit in `workRules[]`.
117
+
118
+ ---
119
+
120
+ **7. Match Territory** — *(skip entirely; not part of the interview)*
121
+ This interview never emits a standalone Match Territory rule. **Skip it silently** — do not ask a Match Territory question, and do not announce or narrate that you are skipping it. Move straight from rule 6 to rule 8 with no mention of Match Territory at all. (If a user explicitly asks for primary/relocation-only territory scoping, advise manual configuration then — but never raise it yourself. Also: don't cover a resource by both Match Territory and Working Territories.)
143
122
 
144
123
  ---
145
124
 
146
- **Working Territories**
147
- Gate: Only if selected in requirements mapping.
125
+ **8. Working Territories**
126
+ Applies when: work must be restricted to the resource's **primary and secondary** service territory memberships.
148
127
  Ask: None — selecting the rule is sufficient.
149
128
  Emit: `{ "workingLocationEnablePrimary": true }`
150
- Note: No separate Match Territory question — the interview does not emit a standalone Match Territory rule. If primary/relocation-only scoping is needed, advise manual configuration.
151
129
 
152
130
  ---
153
131
 
154
- **Service Crew Resources Availability**
155
- Gate: Only if selected in requirements mapping.
156
- Ask:
157
- - "Should the rule evaluate individual crew members' availability and skills, not just the crew record?" → `considerCrewMembership`
158
- - "What is the maximum number of extra resources beyond the base crew that can be pulled in?" → `maxAdditionalResources` (optional)
159
-
160
- Emit: `{ "considerCrewMembership": true|false, "maxAdditionalResources": <number> }` (omit `maxAdditionalResources` if blank)
132
+ **9. Maximum Travel from Home**
133
+ Applies when: capping distance/travel time between a resource's home and any assigned appointment / controlling travel cost across large territories.
134
+ Ask: "Is the cap by **distance** or by **travel time**?" (see the cap-type note below), plus the cap value.
135
+ Emit: `{ "maxTravelFromHome": <number>, "maxTravelFromHomeType": "Distance"|"Travel Time" }`
136
+ Note: Distance unit (miles vs km) is not part of the rule — governed by org locale. For Travel Time, value is minutes.
161
137
 
162
138
  ---
163
139
 
164
- **Extended Match** *(advisory only — data-layer skill will not build this)*
165
- Gate: Only if selected in requirements mapping.
166
- Ask: None — no params to collect.
167
- Advise the user to set up before deploying:
168
- 1. A junction object with exactly **two** Master-Detail relationships (to Service Resource + matched object) — packaged trigger requires exactly two or the rule fails
169
- 2. A Service Appointment Lookup field driving the match; a reference field on the junction matched against it
170
- 3. Once those exist, create and configure the rule manually in Setup (Field Service Settings → Scheduling → Work Rules)
140
+ **10. Required Resources** *(selection-only)*
141
+ Applies when: any work order ever has a resource marked **Required** that must always be assigned. Ask: "Do any work orders ever have a specific resource marked *Required* that must always be assigned to that job?"
142
+ Emit: `{}`
143
+ Prerequisite: Resource Preference records must exist on the work order / WOLI — the rule enforces them but does not create them.
171
144
 
172
- Capture intended objects/fields in `prerequisites` as advisory text — do not emit in `workRules[]`.
145
+ ---
146
+
147
+ **11. Excluded Resources** *(selection-only)*
148
+ Applies when: any work order ever has a resource marked **Excluded** that must never be assigned. Ask: "Do any work orders ever have a resource marked *Excluded* that must never be assigned?"
149
+ Emit: `{}`
150
+ Prerequisite: Resource Preference records must exist on the work order / WOLI — the rule enforces them but does not create them.
173
151
 
174
152
  ---
175
153
 
176
- **Count Rule**
177
- Gate: Only if selected in requirements mapping.
154
+ **12. Count Rule**
155
+ Applies when: capping the number/duration of appointments (or a custom value) per resource per day.
178
156
  Ask: Have the user describe the limit in plain terms, then classify into:
179
157
  - `countBy` — `"Appointments"` (count of jobs), `"Hours"` (duration cap), or `"Custom"` (sum of a custom SA field)
180
158
  - `maxValue` — the numeric cap (for Hours, convert to hours)
@@ -185,32 +163,67 @@ Note: Time Resolution is always Daily; counted object is always Service Appointm
185
163
 
186
164
  ---
187
165
 
188
- **Selection-only rules** *(no config fields — each rule acts as an on/off switch that tells the scheduler to enforce constraints defined elsewhere in the org; selected in requirements mapping, no further questions needed)*
189
-
190
- **Required Resources / Excluded Resources**
191
- Gate: Only if selected in requirements mapping.
192
- Emit: `{}`
193
- Prerequisite: Resource Preference records must exist on the work order / WOLI — the rule enforces them but does not create them.
194
-
195
- **Work Capacity** *(ESO only)*
196
- Gate: Only if selected in requirements mapping.
166
+ **13. Work Capacity** *(ESO only — selection-only)*
167
+ Applies when: Work Capacity Limit records cap how much work schedules per territory. Ask: "Do you use Work Capacity Limit records to cap how much work can be scheduled per territory?"
197
168
  Emit: `{}`
198
169
  Prerequisite: WorkCapacityLimit records must be configured per territory outside the policy.
199
170
 
200
- **Service Appointment Visiting Hours**
201
- Gate: Only if selected in requirements mapping.
171
+ ---
172
+
173
+ **14. Service Appointment Visiting Hours** *(selection-only)*
174
+ Applies when: customers have allowed visit windows that should block scheduling outside those hours. Ask: "Do customers have allowed visit windows (e.g., weekdays only, or mornings only) that should block scheduling outside those hours?"
202
175
  Emit: `{}`
203
- Note: Do not ask for the windows — they are per-account data on OperatingHours records, not a policy-wide value. (No relevance-group scoping.)
176
+ Note: Do not ask for the windows — they are per-account data on OperatingHours records, not a policy-wide value. All-or-nothing rule — no relevance-group scoping.
204
177
  Prerequisite: Each account must have visiting/operating hours populated; the Work Order's Visiting Hours must resolve from the account.
205
178
 
206
- **TimeSlot Designated Work**
207
- Gate: Only if selected in requirements mapping.
179
+ ---
180
+
181
+ **15. TimeSlot Designated Work** *(selection-only)*
182
+ Applies when: certain time slots must be reserved for specific types of work. Ask: "Do you need to reserve certain time slots for specific types of work (e.g., install work only in morning slots)?"
208
183
  Emit: `{}`
209
- Note: Do not ask for slot→work mappings — that is data setup. Phrase the selection as "types of work," not "Work Type" (the designation is broader than the Work Type object). (No relevance-group scoping.)
184
+ Note: Do not ask for slot→work mappings — that is data setup. Phrase the selection as "types of work," not "Work Type" (the designation is broader than the Work Type object). All-or-nothing rule — no relevance-group scoping.
210
185
  Prerequisite: Time slots must be configured to designate the intended work.
211
186
 
212
187
  ---
213
188
 
189
+ **16. Service Crew Resources Availability**
190
+ Applies when: crew-type resources must only be assigned when the crew meets the parent record's minimum crew size.
191
+ Ask:
192
+ - "Should the rule evaluate individual crew members' availability and skills, not just the crew record?" → `considerCrewMembership`
193
+ - "What is the maximum number of extra resources beyond the base crew that can be pulled in?" → `maxAdditionalResources` (optional)
194
+
195
+ Emit: `{ "considerCrewMembership": true|false, "maxAdditionalResources": <number> }` (omit `maxAdditionalResources` if blank)
196
+
197
+ ---
198
+
199
+ ### Configuration reference notes
200
+
201
+ These deep-dives support the **Ask** lines above; consult them when configuring the rule that references them.
202
+
203
+ **Arrival Window Match Time rules (default pair — rule 2).** When the user confirms appointments should honor customer arrival windows, emit **two** Match Time rules with these exact default settings — do not ask the user to fill these in, they are the standard arrival-window configuration:
204
+
205
+ | Setting | Rule A | Rule B |
206
+ |---|---|---|
207
+ | Name | `Arrival Window Start` | `Arrival Window End` |
208
+ | Service Schedule Time Property | `SchedStartTime` | `SchedStartTime` |
209
+ | Service Time Operator | `Later than or Equal to` | `Before or Equal to` |
210
+ | Service Time Property | `ArrivalWindowStartTime` | `ArrivalWindowEndTime` |
211
+ | Pass Empty Values | `true` | `true` |
212
+
213
+ Emit each as a Match Time work rule whose `params` carry those four values (keys `serviceScheduleTimeProperty`, `serviceTimeOperator`, `serviceTimeProperty`, `passEmptyValues`). These are separate from the mandatory Earliest Start Permitted / Due Date rules (never emitted).
214
+
215
+ **Interpreting and emitting break times — clock time vs. shift-start offset (rule 1).** A Service Resource Availability rule expresses breaks in one of two shapes, and **this skill decides the shape and emits the values the data-layer skill needs** — the data-layer skill never receives a clock time it has to convert. Choose the shape as follows:
216
+
217
+ - **One fixed daily break at an absolute clock time** (e.g. "30 minutes at 12:00 every day") → emit it as an **absolute** break: `{ "mode": "absolute", "startClock": "12:00", "durationMinutes": 30 }`. No offset math, no working-day start needed.
218
+ - **One or more breaks defined as an offset from the start of the working day** (e.g. "a 30-minute lunch starting 3 hours into the shift") → emit each as an **offset** break, in **minutes from the start of the working day**: `{ "mode": "offset", "earliestStartOffsetMinutes": 180, "latestEndOffsetMinutes": 240, "durationMinutes": 30 }`. All three of `earliestStartOffsetMinutes`, `latestEndOffsetMinutes`, and `durationMinutes` are **mandatory** for an offset break. **When the user states the break in offset terms already** (e.g. "3 hours after the start of day"), that offset *is* `earliestStartOffsetMinutes` (180) — **do not ask for the working-day start; you don't need it.**
219
+ - **Breaks given as clock times but there is more than one** (e.g. "15 minutes at 10:00 and 30 minutes at 12:00") → you must use the **offset** shape, which means **converting each clock time into an offset from the start of the working day**. You cannot do that without knowing when the day starts, so **ask the user for the shift / working-day start**, then compute `earliestStartOffsetMinutes = (break start clock − day start)` in minutes for each break. Never assume the day starts at midnight (that would turn "10:00" into a wrong 600-minute offset). *(Only ask for the day start in this clock-time case — never when the break is already expressed as an offset.)*
220
+
221
+ **Always emit `latestEndOffsetMinutes` for every offset break — ask for it directly, do not fabricate a window.** The earliest start comes from what the user stated (an offset, or a converted clock time) — **do not invent ± tolerance windows around it** (no "±1 hour" / "±2 hour" options). If the user only gave a break start (or a duration with no stated finish-by), **ask them plainly for the latest the break may end**, phrased in the *same terms they used*: if they gave an offset ("starts 3 hours after start of day"), ask "what is the latest it may end, as time after the start of the day?" and convert (e.g. "4 hours after start" → 240); if they gave a clock time, ask for a clock time and convert with the day start. If the user says the break is fixed/pinned with no flex, set `latestEndOffsetMinutes = earliestStartOffsetMinutes + durationMinutes`. Never emit an offset break missing any of the three fields, and never guess the latest-end. If a break requirement is too involved to convert reliably, ask clarifying questions or recommend the manual approach rather than guessing.
222
+
223
+ **Maximum Travel from Home — establish the cap type, not the unit (rule 9).** When a requirement caps how far a resource may travel from home, **ask the user whether the cap is by distance or by travel time** — the two are configured differently and the data-layer skill needs to know which. Emit the value and the type in `params`: `{ "maxTravelFromHome": 50, "maxTravelFromHomeType": "Distance" | "Travel Time" }`. Interpret the user's phrasing to set the *type* — "50 miles"/"50 km" ⇒ `Distance`, "45 minutes" ⇒ `Travel Time` — but **do not ask for or emit a distance unit (miles vs km): it is not part of the work-rule config**; the unit is governed by the org's locale/distance settings elsewhere, so the rule stores only the number. For `Travel Time` the value is minutes. Never emit the cap value without its type.
224
+
225
+ ---
226
+
214
227
  ## Relevance Groups
215
228
 
216
229
  A relevance group scopes a single work rule or service objective so it applies only to certain appointments or resources, instead of the whole policy. This lets one policy hold different logic for different work or resource types — e.g., different break/travel limits for part-time vs. full-time employees, or expedited scheduling for high-value accounts.
@@ -286,3 +299,16 @@ When the user confirms the work rules, delegate to `sfs-service-objective-design
286
299
  Do not start the service objective interview here. Transition message:
287
300
 
288
301
  > "Work rules are locked in. Next: service objectives — the scoring criteria that rank the eligible candidates. I'll walk through the trade-off questions one at a time."
302
+
303
+ <!-- skill-validate: ignore-start -->
304
+ <!-- codey:operations start -->
305
+ ## Operations Reference
306
+
307
+ Operations this skill uses — routing and dependency reference.
308
+
309
+ | Operation | Purpose | Status | Call | Depends on |
310
+ |-----------|---------|--------|------|------------|
311
+ | `emit-work-rules-block` | write | — | — | — |
312
+ | `handoff-to-service-objective-designer` | delegate | — | → `sfs-setup-experience/sfs-service-objective-designer` | `emit-work-rules-block` |
313
+ <!-- codey:operations end -->
314
+ <!-- skill-validate: ignore-end -->