Skip to main content

[PRD][Strategic] Customer Segmentation based on Basic Attributes

Imported from Confluence (page 50655232012) — the live page is the source of truth and retains all embedded screenshots. Per-reformat scope this round covered only the Use-Case Activities child; this strategic PRD is preserved as-is.

Project NameCustomer Segmentation
Product ModuleCustomer Data Platform (CDP)
One-liner / Elevator PitchEnable dynamic, rule-based customer segmentation inside CDP so users can classify customers into meaningful groups (e.g., “Loyal Customers”, “High-Value Leads”, “Unresponsive Contacts”) based on customer properties and event (created at, last updated at, created by, last updated by)
TeamPM: @Zhelia Alifa Designer: @Nur Asmara @Rizky Surur @abdul.aziz Engineering: @Puji Triwibowo QA: @Muhammad Izzul @Gregorius Hendry TPM: @Hilmi Muktitama
EpicTF-2544dd5dd6d5-7aaa-397e-b7ed-bb9c9228dc1dSystem Jira
Statusin progressYellow
Type of Product WorkCompliance, Infrastructure, Core Feature
Last Updated* Updated Date * Updated By @Zhelia Alifa * Update Summary
Linkshttps://docs.google.com/presentation/d/1Cb0qd-gYeVAhNx7SD-d8ttIhft4aEPCSXQClkvfhsdo/edit?usp=sharing https://docs.google.com/presentation/d/1_K5Q2inVgg5RefN6-iB5O5RkEtUlDWuUaHr5BNpSh7o/edit?usp=sharing https://www.figma.com/design/ZbjJxiiEsyFIBPCsTOK0lm/Customer-Segmentations?node-id=8670-238601&t=8WufcqOdBKQW6drZ-0

Table of Contents760none

TL;DR

This initiative introduces Rule-Based Segmentation in CDP, allowing users to define dynamic customer groups using filters on default fields, custom fields, and basic event (created at, last updated at, created by, and last updated by).

Segments update automatically , customers enter or exit a segment when they meet (or no longer meet) the filter logic. These segments can later be used for Broadcast recipients, targeting, prioritization, or internal analytics.

Why now:

  • Clients need personalization and smart grouping to support marketing, retention, and automation use cases.
  • Segmentation is a foundational layer for future personalization in 2026 (Customer Signal Score, Loyalty, Campaign Intelligence, etc).
  • Competitors (HubSpot, Intercom, Zoho) treat segmentation as a core CDP feature.

Outcome:

  • A scalable segmentation engine enabling dynamic customer groups.
  • Increased stickiness and monthly active company use of CDP.
  • A foundation for future: customer signal scoring, workflows, and next action/recommendations.
  • Improved targeting accuracy for WhatsApp broadcast.

What Happens If We Don’t Build This

  • CDP becomes only a data viewer, not an intelligence platform.
  • Broadcast campaigns continue sending to broad, unqualified audiences (still select manually) → poor performance.
  • No competitive parity with modern CDPs.
  • Qontak cannot upsell enterprise personalization features.

Problem Alignment

Problem Statement

Qontak users currently cannot create meaningful customer groups. Without segmentation:

  • Broadcast recipients are static and manual.
  • Users cannot identify “loyal”, “churn-risk”, “new”, or “recently active” customers.
  • CDP lacks “intelligence” capabilities expected from enterprise CDP platforms.

Why It Matters

Business Impact* Higher engagement and conversion from more targeted audiences. * Enables upselling of future advanced intelligent features (future: scoring, automation). * Drives daily and monthly usage of CDP (stickiness).

Supporting Evidence

Competitor Benchmarking
* Salesforce: supports advanced customer segmentation based on custom fields and behavior, allowing teams to build targeted audiences for campaigns and workflows => https://www.salesforce.com/sales/sales-planning/customer-segmentation/?utm_source=chatgpt.com * Hubspot CRM: allow user to create customer segmentation across demographic, behavioral, and firmographic data, including cross-object segmentation (Combines data from contacts, companies, and deals for a unified view) https://marketinghubdaily.com/10-best-customer-segmentation-tools-2025/?utm_source=chatgpt.com

User Problem Frequency & Severity

AreaDescription
User FrequencyHIGHRed → Daily for marketers, sales ops, CS
User SeverityHIGHRed → segmentation is essential for any CDP at scale

Target Population

Primary UsersMarketing teams, sales operations, customer success.

Opportunity & Strategic Fit

Opportunity SummaryPosition CDP as a customer intelligence layer, not just a database.
Strategic Alignment / OKRs* Company OKR: Strengthen Customer Data Intelligence * Product OKR: Increase MAC and stickiness of CDP * Supporting KR: min 20% of active clients create at least one segment

Decision Type

Commitment — Required to unlock intelligent features across CDP


Final Recommendation

note5c05c814-256e-4fde-ba40-86bb7807d152

Proceed with Rule-Based Segmentation as a foundational CDP capability with later expansion into behavioral segmentation, scoring, journeys, and campaign intelligence.

Proceed with Rule-Based Segmentation as a foundational CDP capability with later expansion into behavioral segmentation, scoring, journeys, and campaign intelligence.


Product Narrative

BeforeAfter
Users manually filter customers each time they want to create recipient list from contacts moduleUsers can define rule-based segments such as: “Customer that comes from WhatsApp channel”
Broadcast recipients rely on static CSV importUsed directly in Broadcast → reduces manual work.
No reusable groupsSegments stay fresh with automatic recalculation.

Goals

Business Goals

* Increase value of CDP as an intelligence platform. * Improve Broadcast efficiency. * Drive adoption of CDP for Enterprise and SMB clients.

User Goals

* Easily group customers based on real-time properties. * Automate audience creation. * Reduce repetitive filtering.

Success Metrics

Primary KPI* Feature adoption
Secondary KPIs* % broadcast’s recipient list using customer segments

Scope & Solution Hypothesis

Proposed Solution

Build a segmentation engine with the following capabilities for MVP:

  • Filter using

    • Default fields
    • Custom fields
    • Basic event (created at, last updated at, created by, last updated by)
  • Multi-condition filters (AND/OR logic)

  • "Save segment" as reusable asset

  • Show “number of customers” matched

  • The system automatically recalculates customer for each segment once daily at 08:00

  • Allow utilize segment as Broadcast recipient list

  • Editable & archived segment

  • Segment details page

    • Customer list that included on segment
    • Performance of this segmentation

Pain Points Solved

Qontak’s Client1. No need manual filtering every time wants to send broadcast 2. Easier campaign targeting 3. Enables lifecycle management and personalization

User Experience Flow

Mermaid flowchart760image-20260312-125229.png


Key Features

In Scope

  • Rule builder (default & custom fields and associations)
  • Set up AND/OR logic per rule/conditions
  • Multi-conditions (max 2)
  • Segment list page
  • Segment details
  • Auto recalculation
  • Integration with Broadcast’s recipient list

Operator Logic by Default Field by Qontak

Operator Logic by Default Field by Qontak1290

Field NameTypeSupported OperatorsDetailsExample UI
Customer IDSingle-line textis, is not, contains, does not contain, starts with, ends with, is empty, is not emptyReturn all customer ID as value suggestionsis, is not, contains, does not contain, starts with, ends with is empty is not empty
Full nameSingle-line textis, is not, contains, does not contain, starts with, ends with, is empty, is not emptyReturn all customer name as value suggestionsis, is not, contains, does not contain, starts with, ends with image-20260315-101150.png is empty is not empty
OwnerDropdown selectionis, is not, is empty, is not emptyReturn all user name as value suggestionsis, is not image-20260315-101219.pngimage-20260315-101258.png is empty is not empty
AssigneeDropdown selectionis, is not, is empty, is not emptyReturn all user name as value suggestionsis, is not image-20260315-101222.pngimage-20260315-101309.png is empty is not empty
Phone numberSingle-line textis, is not, contains, does not contain, starts with, ends with, is empty, is not emptyReturn all phone number as value suggestionsis, is not, contains, does not contain, starts with, ends with image-20260315-101344.png is empty is not empty
EmailSingle-line textis, is not, contains, does not contain, starts with, ends with, is empty, is not emptyReturn all email as value suggestionsis, is not, contains, does not contain, starts with, ends with image-20260315-101442.png is empty is not empty
Username(s)Single-line textis, is not, contains, does not contain, starts with, ends with, is empty, is not emptyReturn all username(s) as value suggestionsis, is not, contains, does not contain, starts with, ends with image-20260315-101447.png is empty is not empty
Date of birthDateon, before, after, is between, is empty, is not emptyopen date pickeron, before, after is between is empty is not empty
SexDropdown selectionis, is not, is empty, is not emptyReturn all options as value suggestionsis, is not is empty is not empty
Job titleSingle-line textis, is not, contains, does not contain, starts with, ends with, is empty, is not emptyReturn all job title as value suggestionsis, is not, contains, does not contain, starts with, ends with is empty is not empty
Address pickerDropdown selectionis, is not, is empty, is not emptyReturn all options for province, city, etc as value suggestionsis, is not is empty is not empty

Operator Logic by Custom Field by Qontak

Operator Logic by Custom Field by Qontak1296

Field TypeTypeSupported OperatorsDetailsExample UI
SourceDropdown selectionis, is not, is empty, is not emptyReturn all source options for value suggestionsis, is not is empty is not empty
StatusDropdown selectionis, is not, is empty, is not emptyReturn all status options for value suggestionsis, is not is empty is not empty

Operator Logic by Custom Field by User

Operator Logic by Custom Field by User1304

Field TypeSupported OperatorsDetailsExample UI
Single-line textis, is not, contains, does not contain, starts with, ends with, is empty, is not emptyReturn all vales as value suggestionsis, is not, contains, does not contain, starts with, ends with is empty is not empty
Multi-line textis, is not, contains, does not contain, is empty, is not emptyReturn all vales as value suggestionsis, is not, contains, does not contain, starts with, ends with is empty is not empty
Dropdown selectionis, is not, is empty, is not emptyReturn all options as value suggestionsis, is not is empty is not empty
Multiple selectionis, is not, is empty, is not emptyReturn all options as value suggestionsis, is not is empty is not empty
Numberequals, not equals, greater than, less than, between, is empty, is not emptyReturn all value as value suggestionsequals, not equals, greater than, less than between xxx is empty is not empty
Dateon, not on, before, after, between, is empty, is not emptyopen date pickeron, before, after is between is empty is not empty
URLis, is not, contains, does not contain, starts with, ends with, is empty, is not emptyReturn all value as value suggestionsis, is not, contains, does not contain, starts with, ends with image-20260315-101447.png is empty is not empty
File uploadis empty, is not emptyis empty is not empty
Signatureis empty, is not emptyis empty is not empty
GPSis, is not, contains, does not contain, starts with, ends with, is empty, is not emptyis, is not, contains, does not contain, starts with, ends with is empty is not empty

Operator Logic by Basic Events

Operator Logic by Basic Events1324

FieldTypeSupported OperatorsDetailsExample UI
Customer created atDateon, not on, before, after, between, is empty, is not emptyopen date pickeron, before, after is between is empty is not empty
Customer last updated atDateon, not on, before, after, between, is empty, is not emptyopen date pickeron, before, after is between is empty is not empty
Created byDropdown selectionis, is not, contains, does not contain, is empty, is not emptyReturn all user name as value suggestionsis, is not, contains, does not contain image-20260315-101222.pngimage-20260315-101309.png is empty is not empty
Last updated byDropdown selectionis, is not, contains, does not contain, is empty, is not emptyReturn all user name as value suggestionsis, is not, contains, does not contain image-20260315-101222.pngimage-20260315-101309.png is empty is not empty

Operator Logic by Communication Consent1332

Field TypeTypeSupported OperatorsDetailsExample UI
Marketing opt-in statusBooleanequals (true/false), is empty, is not emptytrue = opt-in = allowed false = opt-out = not allowed is empty = null = user has not provided an opt-in/opt-out status yet.
Account business name for marketing opt-inSingle-line textis, is not, contains, does not contain, starts with, ends with, is empty, is not emptyReturn all vales as value suggestionsis, is not, contains, does not contain, starts with, ends with is empty is not empty
Marketing opt-in atDateon, not on, before, after, between, is empty, is not emptyopen date pickeron, before, after is between is empty is not empty

Operator Logic by Member Loyalty

Operator Logic by Member Loyalty1332

Field TypeTypeSupported OperatorsDetailsExample UI
Member created atDateon, not on, before, after, between, is empty, is not emptyopen date pickeron, before, after is between is empty is not empty
Current tierSingle-line textis, is not, contains, does not contain, starts with, ends with, is empty, is not emptyReturn all vales as value suggestionsis, is not, contains, does not contain, starts with, ends with is empty is not empty
Total available balanceNumberequals, not equals, greater than, less than, between, is empty, is not emptyReturn all value as value suggestionsequals, not equals, greater than, less than between xxx is empty is not empty
Total balance pendingNumberequals, not equals, greater than, less than, between, is empty, is not emptyReturn all value as value suggestionsequals, not equals, greater than, less than between xxx is empty is not empty
Total lifetime earnedNumberequals, not equals, greater than, less than, between, is empty, is not emptyReturn all value as value suggestionsequals, not equals, greater than, less than between xxx is empty is not empty
Reward nameSingle-line textis, is not, contains, does not contain, starts with, ends with, is empty, is not emptyReturn all vales as value suggestionsis, is not, contains, does not contain, starts with, ends with is empty is not empty
Reward statusSingle-line textis, is not, contains, does not contain, starts with, ends with, is empty, is not emptyReturn all vales as value suggestionsis, is not, contains, does not contain, starts with, ends with is empty is not empty
Reward expired atDateon, not on, before, after, between, is empty, is not emptyopen date pickeron, before, after is between is empty is not empty

User Stories and Acceptance Criteria

#User StoryImportanceAcceptance CriteriaJIRA Ticket
Customer Segmentation Index Menu As a CDP user, I want to access and manage customer segments from the Segments menu, So that I can create, search, filter, view, duplicate, activate, and archive segments efficiently.MUST HAVERedAC-1 (Entry Point – Navigate to Segments Index): * Given I am logged into CDP index * When I click Settings icon on segment section * Then I am redirected to the Segments index page --- AC-2 (View Segment Index Table): * Given I am on the Segments index page * When the page loads * Then I see a table containing: + Segmentation Name + Segmentation Size? + Created By + Created At + Actions button --- AC-3 (Search Segment by Name): * Given I am on the search bar * When I enter at least 3 characters in the search field * Then the system executes the search query * And filters segments based on partial and case-insensitive match of the segment name * When no segment matches the keyword * Then the system displays an empty result state --- AC-4 (Filter Segment by Created Date (Date Range)): * Given I am on the Segments Index page * When I apply a created_at date filter * Then the system displays segments created within + All time + Today + Last 7 days + Custom - Per day - Per week - Per month - Selected date range --- AC-5 (Filter Segment by Created Date based on Device Timezone Conversion): * Given my device timezone differs from UTC * When I select a date filter * Then the system converts the selected date into UTC for backend processing * And displays the correct filtered results --- AC-6 (Create Segment Entry Points from Segments Index Page): * Given I am on the Segments index page * When I click the "Create segment" button in the top-left corner * Then I am redirected to the Create Segment page --- AC-7 (Actions Button – View Details): * Given I am on the Segments index page * When I click Actions → View details * Then I am redirected to the Segment Detail page * And I can see the segment configuration and metadata --- AC-8 (Actions Button – Duplicate Segment): * Given I click Actions → Duplicate on a segment * When the system processes the duplication * Then a new segment is created with the same configuration * And the name is prefixed with "Copy of" * And I am redirected to the duplicated segment edit page --- AC-9 (Actions Button – Send Campaign): * Given I click Actions → Send campaign * When the system processes the request * Then I am redirected to the Campaign creation page * And the selected segment is automatically set as the recipient list --- AC-10 (Actions Button – Archive Segment): * Given I click Actions → Archive * When a confirmation modal appears * And I confirm the action * Then the segment status changes to Archived * And it is removed from the customer index page/active listTF-2545
Segments in Customer Index As a CDP user, I want to see and access customer segments from the Customers index page sub-sidenav, So that I can quickly filter customers by segment and create new segments directly from the same area.must haveRedAC-1 (Create Segment Entry Point from All Customer Index Page): * Given I am on ‘All Customer’ index page * When I click the ‘All Filter’ button * Then I am redirected to the Create Segment Page --- AC-2 (Show Segments Section): * Given I am on the Customer Index page * When the page loads * Then I see a "Segments" section in the left sub-sidenav --- AC-3 (Display Segment List on Customer): Sub-Sidenav * Given segments exist in the system * When the Segments section is visible on CDP index * Then the system displays a list of available segments based on recent created at * And each segment is shown as a clickable item * And segment names are displayed using their saved name --- AC-4 (Empty State): * Given no segments exist * When the Segments section is displayed * Then the segment list area shows an empty state * And a "Create segment" entry point is visible TF-2546
Configure Segment (Create/Edit) - Segment Info (Name and Description) As a CDP user, I want to clearly name and optionally describe a segment before setting the complex rules, so that I can provide immediate context and organization on the Segment List page.must haveRedAC-1 (Create segment with valid name only (minimum requirement)): * Given the user is on the Create Segment – Segment Info step * When + The user enters a valid segment name within max 60 characters (name is required) + The user leaves the segment description empty (set as optional) + The user clicks Continue * Then + The system should allow the user to proceed to Configure Segment + The segment name should be saved successfully + The segment description should be saved as null / empty --- AC-2 (Create segment with valid name and description): * Given the user is on the Create Segment – Segment Info step * When + The user enters a segment name within max 60 characters + The user enters a segment description within max 250 characters + The user clicks Continue * Then + The system should allow the user to proceed to Configure Segment + Both segment name and description should be saved correctly + The description should be visible later in segment detail view --- AC-3 (User cancels segment creation): * Given + The user is on the Create Segment – Fill Segment Info step + The user has entered a segment name and/or description * When the user clicks Cancel * Then + The system should exit the create segment flow + Any entered segment name or description should not be savedTF-2547
Configure Segment (Create/Edit) - Rule Builder As a Marketing, I want to combine multiple customer properties and association filters using both AND and OR logic, so that I can create highly precise customer segments for targeted campaigns.must haveRedAC-1 (Rule Builder): * Given I am on the Segment Builder page * When I add a new rule * Then I can select a condition from Customer Info (Default Fields and Custom Fields) or Customer Basic Activities. --- AC-2 (Allow Single Value Selection per Filter Criteria): * Given the user is configuring a filter criteria * When the user selects a value for the attribute (e.g., Source) * Then the system should allow the user to select only one value for that filter. Expected Result Valid example: Source is WhatsApp --- AC-3 (Prevent Multiple Values in a Single Filter): * Given the user is configuring a filter criteria * When the user attempts to select more than one value in the same filter * Then the system should prevent the additional selection. Expected Result Invalid example: Source is WhatsApp, Email The system should only keep one selected value. --- AC-4 (Replace Existing Value When Selecting a New One): * Given the user has already selected a value in the filter Example: Source is WhatsApp * When the user selects another value * Then the system should replace the previous value with the newly selected value. Example result: Source is Email --- AC-5 (Nested Filter Rule Limit (in same criteria)): -- I want to be prevented from creating an overly complex segment. * GIVEN I have already created 3 nested filter in same criteria * WHEN I try to click the "Add Rule" button * THEN The button is disabled. --- AC-6 (Filter Rule Limit): -- I want to be prevented from creating an overly complex segment. * GIVEN I have already created 2 filter * WHEN I try to click the "Add Rule" button * THEN The button is disabled. --- AC-7 (AND/OR Logic): -- I want to control whether all rules must be met or just one. * GIVEN I have two rules defined in the rule group * WHEN I toggle the main 'Condition' selector from 'AND' to 'OR' * THEN The segment calculation (and preview) switches from requiring both rules to requiring only one rule.TF-2548
Configure Segment (Create/Edit) - Rule Builder - Default Field by Qontak As a CDP user I want to define conditions based on default fields by Qontak, so that I can accurately segment customers using appropriate operatorsmust haveRedAC-1 (Single-line text field): Applicable fields: 1. Customer ID 2. Full name 3. Phone number 4. Email 5. Username(s) 6. Job title * GIVEN the user selects a Single-line text custom field in the segment rule builder * WHEN + The user selects an operator from the supported operators list + The user inputs a text value * THEN + The system should filter customers based on string comparison + Matching should be case-insensitive + The system should provide value suggestions based on existing customer data + Customers with empty values should only be included if the operator "is empty" is selected --- AC-2 (Dropdown Selection Field): Applicable fields: 1. Owner 2. Assignee 3. Sex 4. Address picker (Province, City, etc.) * GIVEN the user selects a Dropdown selection default field in the segment rule builder * WHEN + The user selects an operator from the supported operators list + The user selects a value from the dropdown list * THEN + The system should filter customers based on the selected dropdown value + The system should provide value suggestions based on existing system options or records + Customers with empty values should only be included if the operator "is empty" is selected --- AC-3 (Date Field): Applicable field: 1. Date of birth * GIVEN the user selects a Date field in the segment rule builder * WHEN + The user selects an operator from the supported operators list + The user selects a date value using the date picker * THEN + The system should filter customers based on date comparison + The system should display a date picker UI for selecting dates + If the operator is between is selected, the system should require two date inputs + Customers with empty date values should only be included if the operator "is empty" is selected --- AC-4 (Value Suggestions in Rule Builder): * GIVEN the user selects a field in the segment rule builder * WHEN the system loads the value input component * THEN + The system should display value suggestions based on existing customer data + Suggestions should dynamically reflect available values in the database + Suggestions should support search or autocomplete behavior --- AC-5 (Empty Value Handling): * GIVEN the selected customer field contains empty or null values * WHEN the user selects the operator: is empty * THEN The system should return customers whose field value is null or empty * WHEN the user selects the operator: is not empty * THEN The system should return customers whose field value exists and is not null
Configure Segment (Create/Edit) - Rule Builder - Custom Field by Qontak As a CDP user I want to define conditions based on custom fields by Qontak, so that I can accurately segment customers using appropriate operatorsmust haveRedAC-1 (Dropdown Selection Field): Applicable fields: 1. Source 2. Status * GIVEN the user selects a Dropdown selection default field in the segment rule builder * WHEN + The user selects an operator from the supported operators list + The user selects a value from the dropdown list * THEN + The system should filter customers based on the selected dropdown value + The system should provide value suggestions based on existing system options or records + Customers with empty values should only be included if the operator "is empty" is selected --- AC-2 (Value Suggestions in Rule Builder): * GIVEN the user selects a field in the segment rule builder * WHEN the system loads the value input component * THEN + The system should display value suggestions based on existing customer data + Suggestions should dynamically reflect available values in the database + Suggestions should support search or autocomplete behavior --- AC-3 (Empty Value Handling): * GIVEN the selected customer field contains empty or null values * WHEN the user selects the operator: is empty * THEN The system should return customers whose field value is null or empty * WHEN the user selects the operator: is not empty * THEN The system should return customers whose field value exists and is not null
Configure Segment (Create/Edit) - Rule Builder - Custom Field by User As a CDP user I want to define conditions based on custom fields by User, so that I can accurately segment customers using appropriate operators.must haveRedAC-1 (Single-line Text Field): * GIVEN the user selects a Single-line text customer field * WHEN + The user selects an operator https://jurnal.atlassian.net/wiki/spaces/QON/pages/50655232012/PRD+Strategic+-+Customer+Segmentation+based+on+Basic+Attributes#Operator-Logic-by-Field-Type + The user inputs a text value * THEN + The system should filter customers based on string comparison + Matching should be case-insensitive + Customers with empty values should only be included if is empty is selected --- AC-2 (Multi-line Text Field): * GIVEN the user selects a Multi-line text customer field * WHEN + The user selects an operator https://jurnal.atlassian.net/wiki/spaces/QON/pages/50655232012/PRD+Strategic+-+Customer+Segmentation+based+on+Basic+Attributes#Operator-Logic-by-Field-Type + The user inputs a text value * THEN + The system should evaluate the full text content + Matching should be case-insensitive + The system should provide value suggestions based on existing customer data + Customers with empty values should only be included if is empty is selected --- AC-3 (Dropdown Selection): * Given the user selects a Dropdown selection field * When + The user selects an operator an operator https://jurnal.atlassian.net/wiki/spaces/QON/pages/50655232012/PRD+Strategic+-+Customer+Segmentation+based+on+Basic+Attributes#Operator-Logic-by-Field-Type + The user selects one dropdown option * Then + The system should include customers whose value exactly matches the selected option + Only one value should be selectable --- AC-4 (Multiple Selection): * Given the user selects a Multiple selection field * When + The user selects an operator https://jurnal.atlassian.net/wiki/spaces/QON/pages/50655232012/PRD+Strategic+-+Customer+Segmentation+based+on+Basic+Attributes#Operator-Logic-by-Field-Type + The user selects one or more dropdown option * Then + contains any should match customers with at least one selected option + contains all should match customers with all selected options + Order of selection should not affect results --- AC-5 (Number Field): * Given the user selects a Number field * When + The user selects an operator https://jurnal.atlassian.net/wiki/spaces/QON/pages/50655232012/PRD+Strategic+-+Customer+Segmentation+based+on+Basic+Attributes#Operator-Logic-by-Field-Type + The user inputs valid numeric values * Then + The system should compare values numerically (not as strings) + Invalid inputs (e.g. text) should be rejected --- AC-6 (Date Field): * Given the user selects a Date field * When + The user selects an operator https://jurnal.atlassian.net/wiki/spaces/QON/pages/50655232012/PRD+Strategic+-+Customer+Segmentation+based+on+Basic+Attributes#Operator-Logic-by-Field-Type + The user selects valid date values * Then + The system should evaluate dates based on system timezone + Relative operators (e.g. in the last 7 days) should be recalculated dynamically --- AC-7 (URL Field): * Given the user selects a URL field * When + The user selects an operator https://jurnal.atlassian.net/wiki/spaces/QON/pages/50655232012/PRD+Strategic+-+Customer+Segmentation+based+on+Basic+Attributes#Operator-Logic-by-Field-Type + The user inputs a URL or partial URL * Then + The system should match based on string comparison + URL protocol (http, https) should not affect matching unless explicitly included --- AC-8 (File upload Field): * Given the user selects a File upload field * When the user selects an operator https://jurnal.atlassian.net/wiki/spaces/QON/pages/50655232012/PRD+Strategic+-+Customer+Segmentation+based+on+Basic+Attributes#Operator-Logic-by-Field-Type * Then + The system should check whether at least one file exists for the field + File metadata (name/type) should not be required --- AC-9 (Signature Field): * Given the user selects a Signature field * When the user selects an operator https://jurnal.atlassian.net/wiki/spaces/QON/pages/50655232012/PRD+Strategic+-+Customer+Segmentation+based+on+Basic+Attributes#Operator-Logic-by-Field-Type * Then + The system should evaluate based on signature presence + Partial or invalid signatures should be treated as not signed --- AC-10 (GPS Field): * Given The user selects a GPS field * When The user selects an operator https://jurnal.atlassian.net/wiki/spaces/QON/pages/50655232012/PRD+Strategic+-+Customer+Segmentation+based+on+Basic+Attributes#Operator-Logic-by-Field-Type * Then The system should evaluate based on GPS presence --- AC-11 (Value Suggestions in Rule Builder): * GIVEN the user selects a field in the segment rule builder * WHEN the system loads the value input component * THEN + The system should display value suggestions based on existing customer data + Suggestions should dynamically reflect available values in the database + Suggestions should support search or autocomplete behavior --- AC-12 (Empty Value Handling): * GIVEN the selected customer field contains empty or null values * WHEN the user selects the operator: is empty * THEN The system should return customers whose field value is null or empty * WHEN the user selects the operator: is not empty * THEN The system should return customers whose field value exists and is not nullTF-2549
Configure Segment (Create/Edit) - Rule Builder - Basic Event As a CDP user I want to define conditions based on customer basic event, so that I can accurately segment customers using appropriate operators.must haveRedAC-1 (Date Field): Applicable field: 1. Created at 2. Last updated at * GIVEN the user selects a Date field in the segment rule builder * WHEN + The user selects an operator from the supported operators list + The user selects a date value using the date picker * THEN + The system should filter customers based on date comparison + The system should display a date picker UI for selecting dates + If the operator is between is selected, the system should require two date inputs + Customers with empty date values should only be included if the operator "is empty" is selected --- AC-2 (Dropdown Selection Field): Applicable fields: 1. Created by 2. Updated by * GIVEN the user selects a Dropdown selection default field in the segment rule builder * WHEN + The user selects an operator from the supported operators list + The user selects a value from the dropdown list * THEN + The system should filter customers based on the selected dropdown value + The system should provide value suggestions based on existing system options or records + Customers with empty values should only be included if the operator "is empty" is selected --- AC-3 (Value Suggestions in Rule Builder): * GIVEN the user selects a field in the segment rule builder * WHEN the system loads the value input component * THEN + The system should display value suggestions based on existing customer data + Suggestions should dynamically reflect available values in the database + Suggestions should support search or autocomplete behavior --- AC-4 (Empty Value Handling): * GIVEN the selected customer field contains empty or null values * WHEN the user selects the operator: is empty * THEN The system should return customers whose field value is null or empty * WHEN the user selects the operator: is not empty * THEN The system should return customers whose field value exists and is not null
Configure Segment (Create/Edit) - Rule Builder - Communication Consent As a CDP user I want to define conditions based on customer comms consent, so that I can accurately segment customers using appropriate operators.must haveRedAC-1 (Boolean Field): Applicable fields: Marketing Opt-in Status * GIVEN the user selects Marketing opt-in status in the segment rule builder * WHEN + The user selects an operator from the supported operators list + The user selects a boolean value (true / false) * THEN + The system should filter customers based on the marketing consent status + The system should interpret the values as: - true → customer has opted in and is allowed to receive marketing communication - false → customer has opted out and should not receive marketing communication - is empty → customer has not provided an opt-in or opt-out status + The value selection should be presented as a dropdown with options: true or false + Customers with null values should only be included if the operator "is empty" is selected --- AC-2 (Single-line Text Field): Applicable fields: Account Business Name for Marketing Opt-in * GIVEN the user selects Account business name for marketing opt-in in the segment rule builder * WHEN + The user selects an operator from the supported operators list + The user inputs or selects a text value * THEN + The system should filter customers based on string comparison of the account business name + Matching should be case-insensitive + The system should provide value suggestions based on existing data + Customers with empty values should only be included if the operator "is empty" is selected --- AC-3 (Date Field): Applicable fields: Marketing Opt-in At * GIVEN the user selects Marketing opt-in at in the segment rule builder * WHEN + The user selects an operator from the supported operators list + The user selects a date value using the date picker * THEN + The system should filter customers based on the timestamp when marketing consent was given + The system should display a date picker UI for selecting the date + If the operator between is selected, the system should require two date inputs (start date and end date) + Customers with empty values should only be included if the operator "is empty" is selected --- AC-4 (Value Suggestions in Rule Builder): * GIVEN the user selects a field in the segment rule builder * WHEN the system loads the value input component * THEN + The system should display value suggestions based on existing customer data + Suggestions should dynamically reflect available values in the database + Suggestions should support search or autocomplete behavior --- AC-5 (Empty Value Handling): * GIVEN the selected customer field contains empty or null values * WHEN the user selects the operator: is empty * THEN The system should return customers whose field value is null or empty * WHEN the user selects the operator: is not empty * THEN The system should return customers whose field value exists and is not null
Configure Segment (Create/Edit) - Rule Builder - Member Loyalty As a CDP user I want to define conditions based on member details in loyalty, so that I can accurately segment customers using appropriate operators.nice to haveYellowAC-1 (Date Field): Applicable field: 1. Member created at 2. Reward expired at * GIVEN the user selects a date field at in the segment rule builder * WHEN + The user selects an operator from the supported operators list + The user selects a date value using the date picker * THEN + The system should filter customers based on date comparison + The system should display a date picker UI for selecting dates + If the operator is between is selected, the system should require two date inputs + Customers with empty date values should only be included if the operator "is empty" is selected --- AC-2 (Single-line text field): Applicable fields: 1. Current tier 2. Reward name 3. Reward status * GIVEN the user selects a Single-line text field in the segment rule builder * WHEN + The user selects an operator from the supported operators list + The user inputs a text value * THEN + The system should filter customers based on string comparison + Matching should be case-insensitive + The system should provide value suggestions based on existing customer data + Customers with empty values should only be included if the operator "is empty" is selected --- AC-3 (Number Field): Applicable fields: 1. Total available balance 2. Total pending balance 3. Total lifetime earned GIVEN the user selects a number field in the segment rule builder WHEN * The user selects an operator from the supported operators list * The user inputs a numeric value THEN * The system should filter customers based on numeric comparison of available/pending/lifetime earn loyalty points * If between is selected, the system should require two numeric values --- AC-4 (Value Suggestions in Rule Builder): * GIVEN the user selects a field in the segment rule builder * WHEN the system loads the value input component * THEN + The system should display value suggestions based on existing customer data + Suggestions should dynamically reflect available values in the database + Suggestions should support search or autocomplete behavior --- AC-5 (Empty Value Handling): * GIVEN the selected customer field contains empty or null values * WHEN the user selects the operator: is empty * THEN The system should return customers whose field value is null or empty * WHEN the user selects the operator: is not empty * THEN The system should return customers whose field value exists and is not null
Configure Segment (Create/Edit) - Add Nested Filter in the Same Criteria As a CDP user, I want to add up to 2 filters within the same criteria group (nested conditions) So that I can define more precise segmentation logic using combinations of conditions such as AND / OR within the same criteria.must haveRed AC-1 (Add Another Filter in the Same Criteria Group): * Given the user is configuring a segment criteria * And there is an existing filter condition in the criteria group * When the user clicks “Add Filter” within the same criteria group * Then the system should add a new filter row under the same criteria group. Expected Result: * The new filter appears directly under the existing condition * The filter belongs to the same criteria group * The user can configure: + Attribute / field + Operator + Value --- AC-2 (Apply Logical Operator Between Filters): Given multiple filters exist within the same criteria group When the user selects the logical operator Then the system should allow the user to choose between: * AND * OR Expected Result: * The logical operator is displayed between filters * The selected operator defines how the conditions are evaluated. Example: Customer City = Jakarta AND Customer Age > 25 --- AC-3 (Remove Filter Within Criteria Group): Given the criteria group contains multiple filters When the user removes one filter Then the system should remove the selected filter without affecting the remaining filters in the group. Expected Result: * Other filters remain intact * Logical operators are automatically adjusted if necessary.
Configure Segment (Create/Edit) - Advanced Criteria Builder (Nested & Multiple Filters) As a CDP user I want to add multiple filters and create nested criteria groups So that I can build complex conditions using logical operators such as AND / OR to define more accurate segmentation rules.must haveRed AC-1 (Apply Logical Operator Between Filters): * Given there are multiple filters in the same criteria group * When the user selects the logical operator * Then the system should allow the user to choose: + AND + OR Example: (Customer Country = Indonesia AND Customer Tier = Gold) OR (Customer Country = Singapore AND Customer Tier = Gold) --- AC-2 (Remove Filter from Criteria): * Given a criteria group contains multiple filters * When the user removes one filter * Then the system should remove only that filter and keep the remaining conditions intact. Expected Result * Logical operators automatically adjust * Remaining filters stay within the same criteria group. --- AC-3 (Remove Nested Criteria Group): * Given a nested criteria group exists * When the user deletes the nested criteria group * Then the system removes the entire group including all filters inside it.
Customer Segmentation with Role-Based Visibility and Full Dataset Execution for Recipient List As a CDP user with permission view customer e.g., owned only I want to create and view customer segments based on global logic So that I can define accurate targeting criteria while still respecting my data access limitation in the UI And as a user with permission to send campaigns I want the campaign to be executed on the full segment size So that I can reach all relevant customers even beyond my visible scopemust haveRedAC-1 (Total Customer Matched Shows Actual Size): GIVEN the segment has been evaluated WHEN user has permission view_customer = owned only AND user views the segment overview THEN the system should display Total Customer Matched = actual size of all customers matching the criteria Example: * Total matched (actual) = 1,000 --- AC-2 (Customer List is Filtered by Permission): GIVEN user has permission view_customer = owned only WHEN user opens the customer list inside the segment THEN the system should display only customers owned by user AND the displayed list should be filtered based on permission Example: * Total matched (actual) = 1,000 * Visible in table (owned only) = 500 --- AC-3 (Clear Differentiation Between Total vs Visible Data): GIVEN there is a difference between total matched and visible data WHEN user views the segment details THEN the system should clearly indicate: * Total matched customers (actual) * Displayed customers based on user access AND the system should avoid misleading the user into thinking both numbers are the same --- AC-4 (Campaign Execution Uses Full Segment (Override Permission)): GIVEN User has permission to send campaign WHEN User sends a campaign using Segment A THEN the system should generate the recipient list based on: * All customers matching the segment criteria (full dataset) AND the system should NOT restrict recipients based on ownership Example: * Total matched = 1,000 * Campaign recipients = 1,000
Configure Segment (Create/Edit) - Preview Customer As a CDP user I want to preview the list and total number of customers matching my filter criteria So that I can validate whether the segmentation rules return the expected audience before applying the filter.must haveRed AC-1 (Preview Customers Button): * Given the user has configured one or more filter criteria * When the user clicks “Preview customers” * Then the system should evaluate the filter conditions and display the Preview Customers panel on the right side. Expected Result The preview panel should show: * Total number of matched customers * A short summary of the filter criteria * A preview list of customers (if applicable) Example display: Filter results from 5,000 customers 2,500 customers matched Source is Whatsapp AND Province is Jakarta --- AC-2 (No Matching Customers): * Given the filter criteria return no customers * When the user clicks Preview customers * Then the preview panel should display an empty state. Example message: No customers match your filters. Recheck the filters you have applied and refresh.
Customer Segment Details - Overview - Active Segment As a CDP user, I want to view a detailed overview of a selected active customer segment, So that I can understand the segment information, matched customers, and take further actions such as sending campaigns or managing the segment.must haveRedAC-1 (Open from Customer Index Menu): * Given I am on the Customer index page * When I click on a segment name * Then I am redirected to the Segment Details * And the selected segment information is displayed --- AC-2 (User Can Send Campaign from Segment Overview): * Given the user is viewing the Active Segment Details – Overview page * When the user clicks the Send Campaign button * Then the system should open sidebar to select campaign type --- AC-3 (User Can Open More Actions Menu): * Given the user is viewing the Active Segment Details – Overview page * When the user clicks the More actions dropdown * Then the system should display the following available actions: + Edit segment => redirect the user to the segment configuration/edit page + Archive segment => user should display a confirmation dialog before archiving the segment. --- AC-4 (Display Segment Information): * Given I am on the Segment Details page * When the page loads * Then I see a Segment Info section containing: + Segment status (Active / Archived) + Segmentation name + Description + Filter pattern --- AC-5 (Display Segment Data Summary): * Given I am on the Segment Details page * When the page loads * Then I see: + Total number of customers matched - Definition Total number of customers that satisfy all segmentation criteria and are included in the final segment result. - Formula Total Customers Matched = Count of unique customers that meet all segment conditions - Example Segment Result = 5,000 customers + Percentage reach % from total customers - Definition Shows the proportion of the total customer database that falls within the segment. - Formula Percentage Reach (%) = (Total Customers Matched / Total Customers) × 100 - Example Total Customers Matched = 5,000 Total Customers = 10,000 Percentage Reach = (5000 / 10000) × 100 = 50% + Last updated timestamp - Definition Timestamp indicating when the segment membership or preview calculation was last evaluated or refreshed. - Example Last Updated: 2026-03-18 14:35:20 (based on user device timezone) + Reachability by channel - WhatsApp * Definition A customer is considered reachable if: + The customer has phone number or BSUID + AND the customer has an existing chatroom * Formula WhatsApp Reachability (%) = (Customers with phone or bsuid AND chatroom) / (Total Customers Matched) × 100 * Example Eligible WhatsApp Customers = 2,500 Total Customers Matched = 5,000 Reachability = (2500 / 5000) × 100 = 50% - Email * Definition Percentage of customers in the segment who have a valid email address. * Formula Email Reachability (%) = (Customers with email address) / (Total Customers Matched) × 100 * Example Customers with Email = 2,500 Total Customers Matched = 5,000 Reachability = (2500 / 5000) × 100 = 50% --- AC-6 (Display Customer Matched Table): * Given the segment contains customers * When the page loads * Then I see a table containing: + Customer name + Source + Last activity (based on user device timezone) + Added by TF-2555
Customer Segment Details - Overview - Archived Segment As a CDP user, I want to view a detailed overview of a selected archived customer segment, So that I can understand the segment information, matched customers, and take further actions such as sending campaigns or managing the segment.must haveRedAC-1 (Open from Customer Index Menu): * Given I am on the Customer index page * When I click on a segment name * Then I am redirected to the Segment Details * And the selected segment information is displayed --- AC-2 (Display Segment Information): * Given I am on the Segment Details page * When the page loads * Then I see a Segment Info section containing: + Segment status (Archived) + Segmentation name + Description + Filter pattern --- AC-3 (Display Segment Data Summary): * Given I am on the Segment Details page * When the page loads * Then I can see: + Total number of customers matched + Percentage reach % from total customers + Last updated timestamp * But I cannot see: + Reachability by channel --- AC-4 (Display Customer Matched Table): * Given the segment contains customers * When the page loads * Then I see a table containing: + Customer name + Source + Last activity (based on user device timezone) + Added by TF-2555
Customer Segment Details - Performance As a CDP user, I want to view performance insights of a selected segment, So that I can understand how the segment grows over time and analyze its demographic and channel distribution.NICE TO HAVEYellowMetrics #2: Segment Size Growth 1. Scenario: Display Growth Chart * Given I am on the Segment Details page * When I navigate to the Performance tab * Then I see a "Segment size growth" line chart * And the chart displays the number of customers in the segment over time 2. Scenario: Data Points * Given historical data exists * When the chart is rendered * Then it shows: + X-axis: Date/time + Y-axis: Total number of customers + Data plotted chronologically 3. Scenario: Time Filter * Given a time filter (e.g., All time, Last 7 days, Last 30 days) is available * When I change the time filter * Then the chart updates based on the selected time range 4. Scenario: Realtime Indicator * Given the segment is dynamic * When data updates once a day * Then the "Last updated" timestamp refreshes * And a "Realtime" indicator is displayed (if applicable) 5. Scenario: Empty State * Given no historical growth data exists * When the chart loads * Then an empty state message is displayed --- Metrics #3: Segment Source 1. Scenario: Display Source Distribution * Given customer source data exists * When I view the Performance tab * Then I see a "Segment source" distribution chart * And it displays customer distribution by source channel (e.g., WhatsApp, Email, Instagram, etc.) 2. Scenario: Source Summary List * Given customer source data exists * When the chart is displayed * Then a summary list appears beside/below the chart showing: + Source name + Customer count + Percentage of total 3. Scenario: Percentage Calculation * Given customer source data exists * When the chart is displayed * Then the percentage is calculated as: (source count / total segment size) × 100 * And the total percentage equals 100% (± rounding tolerance) 4. Scenario: Empty or Missing Source * Given some customers have no source / source = empty * When distribution is calculated * Then they are grouped under "Other" label --- Metrics #4: Segment Domicile 1. Scenario: Display Domicile Distribution * Given customer domicile/location data exists * When I view the Performance tab * Then I see a "Segment domicile" distribution chart 2. Scenario: Domicile Summary List * Given customer domicile data exists * When the chart is displayed * Then the system displays: + Region name (province from address picker object) + Customer count + Percentage 3. Scenario: Missing Location Data * Given some customers have no domicile data * When the chart is displayed * Then they are grouped under "Unknown" --- Metrics #5: Segment Age 1. Scenario: Display Age Distribution * Given customer date of birth exists * When I view the Performance tab * Then I see a "Segment age" distribution chart * And customers are grouped into predefined age ranges (e.g.): + <21 + 21-30 + 31-40 + 41-50 + >51 2. Scenario: Age Calculation * Given date of birth is stored * When age is calculated * Then age is computed based on current date * And grouped into the configured age buckets 3. Scenario: Missing Date of Birth * Given some customers do not have date of birth * When age is calculated * Then they are grouped under "Unknown" --- Metrics #6: Segment Gender 1. Scenario: Display Gender Distribution * Given gender data exists * When I view the Performance tab * Then I see a "Segment gender" distribution chart 2. Scenario: Gender Categories * Given gender data exists * When the chart is displayed * Then customers are grouped into: + Male + Female + Unknown (if not provided) * And each category shows: + Count + PercentageTEMP-980683db-393f-481e-be94-db6be14fa37f
Utilize Segments for Send Campaign As a marketing team, I want to use an existing segment as the recipient list when creating a campaign (WhatsApp or Email), So that I can send targeted campaigns to matched customers and understand the reachable audience before proceeding.must haveRedAC-1 (Send Campaign Button Visible): * Given I am on the Segment Index or Segment Details page * When the page loads * Then I see a “Send campaign” button AC-2 (Channel Selection): * Given I click “Send campaign” * When the channel selection sidepage appears * Then I can choose either: + WhatsApp Campaign + Email Campaign * And I must select one channel before continuing --- AC-3 (Display Estimated Audience Size (WhatsApp)): * Given I select WhatsApp campaign * When the system validates the segment * Then I see an Estimated Audience Size section displaying: Example: 850 of 1,050 matched customers have filled phone numbers Where: + 1,050 = total customers in the selected segment + 850 = customers with valid phone numbers --- AC-4 (Display Estimated Audience Size (Email)): * Given I select Email campaign * When the system validates the segment * Then I see an Estimated Audience Size section displaying: Example: 850 of 1,050 matched customers have filled email Where: + 1,050 = total customers in the selected segment + 850 = customers with valid email --- AC-5 (Zero Reachable Audience): * Given no customers have valid contact information * When estimated audience is calculated * Then I see an Estimated Audience Size section displaying: 0 of 1,050 matched customers have filled phone numbers/email * And Continue button is disabled --- AC-6 (Convert Segment Include All Customer Properties (Default & Custom Fields)): GIVEN the recipient list is generated from a segment WHEN the system prepares the recipient data THEN the system should include: * All default customer properties (e.g., name, phone number, email, etc.) * All custom customer properties/fields defined in the system AND these properties should be available for: * Additional setup for variable in template --- AC-7 (Redirect to Create Campaign Page): * Given I click “Continue” * When the action is successful * Then I am redirected to the Create Campaign page * And: + The segment is created first as recipient in broadcast service + The selected segment is automatically set as the recipient list + Editing recipient list follows business rules (editable or locked based on design decision) --- AC-8 (Template Without Variables): * Given the selected template has no variables * When additional setup section is applied * Then no variable mapping section is displayed --- AC-9 (Template With Variables): * Given the selected template has no variables * When additional setup section is applied * Then Variable Mapping section is displayed * And user can select a customer property from: + Default fields (e.g., First Name, Last Name, Email, Phone) + Custom fieldsTEMP-22c56845-b580-4d54-8eb6-e701bc3a47e0
Segment Recalculation Readiness Gating Send Campaign As a CDP user I want the system to show when a segment's customer membership is still being recalculated (large segments take time to process because the total number of contacts is high) So that I don't send a campaign against a stale or incomplete recipient list — the Send Campaign action is only enabled once recalculation completes.must haveRedAC-1 (Backend Readiness Flag): * Given a segment recalculation job runs (the scheduled daily 08:00 recalculation, or a recalculation triggered by segment create/edit) * When the job is in progress * Then the backend sets the segment readiness flag to "not ready" (e.g. recalculation_status = not_ready) * When the job completes * Then the backend sets the readiness flag to "ready" and refreshes the Last updated timestamp --- AC-2 (Large Segments Take Time): * Given a segment matches a large number of customers * When recalculation is triggered * Then processing may take some time and the segment stays "not ready" until the full membership recalculation finishes * And no partial or stale result is ever marked "ready" --- AC-3 (FE Disables Send Campaign when "Not Ready"): * Given the segment readiness flag = "not ready" * When the user views the Segment Index, Segment Details, or the Send Campaign entry point * Then the "Send campaign" button is disabled * And a tooltip/label explains the segment is still updating (e.g. "Segment is still being recalculated, please wait") --- AC-4 (FE Enables Send Campaign when "Ready"): * Given the segment readiness flag = "ready" * When the user views the segment * Then the "Send campaign" button is enabled * And the user can proceed to channel selection / campaign creation as normal --- AC-5 (Edit Triggers Re-recalculation): * Given the user edits a segment's rules * When the change triggers a recalculation * Then the readiness flag flips back to "not ready" and the "Send campaign" button is disabled again until recalculation completes
Permission Key for Segmentation Feature As an administrator I want to control user access to customer segmentation features based on permission keys So that users can only view, create, manage, or archive customer segments according to their assigned role permissionsmust haveRedAC-1 (View Customer Segments): Given the user tries to access the Customer Segments When the system checks the customers_segment_view permission Then the system should determine the level of access allowed for viewing segments. Expected Result: * IF the user’s role has ALL ACCESS customers_segment_view THEN the user can view all customer segments. * IF the user’s role has OWNED ONLY customers_segment_view THEN the user can only view segments created by themselves. * IF the user’s role has DISABLED customers_segment_view THEN the Customer Segments section be hidden. AC-2 (Add Customer Segment): Given the user accesses the Customer Segments page When they attempt to create a new segment Then the system should verify the customers_segment_add permission. Expected Result: * IF the user’s role has ALL ACCESS customers_segment_add THEN the user should be able to create new customer segments. * ELSE the Create Segment button should be hidden or disabled. AC-3 (Manage Customer Segment (Edit)): Given the user attempts to edit an existing segment When the system checks the customers_segment_manage permission Then access should follow the defined permission level. Expected Result: * IF the user’s role has ALL ACCESS customers_segment_manage THEN the user can edit any segment. * IF the user’s role has OWNED ONLY customers_segment_manage THEN the user can edit only segments they created. * IF the user’s role has DISABLED customers_segment_manage THEN edit actions should be hidden or disabled. AC-4 (Archive Customer Segment): Given the user attempts to archive/unarchive a segment When the system verifies the customers_segment_archived permission Then the system should allow or restrict the archive/unarchive action accordingly. Expected Result: * IF the user’s role has ALL ACCESS customers_segment_archived THEN the user can archive/unarchive any customer segment. * IF the user’s role has OWNED ONLY customers_segment_archived THEN the user can archive/unarchive only segments they created. * IF the user’s role has DISABLED customers_segment_archived THEN the archive/unarchive option should be hidden or disabled.TEMP-7443907b-fc4e-4cbd-90c1-ce77190dc088
Expose Customer Segment Data for Service Integration As a system/service, I want to retrieve the list of segments associated with each customer, so that I can use this information for personalization, targeting, or downstream processing.must haveRedAC-1 (Retrieve Segments for a Customer): GIVEN a customer exists in the system AND the customer belongs to one or more segments WHEN another service requests the customer data along with segment information THEN the system should return the list of segments associated with that customer AND each segment should include at least: * Segment ID * Segment Name { "customer_name": "Budi Santoso", "segments": [ { "segment_id": "seg_001", "segment_name": "Loyal Customer" }, { "segment_id": "seg_002", "segment_name": "WhatsApp Customer" } ] } AC-2 (Customer with No Segment): GIVEN a customer exists but does not belong to any segment WHEN the segment data is requested THEN the system should return an empty segment list: "segments": [] AC-3 (Real-Time / Latest Segment Data): GIVEN segment membership is dynamic WHEN another service requests customer segments THEN the system should return the latest segment membership based on the most recent evaluation Notes * This feature is commonly used for: + Campaign targeting + Personalization (e.g., message content) by Chatbot + Automation workflows by Chatbot or Officeless * Can be exposed via: + API endpoint + Internal service-to-service call + or webhook

Technical Requirements

RequirementsDetailsGoals

Security & Privacy

  • Any PII or sensitive data?
  • Compliance concerns?
  • Third-party integrations?

Instrumentation Plan

Events to Track

Properties

Dashboard / Owner

  • Link:
  • Data owner: DATA Team (external squad)

Constraints & Limitations

Constraints1. Voice notes require alignment on storage service between CRM and CDP. 2. Migration must occur during low-traffic periods. 3. Rollback mechanism required for corrupted batches.
Limitations

Risks & Dependencies

RiskImpactMitigation

Launch Plan

Milestones

WeekTask

Stage Gates

StagePurpose / FocusRequirements to Advance

Operational Checklist

AreaOwnerNotes
AnalyticsTracking in place
SupportUpdated macros
PMMGTM checklist ready
LegalPrivacy impact approved
GlobalizationAny localization work?

Change Log

DateOwnerSummary

Key Decisions

DateDecisionOwnerRationale

Open Questions

MeetingNotesReply

Supporting Documents

https://docs.google.com/document/d/13DcCwHJaov-5hEhAol5_TJDTCs8zLl35HKolS4URvv8/edit?usp=sharing