@salesforce/afv-skills 1.63.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.
- package/package.json +1 -1
- package/skills/agentforce-gpt-email-generation-configure/SKILL.md +312 -0
- package/skills/agentforce-offline-experimentation-run/SKILL.md +253 -0
- package/skills/agentforce-offline-experimentation-run/scripts/build_report.py +796 -0
- package/skills/agentforce-offline-experimentation-run/scripts/resolve-token.sh +111 -0
- package/skills/agentforce-offline-experimentation-run/scripts/sfap_replay.py +1053 -0
- package/skills/agentforce-wizard-ui-forecasting-analytics-components-configure/SKILL.md +64 -0
- package/skills/agentforce-wizard-ui-sales-einstein-components-configure/SKILL.md +46 -0
- package/skills/automation-company-profile-info-query/SKILL.md +51 -0
- package/skills/automation-digital-wallet-configure/SKILL.md +689 -0
- package/skills/automation-flow-coordinate/SKILL.md +95 -0
- package/skills/automation-flow-coordinate/references/elements/action-call/action-call.md +1569 -0
- package/skills/automation-flow-coordinate/references/elements/action-call/conversation-messaging.md +96 -0
- package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-sms-message.json +23 -0
- package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-to-journey-no-fields.json +31 -0
- package/skills/automation-flow-coordinate/references/elements/action-call/send-to-journey.md +179 -0
- package/skills/automation-flow-coordinate/references/elements/exit-rule/examples/event-email-link-click.json +13 -0
- package/skills/automation-flow-coordinate/references/elements/exit-rule/exit-rule.md +83 -0
- package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/examples/forward-to-bot-or-agent.json +69 -0
- package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/forward-to-bot-or-agent.md +274 -0
- package/skills/automation-flow-coordinate/references/elements/start/audience-common.md +192 -0
- package/skills/automation-flow-coordinate/references/elements/start/automation-event-triggered.md +130 -0
- package/skills/automation-flow-coordinate/references/elements/start/data-cloud-data-change-triggered.md +92 -0
- package/skills/automation-flow-coordinate/references/elements/start/form-submission-triggered.md +88 -0
- package/skills/automation-flow-coordinate/references/elements/start/segment-triggered.md +152 -0
- package/skills/automation-flow-coordinate/references/elements/start/start.md +539 -0
- package/skills/automation-flow-coordinate/references/elements/subflow/subflow.md +152 -0
- package/skills/automation-flow-coordinate/references/elements/wait/wait.md +497 -0
- package/skills/automation-flow-coordinate/references/recipes/author/author.md +868 -0
- package/skills/automation-flow-coordinate/references/recipes/summarize/element-generic.md +300 -0
- package/skills/automation-flow-coordinate/references/recipes/summarize/reference-resolution.md +292 -0
- package/skills/automation-flow-coordinate/references/recipes/summarize/summarize.md +323 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/examples/debug-output-template.md +109 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/shape.md +219 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/shared-stages/intent-analyzer.md +180 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/debug.md +175 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/promote.md +255 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/save-debug.md +212 -0
- package/skills/automation-flow-coordinate/references/resources/variable/variable.md +171 -0
- package/skills/automation-flow-coordinate/references/shared/anti-patterns.md +786 -0
- package/skills/automation-flow-coordinate/references/shared/end/end.md +267 -0
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/README.md +69 -0
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/predictions.jsonl +80 -0
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/prompts.jsonl +116 -0
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/flow-type-resolver.md +321 -0
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/taxonomy.json +320 -0
- package/skills/automation-flow-coordinate/references/shared/server-functions.md +597 -0
- package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +21 -11
- package/skills/automation-sandbox-post-copy-config-generate/assets/config_template.json +10 -0
- package/skills/automation-sandbox-post-copy-config-generate/assets/json_schema.json +33 -1
- package/skills/automation-sandbox-post-copy-config-generate/references/configuration_catalog.md +44 -1
- package/skills/automation-sandbox-post-copy-configure/SKILL.md +132 -124
- package/skills/automation-sandbox-post-copy-configure/references/flow_activation_path.md +151 -0
- package/skills/automation-sandbox-post-copy-configure/references/scheduled_apex_path.md +55 -9
- package/skills/automotive-cloud-appraisal-management-settings-configure/SKILL.md +69 -0
- package/skills/automotive-cloud-dealer-essentials-configure/SKILL.md +78 -0
- package/skills/automotive-cloud-ground-agent-data-pipelines-configure/SKILL.md +373 -0
- package/skills/automotive-cloud-ground-mfg-agent-data-pipelines-configure/SKILL.md +273 -0
- package/skills/automotive-cloud-mfg-agent-data-pipelines-configure/SKILL.md +259 -0
- package/skills/automotive-cloud-mfg-sales-concierge-agent-create/SKILL.md +369 -0
- package/skills/automotive-cloud-mfg-sales-concierge-foundation-configure/SKILL.md +542 -0
- package/skills/automotive-cloud-mfg-sales-concierge-foundation-coordinate/SKILL.md +159 -0
- package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-agent-create/SKILL.md +349 -0
- package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-configure/SKILL.md +505 -0
- package/skills/automotive-cloud-sales-concierge-agent-create/SKILL.md +380 -0
- package/skills/automotive-cloud-sales-concierge-foundation-configure/SKILL.md +567 -0
- package/skills/automotive-cloud-sales-concierge-foundation-coordinate/SKILL.md +159 -0
- package/skills/automotive-cloud-sales-concierge-orchestrator-agent-create/SKILL.md +360 -0
- package/skills/automotive-cloud-sales-concierge-orchestrator-configure/SKILL.md +539 -0
- package/skills/automotive-cloud-sales-concierge-search-grounding-configure/SKILL.md +358 -0
- package/skills/commerce-b2b-merchant-quote-configure/SKILL.md +602 -0
- package/skills/commerce-b2b-store-configure/SKILL.md +251 -0
- package/skills/commerce-credit-memo-create/SKILL.md +139 -0
- package/skills/commerce-delivery-business-hours-configure/SKILL.md +277 -0
- package/skills/commerce-delivery-estimation-apply/SKILL.md +155 -0
- package/skills/commerce-delivery-estimation-configure/SKILL.md +377 -0
- package/skills/commerce-delivery-routing-specs-integrate/SKILL.md +174 -0
- package/skills/commerce-estimate-bopis-query/SKILL.md +279 -0
- package/skills/commerce-estimate-delivery-date-query/SKILL.md +349 -0
- package/skills/commerce-fees-apply/SKILL.md +227 -0
- package/skills/commerce-fulfillment-routing-analyze/SKILL.md +200 -0
- package/skills/commerce-guest-buyer-create/SKILL.md +173 -0
- package/skills/commerce-location-bopis-configure/SKILL.md +378 -0
- package/skills/commerce-location-business-hours-configure/SKILL.md +235 -0
- package/skills/commerce-location-delivery-processing-time-configure/SKILL.md +309 -0
- package/skills/commerce-location-graph-integrate/SKILL.md +131 -0
- package/skills/commerce-location-shipping-carrier-method-configure/SKILL.md +755 -0
- package/skills/commerce-location-temporary-operating-hours-configure/SKILL.md +331 -0
- package/skills/commerce-merchant-buyer-groups-configure/SKILL.md +579 -0
- package/skills/commerce-merchant-buyer-user-onboarding-create/SKILL.md +626 -0
- package/skills/commerce-merchant-catalog-configure/SKILL.md +614 -0
- package/skills/commerce-merchant-extension-provider-configure/SKILL.md +368 -0
- package/skills/commerce-merchant-insights-account-health-churn-analyze/SKILL.md +118 -0
- package/skills/commerce-merchant-insights-inventory-returns-analyze/SKILL.md +65 -0
- package/skills/commerce-merchant-insights-order-shopper-get/SKILL.md +90 -0
- package/skills/commerce-merchant-insights-product-performance-analyze/SKILL.md +72 -0
- package/skills/commerce-merchant-insights-query/SKILL.md +279 -0
- package/skills/commerce-merchant-storefront-guest-access-configure/SKILL.md +656 -0
- package/skills/commerce-order-summary-change-apply/SKILL.md +375 -0
- package/skills/commerce-product-details-get/SKILL.md +363 -0
- package/skills/commerce-product-search/SKILL.md +563 -0
- package/skills/commerce-react-storefront-create/SKILL.md +350 -0
- package/skills/commerce-return-order-summary-create/SKILL.md +513 -0
- package/skills/commerce-search-relevance-analyze/SKILL.md +757 -0
- package/skills/commerce-temporary-processing-time-override-create/SKILL.md +274 -0
- package/skills/communications-initial-setup-configure/SKILL.md +630 -0
- package/skills/communications-multisite-configure/SKILL.md +571 -0
- package/skills/communications-revenue-cloud-settings-configure/SKILL.md +74 -0
- package/skills/communications-smb-fiber-catalog-create/SKILL.md +413 -0
- package/skills/communications-tmf-integrate/SKILL.md +1368 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/SKILL.md +54 -107
- package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/copy.json +1 -1
- package/skills/consumer-goods-promotion-bo-api-deploy/references/conventions-and-payload-rules.md +82 -5
- package/skills/consumer-goods-promotion-bo-api-deploy/references/generate-and-wire.md +35 -2
- package/skills/consumer-goods-promotion-bo-api-deploy/references/preflight-and-seed-queries.md +149 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/references/smoke-and-verify.md +17 -1
- package/skills/consumer-goods-visit-activity-act4-questions-assign/SKILL.md +448 -0
- package/skills/consumer-goods-visit-activity-act5-standard-create/SKILL.md +269 -0
- package/skills/consumer-goods-visit-activity-act6-assortment-configure/SKILL.md +271 -0
- package/skills/consumer-goods-visit-activity-act7-account-scoping-create/SKILL.md +382 -0
- package/skills/consumer-goods-visit-activity-act8-plan-attach-create/SKILL.md +373 -0
- package/skills/consumer-goods-visit-activity-act9-proof-validate/SKILL.md +389 -0
- package/skills/consumer-goods-visit-and-activity-act1-specification-create/SKILL.md +338 -0
- package/skills/consumer-goods-visit-and-activity-act2-template-create/SKILL.md +547 -0
- package/skills/consumer-goods-visit-and-activity-act3-definition-create/SKILL.md +346 -0
- package/skills/consumer-goods-visit-and-activity-configure/SKILL.md +1110 -0
- package/skills/crm-analytics-adoption-insights-configure/SKILL.md +224 -0
- package/skills/crm-analytics-custom-report-type-lightning-configure/SKILL.md +418 -0
- package/skills/crm-analytics-dashboards-configure/SKILL.md +731 -0
- package/skills/crm-analytics-operational-analytics-metadata-bridge-migrate/SKILL.md +233 -0
- package/skills/crm-analytics-report-notifications-ui-configure/SKILL.md +184 -0
- package/skills/crm-analytics-sharing-inheritance-coverage-analyze/SKILL.md +167 -0
- package/skills/crm-analytics-sonic-getting-started-configure/SKILL.md +55 -0
- package/skills/crm-analytics-tableau-next-app-deploy/SKILL.md +1350 -0
- package/skills/crm-analytics-tableau-next-c360-basemodel-validate/SKILL.md +1862 -0
- package/skills/crm-analytics-tableau-next-datacloud-validate/SKILL.md +83 -0
- package/skills/crm-analytics-tableau-next-provisioning-validate/SKILL.md +81 -0
- package/skills/data360-activation-create/SKILL.md +104 -0
- package/skills/data360-activation-external-platform-get/SKILL.md +49 -0
- package/skills/data360-activation-target-create/SKILL.md +93 -0
- package/skills/data360-activation-v2-create/SKILL.md +456 -0
- package/skills/data360-audience-dmo-get/SKILL.md +38 -0
- package/skills/data360-calculated-affinity-create/SKILL.md +82 -0
- package/skills/data360-calculated-insight-create/SKILL.md +148 -0
- package/skills/data360-catalog-metadata-create/SKILL.md +183 -0
- package/skills/data360-code-extension-create/SKILL.md +115 -0
- package/skills/data360-communication-capping-create/SKILL.md +227 -0
- package/skills/data360-connection-create/SKILL.md +491 -0
- package/skills/data360-content-lens-create/SKILL.md +181 -0
- package/skills/data360-data-action-create/SKILL.md +126 -0
- package/skills/data360-data-action-target-create/SKILL.md +181 -0
- package/skills/data360-data-clean-room-create/SKILL.md +238 -0
- package/skills/data360-data-governance-create/SKILL.md +746 -0
- package/skills/data360-data-graph-create/SKILL.md +82 -0
- package/skills/data360-data-harmonized-model-object-reference-create/SKILL.md +38 -0
- package/skills/data360-data-lake-object-create/SKILL.md +207 -0
- package/skills/data360-data-model-object-catalog-get/SKILL.md +49 -0
- package/skills/data360-data-model-object-create/SKILL.md +128 -0
- package/skills/data360-data-model-object-mapping-create/SKILL.md +106 -0
- package/skills/data360-data-space-create/SKILL.md +161 -0
- package/skills/data360-data-streams-create/SKILL.md +324 -0
- package/skills/data360-engagement-signal-get/SKILL.md +38 -0
- package/skills/data360-experiment-create/SKILL.md +82 -0
- package/skills/data360-goal-based-campaign-create/SKILL.md +192 -0
- package/skills/data360-harmonization-process-history-get/SKILL.md +38 -0
- package/skills/data360-harmonized-unstructured-dmo-create/SKILL.md +84 -0
- package/skills/data360-identity-resolution-create/SKILL.md +115 -0
- package/skills/data360-intelligent-document-processing-create/SKILL.md +148 -0
- package/skills/data360-knowledge-graph-construction-create/SKILL.md +93 -0
- package/skills/data360-knowledge-graph-create/SKILL.md +216 -0
- package/skills/data360-knowledge-space-mcp-configure/SKILL.md +475 -0
- package/skills/data360-machine-learning-mcp-configure/SKILL.md +697 -0
- package/skills/data360-multi-org-mcp-configure/SKILL.md +117 -0
- package/skills/data360-secondary-index-mcp-configure/SKILL.md +126 -0
- package/skills/data360-segment-mcp-configure/SKILL.md +159 -0
- package/skills/data360-semantic-calculated-dimension-mcp-configure/SKILL.md +93 -0
- package/skills/data360-semantic-calculated-measurement-mcp-configure/SKILL.md +93 -0
- package/skills/data360-semantic-data-object-mcp-configure/SKILL.md +93 -0
- package/skills/data360-semantic-dimension-mcp-configure/SKILL.md +38 -0
- package/skills/data360-semantic-engine-mcp-configure/SKILL.md +62 -0
- package/skills/data360-semantic-measurement-mcp-configure/SKILL.md +38 -0
- package/skills/data360-semantic-metric-mcp-configure/SKILL.md +93 -0
- package/skills/data360-semantic-model-mcp-configure/SKILL.md +115 -0
- package/skills/data360-standard-mapping-mcp-configure/SKILL.md +38 -0
- package/skills/data360-tenant-lifecycle-mcp-configure/SKILL.md +73 -0
- package/skills/dx-devops-conflict-resolve/SKILL.md +1 -5
- package/skills/dx-devops-pipeline-manage/SKILL.md +1 -5
- package/skills/dx-devops-project-manage/SKILL.md +1 -5
- package/skills/dx-devops-promote/SKILL.md +1 -5
- package/skills/dx-devops-request-status/SKILL.md +1 -5
- package/skills/dx-lifecycle-center/SKILL.md +120 -0
- package/skills/dx-lifecycle-center/examples/workflows.md +175 -0
- package/skills/dx-lifecycle-center/references/connect-api.md +123 -0
- package/skills/dx-lifecycle-center/references/connect-org.md +184 -0
- package/skills/dx-lifecycle-center/references/deploy.md +153 -0
- package/skills/dx-lifecycle-center/references/error-handling.md +21 -0
- package/skills/dx-lifecycle-center/references/hub-org.md +37 -0
- package/skills/dx-lifecycle-center/references/list-orgs.md +99 -0
- package/skills/dx-lifecycle-center/references/request-body.md +75 -0
- package/skills/dx-lifecycle-center/references/troubleshooting.md +31 -0
- package/skills/dx-lifecycle-center/scripts/poll-deploy-status.sh +200 -0
- package/skills/dx-lifecycle-center/scripts/resolve-environment.sh +120 -0
- package/skills/dx-org-devhub-configure/SKILL.md +1 -3
- package/skills/dx-org-shape-manage/SKILL.md +1 -5
- package/skills/dx-org-snapshot-manage/SKILL.md +1 -3
- package/skills/education-cloud-academic-calendar-generate/SKILL.md +1 -3
- package/skills/education-cloud-course-catalog-migrate/SKILL.md +1 -3
- package/skills/education-cloud-domain-configure/SKILL.md +1 -3
- package/skills/education-cloud-multi-campus-configure/SKILL.md +1 -3
- package/skills/education-cloud-student-recruitment-agent-configure/SKILL.md +1 -5
- package/skills/experience-afv-query/SKILL.md +234 -0
- package/skills/experience-agentforce-vibes-in-react-configure/SKILL.md +63 -0
- package/skills/experience-apex-components-configure/SKILL.md +69 -0
- package/skills/experience-apex-pages-configure/SKILL.md +107 -0
- package/skills/experience-app-home-configure/SKILL.md +76 -0
- package/skills/experience-aura-lightning-out-access-configure/SKILL.md +58 -0
- package/skills/experience-briefcase-configure/SKILL.md +287 -0
- package/skills/experience-community-flexi-page-list-create/SKILL.md +74 -0
- package/skills/experience-community-template-definition-list-query/SKILL.md +48 -0
- package/skills/experience-community-theme-definition-list-query/SKILL.md +38 -0
- package/skills/experience-content-assets-configure/SKILL.md +86 -0
- package/skills/experience-custom-domain-create/SKILL.md +727 -0
- package/skills/experience-defer-rendering-workspace-page-setup-configure/SKILL.md +41 -0
- package/skills/experience-field-service-app-builder-configure/SKILL.md +187 -0
- package/skills/experience-flow-category-configure/SKILL.md +117 -0
- package/skills/experience-formula-configure/SKILL.md +358 -0
- package/skills/experience-global-actions-configure/SKILL.md +69 -0
- package/skills/experience-global-publisher-layouts-configure/SKILL.md +79 -0
- package/skills/experience-instrumentation-configure/SKILL.md +64 -0
- package/skills/experience-lex-engagement-configure/SKILL.md +50 -0
- package/skills/experience-lightning-bolt-open/SKILL.md +12 -0
- package/skills/experience-lightning-out-configure/SKILL.md +129 -0
- package/skills/experience-lightning-preview-configure/SKILL.md +67 -0
- package/skills/experience-lightning-types-query/SKILL.md +98 -0
- package/skills/experience-malware-scan-configure/SKILL.md +71 -0
- package/skills/experience-my-salesforce-configure/SKILL.md +126 -0
- package/skills/experience-navigation-menus-configure/SKILL.md +235 -0
- package/skills/experience-notification-types-configure/SKILL.md +206 -0
- package/skills/experience-notifications-configure/SKILL.md +75 -0
- package/skills/experience-record-discovery-query/SKILL.md +227 -0
- package/skills/experience-regenerate-previews-open/SKILL.md +94 -0
- package/skills/experience-sales-cloud-mab-configure/SKILL.md +254 -0
- package/skills/experience-schema-builder-open/SKILL.md +38 -0
- package/skills/experience-simple-record-home-configure/SKILL.md +110 -0
- package/skills/experience-static-resources-configure/SKILL.md +74 -0
- package/skills/experience-ui-bundle-2gp-deploy/SKILL.md +1 -3
- package/skills/experience-ui-bundle-features-generate/SKILL.md +1 -5
- package/skills/experience-ui-bundle-mfa-configure/SKILL.md +1 -3
- package/skills/field-service-data-capture-form-deployer-configure/SKILL.md +23 -2
- package/skills/field-service-data-capture-form-designer-configure/SKILL.md +13 -3
- package/skills/field-service-data-capture-migrate/SKILL.md +1 -3
- package/skills/field-service-mobile-branding-configure/SKILL.md +17 -3
- package/skills/field-service-objective-designer-configure/SKILL.md +72 -379
- package/skills/field-service-prework-brief-deployer-configure/SKILL.md +10 -537
- package/skills/field-service-scheduling-policy-designer-query/SKILL.md +65 -1093
- package/skills/{field-service-setup-orchestrator-get → field-service-setup-coordinate}/SKILL.md +18 -3
- package/skills/field-service-sobject-create-configure/SKILL.md +13 -213
- package/skills/field-service-voice-to-form-configure/SKILL.md +40 -11
- package/skills/field-service-work-plan-configure/SKILL.md +253 -0
- package/skills/field-service-work-rule-designer-configure/SKILL.md +121 -95
- package/skills/fsc-actionable-segmentation-settings-configure/SKILL.md +180 -0
- package/skills/fsc-digital-origination-bre-decision-matrix-foundation-create/SKILL.md +196 -0
- package/skills/fsc-digital-origination-bre-disclosures-consent-configure/SKILL.md +106 -0
- package/skills/fsc-digital-origination-bre-document-upload-configure/SKILL.md +96 -0
- package/skills/fsc-digital-origination-bre-permissions-assign/SKILL.md +111 -0
- package/skills/fsc-digital-origination-bre-setup-coordinate/SKILL.md +250 -0
- package/skills/fsc-digital-origination-bre-stp-eligibility-configure/SKILL.md +122 -0
- package/skills/fsc-digital-origination-coordinate/SKILL.md +653 -0
- package/skills/fsc-digital-origination-demo-run/SKILL.md +225 -0
- package/skills/fsc-digital-origination-execution-guardrails-validate/SKILL.md +112 -0
- package/skills/fsc-digital-origination-initial-setup-configure/SKILL.md +396 -0
- package/skills/fsc-digital-origination-pricing-setup-coordinate/SKILL.md +336 -0
- package/skills/fsc-digital-origination-pricing-setup-data-foundation-create/SKILL.md +208 -0
- package/skills/fsc-digital-origination-pricing-setup-procedure-create/SKILL.md +375 -0
- package/skills/fsc-digital-origination-product-setup-act1-permissions-assign/SKILL.md +83 -0
- package/skills/fsc-digital-origination-product-setup-coordinate/SKILL.md +248 -0
- package/skills/fsc-digital-origination-sample-data-create/SKILL.md +206 -0
- package/skills/fsc-document-checklist-settings-configure/SKILL.md +57 -0
- package/skills/fsc-flexible-hierarchy-configure/SKILL.md +148 -0
- package/skills/fsc-flexible-hierarchy-foundation-configure/SKILL.md +1430 -0
- package/skills/fsc-flexible-hierarchy-graph-config-create/SKILL.md +471 -0
- package/skills/fsc-flexible-hierarchy-rule-based-graph-deploy/SKILL.md +429 -0
- package/skills/fsc-pricing-product-configurator-configure/SKILL.md +150 -0
- package/skills/fsc-pricing-salesforce-omnistudio-switch/SKILL.md +123 -0
- package/skills/fsc-product-act2-catalog-categories-create/SKILL.md +82 -0
- package/skills/fsc-product-act3-attributes-create/SKILL.md +249 -0
- package/skills/fsc-product-act4-classification-assignment-create/SKILL.md +196 -0
- package/skills/fsc-product-act5-considerations-get/SKILL.md +44 -0
- package/skills/fsc-stage-management-apex-flow-deploy/SKILL.md +384 -0
- package/skills/fsc-stage-management-compliant-data-sharing-configure/SKILL.md +144 -0
- package/skills/fsc-stage-management-decision-matrices-create/SKILL.md +107 -0
- package/skills/fsc-stage-management-definition-assignments-create/SKILL.md +189 -0
- package/skills/fsc-stage-management-definition-create/SKILL.md +108 -0
- package/skills/fsc-stage-management-permissions-assign/SKILL.md +143 -0
- package/skills/fsc-stage-management-transitions-configure/SKILL.md +139 -0
- package/skills/health-cloud-appt-booking-config-configure/SKILL.md +135 -0
- package/skills/health-cloud-appt-booking-url-config-configure/SKILL.md +134 -0
- package/skills/health-cloud-care-provider-affl-role-config-configure/SKILL.md +136 -0
- package/skills/health-cloud-care-provider-search-config-configure/SKILL.md +134 -0
- package/skills/health-cloud-care-requests-create/SKILL.md +178 -0
- package/skills/health-cloud-initial-configure/SKILL.md +511 -0
- package/skills/health-cloud-patient-appointment-scheduling-configure/SKILL.md +1374 -0
- package/skills/health-cloud-provider-search-settings-configure/SKILL.md +924 -0
- package/skills/health-cloud-referral-management-coordinate/SKILL.md +513 -0
- package/skills/health-cloud-timeline-configure/SKILL.md +622 -0
- package/skills/health-cloud-virtual-visit-config-configure/SKILL.md +135 -0
- package/skills/industries-account-score-settings-query/SKILL.md +78 -0
- package/skills/industries-actionable-list-data-sources-dmo-configure/SKILL.md +177 -0
- package/skills/industries-ad-product-availability-search/SKILL.md +399 -0
- package/skills/industries-advanced-account-forecast-settings-configure/SKILL.md +628 -0
- package/skills/industries-advanced-therapy-management-settings-configure/SKILL.md +73 -0
- package/skills/industries-atm-settings-starter-configure/SKILL.md +76 -0
- package/skills/industries-batch-document-ai-configure/SKILL.md +196 -0
- package/skills/industries-behavioral-health-app-settings-configure/SKILL.md +71 -0
- package/skills/industries-branch-management-settings-configure/SKILL.md +89 -0
- package/skills/industries-bre-decision-table-access-configure/SKILL.md +367 -0
- package/skills/industries-brokerage-settings-configure/SKILL.md +41 -0
- package/skills/industries-calendar-sync-settings-configure/SKILL.md +89 -0
- package/skills/industries-care-request-settings-configure/SKILL.md +218 -0
- package/skills/industries-case-management-intelligence-settings-configure/SKILL.md +54 -0
- package/skills/industries-catalog-process-attributes-products-configure/SKILL.md +380 -0
- package/skills/industries-catalog-process-fulfillment-configure/SKILL.md +216 -0
- package/skills/industries-catalog-process-intake-configure/SKILL.md +219 -0
- package/skills/industries-catalog-process-knowledge-configure/SKILL.md +153 -0
- package/skills/industries-catalog-process-preprocessor-configure/SKILL.md +168 -0
- package/skills/industries-cds-general-settings-configure/SKILL.md +69 -0
- package/skills/industries-claim-financial-settings-configure/SKILL.md +169 -0
- package/skills/industries-clinical-data-model-settings-configure/SKILL.md +136 -0
- package/skills/industries-clinical-data-model-settings-starter-configure/SKILL.md +105 -0
- package/skills/industries-collection-plan-settings-configure/SKILL.md +132 -0
- package/skills/industries-comms-service-console-settings-configure/SKILL.md +159 -0
- package/skills/industries-compliance-configure/SKILL.md +102 -0
- package/skills/industries-compliance-document-extraction-setup-configure/SKILL.md +76 -0
- package/skills/industries-contact-center-app-layout-configure/SKILL.md +88 -0
- package/skills/industries-contact-center-components-configure/SKILL.md +96 -0
- package/skills/industries-contact-center-path-knowledge-configure/SKILL.md +95 -0
- package/skills/industries-contact-center-user-access-assign/SKILL.md +96 -0
- package/skills/industries-course-waitlist-config-configure/SKILL.md +162 -0
- package/skills/industries-crisis-center-settings-configure/SKILL.md +84 -0
- package/skills/industries-custom-object-settings-configure/SKILL.md +94 -0
- package/skills/industries-data-cloud-integration-configure/SKILL.md +88 -0
- package/skills/industries-data-space-feature-mappings-configure/SKILL.md +245 -0
- package/skills/industries-decision-matrix-builder-configure/SKILL.md +78 -0
- package/skills/industries-decision-table-hbase-configure/SKILL.md +87 -0
- package/skills/industries-decision-table-version-configure/SKILL.md +74 -0
- package/skills/industries-decision-tables-builder-configure/SKILL.md +253 -0
- package/skills/industries-decision-tables-configure/SKILL.md +439 -0
- package/skills/industries-energy-utilities-configure/SKILL.md +251 -0
- package/skills/industries-eu-cloud-multisite-configure/SKILL.md +1008 -0
- package/skills/industries-eu-new-connections-configure/SKILL.md +30 -0
- package/skills/industries-explainability-msg-template-configure/SKILL.md +135 -0
- package/skills/industries-expression-set-message-token-configure/SKILL.md +135 -0
- package/skills/industries-field-service-settings-configure/SKILL.md +82 -0
- package/skills/industries-form-framework-settings-configure/SKILL.md +30 -0
- package/skills/industries-fsc-ai-settings-configure/SKILL.md +57 -0
- package/skills/industries-fsc-association-engine-settings-configure/SKILL.md +172 -0
- package/skills/industries-fsc-b2b-settings-configure/SKILL.md +61 -0
- package/skills/industries-fsc-insurance-settings-configure/SKILL.md +58 -0
- package/skills/industries-fsc-visa-fulfillment-setup-configure/SKILL.md +103 -0
- package/skills/industries-fsc-wealth-agent-settings-configure/SKILL.md +117 -0
- package/skills/industries-fsc-wealth-settings-configure/SKILL.md +99 -0
- package/skills/industries-fundraising-gift-entry-settings-configure/SKILL.md +120 -0
- package/skills/industries-fundraising-rfm-configure/SKILL.md +128 -0
- package/skills/industries-fundraising-settings-configure/SKILL.md +145 -0
- package/skills/industries-fundraising-source-code-gen-configure/SKILL.md +299 -0
- package/skills/industries-google-maps-api-key-settings-configure/SKILL.md +87 -0
- package/skills/industries-grantmaking-intelligence-settings-open/SKILL.md +58 -0
- package/skills/industries-hc-score-category-settings-configure/SKILL.md +167 -0
- package/skills/industries-health-engagement-settings-configure/SKILL.md +218 -0
- package/skills/industries-home-health-agentforce-setup-configure/SKILL.md +131 -0
- package/skills/industries-home-health-bundling-policy-create/SKILL.md +50 -0
- package/skills/industries-home-health-entity-labels-configure/SKILL.md +29 -0
- package/skills/industries-home-health-fsl-package-deploy/SKILL.md +71 -0
- package/skills/industries-home-health-fsl-settings-validate/SKILL.md +27 -0
- package/skills/industries-home-health-guided-setup-care-and-skill-get/SKILL.md +80 -0
- package/skills/industries-home-health-guided-setup-configure/SKILL.md +836 -0
- package/skills/industries-home-health-guided-setup-enable-org-fsl-get/SKILL.md +55 -0
- package/skills/industries-home-health-guided-setup-get-org-ready-get/SKILL.md +61 -0
- package/skills/industries-home-health-licenses-assign/SKILL.md +27 -0
- package/skills/industries-home-health-operating-hours-create/SKILL.md +40 -0
- package/skills/industries-home-health-scheduling-policy-create/SKILL.md +41 -0
- package/skills/industries-home-health-service-objective-create/SKILL.md +22 -0
- package/skills/industries-home-health-skills-create/SKILL.md +31 -0
- package/skills/industries-home-health-users-create/SKILL.md +29 -0
- package/skills/industries-icm-act3-toggles-configure/SKILL.md +198 -0
- package/skills/industries-icm-act5-genai-suggested-assessments-configure/SKILL.md +361 -0
- package/skills/industries-icm-act6-mcg-integration-configure/SKILL.md +550 -0
- package/skills/industries-integrated-care-management-configure/SKILL.md +168 -0
- package/skills/industries-object-enablement-configure/SKILL.md +86 -0
- package/skills/industries-tpm-system-processing-service-configure/SKILL.md +64 -0
- package/skills/insurance-brokerage-agency-billing-configure/SKILL.md +1 -3
- package/skills/integration-apex-settings-configure/SKILL.md +61 -0
- package/skills/marketing-e360-email-archiving-configure/SKILL.md +73 -0
- package/skills/marketing-message-test/SKILL.md +1 -3
- package/skills/nonprofit-fundraising-configure/SKILL.md +240 -0
- package/skills/nonprofit-fundraising-configure/references/gotchas.md +26 -0
- package/skills/nonprofit-fundraising-configure/references/mcp-invocation.md +678 -0
- package/skills/nonprofit-fundraising-configure/references/permission-targeting.md +35 -0
- package/skills/nonprofit-volunteer-management-model-get/SKILL.md +166 -0
- package/skills/nonprofit-volunteer-management-model-get/references/entities.md +315 -0
- package/skills/nonprofit-volunteer-management-model-get/references/relationships.md +175 -0
- package/skills/nonprofit-volunteer-management-model-get/references/themes.md +143 -0
- package/skills/nonprofit-volunteer-management-records-create/SKILL.md +121 -0
- package/skills/nonprofit-volunteer-management-records-create/references/field-guide.md +284 -0
- package/skills/nonprofit-volunteer-management-records-create/references/mcp-invocation.md +248 -0
- package/skills/nonprofit-volunteer-management-records-create/references/review-format.md +140 -0
- package/skills/nonprofit-volunteer-management-records-create/scripts/expand-series.py +632 -0
- package/skills/nonprofit-volunteer-management-records-create/scripts/render-review-table.py +419 -0
- package/skills/nonprofit-volunteer-management-records-create/scripts/tests/test_expand_series.py +690 -0
- package/skills/nonprofit-volunteer-management-records-create/scripts/tests/test_render_review_table.py +421 -0
- package/skills/nonprofit-volunteer-management-structure-generate/SKILL.md +119 -0
- package/skills/nonprofit-volunteer-management-structure-generate/references/configuration-decisions.md +159 -0
- package/skills/nonprofit-volunteer-management-structure-generate/references/discovery-interview.md +137 -0
- package/skills/nonprofit-volunteer-management-structure-generate/references/edge-cases.md +48 -0
- package/skills/nonprofit-volunteer-management-structure-generate/references/mcp-invocation.md +75 -0
- package/skills/nonprofit-volunteer-management-structure-generate/references/plan-output.md +141 -0
- package/skills/platform-custom-field-generate/SKILL.md +1 -0
- package/skills/platform-custom-field-generate/references/advanced-picklists.md +5 -5
- package/skills/platform-custom-metadata-type-generate/SKILL.md +3 -0
- package/skills/platform-custom-object-generate/SKILL.md +4 -0
- package/skills/platform-custom-permissions-configure/SKILL.md +687 -0
- package/skills/platform-custom-setting-generate/SKILL.md +3 -0
- package/skills/platform-datamask-run/SKILL.md +1 -5
- package/skills/platform-label-workbench-import-create/SKILL.md +67 -0
- package/skills/platform-permission-set-generate/SKILL.md +3 -0
- package/skills/platform-privacy-agent-settings-configure/SKILL.md +752 -0
- package/skills/platform-salesforce-connect-adapter-generate/SKILL.md +1 -3
- package/skills/platform-sandbox-configure/SKILL.md +1 -3
- package/skills/platform-value-set-generate/SKILL.md +3 -0
- package/skills/sales-call-scoring-configure/SKILL.md +1 -5
- package/skills/service-agentforce-channel-configure/SKILL.md +1 -3
- package/skills/service-agentforce-human-escalation-configure/SKILL.md +1 -3
- package/skills/service-catalog-template-coordinate/SKILL.md +1 -3
- package/skills/service-concierge-portal-generate/SKILL.md +1 -3
- package/skills/service-email-to-case-configure/SKILL.md +1 -5
- package/skills/service-itsm-agentic-setup-agent-runtime-access-assign/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-cmdb-access-assign/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-cmdb-bundle-deploy/SKILL.md +1 -5
- package/skills/service-itsm-agentic-setup-cmdb-configure/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-cmdb-discovery-configure/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +1 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-uel-user-create/SKILL.md +1 -9
- package/skills/service-itsm-incident-mgmt-configure/SKILL.md +1 -5
- package/skills/service-itsm-incident-priority-configure/SKILL.md +1 -3
- package/skills/service-itsm-slack-itservice-configure/SKILL.md +1 -3
- package/skills/service-itsm-swarming-configure/SKILL.md +1 -3
- package/skills/service-itsm-teams-configure/SKILL.md +1 -3
- package/skills/service-itsm-teams-debug/SKILL.md +1 -3
- package/skills/service-itsm-teams-employee-agent-configure/SKILL.md +1 -3
- package/skills/service-itsm-teams-itdesk-configure/SKILL.md +1 -3
- package/skills/service-itsm-teams-itservice-configure/SKILL.md +1 -3
- package/skills/service-native-voice-recording-transcription-configure/SKILL.md +1 -3
- package/skills/service-omni-agent-users-create/SKILL.md +1 -3
- package/skills/service-omni-agent-work-sharing-configure/SKILL.md +1 -3
- package/skills/service-omni-attribute-routing-configure/SKILL.md +1 -3
- package/skills/service-omni-base-settings-configure/SKILL.md +1 -3
- package/skills/service-omni-channel-inventory-analyze/SKILL.md +1 -3
- package/skills/service-omni-channel-limits-analyze/SKILL.md +1 -3
- package/skills/service-omni-channel-setup-coordinate/SKILL.md +1 -3
- package/skills/service-omni-command-center-analyze/SKILL.md +1 -3
- package/skills/service-omni-command-center-configure/SKILL.md +1 -3
- package/skills/service-omni-permission-set-assign/SKILL.md +1 -3
- package/skills/service-omni-presence-status-deploy/SKILL.md +1 -3
- package/skills/service-omni-presence-user-config-deploy/SKILL.md +1 -3
- package/skills/service-omni-queue-deploy/SKILL.md +1 -3
- package/skills/service-omni-queue-members-assign/SKILL.md +1 -3
- package/skills/service-omni-queue-routing-config-deploy/SKILL.md +1 -3
- package/skills/service-omni-routing-flow-deploy/SKILL.md +1 -3
- package/skills/service-omni-service-channel-configure/SKILL.md +1 -3
- package/skills/service-omni-sidebar-configure/SKILL.md +1 -3
- package/skills/service-omni-skills-based-routing-configure/SKILL.md +1 -3
- package/skills/service-omni-supervisor-config-deploy/SKILL.md +1 -3
- package/skills/service-omni-supervisor-permset-assign/SKILL.md +1 -3
- package/skills/service-omni-supervisor-surface-deploy/SKILL.md +1 -3
- package/skills/service-omni-supervisor-users-create/SKILL.md +1 -3
- package/skills/service-omni-work-skill-routing-configure/SKILL.md +1 -3
- package/skills/tableau-next-asset-create/README.md +0 -65
|
@@ -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
|
|
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
|
-
###
|
|
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
|
-
|
|
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
|
-
**
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
**
|
|
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
|
-
|
|
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
|
-
|
|
59
|
+
---
|
|
88
60
|
|
|
89
|
-
###
|
|
61
|
+
### The rules, in interview order
|
|
90
62
|
|
|
91
|
-
|
|
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
|
-
|
|
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
|
-
|
|
109
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
**
|
|
139
|
-
|
|
140
|
-
Ask:
|
|
141
|
-
|
|
142
|
-
|
|
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
|
-
|
|
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
|
-
**
|
|
155
|
-
|
|
156
|
-
Ask:
|
|
157
|
-
|
|
158
|
-
|
|
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
|
-
**
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
**
|
|
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
|
-
|
|
201
|
-
|
|
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.
|
|
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
|
-
|
|
207
|
-
|
|
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).
|
|
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 -->
|