Business (CRM / CS / Marketing)
This page is generated from the in-app guide content — edit
featureToggleGuidesand runpnpm gen:feature-toggle-docs.
Activity Log on Stage Change
An activity must be logged on the deal within the last 24 hours before its stage changes (including won/lost).
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.activity_log_required_on_stage_change | Off | /crm/settings | — |
How it works
Before a deal’s stage changes (including won/lost), at least one activity must have been logged on that deal within the last 24 hours.
When ON
A stage change without a recent activity is rejected.
When OFF
Stages change freely.
Screens, documents and reports affected
CRM › Deals (stage change, close won/lost).
Caveats
The window is exactly 24 hours from the activity’s creation time. Leads are not affected.
Ad platform sync
Pull daily spend, impressions and clicks from connected Meta / Google ad accounts into campaign performance.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.ad_platform_sync | Off | /prod-mkt/settings | — |
How it works
Pulls daily spend, impressions and clicks from connected Meta / Google ad accounts into campaign performance (nightly and on manual sync).
When ON
Connected channels sync every night.
When OFF
Sync is refused and recorded as a channel sync failure; past metrics stay.
Screens, documents and reports affected
Marketing › Channels, campaign performance.
Caveats
Test connection and listing external campaigns still reach the ad platform while off.
Approval on Discount
Any sales or service order with a discount — a line discount above 0% or a subtotal discount — needs approval, even when “Require SO approval” is off.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.price_approval_on_discount | On | /sales/settings | — |
How it works
A sales or service order with any discount — line discount above 0% or a subtotal discount — goes to approval.
When ON
Orders with a discount are created as pending approval (directly, from a quotation, or re-checked on confirm).
When OFF
Discounts alone do not trigger approval.
Screens, documents and reports affected
Sales › Sales orders, Service Management › Service orders.
Caveats
Approval is also required when ‘Require SO approval’ is on or the order exceeds the amount threshold. Orders brought in by document import are not checked.
Assign Accounts to CS Teams
Allow accounts, renewals, onboarding plans, playbook runs and health alerts to record an owning CS team and rep.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.cs_team_assignment | Off | /customer-success/settings | CS Team Management (business.cs_team_management) |
How it works
Lets records carry the responsible CS team (and CS rep). The rep must be a member of the chosen team.
Conditions for it to take effect
Requires CS team management to be on, with teams and CS reps set up.
When ON
The owner picker appears on customers (contacts), renewals and onboarding plans (team + rep), and on playbook runs and health alerts (team only).
When OFF
New owners cannot be assigned. Owners set earlier are still shown (read-only) on the detail page, with a Clear owner button.
Screens, documents and reports affected
Customer, renewal, onboarding and playbook run detail pages; the owner column on lists.
Caveats
Health alerts copy the owning team from the customer when they are created, even while this toggle is off. Required by CS team data scope.
Auto-assign leads
Automatically assign new leads to reps based on assignment rules.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.lead_auto_assign_enabled | Off | /crm/settings | — |
How it works
Lets lead workflow rules that contain an ‘assign owner’ action run.
When ON
Matching rules assign the owner automatically.
When OFF
Assign actions in lead rules are skipped; other rule actions still run.
Screens, documents and reports affected
CRM › Lead rules.
Caveats
Applies to every rule trigger, including stage-change rules, not only new leads.
Auto-close campaigns on end date
Every night, mark active campaigns whose end date has passed as completed. Draft and paused campaigns are left alone.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.campaign_auto_close_on_end_date | Off | /prod-mkt/settings | — |
How it works
Every night, active campaigns whose end date is today or earlier are marked completed.
When ON
Active campaigns close automatically on their end date.
When OFF
Campaigns stay active until closed manually.
Screens, documents and reports affected
Marketing › Campaigns.
Caveats
Draft and paused campaigns are left alone.
Auto-Close Resolved Tickets
Close a resolved helpdesk ticket automatically when nobody has touched it for the chosen number of days.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.helpdesk_auto_close_resolved_days | 0 | /customer-success/settings | — |
How it works
A daily job closes helpdesk tickets that have stayed Resolved, with no reply or change, for the chosen number of days.
When ON
Resolved tickets with no activity for that many days move to Closed; the customer receives the usual status email if helpdesk emails are on.
When OFF
Resolved tickets stay Resolved until a staff member or the customer closes them.
Screens, documents and reports affected
Customer Success › Helpdesk, Customer Portal.
Caveats
The clock restarts on any reply or change, not from the first time the ticket was resolved. Customers can still reopen a closed ticket from the portal within 14 days.
Auto-create Contact from Lead
Create a contact when a lead without one is converted, and when a website lead arrives with an email or company name.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.auto_create_contact_from_lead | On | /crm/settings | — |
How it works
Creates a contact automatically in two places: when a lead without a contact is converted, and when a website lead arrives with an email or company name.
When ON
Converted leads and website leads get a linked contact.
When OFF
No contact is created automatically; link or create the contact yourself.
Screens, documents and reports affected
CRM › Leads (website intake, convert).
Automatic campaign touchpoints
Automatically log CRM activities (calls, emails, meetings, messages, notes), deal creation and deal won as touchpoints for campaign members, and mark members converted on deal won.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.campaign_auto_touchpoints | Off | /prod-mkt/settings | — |
How it works
Turns CRM events of campaign members into campaign touchpoints automatically.
When ON
Activities (calls, emails, meetings, messages, notes), deal created and deal won are logged as touchpoints; members are marked converted on deal won.
When OFF
No automatic touchpoints and no automatic ‘converted’ marking. Manual touchpoints still work; new leads still join campaigns.
Screens, documents and reports affected
Marketing › Campaigns (members, touchpoints).
Caveats
Tracked-link clicks are recorded as channel touchpoints, not campaign touchpoints, regardless of this toggle.
Campaign attribution on deals
When a deal is created, credit it to the campaigns (up to 10) its contact or lead is a member of, for campaign ROI.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.campaign_attribution_on_deal | Off | /prod-mkt/settings | — |
How it works
Right after a deal is created, it is credited to up to 10 campaigns its contact or lead is a member of, with equal weight, for campaign ROI.
When ON
New deals get attribution rows.
When OFF
No attribution is recorded; existing rows stay.
Screens, documents and reports affected
CRM › Deals (create), Marketing › Campaign ROI.
Contact Deduplication
Also reject a new contact whose phone number already exists. Duplicate email is always rejected.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.contact_dedup_check | On | /crm/settings | — |
How it works
Adds a phone-number duplicate check when a contact is created or edited. Duplicate email is always rejected regardless of this toggle.
When ON
Saving a contact whose phone already belongs to another contact is rejected.
When OFF
Only the email duplicate check applies.
Screens, documents and reports affected
CRM › Contacts (create, edit).
Caveats
Contact import, contacts created from lead capture or from an account, and lead conversion do not run the phone check.
Contract Renewal Alert
Every day, notify the renewal owner of each open renewal due within the next 30 days.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.cs_renewal_auto_alert | On | /customer-success/settings | — |
How it works
A daily job notifies the owner of every open renewal due within the next 30 days.
When ON
Renewal owners receive a notification (up to 50 renewals per run); renewal assistants also run.
When OFF
No automatic renewal notifications.
Screens, documents and reports affected
Customer Success › Renewals, notifications.
Caveats
The window is fixed at 30 days and the same renewal is notified again each day while it stays in the window.
Create service delivery contract on Deal Won
When a won deal includes service lines, create a Service Management contract and project. Goods-only deals never create one, even if this is on.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.deal_won_creates_service_contract | Off | /crm/settings | — |
How it works
When a deal is won and it contains service lines, a Service Management contract and project are created for delivery.
When ON
Won deals with service lines produce an SM contract + project.
When OFF
Nothing is created; create the SM contract manually.
Screens, documents and reports affected
CRM › Deals (won), Service Management › Contracts.
Caveats
Goods-only deals never create a contract, even when this is on.
CS Team Data Scope
Widen the “own”/“team” data scope: users also see renewals and health alerts owned by their CS teams, beyond their reporting line.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.cs_team_data_scope | Off | /customer-success/settings | Assign Accounts to CS Teams (business.cs_team_assignment) |
How it works
Widens the “own”/“team” data scope: users also see records owned by CS teams they belong to, on top of the manager hierarchy. It only WIDENS, never narrows.
Conditions for it to take effect
Requires CS team assignment. Only matters for roles on the “own” or “team” scope, and the user must be linked to a CS rep who is a team member.
When ON
Renewal lists, kanban, detail, the “renewing this month”/“due soon” cards and the health alert list also show records of the user’s teams.
When OFF
Data scope behaves as before — creator/owner and manager hierarchy only. Users may immediately lose sight of records that belong only to their team.
Screens, documents and reports affected
Renewals (list, kanban, detail, overview cards), health alerts.
Caveats
Currently applies to renewals and health alerts only; customers, onboarding and playbook runs are not widened by team. Roles with the “all” scope are unaffected.
CS Team Management
Enable CS teams — reusable groups of CSMs with a lead and a default account capacity.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.cs_team_management | Off | /customer-success/settings | — |
How it works
Enables Customer Success team management: teams with a lead, a default capacity and members (CS reps).
When ON
A CS teams screen appears in Customer Success settings; CS reps can be placed in teams.
When OFF
Every CS team operation is rejected (feature disabled). A CS rep with teams cannot be saved; reps without teams keep working.
Screens, documents and reports affected
Customer Success settings (teams, CS reps), the owner block on customers, renewals, onboarding and playbook runs.
Caveats
Required by CS team assignment and CS team data scope. Turning it off makes both inert and hides owners already assigned (the data stays in the system).
Customer Credit Limit Check
On: block a new sales order (created directly or converted from a quotation) that would push the customer over their credit limit. Off: the order is saved and only a warning is returned.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.customer_credit_limit_check | Off | /sales/settings | — |
How it works
Compares the customer’s used credit plus the new order total with the customer’s credit limit.
When ON
A new order (direct or from a quotation) or confirming a draft that would exceed the limit is rejected. If the customer’s credit cannot be read, the order is refused rather than let through.
When OFF
A direct order is saved with a credit warning; quotation conversion gives no warning.
Screens, documents and reports affected
Sales › Sales orders.
Caveats
Not checked on edit, approval or import. Customers without a credit limit are never checked.
Customer Health Score
Run the daily health-score refresh and score-drop alerts, and the health AI assistants. Manual recompute and ticket-triggered recalculation still run when off.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.cs_health_score_enabled | Off | /customer-success/settings | — |
How it works
Controls the automatic parts of customer health: the daily refresh, score-drop alerts and the health AI assistants.
When ON
Every morning, scores older than about a day are refreshed (up to 100 per run) and drops are alerted; health assistants run.
When OFF
The daily refresh, alerts and assistants stop. Existing scores stay.
Screens, documents and reports affected
Customer Success › Health, health alerts, health assistants.
Caveats
Turning it off also stops automatic recomputes after a ticket is resolved, from the queue and in background batches. The manual Recompute button and assistant actions a person approves still run — those are explicit user actions. The daily job only refreshes customers that already have a score.
Customer Portal Accounts
Let your customers’ contacts sign in to a portal to open, follow and reply to helpdesk tickets. Accounts are created by invitation from the contact or account page.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.helpdesk_customer_accounts | Off | /customer-success/settings | — |
How it works
Gives customers login accounts on the Customer Portal to see all their tickets.
When ON
Staff can manage portal accounts; customers can sign in; ticket emails link to the portal instead of a magic link.
When OFF
Account management is rejected and existing portal sessions are refused at their next request. Accounts are kept.
Screens, documents and reports affected
Customer Success › Portal accounts, Customer Portal sign-in.
Customer Self-Service Portal
Let customers open a secure link to follow their ticket, reply, and rate the support they received. On by default — a link does nothing until staff send one. Off: existing links stop working.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.helpdesk_customer_portal | On | /customer-success/settings | — |
How it works
Allows magic links that let customers view a ticket, reply and answer the satisfaction survey without logging in.
When ON
Staff can issue portal links; ticket emails contain the link.
When OFF
Issuing links is rejected and every existing link shows ‘This portal link is not available’.
Screens, documents and reports affected
Customer Success › Helpdesk, ticket emails, survey.
Caveats
Links are not revoked: if turned back on, unexpired links work again.
Duplicate Deal Check
Warn (not block) when the contact already has an open deal.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.duplicate_deal_check | Off | /crm/settings | — |
How it works
When a deal is created for a contact that already has an open deal, a duplicate warning is returned. It never blocks.
When ON
Creating a deal shows a duplicate warning when the contact has another open deal.
When OFF
No warning.
Screens, documents and reports affected
CRM › Deals (create).
Caveats
Also warns on lead conversion. Deal import does not check for duplicates.
Expected Close Date Required
Every deal must have an expected close date — checked on create and on deal import.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.deal_close_date_required | Off | /crm/settings | — |
How it works
A new deal must have an expected close date.
When ON
Creating or importing a deal without the date is rejected; the new-deal form marks it required.
When OFF
The date is optional.
Screens, documents and reports affected
CRM › Deals (create, import).
Caveats
Also applies to lead conversion (the lead’s expected close date counts). Not checked when a deal is edited — the date can be cleared later.
Forecast Categories on Deals
Let reps classify each deal as Commit / Best Case / Pipeline instead of relying only on stage probability. Off: the forecast keeps using the weighted calculation and no number changes.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.forecast_category_enabled | Off | /crm/settings | — |
How it works
Lets a deal carry a forecast category (Commit / Best Case / Pipeline) used by the forecast instead of stage probability alone.
When ON
The forecast category can be set when creating or editing a deal.
When OFF
Setting a forecast category is rejected (feature disabled); the forecast keeps the weighted-probability calculation.
Screens, documents and reports affected
CRM › Deals, sales forecast.
Caveats
Turning it off does not erase categories already stored on deals.
Helpdesk Email Notifications
Email customers when a ticket is received, its status changes or support replies, and email support staff about new tickets, assignments and customer replies.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.helpdesk_customer_emails | Off | /customer-success/settings | — |
How it works
Sends ticket update emails to customers through the email outbox.
When ON
Customers receive emails on ticket events.
When OFF
No customer emails are queued; in-app notifications for staff continue.
Screens, documents and reports affected
Customer Success › Helpdesk notifications.
Lead Qualification Required
Require leads to be qualified before converting to deals
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.lead_qualification_required | Off | /crm/settings | — |
How it works
Converting a lead into a deal is only allowed when the lead sits in the pipeline’s qualified stage.
When ON
Lead conversion from any other stage is rejected with the lead’s current stage in the message.
When OFF
Leads can be converted from any stage.
Screens, documents and reports affected
CRM › Leads › Convert.
Caveats
Only conversion is checked; moving the lead between stages is not affected.
Lead scoring
Allow creating lead-scoring models and let the lead-scoring assistant score leads. Off: new models are rejected and the assistant skips.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.lead_scoring_enabled | Off | /crm/settings | — |
How it works
Turns on lead scoring: scoring models can be created and the lead-scoring assistant runs.
When ON
New scoring models can be created; the assistant scores leads.
When OFF
Creating a scoring model is rejected and the assistant skips.
Screens, documents and reports affected
Marketing › Lead scoring, the lead-scoring assistant.
Caveats
Existing models and scores are kept when turned off.
Max product video size (MB)
Upper bound for short product videos (MP4/WebM). The effective cap is the smaller of this and the video limit in Settings → Storage. Empty or 0 = 50.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.catalog_video_max_mb | 50 | /prod-mkt/settings | — |
How it works
Maximum size of a short product video (MP4/WebM).
When ON
The effective cap is the smaller of this value and the video limit in Settings › Storage.
When OFF
Empty or 0 means 50 MB.
Screens, documents and reports affected
Product catalog media.
Max ticket video size (MB)
Videos attached to ticket messages above this size are rejected. Never exceeds the Storage video limit.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.ticket_video_max_mb | 25 | /customer-success/settings | — |
How it works
Maximum size of a video attached to a ticket message.
When ON
The effective cap is the smaller of this value and the video limit in Settings › Storage.
When OFF
Empty or 0 means 25 MB.
Screens, documents and reports affected
Customer Success Helpdesk and Service Management tickets.
On-Call Ticket Routing
Automatically assign new unassigned helpdesk tickets to whoever is on call, rotating between people on the same shift.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.helpdesk_oncall_routing | Off | /customer-success/settings | — |
How it works
Assigns new unassigned customer-facing tickets to the person on call, and escalates tickets that miss first response.
When ON
External tickets created without an assignee go to the current on-call person; an every-5-minute job escalates overdue first responses.
When OFF
No automatic assignment or escalation. Rosters and past assignments stay.
Screens, documents and reports affected
Customer Success › Helpdesk › On-call.
Caveats
Internal tickets and tickets created with an assignee are never routed.
Public product images
Copy resized web-ready variants (320px thumbnail, 1024px medium, WebP) of newly uploaded product images to the public bucket so catalogs and the website get stable URLs. Off: new uploads stay private; variants already published stay public until the image is removed.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.catalog_public_images | On | /prod-mkt/settings | — |
How it works
At upload, product images get resized WebP copies (320px, 1024px) in the public bucket so catalogs and the website have stable URLs.
When ON
New uploads get public variants.
When OFF
New uploads stay private and load through short-lived links.
Screens, documents and reports affected
Product catalog media, website.
Caveats
Variants already published stay public until the image is removed; turning it back on does not create variants for images uploaded while off.
Require Account on Deal
A deal must have a contact that belongs to a Company / Account — checked on create and on deal import.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.require_account_on_deal | Off | /crm/settings | — |
How it works
A new deal must have a contact that belongs to a company/account.
When ON
Creating or importing a deal without such a contact is rejected; the new-deal form marks the field required.
When OFF
Deals can be created for individual contacts or without a contact.
Screens, documents and reports affected
CRM › Deals (create, import).
Caveats
Also applies to deals created by converting a lead. Editing an existing deal is not checked.
Require campaign budget
Block creating a campaign without a positive budget.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.campaign_budget_required | Off | /prod-mkt/settings | — |
How it works
A new campaign must have a positive budget.
When ON
Creating or importing a campaign without a budget is rejected.
When OFF
Budget is optional.
Screens, documents and reports affected
Marketing › Campaigns (create, import).
Caveats
Editing a campaign later is not checked.
Require UTM on channels
Block creating a marketing channel without a UTM source and medium.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.utm_required_on_channel | Off | /prod-mkt/settings | — |
How it works
A new marketing channel must have a UTM source and medium.
When ON
Creating or importing a channel without them is rejected.
When OFF
UTM fields are optional.
Screens, documents and reports affected
Marketing › Channels (create, import).
Caveats
Editing a channel later is not checked.
Send campaigns from XBuddy
Allow marketers with campaigns:send to email or Zalo campaign members from the campaign page.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.campaign_outbound_sending | Off | /prod-mkt/settings | — |
How it works
Lets users with campaigns:send email or Zalo campaign members from the campaign page.
When ON
Sends can be queued.
When OFF
Starting a send is rejected.
Screens, documents and reports affected
Marketing › Campaigns › Send.
Caveats
Turning it off does not cancel batches already queued.
Stage Direction Control
Honour each stage’s ‘allow moving backwards’ and ‘allow skipping ahead’ switches. Off, records may move between any two stages freely.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.stage_direction_control | On | /crm/settings | Stage Transition Criteria (business.stage_criteria_enabled) |
How it works
Honours each stage’s ‘allow moving backwards’ and ‘allow skipping ahead’ switches.
Conditions for it to take effect
Requires Stage transition criteria to be on.
When ON
Moving backwards or skipping stages is rejected where the stage forbids it.
When OFF
Records may move between any two stages.
Screens, documents and reports affected
CRM › Deals and Leads stage changes.
Caveats
While Stage transition criteria is off, this toggle has no effect even if it shows on.
Stage Transition Criteria
Let each pipeline stage carry its own entry criteria. Required criteria block the move until they are met; advisory ones only warn. With no criteria configured, nothing is blocked.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.stage_criteria_enabled | On | /crm/settings | — |
How it works
Each pipeline stage can carry entry criteria. Required criteria block moving a lead or deal into that stage until met; advisory ones only warn.
When ON
Criteria are checked on deal stage changes, closing and lead conversion.
When OFF
No criteria are checked; Stage direction control also stops applying.
Screens, documents and reports affected
CRM › Pipelines (stage settings), Deals, Leads.
Caveats
With no criteria configured, nothing is blocked. Required by Stage direction control.
Stale deal alert (days)
Days without movement after which the deal coach flags a deal as stalled and the daily alert notifies its owner. Empty = 14; values are kept between 1 and 365.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.stale_deal_alert_days | 14 | /crm/settings | — |
How it works
Number of days without movement after which a deal counts as stalled.
When ON
The deal coach flags deals idle longer than this, and a daily job notifies the owner of open deals not updated for this many days (closed stages as configured in the pipeline are excluded).
When OFF
Empty means 14 for both. Values are kept between 1 and 365.
Screens, documents and reports affected
Deal coach assistant, daily deal-staleness notifications.
Caveats
The daily job uses the deal’s last update time, not activities, caps each run at 50 deals, and is skipped for a company with no closed deal stage configured.
Ticket attachment retention
Files in Helpdesk and Service Management ticket messages and internal notes are purged this many days after the ticket closes (files only; the conversation stays). Leave empty to keep forever.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.ticket_attachment_retention_days | — | /customer-success/settings | — |
How it works
How long files on ticket messages are kept after the ticket is closed. A daily job deletes files older than this.
When ON
Values are rounded up to the nearest option (30, 45, 60, 90, 180, 365); above 365 counts as 365.
When OFF
Leave empty (or 0): files are kept forever.
Screens, documents and reports affected
Customer Success Helpdesk and Service Management tickets.
Caveats
Deleted files cannot be restored; clearing the value later only stops future deletion.
Win Reason Required
Require a win reason when closing a deal as won
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
business.deal_win_reason_required | Off | /crm/settings | — |
How it works
Marking a deal as won (from the deal page, the close dialog or a stage change to Won) requires a win note.
When ON
The close dialog marks the note as required; saving won without a note is rejected.
When OFF
Deals can be marked won without a note.
Screens, documents and reports affected
CRM › Deals (close flow, kanban stage change).
Caveats
The free-text note is what counts — picking a win-reason category alone does not satisfy the rule.