# PRD v0.2 — DMP & Customer Engagement Platform

**Status:** Draft  
**Document Type:** Product Requirements Document  
**Product Model:** Single-tenant / one client per installation  
**Primary Purpose:** Mengumpulkan, membersihkan, menyatukan, memahami, mensegmentasikan, dan mengaktivasi data customer melalui campaign dan experience yang dibantu AI.

---

## 1. Product Overview

Platform ini menggabungkan:

- Customer Data Management
- Customer Intelligence
- Audience Segmentation
- AI-Assisted Marketing
- Customer Engagement
- Experience & Data Enrichment

Produk tidak hanya menjadi tempat menyimpan data customer atau membuat campaign. Tujuan utamanya adalah membentuk siklus:

```text
Data masuk
↓
Data dibersihkan dan disatukan
↓
Customer profile menjadi lebih terpercaya
↓
Audience dibuat dan dianalisis
↓
Campaign dijalankan
↓
Customer merespons
↓
Hasil kembali menjadi data
↓
AI belajar dari hasil tersebut
↓
Rekomendasi berikutnya menjadi lebih baik
```

## 2. Product Goals

Platform harus membantu client:

1. Menggabungkan data customer dari berbagai sumber.
2. Mengurangi customer duplicate.
3. Menjaga satu customer sebagai satu profil utama.
4. Memisahkan profil customer dengan histori transaksi.
5. Membersihkan data yang tidak lengkap atau tidak konsisten.
6. Membuat segment customer secara dinamis.
7. Membantu user menemukan audience melalui AI.
8. Menjalankan campaign melalui channel yang tersedia.
9. Mengukur hasil campaign.
10. Menggunakan hasil campaign untuk memperkaya customer intelligence.
11. Mengurangi pekerjaan manual dalam pengelolaan data.
12. Tetap memberikan kontrol keputusan bisnis kepada user.

## 3. Product Principles

### 3.1 One Customer, One Canonical Profile

Satu orang hanya boleh memiliki satu `customer_id` utama walaupun muncul dari banyak source.

```text
Spreadsheet / CSV / Ecommerce / POS / Website / Form / Survey / API / Transaction
                                   ↓
                         Identity Resolution
                                   ↓
                              CUST-000123
```

### 3.2 Customer dan Transaction adalah Entitas Berbeda

Customer adalah profil orang. Transaction adalah kejadian bisnis.

```text
CUSTOMER
Muhammad Rizky
0812xxxx
Jakarta

TRANSACTIONS
ORD-001
ORD-002
ORD-003
```

Transaction mereferensikan customer melalui `customer_id`. Data customer yang muncul di transaksi dapat disimpan sebagai snapshot historis, tetapi tidak otomatis dianggap sebagai kondisi profil customer saat ini.

### 3.3 No Silent Overwrite

Data baru tidak boleh diam-diam mengganti data existing jika maknanya belum jelas. Sistem harus mempertimbangkan source, waktu, jenis field, confidence, serta apakah nilai tersebut merupakan profile data atau transaction snapshot.

### 3.4 Claimed Data vs Calculated Data

**Claimed data** berasal dari input manusia atau source eksternal, seperti nama, email, nomor telepon, gender, alamat, lokasi, dan custom attributes.

**Calculated data** dihitung dari sumber lain, seperti total orders, total spend, AOV, first/last purchase, purchase frequency, engagement, dan customer traits.

Calculated data dapat diperbarui otomatis dari source of truth. Claimed data yang konflik harus ditangani secara hati-hati.

### 3.5 AI Membantu, User Tetap Memutuskan

AI digunakan sebagai data assistant, Audience Copilot, Campaign Copilot, dan insight assistant. AI tidak boleh mengambil keputusan bisnis penting tanpa instruksi user.

## 4. Deployment Model

Setiap client mendapatkan instalasi tersendiri.

```text
Client A → Installation A → Database A → AI Context A
Client B → Installation B → Database B → AI Context B
```

Tujuan model ini adalah isolasi data, konfigurasi per-client yang fleksibel, resource yang dapat disesuaikan, serta AI context yang tidak bercampur.

## 5. User Roles

### Super Admin

Akun utama instalasi dengan akses penuh ke users, permissions, connectors, AI, customer, transaction, segment, campaign, experiences, analytics, system settings, restore, dan permanent deletion.

### Admin

Memiliki akses operasional dan sistem. Dapat mengelola user, integrations, customer, transaction, segment, campaign, analytics, data review, soft delete, restore, dan permanent delete sesuai permission.

### SPV

Dapat melihat customer/transaction, membuat dan mengubah segment, membuat dan menjalankan campaign, pause/stop campaign, melihat analytics, soft delete, dan restore. Tidak dapat permanent delete.

### Data Analyst

Dapat mengelola data quality, review data ambigu, membuat segment, menggunakan Audience Copilot, membuat dan menjalankan campaign, serta melihat analytics. Tidak dapat mengubah core system settings, permission, atau menghapus customer.

### VIP

Read-only untuk dashboard, customer, full customer information, transaction, segment, campaign, analytics, report, dan export bila diizinkan.

## 6. Authentication

Login menggunakan email dan password. Password recovery melalui email. 2FA belum menjadi requirement awal.

## 7. Data Sources & Connectors

Target source:

- CSV / Excel
- Public Google Spreadsheet
- Website
- Ecommerce
- POS
- Customer database
- Meta Ads
- TikTok Ads
- Google Ads
- GA4
- WhatsApp
- Email
- SMS
- Mobile app
- Product catalog
- Custom API
- Webhook

Connector dikelola melalui `Settings → Integrations`.

## 8. Connector Experience

Setiap connector mengikuti flow:

```text
Connect
↓
Test Connection
↓
Select / Detect Data
↓
Mapping
↓
Preview
↓
Activate Sync
```

## 9. Public Spreadsheet Connector

Untuk MVP, spreadsheet menggunakan public/published URL.

```text
Paste URL
↓
Pilih Sheet / Tab
↓
Detect Header
↓
Mapping
↓
Preview
↓
Activate
```

Private Google OAuth belum menjadi requirement MVP.

## 10. Data Synchronization

Default synchronization: **setiap 3 jam**.

```text
Connector
↓
Raw / Staging Data
↓
Validation
↓
Normalization
↓
Identity Resolution
↓
Customer / Transaction Update
↓
Metrics Update
↓
Segment Membership Update
```

Processing harus incremental, bukan memproses seluruh database setiap kali sync.

## 11. Staging-First Data Processing

Semua source data harus masuk staging sebelum mempengaruhi data utama.

```text
SOURCE
↓
STAGING
↓
MAPPING
↓
VALIDATION
↓
IDENTITY RESOLUTION
↓
COMMIT
```

Tujuannya agar source asli tetap dapat dilacak, mapping dapat direview, data invalid tidak langsung merusak customer master, dan processing dapat diulang.

## 12. Customer Master

Customer Master menyimpan kondisi profil customer terbaru yang dipercaya sistem.

Standard fields mencakup nama, phone, email, gender, birth date, location hierarchy, postal code, address detail, created time, dan updated time.

Client dapat mempunyai custom attributes seperti member tier, occupation, skin type, favorite product, vehicle type, atau business type.

## 13. Customer Identity

Satu customer dapat mempunyai beberapa identity, misalnya phone, email, ecommerce ID, POS member ID, atau external system ID.

Identity dipakai untuk membantu sistem mengenali customer yang sama dari banyak source.

## 14. AI Identity Resolver

Identity Resolver menentukan apakah record baru adalah:

```text
Existing Customer
Possible Match
New Customer
```

AI dapat mempertimbangkan kombinasi name, phone, email, gender, DOB, location, external ID, source, custom attributes, dan transaction context.

## 15. Identity Confidence

### High Confidence

Sistem boleh attach ke customer existing, merge identity, dan melakukan enrichment yang aman.

### Ambiguous

Sistem tidak boleh memaksa merge. Data masuk ke **AI Review Queue**.

### No Match

Sistem membuat customer baru.

## 16. AI Review Queue

Review Queue menampung possible duplicate, phone/email conflict, location ambiguity, profile enrichment conflict, dan identity yang menunjuk lebih dari satu customer.

Action yang dapat dilakukan user:

```text
Merge
Keep Separate
Use Incoming
Keep Current
Ignore
```

## 17. Duplicate Protection

Duplikasi dicegah melalui beberapa lapisan:

```text
Normalization
↓
Strong Identity Match
↓
Candidate Similarity
↓
AI Identity Resolver
↓
System Guardrail
```

Tujuannya: record yang sama masuk berkali-kali tidak menghasilkan customer baru berkali-kali.

## 18. Location Intelligence

Location customer menggunakan 4 level Indonesia:

```text
Province
↓
City / Regency
↓
District
↓
Village / Kelurahan
```

Input asli tetap disimpan. Resolution status dapat berupa `resolved`, `partial`, `ambiguous`, atau `unknown`.

## 19. Location Ambiguity

Sistem tidak boleh menebak lokasi ambigu. Contoh `Bekasi` dapat berarti Kota Bekasi atau Kabupaten Bekasi. Jika data tambahan tidak cukup, status tetap ambiguous.

## 20. Transactions

Transaction adalah module opsional. Client tanpa transaction tetap dapat menggunakan platform.

Transaction minimal menyimpan transaction ID, source, order ID, customer ID, order date, amount, status, dan channel.

## 21. Transaction Snapshot

Transaction dapat menyimpan snapshot customer pada saat transaksi, seperti customer name, phone, shipping address, dan shipping city. Snapshot tidak otomatis menjadi customer profile.

## 22. Transaction Deduplication

Transaction harus idempotent. Jika transaksi dengan source dan order ID yang sama masuk kembali, sistem memperbarui transaction existing dan tidak membuat duplicate transaction.

## 23. Customer Metrics

Jika transaction tersedia, sistem dapat menghitung:

```text
total_orders
total_spend
average_order_value
first_order_date
last_order_date
days_since_last_order
purchase_frequency
```

## 24. Customer Traits

Sistem dapat menghasilkan traits seperti Repeat Customer, High Value Customer, Inactive Customer, Potential Repeat Order, Frequent Buyer, dan New Customer. Definisi dapat disesuaikan per client.

## 25. Dynamic Segmentation

Segment merupakan reusable audience yang otomatis mengikuti perubahan customer.

```text
Hari 1: Warga Jakarta = 20 customers
Hari berikutnya setelah sync = 60 customers
```

Satu customer dapat berada di banyak segment.

## 26. Manual Segment Builder

User dapat membuat rules sendiri menggunakan kondisi seperti location, transaction metrics, customer traits, custom fields, dan engagement.

Target logic:

```text
AND
OR
EXCLUDE
Nested Groups
```

## 27. Audience Copilot

Audience Copilot merupakan AI chat untuk membantu user membentuk segment.

Contoh:

> Cari customer Jakarta yang sudah beli minimal dua kali tapi belum order lagi lebih dari 30 hari.

AI dapat menghasilkan suggested rules, estimated audience, dan preview.

Action:

```text
Preview Customers
Adjust Rules
Apply to Builder
Save Segment
Create Campaign
```

AI tidak boleh mengubah manual builder tanpa user menekan Apply.

## 28. Campaign Management

Campaign merupakan module terpisah dari Segment. Satu campaign dapat menggunakan satu atau beberapa segment dengan INCLUDE dan EXCLUDE.

Customer yang muncul di beberapa segment tetap menjadi satu recipient dalam campaign yang sama.

## 29. Campaign Channel

Satu campaign hanya menggunakan satu channel.

Initial channels:

```text
WhatsApp
Email
SMS
```

## 30. Campaign Modes

### One-Time

Audience ditentukan ketika campaign dijalankan. Setelah pengiriman selesai, campaign menjadi Completed.

### Ongoing

Campaign mengikuti dynamic segment. Customer baru yang masuk segment menjadi eligible. Customer yang sudah pernah menerima campaign yang sama tidak menerima ulang.

## 31. Campaign Status

```text
Draft
Scheduled
Active
Paused
Completed
Failed
Cancelled
```

## 32. Campaign Scheduling

Campaign menentukan Active Days, Sending Start Time, Sending End Time, dan timezone installation.

Customer yang eligible di luar window masuk queue sampai waktu berikutnya.

## 33. Frequency Cap

Global frequency cap: **maksimum 5 pesan per customer per minggu** untuk gabungan WhatsApp + Email + SMS.

Reset menggunakan fixed weekly period berdasarkan timezone client.

## 34. Campaign Priority

Priority:

```text
High
Normal
Low
```

Priority membantu menentukan urutan queue, tetapi campaign High tetap tidak boleh melampaui frequency cap.

## 35. Campaign Recipient Protection

Jika customer berada di beberapa segment yang dipilih pada campaign yang sama, customer hanya menerima satu kali.

## 36. Channel Consent

Consent disimpan per channel.

```text
WhatsApp: Active
Email: Opt-out
SMS: Active
```

Opt-out tidak menghapus customer. Campaign otomatis mengecualikan channel yang tidak eligible.

## 37. Experiences

Experiences terdiri dari:

```text
Landing Pages
Forms
Surveys
Popups [Future]
```

Experience dapat berdiri sendiri atau digunakan oleh campaign.

## 38. Custom Domain

Experience dapat menggunakan default platform URL atau custom client domain/subdomain seperti `survey.brand.com` atau `promo.brand.com`.

## 39. Form & Survey Identity Resolution

Setiap submission diproses melalui Identity Resolver dan dikategorikan sebagai Existing Customer, New Customer, atau Ambiguous.

Phone/email tidak selalu wajib jika kombinasi informasi lain cukup untuk resolution.

## 40. Progressive Profiling

Campaign dan Experience dapat digunakan untuk melengkapi profile customer.

```text
Customer location kosong
↓
Segment "Missing Location"
↓
WhatsApp Campaign
↓
Form
↓
Customer isi lokasi
↓
Identity Resolver
↓
Customer Profile Updated
```

## 41. Campaign Tracking

Target tracking:

```text
Sent
Delivered
Read / Open
Clicked
Replied
Form Submitted
Converted
Purchased
Revenue
```

Tracking bergantung kemampuan channel/provider.

## 42. Customer Engagement History

Customer profile harus dapat menunjukkan riwayat campaign received, email opened, WhatsApp read, link clicked, survey submitted, purchase, dan aktivitas relevan lainnya.

## 43. Campaign Feedback Loop

```text
Campaign
↓
Customer Response
↓
Tracking Event
↓
Customer Intelligence
↓
Segment / Metrics / AI
↓
Recommendation
```

## 44. AI Campaign Copilot

AI dapat membantu menemukan campaign opportunity, memilih segment, membuat campaign concept, membuat draft copy, menyarankan channel/timing, membaca historical result, memberikan warning, dan recommendation.

AI tidak menjalankan campaign sendiri.

## 45. AI Knowledge Base

Client dapat memberikan knowledge berupa brand guideline, product knowledge, tone of voice, marketing SOP, promo rules, campaign policy, FAQ, PDF, dan document.

Knowledge Base digunakan sebagai context ketika AI membuat recommendation.

## 46. AI Learning

AI dapat menggunakan historical client data seperti campaign performance, audience response, timing performance, channel performance, transaction behavior, dan segment performance untuk memperbaiki recommendation.

## 47. AI Boundaries

### AI boleh otomatis melakukan

```text
Normalize incoming data
High-confidence identity matching
Safe deduplication
Trusted profile enrichment
Calculated metrics update
Dynamic segment membership update
Data anomaly detection
```

### AI tidak boleh otomatis

```text
Merge ambiguous customer
Delete customer
Change active segment rules
Launch campaign
Send blast without instruction
Change campaign priority
Change campaign schedule
Override channel consent
```

## 48. Data Provenance

Setiap perubahan data penting harus mempunyai sumber sehingga sistem dapat menjelaskan dari mana informasi customer berasal.

## 49. Audit Trail

Audit minimal mencatat Actor, Action, Resource, Old Value, New Value, Source, dan Timestamp. Termasuk perubahan otomatis oleh AI.

## 50. Customer Lifecycle

Target lifecycle:

```text
Active
Suppressed
Merged
Trash
Anonymized
Deleted
```

Tidak semua state harus tersedia di MVP, tetapi desain harus mendukung lifecycle data.

## 51. Customer Deletion

Default deletion adalah soft delete ke Trash.

SPV ke atas dapat soft delete dan restore. Admin/Super Admin dapat permanent delete sesuai permission dan retention rules.

## 52. Analytics

### Customer

- total customers
- customer growth
- profile completeness
- location distribution
- customer traits

### Transaction

- revenue
- order count
- average order value
- repeat customer
- product performance

### Segment

- audience size
- growth
- customer overlap
- engagement

### Campaign

- sent
- delivered
- read/open
- click
- reply
- conversion
- revenue

## 53. Application Navigation

```text
Dashboard

Customers
Data Sources

Segments

Campaigns

Experiences
├ Landing Pages
├ Forms
└ Surveys

Analytics

AI / Knowledge

Settings
├ Integrations
├ Users & Roles
├ Timezone
├ AI
└ System
```

## 54. Core Product Flow

```text
CONNECT DATA
↓
SYNC
↓
STAGING
↓
NORMALIZE
↓
IDENTITY RESOLUTION
↓
CUSTOMER INTELLIGENCE
↓
SEGMENT
↓
CAMPAIGN
↓
EXPERIENCE / RESPONSE
↓
TRACK
↓
LEARN
↓
IMPROVE CUSTOMER INTELLIGENCE
```

## 55. Performance Principles

System harus dirancang untuk data dalam jumlah besar dengan prinsip:

```text
Batch Processing
Queue
Incremental Update
Idempotency
Caching
Indexed Query
Background Processing
```

AI tidak dipanggil untuk seluruh record jika kasus dapat diselesaikan secara deterministic.

## 56. Product Architecture Principle

Domain utama:

```text
Identity
Data Sources
Data Processing
Customer
Transactions
Data Quality
Segments
AI
Campaigns
Experiences
Analytics
Connectors
Audit
Settings
```

Module dipisah secara konsep tetapi tidak harus menjadi service terpisah sejak awal.

## 57. MVP Scope

### Data

- CSV / Excel import
- public Spreadsheet connector
- customer master
- transaction
- field mapping
- staging
- identity resolution
- AI review queue
- location resolution
- custom fields

### Segment

- dynamic segment
- manual builder
- AI Audience Copilot
- audience preview

### Campaign

- WhatsApp
- Email
- SMS
- one-time
- ongoing
- schedule
- sending window
- priority
- frequency cap
- recipient dedup
- channel consent

### Experiences

- Form
- Survey
- Basic Landing Page

### AI

- Identity Resolver
- Audience Copilot
- Campaign Copilot
- Knowledge Base
- basic historical recommendations

### Analytics

- customer
- transaction
- segment
- campaign

## 58. Future Scope

- Popup Builder
- Web Banner
- Web Push
- Mobile Push
- Advanced Journey Builder
- Cross-channel Journey
- Predictive Churn
- Purchase Propensity
- Product Recommendation
- Advanced Customer Clustering
- Automated A/B Testing
- Advanced Attribution
- Dedicated analytics engine

## 59. Non-Goals for Initial Version

Initial version tidak harus menjadi:

- full CRM
- ERP
- autonomous AI marketing system
- arbitrary ETL builder
- real-time event stream platform
- multi-client shared SaaS

## 60. Core Success Criteria

V1 dianggap berhasil jika client dapat:

```text
Connect / Import Data
↓
System membersihkan data
↓
Duplicate customer berkurang
↓
Customer dan transaction tersusun benar
↓
Customer profile semakin lengkap
↓
User membuat dynamic segment
↓
AI membantu menemukan audience
↓
User membuat campaign
↓
Campaign terkirim sesuai rules
↓
Customer response tercatat
↓
Response kembali memperkaya customer intelligence
```

## 61. Core Guarantees

> **1 real customer = 1 canonical customer profile.**

> **Customer profile dan transaction history tidak boleh tercampur secara salah.**

> **AI membantu pekerjaan data dan recommendation, tetapi keputusan bisnis tetap di tangan user.**

## 62. Documentation Follow-Up

Dokumen lanjutan setelah PRD:

```text
design.md
system-rules.md
data-architecture.md
roles-permissions.md
connector-guide.md
campaign-rules.md
ai-rules.md
design-guide.md
installer.md
decision-log.md
```

PRD ini menjadi acuan produk tingkat tertinggi. Dokumen lain menjelaskan implementasi dan aturan lebih detail tanpa mengubah arah produk yang ditetapkan di PRD.
