@salesforce/afv-skills 1.65.0 → 1.65.1
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/field-service-data-capture-form-deployer-configure/SKILL.md +2 -23
- package/skills/field-service-data-capture-form-designer-configure/SKILL.md +3 -13
- package/skills/field-service-mobile-branding-configure/SKILL.md +3 -17
- package/skills/field-service-objective-designer-configure/SKILL.md +379 -72
- package/skills/field-service-prework-brief-deployer-configure/SKILL.md +537 -10
- package/skills/field-service-scheduling-policy-designer-query/SKILL.md +1093 -65
- package/skills/field-service-sobject-create-configure/SKILL.md +213 -13
- package/skills/field-service-voice-to-form-configure/SKILL.md +11 -40
- package/skills/field-service-work-rule-designer-configure/SKILL.md +95 -121
- package/skills/agentforce-gpt-email-generation-configure/SKILL.md +0 -312
- package/skills/agentforce-wizard-ui-forecasting-analytics-components-configure/SKILL.md +0 -64
- package/skills/agentforce-wizard-ui-sales-einstein-components-configure/SKILL.md +0 -46
- package/skills/automation-company-profile-info-query/SKILL.md +0 -51
- package/skills/automation-digital-wallet-configure/SKILL.md +0 -689
- package/skills/automation-flow-coordinate/SKILL.md +0 -95
- package/skills/automation-flow-coordinate/references/elements/action-call/action-call.md +0 -1569
- package/skills/automation-flow-coordinate/references/elements/action-call/conversation-messaging.md +0 -96
- package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-sms-message.json +0 -23
- package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-to-journey-no-fields.json +0 -31
- package/skills/automation-flow-coordinate/references/elements/action-call/send-to-journey.md +0 -179
- package/skills/automation-flow-coordinate/references/elements/exit-rule/examples/event-email-link-click.json +0 -13
- package/skills/automation-flow-coordinate/references/elements/exit-rule/exit-rule.md +0 -83
- package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/examples/forward-to-bot-or-agent.json +0 -69
- package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/forward-to-bot-or-agent.md +0 -274
- package/skills/automation-flow-coordinate/references/elements/start/audience-common.md +0 -192
- package/skills/automation-flow-coordinate/references/elements/start/automation-event-triggered.md +0 -130
- package/skills/automation-flow-coordinate/references/elements/start/data-cloud-data-change-triggered.md +0 -92
- package/skills/automation-flow-coordinate/references/elements/start/form-submission-triggered.md +0 -88
- package/skills/automation-flow-coordinate/references/elements/start/segment-triggered.md +0 -152
- package/skills/automation-flow-coordinate/references/elements/start/start.md +0 -539
- package/skills/automation-flow-coordinate/references/elements/subflow/subflow.md +0 -152
- package/skills/automation-flow-coordinate/references/elements/wait/wait.md +0 -497
- package/skills/automation-flow-coordinate/references/recipes/author/author.md +0 -868
- package/skills/automation-flow-coordinate/references/recipes/summarize/element-generic.md +0 -300
- package/skills/automation-flow-coordinate/references/recipes/summarize/reference-resolution.md +0 -292
- package/skills/automation-flow-coordinate/references/recipes/summarize/summarize.md +0 -323
- package/skills/automation-flow-coordinate/references/recipes/testing/examples/debug-output-template.md +0 -109
- package/skills/automation-flow-coordinate/references/recipes/testing/shape.md +0 -219
- package/skills/automation-flow-coordinate/references/recipes/testing/shared-stages/intent-analyzer.md +0 -180
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/debug.md +0 -175
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/promote.md +0 -255
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/save-debug.md +0 -212
- package/skills/automation-flow-coordinate/references/resources/variable/variable.md +0 -171
- package/skills/automation-flow-coordinate/references/shared/anti-patterns.md +0 -786
- package/skills/automation-flow-coordinate/references/shared/end/end.md +0 -267
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/README.md +0 -69
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/predictions.jsonl +0 -80
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/prompts.jsonl +0 -116
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/flow-type-resolver.md +0 -321
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/taxonomy.json +0 -320
- package/skills/automation-flow-coordinate/references/shared/server-functions.md +0 -597
- package/skills/automotive-cloud-appraisal-management-settings-configure/SKILL.md +0 -69
- package/skills/automotive-cloud-dealer-essentials-configure/SKILL.md +0 -78
- package/skills/automotive-cloud-ground-agent-data-pipelines-configure/SKILL.md +0 -373
- package/skills/automotive-cloud-ground-mfg-agent-data-pipelines-configure/SKILL.md +0 -273
- package/skills/automotive-cloud-mfg-agent-data-pipelines-configure/SKILL.md +0 -259
- package/skills/automotive-cloud-mfg-sales-concierge-agent-create/SKILL.md +0 -369
- package/skills/automotive-cloud-mfg-sales-concierge-foundation-configure/SKILL.md +0 -542
- package/skills/automotive-cloud-mfg-sales-concierge-foundation-coordinate/SKILL.md +0 -159
- package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-agent-create/SKILL.md +0 -349
- package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-configure/SKILL.md +0 -505
- package/skills/automotive-cloud-sales-concierge-agent-create/SKILL.md +0 -380
- package/skills/automotive-cloud-sales-concierge-foundation-configure/SKILL.md +0 -567
- package/skills/automotive-cloud-sales-concierge-foundation-coordinate/SKILL.md +0 -159
- package/skills/automotive-cloud-sales-concierge-orchestrator-agent-create/SKILL.md +0 -360
- package/skills/automotive-cloud-sales-concierge-orchestrator-configure/SKILL.md +0 -539
- package/skills/automotive-cloud-sales-concierge-search-grounding-configure/SKILL.md +0 -358
- package/skills/commerce-b2b-merchant-quote-configure/SKILL.md +0 -602
- package/skills/commerce-b2b-store-configure/SKILL.md +0 -251
- package/skills/commerce-credit-memo-create/SKILL.md +0 -139
- package/skills/commerce-delivery-business-hours-configure/SKILL.md +0 -277
- package/skills/commerce-delivery-estimation-apply/SKILL.md +0 -155
- package/skills/commerce-delivery-estimation-configure/SKILL.md +0 -377
- package/skills/commerce-delivery-routing-specs-integrate/SKILL.md +0 -174
- package/skills/commerce-estimate-bopis-query/SKILL.md +0 -279
- package/skills/commerce-estimate-delivery-date-query/SKILL.md +0 -349
- package/skills/commerce-fees-apply/SKILL.md +0 -227
- package/skills/commerce-fulfillment-routing-analyze/SKILL.md +0 -200
- package/skills/commerce-guest-buyer-create/SKILL.md +0 -173
- package/skills/commerce-location-bopis-configure/SKILL.md +0 -378
- package/skills/commerce-location-business-hours-configure/SKILL.md +0 -235
- package/skills/commerce-location-delivery-processing-time-configure/SKILL.md +0 -309
- package/skills/commerce-location-graph-integrate/SKILL.md +0 -131
- package/skills/commerce-location-shipping-carrier-method-configure/SKILL.md +0 -755
- package/skills/commerce-location-temporary-operating-hours-configure/SKILL.md +0 -331
- package/skills/commerce-merchant-buyer-groups-configure/SKILL.md +0 -579
- package/skills/commerce-merchant-buyer-user-onboarding-create/SKILL.md +0 -626
- package/skills/commerce-merchant-catalog-configure/SKILL.md +0 -614
- package/skills/commerce-merchant-extension-provider-configure/SKILL.md +0 -368
- package/skills/commerce-merchant-insights-account-health-churn-analyze/SKILL.md +0 -118
- package/skills/commerce-merchant-insights-inventory-returns-analyze/SKILL.md +0 -65
- package/skills/commerce-merchant-insights-order-shopper-get/SKILL.md +0 -90
- package/skills/commerce-merchant-insights-product-performance-analyze/SKILL.md +0 -72
- package/skills/commerce-merchant-insights-query/SKILL.md +0 -279
- package/skills/commerce-merchant-storefront-guest-access-configure/SKILL.md +0 -656
- package/skills/commerce-order-summary-change-apply/SKILL.md +0 -375
- package/skills/commerce-product-details-get/SKILL.md +0 -363
- package/skills/commerce-product-search/SKILL.md +0 -563
- package/skills/commerce-react-storefront-create/SKILL.md +0 -350
- package/skills/commerce-return-order-summary-create/SKILL.md +0 -513
- package/skills/commerce-search-relevance-analyze/SKILL.md +0 -757
- package/skills/commerce-temporary-processing-time-override-create/SKILL.md +0 -274
- package/skills/communications-initial-setup-configure/SKILL.md +0 -630
- package/skills/communications-multisite-configure/SKILL.md +0 -571
- package/skills/communications-revenue-cloud-settings-configure/SKILL.md +0 -74
- package/skills/communications-smb-fiber-catalog-create/SKILL.md +0 -413
- package/skills/communications-tmf-integrate/SKILL.md +0 -1368
- package/skills/consumer-goods-visit-activity-act4-questions-assign/SKILL.md +0 -448
- package/skills/consumer-goods-visit-activity-act5-standard-create/SKILL.md +0 -269
- package/skills/consumer-goods-visit-activity-act6-assortment-configure/SKILL.md +0 -271
- package/skills/consumer-goods-visit-activity-act7-account-scoping-create/SKILL.md +0 -382
- package/skills/consumer-goods-visit-activity-act8-plan-attach-create/SKILL.md +0 -373
- package/skills/consumer-goods-visit-activity-act9-proof-validate/SKILL.md +0 -389
- package/skills/consumer-goods-visit-and-activity-act1-specification-create/SKILL.md +0 -338
- package/skills/consumer-goods-visit-and-activity-act2-template-create/SKILL.md +0 -547
- package/skills/consumer-goods-visit-and-activity-act3-definition-create/SKILL.md +0 -346
- package/skills/consumer-goods-visit-and-activity-configure/SKILL.md +0 -1110
- package/skills/crm-analytics-adoption-insights-configure/SKILL.md +0 -224
- package/skills/crm-analytics-custom-report-type-lightning-configure/SKILL.md +0 -418
- package/skills/crm-analytics-dashboards-configure/SKILL.md +0 -731
- package/skills/crm-analytics-operational-analytics-metadata-bridge-migrate/SKILL.md +0 -233
- package/skills/crm-analytics-report-notifications-ui-configure/SKILL.md +0 -184
- package/skills/crm-analytics-sharing-inheritance-coverage-analyze/SKILL.md +0 -167
- package/skills/crm-analytics-sonic-getting-started-configure/SKILL.md +0 -55
- package/skills/crm-analytics-tableau-next-app-deploy/SKILL.md +0 -1350
- package/skills/crm-analytics-tableau-next-c360-basemodel-validate/SKILL.md +0 -1862
- package/skills/crm-analytics-tableau-next-datacloud-validate/SKILL.md +0 -83
- package/skills/crm-analytics-tableau-next-provisioning-validate/SKILL.md +0 -81
- package/skills/data360-activation-create/SKILL.md +0 -104
- package/skills/data360-activation-external-platform-get/SKILL.md +0 -49
- package/skills/data360-activation-target-create/SKILL.md +0 -93
- package/skills/data360-activation-v2-create/SKILL.md +0 -456
- package/skills/data360-audience-dmo-get/SKILL.md +0 -38
- package/skills/data360-calculated-affinity-create/SKILL.md +0 -82
- package/skills/data360-calculated-insight-create/SKILL.md +0 -148
- package/skills/data360-catalog-metadata-create/SKILL.md +0 -183
- package/skills/data360-code-extension-create/SKILL.md +0 -115
- package/skills/data360-communication-capping-create/SKILL.md +0 -227
- package/skills/data360-connection-create/SKILL.md +0 -491
- package/skills/data360-content-lens-create/SKILL.md +0 -181
- package/skills/data360-data-action-create/SKILL.md +0 -126
- package/skills/data360-data-action-target-create/SKILL.md +0 -181
- package/skills/data360-data-clean-room-create/SKILL.md +0 -238
- package/skills/data360-data-governance-create/SKILL.md +0 -746
- package/skills/data360-data-graph-create/SKILL.md +0 -82
- package/skills/data360-data-harmonized-model-object-reference-create/SKILL.md +0 -38
- package/skills/data360-data-lake-object-create/SKILL.md +0 -207
- package/skills/data360-data-model-object-catalog-get/SKILL.md +0 -49
- package/skills/data360-data-model-object-create/SKILL.md +0 -128
- package/skills/data360-data-model-object-mapping-create/SKILL.md +0 -106
- package/skills/data360-data-space-create/SKILL.md +0 -161
- package/skills/data360-data-streams-create/SKILL.md +0 -324
- package/skills/data360-engagement-signal-get/SKILL.md +0 -38
- package/skills/data360-experiment-create/SKILL.md +0 -82
- package/skills/data360-goal-based-campaign-create/SKILL.md +0 -192
- package/skills/data360-harmonization-process-history-get/SKILL.md +0 -38
- package/skills/data360-harmonized-unstructured-dmo-create/SKILL.md +0 -84
- package/skills/data360-identity-resolution-create/SKILL.md +0 -115
- package/skills/data360-intelligent-document-processing-create/SKILL.md +0 -148
- package/skills/data360-knowledge-graph-construction-create/SKILL.md +0 -93
- package/skills/data360-knowledge-graph-create/SKILL.md +0 -216
- package/skills/data360-knowledge-space-mcp-configure/SKILL.md +0 -475
- package/skills/data360-machine-learning-mcp-configure/SKILL.md +0 -697
- package/skills/data360-multi-org-mcp-configure/SKILL.md +0 -117
- package/skills/data360-secondary-index-mcp-configure/SKILL.md +0 -126
- package/skills/data360-segment-mcp-configure/SKILL.md +0 -159
- package/skills/data360-semantic-calculated-dimension-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-calculated-measurement-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-data-object-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-dimension-mcp-configure/SKILL.md +0 -38
- package/skills/data360-semantic-engine-mcp-configure/SKILL.md +0 -62
- package/skills/data360-semantic-measurement-mcp-configure/SKILL.md +0 -38
- package/skills/data360-semantic-metric-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-model-mcp-configure/SKILL.md +0 -115
- package/skills/data360-standard-mapping-mcp-configure/SKILL.md +0 -38
- package/skills/data360-tenant-lifecycle-mcp-configure/SKILL.md +0 -73
- package/skills/experience-afv-query/SKILL.md +0 -234
- package/skills/experience-agentforce-vibes-in-react-configure/SKILL.md +0 -63
- package/skills/experience-apex-components-configure/SKILL.md +0 -69
- package/skills/experience-apex-pages-configure/SKILL.md +0 -107
- package/skills/experience-app-home-configure/SKILL.md +0 -76
- package/skills/experience-aura-lightning-out-access-configure/SKILL.md +0 -58
- package/skills/experience-briefcase-configure/SKILL.md +0 -287
- package/skills/experience-community-flexi-page-list-create/SKILL.md +0 -74
- package/skills/experience-community-template-definition-list-query/SKILL.md +0 -48
- package/skills/experience-community-theme-definition-list-query/SKILL.md +0 -38
- package/skills/experience-content-assets-configure/SKILL.md +0 -86
- package/skills/experience-custom-domain-create/SKILL.md +0 -727
- package/skills/experience-defer-rendering-workspace-page-setup-configure/SKILL.md +0 -41
- package/skills/experience-field-service-app-builder-configure/SKILL.md +0 -187
- package/skills/experience-flow-category-configure/SKILL.md +0 -117
- package/skills/experience-formula-configure/SKILL.md +0 -358
- package/skills/experience-global-actions-configure/SKILL.md +0 -69
- package/skills/experience-global-publisher-layouts-configure/SKILL.md +0 -79
- package/skills/experience-instrumentation-configure/SKILL.md +0 -64
- package/skills/experience-lex-engagement-configure/SKILL.md +0 -50
- package/skills/experience-lightning-bolt-open/SKILL.md +0 -12
- package/skills/experience-lightning-out-configure/SKILL.md +0 -129
- package/skills/experience-lightning-preview-configure/SKILL.md +0 -67
- package/skills/experience-lightning-types-query/SKILL.md +0 -98
- package/skills/experience-malware-scan-configure/SKILL.md +0 -71
- package/skills/experience-my-salesforce-configure/SKILL.md +0 -126
- package/skills/experience-navigation-menus-configure/SKILL.md +0 -235
- package/skills/experience-notification-types-configure/SKILL.md +0 -206
- package/skills/experience-notifications-configure/SKILL.md +0 -75
- package/skills/experience-record-discovery-query/SKILL.md +0 -227
- package/skills/experience-regenerate-previews-open/SKILL.md +0 -94
- package/skills/experience-sales-cloud-mab-configure/SKILL.md +0 -254
- package/skills/experience-schema-builder-open/SKILL.md +0 -38
- package/skills/experience-simple-record-home-configure/SKILL.md +0 -110
- package/skills/experience-static-resources-configure/SKILL.md +0 -74
- package/skills/field-service-setup-coordinate/SKILL.md +0 -62
- package/skills/field-service-work-plan-configure/SKILL.md +0 -253
- package/skills/fsc-actionable-segmentation-settings-configure/SKILL.md +0 -180
- package/skills/fsc-digital-origination-bre-decision-matrix-foundation-create/SKILL.md +0 -196
- package/skills/fsc-digital-origination-bre-disclosures-consent-configure/SKILL.md +0 -106
- package/skills/fsc-digital-origination-bre-document-upload-configure/SKILL.md +0 -96
- package/skills/fsc-digital-origination-bre-permissions-assign/SKILL.md +0 -111
- package/skills/fsc-digital-origination-bre-setup-coordinate/SKILL.md +0 -250
- package/skills/fsc-digital-origination-bre-stp-eligibility-configure/SKILL.md +0 -122
- package/skills/fsc-digital-origination-coordinate/SKILL.md +0 -653
- package/skills/fsc-digital-origination-demo-run/SKILL.md +0 -225
- package/skills/fsc-digital-origination-execution-guardrails-validate/SKILL.md +0 -112
- package/skills/fsc-digital-origination-initial-setup-configure/SKILL.md +0 -396
- package/skills/fsc-digital-origination-pricing-setup-coordinate/SKILL.md +0 -336
- package/skills/fsc-digital-origination-pricing-setup-data-foundation-create/SKILL.md +0 -208
- package/skills/fsc-digital-origination-pricing-setup-procedure-create/SKILL.md +0 -375
- package/skills/fsc-digital-origination-product-setup-act1-permissions-assign/SKILL.md +0 -83
- package/skills/fsc-digital-origination-product-setup-coordinate/SKILL.md +0 -248
- package/skills/fsc-digital-origination-sample-data-create/SKILL.md +0 -206
- package/skills/fsc-document-checklist-settings-configure/SKILL.md +0 -57
- package/skills/fsc-flexible-hierarchy-configure/SKILL.md +0 -148
- package/skills/fsc-flexible-hierarchy-foundation-configure/SKILL.md +0 -1430
- package/skills/fsc-flexible-hierarchy-graph-config-create/SKILL.md +0 -471
- package/skills/fsc-flexible-hierarchy-rule-based-graph-deploy/SKILL.md +0 -429
- package/skills/fsc-pricing-product-configurator-configure/SKILL.md +0 -150
- package/skills/fsc-pricing-salesforce-omnistudio-switch/SKILL.md +0 -123
- package/skills/fsc-product-act2-catalog-categories-create/SKILL.md +0 -82
- package/skills/fsc-product-act3-attributes-create/SKILL.md +0 -249
- package/skills/fsc-product-act4-classification-assignment-create/SKILL.md +0 -196
- package/skills/fsc-product-act5-considerations-get/SKILL.md +0 -44
- package/skills/fsc-stage-management-apex-flow-deploy/SKILL.md +0 -384
- package/skills/fsc-stage-management-compliant-data-sharing-configure/SKILL.md +0 -144
- package/skills/fsc-stage-management-decision-matrices-create/SKILL.md +0 -107
- package/skills/fsc-stage-management-definition-assignments-create/SKILL.md +0 -189
- package/skills/fsc-stage-management-definition-create/SKILL.md +0 -108
- package/skills/fsc-stage-management-permissions-assign/SKILL.md +0 -143
- package/skills/fsc-stage-management-transitions-configure/SKILL.md +0 -139
- package/skills/health-cloud-appt-booking-config-configure/SKILL.md +0 -135
- package/skills/health-cloud-appt-booking-url-config-configure/SKILL.md +0 -134
- package/skills/health-cloud-care-provider-affl-role-config-configure/SKILL.md +0 -136
- package/skills/health-cloud-care-provider-search-config-configure/SKILL.md +0 -134
- package/skills/health-cloud-care-requests-create/SKILL.md +0 -178
- package/skills/health-cloud-initial-configure/SKILL.md +0 -511
- package/skills/health-cloud-patient-appointment-scheduling-configure/SKILL.md +0 -1374
- package/skills/health-cloud-provider-search-settings-configure/SKILL.md +0 -924
- package/skills/health-cloud-referral-management-coordinate/SKILL.md +0 -513
- package/skills/health-cloud-timeline-configure/SKILL.md +0 -622
- package/skills/health-cloud-virtual-visit-config-configure/SKILL.md +0 -135
- package/skills/industries-account-score-settings-query/SKILL.md +0 -78
- package/skills/industries-actionable-list-data-sources-dmo-configure/SKILL.md +0 -177
- package/skills/industries-ad-product-availability-search/SKILL.md +0 -399
- package/skills/industries-advanced-account-forecast-settings-configure/SKILL.md +0 -628
- package/skills/industries-advanced-therapy-management-settings-configure/SKILL.md +0 -73
- package/skills/industries-atm-settings-starter-configure/SKILL.md +0 -76
- package/skills/industries-batch-document-ai-configure/SKILL.md +0 -196
- package/skills/industries-behavioral-health-app-settings-configure/SKILL.md +0 -71
- package/skills/industries-branch-management-settings-configure/SKILL.md +0 -89
- package/skills/industries-bre-decision-table-access-configure/SKILL.md +0 -367
- package/skills/industries-brokerage-settings-configure/SKILL.md +0 -41
- package/skills/industries-calendar-sync-settings-configure/SKILL.md +0 -89
- package/skills/industries-care-request-settings-configure/SKILL.md +0 -218
- package/skills/industries-case-management-intelligence-settings-configure/SKILL.md +0 -54
- package/skills/industries-catalog-process-attributes-products-configure/SKILL.md +0 -380
- package/skills/industries-catalog-process-fulfillment-configure/SKILL.md +0 -216
- package/skills/industries-catalog-process-intake-configure/SKILL.md +0 -219
- package/skills/industries-catalog-process-knowledge-configure/SKILL.md +0 -153
- package/skills/industries-catalog-process-preprocessor-configure/SKILL.md +0 -168
- package/skills/industries-cds-general-settings-configure/SKILL.md +0 -69
- package/skills/industries-claim-financial-settings-configure/SKILL.md +0 -169
- package/skills/industries-clinical-data-model-settings-configure/SKILL.md +0 -136
- package/skills/industries-clinical-data-model-settings-starter-configure/SKILL.md +0 -105
- package/skills/industries-collection-plan-settings-configure/SKILL.md +0 -132
- package/skills/industries-comms-service-console-settings-configure/SKILL.md +0 -159
- package/skills/industries-compliance-configure/SKILL.md +0 -102
- package/skills/industries-compliance-document-extraction-setup-configure/SKILL.md +0 -76
- package/skills/industries-contact-center-app-layout-configure/SKILL.md +0 -88
- package/skills/industries-contact-center-components-configure/SKILL.md +0 -96
- package/skills/industries-contact-center-path-knowledge-configure/SKILL.md +0 -95
- package/skills/industries-contact-center-user-access-assign/SKILL.md +0 -96
- package/skills/industries-course-waitlist-config-configure/SKILL.md +0 -162
- package/skills/industries-crisis-center-settings-configure/SKILL.md +0 -84
- package/skills/industries-custom-object-settings-configure/SKILL.md +0 -94
- package/skills/industries-data-cloud-integration-configure/SKILL.md +0 -88
- package/skills/industries-data-space-feature-mappings-configure/SKILL.md +0 -245
- package/skills/industries-decision-matrix-builder-configure/SKILL.md +0 -78
- package/skills/industries-decision-table-hbase-configure/SKILL.md +0 -87
- package/skills/industries-decision-table-version-configure/SKILL.md +0 -74
- package/skills/industries-decision-tables-builder-configure/SKILL.md +0 -253
- package/skills/industries-decision-tables-configure/SKILL.md +0 -439
- package/skills/industries-energy-utilities-configure/SKILL.md +0 -251
- package/skills/industries-eu-cloud-multisite-configure/SKILL.md +0 -1008
- package/skills/industries-eu-new-connections-configure/SKILL.md +0 -30
- package/skills/industries-explainability-msg-template-configure/SKILL.md +0 -135
- package/skills/industries-expression-set-message-token-configure/SKILL.md +0 -135
- package/skills/industries-field-service-settings-configure/SKILL.md +0 -82
- package/skills/industries-form-framework-settings-configure/SKILL.md +0 -30
- package/skills/industries-fsc-ai-settings-configure/SKILL.md +0 -57
- package/skills/industries-fsc-association-engine-settings-configure/SKILL.md +0 -172
- package/skills/industries-fsc-b2b-settings-configure/SKILL.md +0 -61
- package/skills/industries-fsc-insurance-settings-configure/SKILL.md +0 -58
- package/skills/industries-fsc-visa-fulfillment-setup-configure/SKILL.md +0 -103
- package/skills/industries-fsc-wealth-agent-settings-configure/SKILL.md +0 -117
- package/skills/industries-fsc-wealth-settings-configure/SKILL.md +0 -99
- package/skills/industries-fundraising-gift-entry-settings-configure/SKILL.md +0 -120
- package/skills/industries-fundraising-rfm-configure/SKILL.md +0 -128
- package/skills/industries-fundraising-settings-configure/SKILL.md +0 -145
- package/skills/industries-fundraising-source-code-gen-configure/SKILL.md +0 -299
- package/skills/industries-google-maps-api-key-settings-configure/SKILL.md +0 -87
- package/skills/industries-grantmaking-intelligence-settings-open/SKILL.md +0 -58
- package/skills/industries-hc-score-category-settings-configure/SKILL.md +0 -167
- package/skills/industries-health-engagement-settings-configure/SKILL.md +0 -218
- package/skills/industries-home-health-agentforce-setup-configure/SKILL.md +0 -131
- package/skills/industries-home-health-bundling-policy-create/SKILL.md +0 -50
- package/skills/industries-home-health-entity-labels-configure/SKILL.md +0 -29
- package/skills/industries-home-health-fsl-package-deploy/SKILL.md +0 -71
- package/skills/industries-home-health-fsl-settings-validate/SKILL.md +0 -27
- package/skills/industries-home-health-guided-setup-care-and-skill-get/SKILL.md +0 -80
- package/skills/industries-home-health-guided-setup-configure/SKILL.md +0 -836
- package/skills/industries-home-health-guided-setup-enable-org-fsl-get/SKILL.md +0 -55
- package/skills/industries-home-health-guided-setup-get-org-ready-get/SKILL.md +0 -61
- package/skills/industries-home-health-licenses-assign/SKILL.md +0 -27
- package/skills/industries-home-health-operating-hours-create/SKILL.md +0 -40
- package/skills/industries-home-health-scheduling-policy-create/SKILL.md +0 -41
- package/skills/industries-home-health-service-objective-create/SKILL.md +0 -22
- package/skills/industries-home-health-skills-create/SKILL.md +0 -31
- package/skills/industries-home-health-users-create/SKILL.md +0 -29
- package/skills/industries-icm-act3-toggles-configure/SKILL.md +0 -198
- package/skills/industries-icm-act5-genai-suggested-assessments-configure/SKILL.md +0 -361
- package/skills/industries-icm-act6-mcg-integration-configure/SKILL.md +0 -550
- package/skills/industries-integrated-care-management-configure/SKILL.md +0 -168
- package/skills/industries-object-enablement-configure/SKILL.md +0 -86
- package/skills/industries-tpm-system-processing-service-configure/SKILL.md +0 -64
- package/skills/integration-apex-settings-configure/SKILL.md +0 -61
- package/skills/marketing-e360-email-archiving-configure/SKILL.md +0 -73
- package/skills/platform-custom-permissions-configure/SKILL.md +0 -687
- package/skills/platform-label-workbench-import-create/SKILL.md +0 -67
- package/skills/platform-privacy-agent-settings-configure/SKILL.md +0 -752
|
@@ -1,378 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: commerce-location-bopis-configure
|
|
3
|
-
description: "Use this skill when users want to use this workflow when someone wants to turn a store location ON for in-store pickup / BOPIS — \"make my SF warehouse available for pickup\", \"enable BOPIS for these stores\", \"let customers collect orders from this location\". Trigger when users mention enable, location, bopis."
|
|
4
|
-
metadata:
|
|
5
|
-
version: "1.0"
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Managing Enable Location Bopis
|
|
9
|
-
|
|
10
|
-
## When to Use This Skill
|
|
11
|
-
|
|
12
|
-
Use this workflow when someone wants to turn a store location ON for in-store pickup / BOPIS — "make
|
|
13
|
-
my SF warehouse available for pickup", "enable BOPIS for these stores", "let customers collect orders
|
|
14
|
-
from this location". The indicator is Location.IsEligibleForPickup (Boolean); this skill sets it via
|
|
15
|
-
the Data API. It can also DISABLE pickup (set it false) for a location, but enabling is the default.
|
|
16
|
-
|
|
17
|
-
It can ALSO set (or clear) a per-location PICKUP TIME WINDOW — EarliestPickupTimeOffset /
|
|
18
|
-
LatestPickupTimeOffset, minutes-based OFFSETS from the location's business-hours open/close (e.g.
|
|
19
|
-
"pickup opens 15 minutes after we open and cuts off 30 minutes before we close"), NOT literal times.
|
|
20
|
-
This is a SEPARATE PATCH from the eligibility change (the set-location-pickup-window step, which only
|
|
21
|
-
runs for locations whose entry actually carries both window fields) — most eligibility toggles don't
|
|
22
|
-
touch it. See that step's guidance for the validation contract (both-or-neither, must be positive
|
|
23
|
-
when set, no ordering check).
|
|
24
|
-
|
|
25
|
-
It guides the caller in plain language — do not ask for raw JSON or field API names: resolve the
|
|
26
|
-
Delivery Estimation setup, list the stores in its LocationGroup each showing whether pickup is
|
|
27
|
-
currently on (and its window, if set), let the caller choose which store(s) to enable, PATCH
|
|
28
|
-
Location.IsEligibleForPickup — plus, for any location whose entry also carries a pickup window, a
|
|
29
|
-
SEPARATE PATCH for those two fields — verify the change, then automatically publish the updated
|
|
30
|
-
location graph downstream (no ask — this always runs now), then ONE optional follow-up gated by a
|
|
31
|
-
choice_point:
|
|
32
|
-
• RUN AN ESTIMATE (estimate-after-enable choice_point): since the location is now pickup-enabled,
|
|
33
|
-
offer to run a BOPIS pickup estimate for it by delegating to the estimate-bopis skill (a
|
|
34
|
-
delegates_to leaf). Skippable.
|
|
35
|
-
|
|
36
|
-
This is the WRITE counterpart to the read-only estimate-bopis skill: this one turns pickup
|
|
37
|
-
eligibility ON; estimate-bopis reads it to compute a pickup estimate.
|
|
38
|
-
|
|
39
|
-
CUSTOMER-FACING WORDING: once the change is verified and the downstream publish completes, say
|
|
40
|
-
"Your change has been saved and synced." Then a compact recap: Location Name + ExternalReference
|
|
41
|
-
(ExternalReference is fine to show — it's typically the customer's own business key) and what
|
|
42
|
-
changed. Never say "CDS", "Commerce Delivery Service", or otherwise imply two separate systems —
|
|
43
|
-
this is one seamless save. Don't surface sObject/field API names, the Connect path, Ids, or raw
|
|
44
|
-
HTTP codes.
|
|
45
|
-
|
|
46
|
-
## Workflow
|
|
47
|
-
|
|
48
|
-
Turn a store location ON for in-store pickup / BOPIS (Location.IsEligibleForPickup), automatically
|
|
49
|
-
sync the change downstream, and optionally run a pickup estimate. WRITE counterpart to the read-only
|
|
50
|
-
estimate-bopis skill. Flow:
|
|
51
|
-
|
|
52
|
-
### Phase 1: resolve-delivery-estimation-setup -> by Name/ExternalReference -> LocationGroupId + Name...
|
|
53
|
-
|
|
54
|
-
resolve-delivery-estimation-setup -> by Name/ExternalReference -> LocationGroupId + Name +
|
|
55
|
-
ExternalReference.
|
|
56
|
-
|
|
57
|
-
### Phase 2: list-locations-in-group -> LocationGroupAssignment (junction) -> Location details; present...
|
|
58
|
-
|
|
59
|
-
list-locations-in-group -> LocationGroupAssignment (junction) -> Location details; present each
|
|
60
|
-
location's current pickup state ("ON"/"OFF") + capture ExternalReference + baseline. Caller picks
|
|
61
|
-
which to enable (or disable).
|
|
62
|
-
|
|
63
|
-
### Phase 3: enable-location-bopis -> PATCH each chosen Location.IsEligibleForPickup (true =...
|
|
64
|
-
|
|
65
|
-
enable-location-bopis -> PATCH each chosen Location.IsEligibleForPickup (true = enable, default;
|
|
66
|
-
false = disable). Loop; in-group guard; rollback to baseline on failure; 204 each. This call's
|
|
67
|
-
body is ALWAYS exactly this one field — the pickup window is a separate step (next).
|
|
68
|
-
|
|
69
|
-
### Phase 4: set-location-pickup-window -> for locations whose entry ALSO carries...
|
|
70
|
-
|
|
71
|
-
set-location-pickup-window -> for locations whose entry ALSO carries a pickup time window
|
|
72
|
-
(EarliestPickupTimeOffset / LatestPickupTimeOffset — both-or-neither, must be positive when set),
|
|
73
|
-
a SEPARATE PATCH with just those two fields. Entries with neither key are skipped — no call is
|
|
74
|
-
made for them, so the window fields are never emitted for a location whose window isn't being
|
|
75
|
-
touched.
|
|
76
|
-
|
|
77
|
-
### Phase 5: verify-location-bopis -> re-read the changed locations; capture the...
|
|
78
|
-
|
|
79
|
-
verify-location-bopis -> re-read the changed locations; capture the now-eligible ExternalReferences.
|
|
80
|
-
|
|
81
|
-
### Phase 6: sync-location-graph (ALWAYS runs automatically, immediately after verify —...
|
|
82
|
-
|
|
83
|
-
sync-location-graph (ALWAYS runs automatically, immediately after verify — no ask, no choice)
|
|
84
|
-
-> delegates_to the shared sync-location-graph SOR, which publishes the location graph
|
|
85
|
-
(triggerFullLocationGraphSync) AND polls to terminal success before returning — this step,
|
|
86
|
-
not the enqueue alone, is what actually confirms the eligibility takes effect.
|
|
87
|
-
|
|
88
|
-
### Phase 7: estimate-bopis (choice-gated by estimate-after-enable; default estimate) -> delegate...
|
|
89
|
-
|
|
90
|
-
estimate-bopis (choice-gated by estimate-after-enable; default estimate) -> delegate to the
|
|
91
|
-
estimate-bopis skill to run a pickup estimate for the just-enabled store(s).
|
|
92
|
-
|
|
93
|
-
## Critical Constraints
|
|
94
|
-
|
|
95
|
-
**Preconditions:**
|
|
96
|
-
|
|
97
|
-
- Commerce Order Management with Delivery Estimation must be enabled (the DeliveryEstimationSetup +
|
|
98
|
-
Location objects exist and the group has LocationGroupAssignments). Location.IsEligibleForPickup is
|
|
99
|
-
only meaningful/visible when Delivery Estimation is enabled for the org. (check: `Delivery Estimation enabled + LocationGroup populated`)
|
|
100
|
-
- The running user must have Edit access on Location AND field-level Edit on
|
|
101
|
-
Location.IsEligibleForPickup (and, if setting a pickup window, on EarliestPickupTimeOffset /
|
|
102
|
-
LatestPickupTimeOffset too). Without it the PATCH returns 403, or the field is silently dropped. (check: `UserPermissions edit on Location + FLS on IsEligibleForPickup (+ the two offset fields if used)`)
|
|
103
|
-
- A DeliveryEstimationSetup record (with a LocationGroup + LocationGroupAssignments) must exist. This
|
|
104
|
-
workflow toggles pickup eligibility on locations within that group; it does not create records. (check: `DeliveryEstimationSetup + LocationGroupAssignments exist`)
|
|
105
|
-
|
|
106
|
-
**Operational rules:**
|
|
107
|
-
|
|
108
|
-
- ONE CHOICE_POINT:
|
|
109
|
-
• estimate-after-enable (estimate | done): run a BOPIS estimate now via the delegates_to leaf, or
|
|
110
|
-
stop. Default estimate. (The location-graph publish is NOT a choice anymore — it always runs
|
|
111
|
-
automatically after the change is verified; never ask the admin about it.)
|
|
112
|
-
- WHY THIS SOR ALWAYS PUBLISHES (internal rationale — not customer wording): Location.IsEligibleForPickup
|
|
113
|
-
is one of the BOPIS fields synced downstream via the location graph, and the downstream system filters
|
|
114
|
-
BOPIS estimates against ITS copy — so without a publish a freshly-enabled store may not appear in an
|
|
115
|
-
estimate. This location-graph publish is functionally distinct from enable-and-push-delivery
|
|
116
|
-
-estimation-setup (config push) and sync-delivery-routing-specs (routing specs), but the customer
|
|
117
|
-
should never be told there are multiple systems involved — from their side, this is one save.
|
|
118
|
-
- VERSION: pin v68.0 on every call to match the estimate-bopis family (Location.IsEligibleForPickup
|
|
119
|
-
exists since API 258, but the family standardizes on v68.0). WIRE CONTRACT, live-validated
|
|
120
|
-
end-to-end: PATCH returns 204 with read-back confirming the flag; the CDS publish returns 201; the
|
|
121
|
-
delegated estimate returns 201.
|
|
122
|
-
- PICKUP WINDOW CONTRACT (EarliestPickupTimeOffset / LatestPickupTimeOffset), applied by the SEPARATE
|
|
123
|
-
set-location-pickup-window step (NOT part of enable-location-bopis's PATCH — that call is
|
|
124
|
-
IsEligibleForPickup only, unconditionally). WIRE CONTRACT, live-validated end-to-end: both-or-neither
|
|
125
|
-
is a HARD Core rule — one without the other -> 400
|
|
126
|
-
FIELD_INTEGRITY_EXCEPTION "Either the earliest and latest pickup times must both be set or both be
|
|
127
|
-
null.", confirmed symmetric on either field alone. set-location-pickup-window's inputs schema mirrors
|
|
128
|
-
this with a dependentRequired constraint (each offset field requires the other), rejecting a one-sided
|
|
129
|
-
entry before dispatch rather than relying on agent_guidance prose alone. Negative -> 400
|
|
130
|
-
FIELD_INTEGRITY_EXCEPTION ("Specify a value for earliest pickup time that's greater than 0." — the
|
|
131
|
-
message text says >0, and Core's own live boundary is actually >=0, but this step's schema now
|
|
132
|
-
enforces `minimum: 1` on both fields when non-null — a caller-side 0 is rejected before the PATCH is
|
|
133
|
-
ever sent, so this Core-side message should not normally be reachable in practice). NO
|
|
134
|
-
earliest-vs-latest ordering check (100/30 PATCHed 204 despite earliest > latest). null/null clears an
|
|
135
|
-
existing window (204, read-back
|
|
136
|
-
null/null). Per Core/CDS source research (not live-tested): the downstream delivery system's
|
|
137
|
-
validator for this same pair is STRICTER — it requires a value > 0 — and since sync-location-graph
|
|
138
|
-
now ALWAYS publishes (never skippable), a 0/0 window would always eventually fail downstream even
|
|
139
|
-
though Core itself would accept it; that's exactly why the schema now rejects 0 up front instead of
|
|
140
|
-
leaving it as a "prefer avoiding" note.
|
|
141
|
-
WHY TWO STEPS, NOT ONE PATCH WITH OPTIONAL FIELDS: enable-location-bopis and set-location-pickup-window
|
|
142
|
-
read the SAME locationUpdates array but each emits a call with ZERO optional fields — the eligibility
|
|
143
|
-
PATCH always sends just IsEligibleForPickup; the window PATCH is skipped entirely (not sent with
|
|
144
|
-
omitted/null-placeholder keys) for any entry that doesn't carry both window fields, and sends both
|
|
145
|
-
together whenever it does run. This makes the optionality a property of WHETHER a call happens, not of
|
|
146
|
-
which keys appear inside an always-made call's static body.
|
|
147
|
-
- CUSTOMER-FACING WORDING: the canonical closing line — "Your change has been saved and synced."
|
|
148
|
-
verbatim — may ONLY be said after the delegated sync-location-graph's poll reaches TERMINAL
|
|
149
|
-
SUCCESS, not merely after its enqueue POST returns. Enqueue succeeding is NOT synced yet.
|
|
150
|
-
- TERMINAL FAILURE (the delegate's poll ended in Error/ServiceException, or success:false): the
|
|
151
|
-
entity change (the earlier PATCH) DID succeed, but the downstream sync did not — do NOT say
|
|
152
|
-
"saved and synced." IF the delegate's poll_status is 'Error' AND poll_error is non-empty: it
|
|
153
|
-
carries a plain-enough, per-location explanation designed to be shown to end users (e.g.
|
|
154
|
-
"Location 'X' has invalid country code"). COMPARE the location it names against the
|
|
155
|
-
location(s) THIS flow just enabled/disabled: if DIFFERENT, make that clear so the customer
|
|
156
|
-
doesn't think their own change caused it — "Your change was saved, but the sync couldn't
|
|
157
|
-
complete because of an unrelated issue elsewhere — <what poll_error says>. It can be retried
|
|
158
|
-
once that's fixed." (No link here — poll_error names that OTHER location by text only, not a
|
|
159
|
-
record this flow read back, so there's nothing to link safely.) If it names one of the
|
|
160
|
-
locations THIS flow just changed, do NOT say "elsewhere" — report the issue against that
|
|
161
|
-
location, and this IS a case a link is possible: verify-location-bopis.verified already
|
|
162
|
-
carries that location's Name AND Id, so match poll_error's location to its row there and
|
|
163
|
-
link it rather than naming it in plain text — "Your change was saved, but the sync couldn't
|
|
164
|
-
complete for [<Name>](<orgHost>/lightning/r/Location/<Id>/view): <issue from poll_error>. It
|
|
165
|
-
can be retried once that's fixed." — keep the `]` and `(` adjacent with no space/break, or
|
|
166
|
-
the Markdown link renders broken. If you CAN'T TELL which location poll_error means, use
|
|
167
|
-
that same non-"elsewhere" wording (claiming "elsewhere" when it might not be is the more
|
|
168
|
-
misleading error) but WITHOUT a link, naming it plainly instead: "Your change was saved, but
|
|
169
|
-
the sync couldn't complete: this location <issue from poll_error>. It can be retried once
|
|
170
|
-
that's fixed." — this skill changes several locations at once, so an unmatched guess could
|
|
171
|
-
link the wrong record. IF poll_status is 'ServiceException', or poll_error is
|
|
172
|
-
empty/absent: do NOT relay raw poll_error content (that status is a generic/transport
|
|
173
|
-
failure path with no evidence its content is customer-safe) — fall back to the generic
|
|
174
|
-
"saved but could not be synced; retry shortly" without inventing detail.
|
|
175
|
-
- STILL IN PROGRESS (the delegate's bounded poll exhausted its attempts still New/InProgress):
|
|
176
|
-
do NOT claim success or failure either way. Tell the customer the change was saved and is
|
|
177
|
-
still taking effect, and not to worry if an estimate doesn't reflect it immediately.
|
|
178
|
-
Never surface the raw job Id, status enum value, Connect path, or HTTP codes — this is all
|
|
179
|
-
internal-mechanism detail; only the outcome (synced / not yet / failed) matters to the customer.
|
|
180
|
-
Once terminal success is confirmed: the canonical line, then a compact recap: Name, ExternalReference
|
|
181
|
-
(fine to show now — it's typically the customer's own business key), and what changed (pickup
|
|
182
|
-
enabled/disabled; the pickup time window, if set) for EVERY changed Location — enabled or disabled.
|
|
183
|
-
Source this from verify-location-bopis.verified (the full read-back), NOT enabled_external_references
|
|
184
|
-
(that field is enabled-only, scoped for the estimate leaf — using it here would silently drop any
|
|
185
|
-
disabled locations from the recap). If you have the
|
|
186
|
-
Location Id, add a best-effort link:
|
|
187
|
-
[<Name>](<orgHost>/lightning/r/Location/<Id>/view) — the standard record-link form used across the
|
|
188
|
-
corpus; never speak the raw Id itself.
|
|
189
|
-
RECAP LAYOUT — ONE location changed: a single plain sentence, e.g. "West Warehouse: pickup
|
|
190
|
-
enabled." with the Name link-wrapped — if its ExternalReference is blank/null, just leave it out of
|
|
191
|
-
the sentence (a sentence has no column alignment to preserve). MULTIPLE locations changed (this SOR
|
|
192
|
-
loops over a caller-picked set, so this is common): use a compact markdown table instead of repeating
|
|
193
|
-
sentences —
|
|
194
|
-
| Location | Reference | Changed |
|
|
195
|
-
|---|---|---|
|
|
196
|
-
| [<Name>](<orgHost>/lightning/r/Location/<Id>/view) | <ExternalReference> | pickup enabled |
|
|
197
|
-
One row per changed Location. In a TABLE, every row needs the same number of cells — if an
|
|
198
|
-
individual Location's ExternalReference is blank/null, put "—" in that cell rather than dropping it
|
|
199
|
-
(an empty/missing cell misaligns the row). Only drop the Reference COLUMN entirely (header + every
|
|
200
|
-
row) when EVERY changed Location lacks an ExternalReference. Never say "CDS", "Commerce Delivery
|
|
201
|
-
Service", "delivery service", or otherwise imply two separate systems — this is one seamless save from
|
|
202
|
-
the customer's point of view. Keep the closing + recap under ~200 characters of VISIBLE text where
|
|
203
|
-
possible for a single-location change (the link URL doesn't count against this — soft
|
|
204
|
-
target, prioritize the recap content over strict truncation). Still don't surface sObject/field API
|
|
205
|
-
names, the Connect path, Ids, or raw HTTP codes. This can be immediately followed by the separate
|
|
206
|
-
estimate-after-enable follow-up question.
|
|
207
|
-
|
|
208
|
-
## Verification Checklist
|
|
209
|
-
|
|
210
|
-
After every write operation, confirm the effect by re-reading state:
|
|
211
|
-
|
|
212
|
-
- After `enable-location-bopis`, `set-location-pickup-window`: call `verify-location-bopis`
|
|
213
|
-
|
|
214
|
-
## Operations Reference
|
|
215
|
-
|
|
216
|
-
Operations grouped by purpose. Use these as the building blocks for the workflows above.
|
|
217
|
-
|
|
218
|
-
### Summary
|
|
219
|
-
|
|
220
|
-
| Operation | Purpose | Status | Call | Depends on |
|
|
221
|
-
|-----------|---------|--------|------|------------|
|
|
222
|
-
| `resolve-delivery-estimation-setup` | read | implemented | `querySoql` | — |
|
|
223
|
-
| `list-locations-in-group` | read | implemented | `querySoql` | `resolve-delivery-estimation-setup` |
|
|
224
|
-
| `enable-location-bopis` | write | implemented | `updateLocation` | `list-locations-in-group` |
|
|
225
|
-
| `set-location-pickup-window` | write | implemented | `updateLocation` | `list-locations-in-group` |
|
|
226
|
-
| `verify-location-bopis` | verify | implemented | `querySoql` | `enable-location-bopis`, `set-location-pickup-window` |
|
|
227
|
-
| `sync-location-graph` | write | — | → `cc-om-fast-and-furious/sync-location-graph` | `verify-location-bopis` |
|
|
228
|
-
| `estimate-bopis` | read | — | → `cc-om-fast-and-furious/estimate-bopis` | `verify-location-bopis`, `sync-location-graph` |
|
|
229
|
-
|
|
230
|
-
### Dependency graph
|
|
231
|
-
|
|
232
|
-
```mermaid
|
|
233
|
-
graph TD
|
|
234
|
-
resolve_delivery_estimation_setup["resolve-delivery-estimation-setup (read)"]
|
|
235
|
-
list_locations_in_group["list-locations-in-group (read)"]
|
|
236
|
-
enable_location_bopis["enable-location-bopis (write)"]
|
|
237
|
-
set_location_pickup_window["set-location-pickup-window (write)"]
|
|
238
|
-
verify_location_bopis["verify-location-bopis (verify)"]
|
|
239
|
-
sync_location_graph["sync-location-graph (write)"]
|
|
240
|
-
estimate_bopis["estimate-bopis (read)"]
|
|
241
|
-
resolve_delivery_estimation_setup --> list_locations_in_group
|
|
242
|
-
list_locations_in_group --> enable_location_bopis
|
|
243
|
-
list_locations_in_group --> set_location_pickup_window
|
|
244
|
-
enable_location_bopis --> verify_location_bopis
|
|
245
|
-
set_location_pickup_window --> verify_location_bopis
|
|
246
|
-
verify_location_bopis --> sync_location_graph
|
|
247
|
-
verify_location_bopis --> estimate_bopis
|
|
248
|
-
sync_location_graph --> estimate_bopis
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
### Read operations
|
|
252
|
-
|
|
253
|
-
#### `resolve-delivery-estimation-setup`
|
|
254
|
-
|
|
255
|
-
Resolve the parent DeliveryEstimationSetup by Name / ExternalReference and capture its
|
|
256
|
-
LocationGroupId (to list the group's locations) and its Name + ExternalReference (used to hand off
|
|
257
|
-
to the estimate-bopis leaf, which resolves the setup by name/reference). Skip if the caller already
|
|
258
|
-
has the group id.
|
|
259
|
-
|
|
260
|
-
**Call:** `querySoql` — status: `implemented`
|
|
261
|
-
|
|
262
|
-
**Inputs:**
|
|
263
|
-
|
|
264
|
-
- `name` *(`String`)* — The DeliveryEstimationSetup's Name OR ExternalReference (e.g. "west") — the query matches either
|
|
265
|
-
field. Source: user_input.
|
|
266
|
-
|
|
267
|
-
#### `list-locations-in-group`
|
|
268
|
-
|
|
269
|
-
List the locations in the setup's LocationGroup with each one's current pickup eligibility (and, if
|
|
270
|
-
set, pickup time window). Reads LocationGroupAssignment (the group->location junction) joined to its
|
|
271
|
-
Location. Present each location as "pickup ON" or "pickup OFF" so the caller can choose which to
|
|
272
|
-
enable (or disable). Also captures each location's ExternalReference (the value the estimate-bopis
|
|
273
|
-
leaf keys locations by) and the pre-change IsEligibleForPickup + EarliestPickupTimeOffset /
|
|
274
|
-
LatestPickupTimeOffset (the rollback baseline).
|
|
275
|
-
|
|
276
|
-
**Call:** `querySoql` — status: `implemented`
|
|
277
|
-
|
|
278
|
-
**Inputs:**
|
|
279
|
-
|
|
280
|
-
- `locationGroupId` *(`String`)* — LocationGroup Id (0gh...) of the CHOSEN setup. Source: resolve-delivery-estimation-setup.location_group_ids (the one the customer picked when the lookup matched more than one).
|
|
281
|
-
|
|
282
|
-
**Depends on:** `resolve-delivery-estimation-setup`
|
|
283
|
-
|
|
284
|
-
#### `estimate-bopis`
|
|
285
|
-
|
|
286
|
-
Since the location is now pickup-enabled, optionally run a BOPIS pickup estimate for it by
|
|
287
|
-
delegating to the estimate-bopis skill. Choice-gated by the estimate-after-enable choice_point
|
|
288
|
-
(skipped when the caller is done after enabling). The delegated skill owns the estimate + its
|
|
289
|
-
result; nothing is read back here.
|
|
290
|
-
|
|
291
|
-
**Delegates to:** `cc-om-fast-and-furious/estimate-bopis`
|
|
292
|
-
|
|
293
|
-
**Depends on:** `verify-location-bopis`, `sync-location-graph`
|
|
294
|
-
|
|
295
|
-
### Write operations
|
|
296
|
-
|
|
297
|
-
#### `enable-location-bopis`
|
|
298
|
-
|
|
299
|
-
Apply the pickup-eligibility change. For EACH location the caller chose, PATCH
|
|
300
|
-
Location.IsEligibleForPickup (true = enable BOPIS, the default; false = disable). Loop over the
|
|
301
|
-
selected locations — one PATCH per Location record. This call's body carries ONLY
|
|
302
|
-
IsEligibleForPickup, unconditionally, on every invocation — a caller-supplied pickup time window is
|
|
303
|
-
a SEPARATE PATCH, applied by the sibling set-location-pickup-window step, not here.
|
|
304
|
-
|
|
305
|
-
**Call:** `updateLocation` — status: `implemented`
|
|
306
|
-
|
|
307
|
-
**Inputs:**
|
|
308
|
-
|
|
309
|
-
- `locationUpdates` *(`Array`)* — One entry per location being changed. Each entry: the Location Id and the target
|
|
310
|
-
isEligibleForPickup (true to enable pickup — the default; false to disable). An entry MAY also
|
|
311
|
-
carry a pickup time window (earliestPickupTimeOffset / latestPickupTimeOffset) for the SAME
|
|
312
|
-
location — this step does not read those two keys at all; the sibling set-location-pickup-window
|
|
313
|
-
step reads them from this same array and issues its own PATCH. Include only locations that are
|
|
314
|
-
actually changing eligibility. Source: user selection over list-locations-in-group.
|
|
315
|
-
- schema: `{'type': 'array', 'minItems': 1, 'maxItems': 200, 'items': {'type': 'object', 'required': ['locationId'], 'properties': {'locationId': {'type': 'string', 'pattern': '^131[a-zA-Z0-9]{12,15}$', 'description': 'Location Id to update (from list-locations-in-group).'}, 'isEligibleForPickup': {'type': 'boolean', 'default': True, 'description': 'Target BOPIS pickup eligibility — true enables pickup (default), false disables it. Emit as an UNQUOTED JSON boolean (true / false), never a quoted string.'}}}}`
|
|
316
|
-
|
|
317
|
-
**Depends on:** `list-locations-in-group`
|
|
318
|
-
|
|
319
|
-
**Rollback:** {'operation': 'updateLocation', 'invocation': {'kind': 'rest', 'method': 'PATCH', 'path': '/services/data/v68.0/sobjects/Location/{locationId}', 'body': {'IsEligibleForPickup': '{list-locations-in-group.locations_before[?(@.LocationId==locationId)].Location.IsEligibleForPickup}'}}}
|
|
320
|
-
|
|
321
|
-
#### `set-location-pickup-window`
|
|
322
|
-
|
|
323
|
-
Set or clear a per-location pickup time window — Location.EarliestPickupTimeOffset /
|
|
324
|
-
LatestPickupTimeOffset (minutes-based offsets from business hours, both required together). This is
|
|
325
|
-
a SEPARATE PATCH from enable-location-bopis's eligibility change, over the SAME locationUpdates
|
|
326
|
-
array: this step iterates ONLY the entries that carry BOTH earliestPickupTimeOffset AND
|
|
327
|
-
latestPickupTimeOffset as explicit keys (including both-explicitly-null, to clear) — an entry
|
|
328
|
-
carrying NEITHER key is skipped entirely, so no window PATCH is ever issued for it. Because the call
|
|
329
|
-
itself is what's conditional (not a field inside an always-made call), this step's body always
|
|
330
|
-
carries exactly these two keys together whenever it runs at all.
|
|
331
|
-
|
|
332
|
-
**Call:** `updateLocation` — status: `implemented`
|
|
333
|
-
|
|
334
|
-
**Inputs:**
|
|
335
|
-
|
|
336
|
-
- `locationUpdates` *(`Array`)* — The SAME array passed to enable-location-bopis. This step reads only entries that carry BOTH
|
|
337
|
-
earliestPickupTimeOffset AND latestPickupTimeOffset (both required together; both null clears an
|
|
338
|
-
existing window) — entries carrying neither key are skipped by this step (no call is made for
|
|
339
|
-
them; see SKIP-IF-ABSENT in agent_guidance). Source: user selection over list-locations-in-group.
|
|
340
|
-
- schema: `{'type': 'array', 'minItems': 1, 'maxItems': 200, 'items': {'type': 'object', 'required': ['locationId'], 'dependentRequired': {'earliestPickupTimeOffset': ['latestPickupTimeOffset'], 'latestPickupTimeOffset': ['earliestPickupTimeOffset']}, 'properties': {'locationId': {'type': 'string', 'pattern': '^131[a-zA-Z0-9]{12,15}$', 'description': 'Location Id to update (from list-locations-in-group). Same value as the matching entry\npassed to enable-location-bopis.'}, 'earliestPickupTimeOffset': {'type': ['integer', 'null'], 'minimum': 1, 'description': "Minutes AFTER the location's business-hours opening that pickup becomes available — an OFFSET, not a literal time (don't confuse with Location.DefaultPickupTime, an unrelated literal time-of-day field). Required together with latestPickupTimeOffset — the dependentRequired constraint above rejects an entry carrying exactly one of the two keys before this step ever runs; Core's own FIELD_INTEGRITY_EXCEPTION (live-confirmed) is the second line of defense if a caller bypasses schema validation. An entry carrying NEITHER key is skipped by this step entirely (see SKIP-IF-ABSENT in agent_guidance) — to clear an existing window, send BOTH as null rather than omitting the entry. When non-null, MUST be >= 1 — Core itself accepts 0, but the location-graph publish this SOR always runs afterward rejects 0 (requires a strictly positive value), so 0 would write successfully here and then fail downstream. Reject a non-null 0 (or negative) before this step ever runs; null/null for clearing is unaffected. No upper bound and no earliest-vs-latest ordering check on the Core side — see PICKUP WINDOW in agent_guidance for the ordering sanity-check."}, 'latestPickupTimeOffset': {'type': ['integer', 'null'], 'minimum': 1, 'description': "Minutes BEFORE the location's business-hours closing that pickup cuts off — an OFFSET, not a literal time. Same both-or-neither / minimum-1-when-non-null / skip-if-absent rules as earliestPickupTimeOffset; see that field's description and PICKUP WINDOW in agent_guidance."}}}}`
|
|
341
|
-
|
|
342
|
-
**Depends on:** `list-locations-in-group`
|
|
343
|
-
|
|
344
|
-
**Rollback:** {'operation': 'updateLocation', 'invocation': {'kind': 'rest', 'method': 'PATCH', 'path': '/services/data/v68.0/sobjects/Location/{locationId}', 'body': {'EarliestPickupTimeOffset': '{list-locations-in-group.locations_before[?(@.LocationId==locationId)].Location.EarliestPickupTimeOffset}', 'LatestPickupTimeOffset': '{list-locations-in-group.locations_before[?(@.LocationId==locationId)].Location.LatestPickupTimeOffset}'}}}
|
|
345
|
-
|
|
346
|
-
#### `sync-location-graph`
|
|
347
|
-
|
|
348
|
-
Publish the updated location graph downstream so its copy of the locations — including the
|
|
349
|
-
just-changed IsEligibleForPickup — is current, and poll to terminal success before anything is
|
|
350
|
-
reported as synced. Runs automatically, unconditionally, immediately after verify-location-bopis
|
|
351
|
-
succeeds — never gated on a customer choice. EXTRACTED (2026-08-22) into its own delegates_to
|
|
352
|
-
target — update-location-shipping-carrier-method needs the identical mechanism (confirmed via
|
|
353
|
-
Core source trace: the same location-graph sync serializes ShippingCarrierMethod /
|
|
354
|
-
LocationShippingCarrierMethod fields too) — see sync-location-graph/sor.yaml for the full wire
|
|
355
|
-
contract, poll_config, and WIRE GOTCHA reasoning (all carried forward unchanged from this SOR's
|
|
356
|
-
own prior live validation).
|
|
357
|
-
|
|
358
|
-
**Delegates to:** `cc-om-fast-and-furious/sync-location-graph`
|
|
359
|
-
|
|
360
|
-
**Depends on:** `verify-location-bopis`
|
|
361
|
-
|
|
362
|
-
### Verify operations
|
|
363
|
-
|
|
364
|
-
#### `verify-location-bopis`
|
|
365
|
-
|
|
366
|
-
Re-read the changed Location records and confirm each now holds the requested pickup eligibility
|
|
367
|
-
(from enable-location-bopis) and, for any location whose window was set/cleared by
|
|
368
|
-
set-location-pickup-window, the requested window.
|
|
369
|
-
|
|
370
|
-
**Call:** `querySoql` — status: `implemented`
|
|
371
|
-
|
|
372
|
-
**Inputs:**
|
|
373
|
-
|
|
374
|
-
- `locationIds` *(`Array`)* — Ids of the changed locations (from locationUpdates[].locationId). Source: enable-location-bopis.
|
|
375
|
-
The query's {locationIdsInClause} is the SOQL-safe rendering of THIS input — a comma-separated
|
|
376
|
-
list of single-quoted Ids (see agent_guidance) — not a separate input.
|
|
377
|
-
|
|
378
|
-
**Depends on:** `enable-location-bopis`, `set-location-pickup-window`
|
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: commerce-location-business-hours-configure
|
|
3
|
-
description: "Use this skill when users want to use this workflow to change a SPECIFIC location's weekly business hours (not the group-wide default). Trigger when users mention update, location, business, hours."
|
|
4
|
-
metadata:
|
|
5
|
-
version: "1.0"
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Managing Update Location Business Hours
|
|
9
|
-
|
|
10
|
-
## When to Use This Skill
|
|
11
|
-
|
|
12
|
-
Use this workflow to change a SPECIFIC location's weekly business hours (not the group-wide
|
|
13
|
-
default). Each Location optionally references its own BusinessHours via
|
|
14
|
-
Location.FulfillingBusinessHoursId; when null, the location inherits the setup's default
|
|
15
|
-
BusinessHours. This edits the flat weekly hours (Monday..Sunday start/end + TimeZoneSidKey)
|
|
16
|
-
by a DIRECT sObject Data-API PATCH on that BusinessHours record. It does NOT touch holidays
|
|
17
|
-
or operating-hours timeslots — those live on OperatingHours and go through the Connect API
|
|
18
|
-
(see update-location-temporary-operating-hours).
|
|
19
|
-
|
|
20
|
-
Flow: resolve the setup by Name/ExternalReference -> list the group's locations with each
|
|
21
|
-
one's FulfillingBusinessHoursId -> present each location's current hours -> admin picks the
|
|
22
|
-
location(s) -> PATCH each chosen location's BusinessHours record -> verify -> push.
|
|
23
|
-
|
|
24
|
-
Key contract facts (details + wire format on the steps / in agent_guidance, kept off this card):
|
|
25
|
-
- A PATCH is a partial MERGE — send only the day(s)/timezone you're changing; omitted fields
|
|
26
|
-
keep their value.
|
|
27
|
-
- A location with FulfillingBusinessHoursId = null inherits the setup default. To change THAT,
|
|
28
|
-
use the setup-default path in update-delivery-business-hours; giving a location its OWN
|
|
29
|
-
distinct schedule requires creating a BusinessHours record first (out of scope for this
|
|
30
|
-
edit skill).
|
|
31
|
-
|
|
32
|
-
## Workflow
|
|
33
|
-
|
|
34
|
-
Per-location flat BusinessHours (companion to update-delivery-business-hours). Flow: resolve
|
|
35
|
-
the setup by Name/ExternalReference -> list locations (with FulfillingBusinessHoursId and
|
|
36
|
-
ExternalReference) -> present each location's current hours -> admin picks location(s) -> PATCH
|
|
37
|
-
each chosen location's BusinessHours record (partial merge, HH:mm:ss.SSSZ) -> verify -> push,
|
|
38
|
-
AUTOMATICALLY, right after verify succeeds.
|
|
39
|
-
MECHANISM: sObject Data-API PATCH on BusinessHours only — NO Connect API, NO holidays/timeslots
|
|
40
|
-
(those are OperatingHours -> update-location-temporary-operating-hours). Times are HH:mm:ss.SSSZ.
|
|
41
|
-
SHARED-RECORD CAVEAT: warn if the BusinessHours record is shared (setup default or multiple
|
|
42
|
-
locations) — editing it affects all of them. A location with a null FulfillingBusinessHoursId
|
|
43
|
-
inherits the setup default (change that via the front door's setup-default path).
|
|
44
|
-
KNOWN LIMITATION — CROSS-SETUP SYNC GAP: check-shared-business-hours finds referencing Locations
|
|
45
|
-
ORG-WIDE (not scoped to the current group), but enable-and-push-delivery-estimation below only
|
|
46
|
-
pushes the ONE DeliveryEstimationSetup this flow entered through. If the shared BusinessHours
|
|
47
|
-
record is also referenced by a Location in a DIFFERENT LocationGroup (a different setup —
|
|
48
|
-
Location.FulfillingBusinessHoursId is a plain, freely-shareable reference field, so this is a
|
|
49
|
-
realistic scenario, not a rare edge case), that OTHER setup's delivery-estimation copy goes stale
|
|
50
|
-
until independently re-synced. Closing this needs enumerating every referencing Location's own
|
|
51
|
-
LocationGroup/DeliveryEstimationSetup and pushing each distinct one — a materially bigger,
|
|
52
|
-
separately-validated change, not a wording fix — so it's flagged here rather than silently
|
|
53
|
-
claimed as covered. Do not imply in the closing message that OTHER setups were also synced.
|
|
54
|
-
WIRE CONTRACT: BusinessHours PATCH -> 204 (read-back + restore supported). The
|
|
55
|
-
enable-and-push-delivery-estimation step ALWAYS runs right after verify succeeds — never ask the
|
|
56
|
-
admin whether to push; the customer should never be told this involves a separate sync/service,
|
|
57
|
-
treat it as one seamless save.
|
|
58
|
-
CUSTOMER-FACING WORDING: once verify + push both succeed, say exactly: "Your change has been
|
|
59
|
-
saved and synced." Then give a compact recap: Name and ExternalReference (from
|
|
60
|
-
list-locations-in-group), and the day/time(s) that changed (old -> new where known), per
|
|
61
|
-
changed location. BusinessHours itself has no ExternalReference field — anchor the recap on the
|
|
62
|
-
Location, not the BusinessHours record. If check-shared-business-hours found the target is
|
|
63
|
-
SHARED (refCount > 1, or it's the setup default), add one line noting the OTHER locations also
|
|
64
|
-
affected — name a few from referencing_locations_sample (excluding the one(s) just changed)
|
|
65
|
-
when refCount is small, e.g. "Note: this schedule is shared with West Warehouse and East
|
|
66
|
-
Warehouse, which were also affected"; fall back to a bare count for a large refCount, e.g.
|
|
67
|
-
"Note: 12 other locations share this schedule and were also affected" — without naming the
|
|
68
|
-
BusinessHours record itself. If the target equals the setup default, also fold in any
|
|
69
|
-
null-FulfillingBusinessHoursId siblings from list-locations-in-group.locations_before (see
|
|
70
|
-
NULL-FK GAP on check-shared-business-hours) into that same count/naming. If you have the
|
|
71
|
-
Location's Id, add a best-effort
|
|
72
|
-
link: [<Name>](<orgHost>/lightning/r/Location/<Id>/view) — the standard record-link form used
|
|
73
|
-
across the corpus.
|
|
74
|
-
RECAP LAYOUT — ONE location changed: a single plain sentence with the Name link-wrapped.
|
|
75
|
-
MULTIPLE locations changed (an admin can pick more than one in list-locations-in-group): use a
|
|
76
|
-
compact markdown table instead of repeating sentences —
|
|
77
|
-
| Location | Reference | Changed |
|
|
78
|
-
|---|---|---|
|
|
79
|
-
| [<Name>](<orgHost>/lightning/r/Location/<Id>/view) | <ExternalReference> | Monday: 09:00-17:00 -> 09:00-18:00 |
|
|
80
|
-
One row per changed location. In a table, every row needs the same number of cells — if a
|
|
81
|
-
Location's ExternalReference is blank/null, put "—" in that cell rather than dropping it; only
|
|
82
|
-
drop the Reference column entirely if EVERY row lacks one. Keep the whole response under ~200 characters where
|
|
83
|
-
possible for a single-location change (soft target — prioritize the recap content over strict truncation). Never say "CDS",
|
|
84
|
-
"Commerce Delivery Service", or "delivery estimation service" to the customer, and never surface
|
|
85
|
-
sObject/field API names, raw Ids, the Connect path, or HTTP status codes.
|
|
86
|
-
|
|
87
|
-
## Critical Constraints
|
|
88
|
-
|
|
89
|
-
**Preconditions:**
|
|
90
|
-
|
|
91
|
-
- Delivery Estimation enabled; the setup's LocationGroup has LocationGroupAssignments. (check: `Delivery Estimation enabled + LocationGroup populated`)
|
|
92
|
-
- Edit access on BusinessHours + field-level Edit on the per-day fields / TimeZoneSidKey.
|
|
93
|
-
Without it the PATCH returns 403 or the fields are silently dropped. (check: `UserPermissions edit on BusinessHours + FLS on the fields`)
|
|
94
|
-
|
|
95
|
-
## Verification Checklist
|
|
96
|
-
|
|
97
|
-
After every write operation, confirm the effect by re-reading state:
|
|
98
|
-
|
|
99
|
-
- After `apply-location-business-hours`: call `verify-location-business-hours`
|
|
100
|
-
|
|
101
|
-
## Operations Reference
|
|
102
|
-
|
|
103
|
-
Operations grouped by purpose. Use these as the building blocks for the workflows above.
|
|
104
|
-
|
|
105
|
-
### Summary
|
|
106
|
-
|
|
107
|
-
| Operation | Purpose | Status | Call | Depends on |
|
|
108
|
-
|-----------|---------|--------|------|------------|
|
|
109
|
-
| `resolve-delivery-estimation-setup` | read | implemented | `querySoql` | — |
|
|
110
|
-
| `list-locations-in-group` | read | implemented | `querySoql` | `resolve-delivery-estimation-setup` |
|
|
111
|
-
| `present-location-business-hours` | read | implemented | `querySoql` | `list-locations-in-group` |
|
|
112
|
-
| `check-shared-business-hours` | read | implemented | `querySoql` | `present-location-business-hours` |
|
|
113
|
-
| `apply-location-business-hours` | write | implemented | `updateBusinessHours` | `present-location-business-hours`, `check-shared-business-hours` |
|
|
114
|
-
| `verify-location-business-hours` | verify | implemented | `querySoql` | `apply-location-business-hours` |
|
|
115
|
-
| `enable-and-push-delivery-estimation` | write | — | → `cc-om-fast-and-furious/enable-and-push-delivery-estimation-setup` | `verify-location-business-hours` |
|
|
116
|
-
|
|
117
|
-
### Dependency graph
|
|
118
|
-
|
|
119
|
-
```mermaid
|
|
120
|
-
graph TD
|
|
121
|
-
resolve_delivery_estimation_setup["resolve-delivery-estimation-setup (read)"]
|
|
122
|
-
list_locations_in_group["list-locations-in-group (read)"]
|
|
123
|
-
present_location_business_hours["present-location-business-hours (read)"]
|
|
124
|
-
check_shared_business_hours["check-shared-business-hours (read)"]
|
|
125
|
-
apply_location_business_hours["apply-location-business-hours (write)"]
|
|
126
|
-
verify_location_business_hours["verify-location-business-hours (verify)"]
|
|
127
|
-
enable_and_push_delivery_estimation["enable-and-push-delivery-estimation (write)"]
|
|
128
|
-
resolve_delivery_estimation_setup --> list_locations_in_group
|
|
129
|
-
list_locations_in_group --> present_location_business_hours
|
|
130
|
-
present_location_business_hours --> check_shared_business_hours
|
|
131
|
-
present_location_business_hours --> apply_location_business_hours
|
|
132
|
-
check_shared_business_hours --> apply_location_business_hours
|
|
133
|
-
apply_location_business_hours --> verify_location_business_hours
|
|
134
|
-
verify_location_business_hours --> enable_and_push_delivery_estimation
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
### Read operations
|
|
138
|
-
|
|
139
|
-
#### `resolve-delivery-estimation-setup`
|
|
140
|
-
|
|
141
|
-
Resolve the DeliveryEstimationSetup by Name/ExternalReference; capture LocationGroupId (to
|
|
142
|
-
list locations) and ExternalReference (for the push). Skip if the caller already has both.
|
|
143
|
-
|
|
144
|
-
**Call:** `querySoql` — status: `implemented`
|
|
145
|
-
|
|
146
|
-
**Inputs:**
|
|
147
|
-
|
|
148
|
-
- `name` *(`String`)* — The DeliveryEstimationSetup's Name OR ExternalReference (e.g. "west"). Source: user_input.
|
|
149
|
-
|
|
150
|
-
#### `list-locations-in-group`
|
|
151
|
-
|
|
152
|
-
List the group's locations with each one's FulfillingBusinessHoursId (the per-location
|
|
153
|
-
weekly-hours FK; null = inherits the setup default).
|
|
154
|
-
|
|
155
|
-
**Call:** `querySoql` — status: `implemented`
|
|
156
|
-
|
|
157
|
-
**Inputs:**
|
|
158
|
-
|
|
159
|
-
- `locationGroupId` *(`String`)* — LocationGroup Id (0gh...) of the CHOSEN setup. Source: resolve-delivery-estimation-setup.location_group_ids (the one the customer picked when the lookup matched more than one).
|
|
160
|
-
|
|
161
|
-
**Depends on:** `resolve-delivery-estimation-setup`
|
|
162
|
-
|
|
163
|
-
#### `present-location-business-hours`
|
|
164
|
-
|
|
165
|
-
Read + present each selected location's current BusinessHours (per-day open/close + timezone) so the admin sees what they're changing.
|
|
166
|
-
|
|
167
|
-
**Call:** `querySoql` — status: `implemented`
|
|
168
|
-
|
|
169
|
-
**Inputs:**
|
|
170
|
-
|
|
171
|
-
- `businessHoursIds` *(`Array`)* — The non-null FulfillingBusinessHoursId values for the locations of interest. Source:
|
|
172
|
-
list-locations-in-group.locations_before[*].Location.FulfillingBusinessHoursId.
|
|
173
|
-
|
|
174
|
-
**Depends on:** `list-locations-in-group`
|
|
175
|
-
|
|
176
|
-
#### `check-shared-business-hours`
|
|
177
|
-
|
|
178
|
-
Before editing, detect whether each target BusinessHours is SHARED — an aggregate COUNT
|
|
179
|
-
(pagination-safe by construction, so it can never undercount even if the record is
|
|
180
|
-
referenced by hundreds of Locations org-wide) plus a SEPARATE, bounded follow-up query for
|
|
181
|
-
a few representative Names, so the shared-record warning is backed by real data and the
|
|
182
|
-
closing recap can name a handful of the other affected locations without requiring an
|
|
183
|
-
unbounded org-wide fetch.
|
|
184
|
-
|
|
185
|
-
**Call:** `querySoql` — status: `implemented`
|
|
186
|
-
|
|
187
|
-
**Inputs:**
|
|
188
|
-
|
|
189
|
-
- `businessHoursIds` *(`Array`)* — The target BusinessHours Ids (the chosen locations' non-null FulfillingBusinessHoursId).
|
|
190
|
-
Source: present-location-business-hours.
|
|
191
|
-
|
|
192
|
-
**Depends on:** `present-location-business-hours`
|
|
193
|
-
|
|
194
|
-
### Write operations
|
|
195
|
-
|
|
196
|
-
#### `apply-location-business-hours`
|
|
197
|
-
|
|
198
|
-
Apply the change: for each selected location, PATCH the BusinessHours record referenced by
|
|
199
|
-
its FulfillingBusinessHoursId. Direct sObject Data-API write; partial merge (only the
|
|
200
|
-
day(s)/timezone being changed). One PATCH per BusinessHours record.
|
|
201
|
-
|
|
202
|
-
**Call:** `updateBusinessHours` — status: `implemented`
|
|
203
|
-
|
|
204
|
-
**Inputs:**
|
|
205
|
-
|
|
206
|
-
- `businessHoursUpdates` *(`Array`)* — One entry per BusinessHours record being changed. Each entry: the businessHoursId (the
|
|
207
|
-
chosen location's FulfillingBusinessHoursId) plus the day/timezone fields to set (HH:mm:ss.SSSZ
|
|
208
|
-
times). Include only fields actually changing (partial merge). Source: user selection over
|
|
209
|
-
present-location-business-hours.
|
|
210
|
-
- schema: `{'type': 'array', 'minItems': 1, 'maxItems': 200, 'items': {'type': 'object', 'required': ['businessHoursId', 'fields'], 'properties': {'businessHoursId': {'type': 'string', 'pattern': '^01m[a-zA-Z0-9]{12,15}$', 'description': "The location's BusinessHours Id (from FulfillingBusinessHoursId)."}, 'fields': {'type': 'object', 'minProperties': 1, 'additionalProperties': False, 'description': 'Allowlisted BusinessHours day/timezone fields to change (partial merge); only these keys\nare accepted. Times are HH:mm:ss.SSSZ; TimeZoneSidKey is an IANA id.', 'properties': {'MondayStartTime': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$'}, 'MondayEndTime': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$'}, 'TuesdayStartTime': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$'}, 'TuesdayEndTime': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$'}, 'WednesdayStartTime': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$'}, 'WednesdayEndTime': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$'}, 'ThursdayStartTime': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$'}, 'ThursdayEndTime': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$'}, 'FridayStartTime': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$'}, 'FridayEndTime': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$'}, 'SaturdayStartTime': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$'}, 'SaturdayEndTime': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$'}, 'SundayStartTime': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$'}, 'SundayEndTime': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$'}, 'TimeZoneSidKey': {'type': 'string', 'minLength': 1, 'maxLength': 40}}}}}}`
|
|
211
|
-
|
|
212
|
-
**Depends on:** `present-location-business-hours`, `check-shared-business-hours`
|
|
213
|
-
|
|
214
|
-
#### `enable-and-push-delivery-estimation`
|
|
215
|
-
|
|
216
|
-
Propagate the per-location hours change to the delivery estimation service — ONE push keyed
|
|
217
|
-
on the PARENT setup's ExternalReference. Delegates to enable-and-push-delivery-estimation-setup.
|
|
218
|
-
|
|
219
|
-
**Delegates to:** `cc-om-fast-and-furious/enable-and-push-delivery-estimation-setup`
|
|
220
|
-
|
|
221
|
-
**Depends on:** `verify-location-business-hours`
|
|
222
|
-
|
|
223
|
-
### Verify operations
|
|
224
|
-
|
|
225
|
-
#### `verify-location-business-hours`
|
|
226
|
-
|
|
227
|
-
Re-read the changed BusinessHours records and confirm the requested values.
|
|
228
|
-
|
|
229
|
-
**Call:** `querySoql` — status: `implemented`
|
|
230
|
-
|
|
231
|
-
**Inputs:**
|
|
232
|
-
|
|
233
|
-
- `businessHoursIds` *(`Array`)* — Ids of the changed BusinessHours (from businessHoursUpdates[].businessHoursId).
|
|
234
|
-
|
|
235
|
-
**Depends on:** `apply-location-business-hours`
|