Siap. Berarti kita anggap:

* **Mobile Add-on**: logic sudah jalan, billing sudah ada, hanya nanti perlu **rapikan UX/menu placement**
* **Fokus sekarang**: lanjut bangun **Clinic Add-on + onboarding + add-ons billing model** tanpa mengganggu sistem dasar yang sudah ada

Agar rapi, saya buatkan **prompt pengembangan lanjutan per phase** yang fokus ke implementasi nyata.

---

# MASTER PROMPT LANJUTAN — FOKUS PENGEMBANGAN ADD-ONS + CLINIC

## Konteks sistem

Aplikasi adalah **WhatsCRM**, sebuah SaaS multi-tenant berbasis WhatsApp CRM.
Sistem dasar **harus tetap berjalan walaupun tanpa add-ons aktif**, termasuk:

* inbox
* campaign
* template
* contacts
* channel WhatsApp
* messaging
* dashboard basic
* API

Saat ini **Mobile Apps Add-on sudah existing dan berjalan**, termasuk model billing per akses login agent. Namun peletakan menu nantinya perlu dirapikan, tapi itu **bukan prioritas saat ini**.

Sekarang fokus pengembangan diarahkan ke:

1. onboarding setelah registrasi
2. sistem add-ons yang scalable
3. Clinic Add-on
4. billing add-ons berbasis quantity / unit
5. conditional menu sesuai add-ons aktif
6. tanpa menghapus atau merusak fitur existing

Gunakan Laravel dan ikuti arsitektur multi-tenant yang clean, modular, dan aman untuk dikembangkan ke vertical lain di masa depan.

---

# PHASE 1 — ONBOARDING FOUNDATION

## Tujuan

Menambahkan alur onboarding setelah registrasi agar user tidak langsung masuk ke dashboard penuh, tetapi diarahkan untuk melengkapi data bisnis, data legal, data Meta, lalu memilih add-ons.

## Prompt

Buatkan implementasi onboarding multi-step pada aplikasi Laravel multi-tenant dengan ketentuan berikut:

### 1. Tambahkan tabel berikut

#### companies

* id
* client_id
* name
* brand_name
* description
* category
* email
* phone
* website
* address
* city
* province
* country
* created_at
* updated_at

#### business_documents

* id
* client_id
* legal_name
* business_type
* license_number
* npwp
* pic_name
* pic_position
* pic_email
* pic_phone
* document_path
* status enum: draft, submitted, verified, rejected
* created_at
* updated_at

#### whatsapp_business_profiles

* id
* client_id
* display_name
* business_description
* category
* address
* website
* operational_hours
* profile_picture
* status enum: draft, submitted, approved, rejected
* created_at
* updated_at

#### onboarding_progress

* id
* client_id
* current_step
* profile_completed boolean
* documents_completed boolean
* meta_completed boolean
* addons_completed boolean
* onboarding_completed boolean
* created_at
* updated_at

### 2. Buat relasi model

* Client hasOne Company
* Client hasOne BusinessDocument
* Client hasOne WhatsappBusinessProfile
* Client hasOne OnboardingProgress

### 3. Alur onboarding

Setelah registrasi/login pertama:

* jika onboarding belum selesai, redirect ke wizard onboarding
* jika onboarding selesai, masuk dashboard biasa

### 4. Step onboarding

#### Step 1 — Profil bisnis

Field:

* nama perusahaan
* brand
* kategori bisnis
* deskripsi
* email
* telepon
* website
* alamat
* kota
* provinsi
* negara

#### Step 2 — Data legal

Field:

* nama legal perusahaan
* jenis usaha
* nomor izin usaha
* NPWP
* nama PIC
* jabatan PIC
* email PIC
* nomor HP PIC
* upload dokumen

#### Step 3 — Setup Meta / WhatsApp Business

Field:

* display name
* business description
* kategori
* alamat
* website
* jam operasional
* upload foto profil

#### Step 4 — Pilih Add-ons

Tampilkan card add-ons:

* Clinic Add-on
* Mobile Apps Add-on

#### Step 5 — Review & Finish

Tampilkan ringkasan data dan tombol lanjut ke dashboard

### 5. Syarat implementasi

* wizard harus bisa disimpan per step
* jika user berhenti di tengah jalan, bisa lanjut lagi
* jangan menghapus dashboard lama
* jangan merusak fitur existing

---

# PHASE 2 — ADD-ONS CORE SYSTEM

## Tujuan

Membuat sistem add-ons yang menjadi fondasi untuk fitur opsional seperti Clinic Add-on dan Mobile Apps Add-on.

## Prompt

Implementasikan sistem add-ons yang scalable pada Laravel multi-tenant dengan ketentuan:

### 1. Tabel master add-ons

#### addon_definitions

* id
* code
* name
* description
* billing_type enum: flat, per_user, per_agent_login, per_clinic, per_branch, per_device
* unit_name
* base_price
* is_active boolean
* created_at
* updated_at

Isi default:

* mobile_app
* clinic

### 2. Tabel add-ons per client

#### client_addons

* id
* client_id
* addon_code
* is_active boolean
* billing_type
* billing_price
* activated_at
* deactivated_at nullable
* created_at
* updated_at

### 3. Helper global

Buat helper:

```php
addon_enabled($addon, $clientId = null)
```

### 4. Middleware

Buat middleware:

```php
addon:clinic
addon:mobile_app
```

Jika add-on tidak aktif:

* abort 403
* atau redirect ke halaman add-ons

### 5. Conditional menu

Sidebar/topbar harus support kondisi:

* menu add-on hanya muncul jika add-on aktif
* core menu tetap tampil walau tidak ada add-on aktif

### 6. Prinsip penting

* jangan hardcode client type
* semua akses berdasarkan add-on aktif
* sistem dasar tetap berjalan tanpa add-on

---

# PHASE 3 — BILLING ENGINE UNTUK ADD-ONS

## Tujuan

Membuat add-ons tidak hanya aktif/nonaktif, tetapi juga punya biaya bulanan berdasarkan quantity/unit usage, dan otomatis memotong saldo.

## Prompt

Buatkan sistem billing add-ons berbasis quantity untuk WhatsCRM dengan ketentuan:

### 1. Konsep billing

* sistem dasar tetap punya biaya core bulanan
* add-ons dihitung terpisah
* setiap add-on bisa punya unit billing masing-masing

### 2. Aturan billing add-ons

#### Mobile Apps Add-on

* billing type: per_agent_login
* harga: Rp35.000 per akses login agent per bulan
* quantity = jumlah agent/user dengan akses mobile aktif

#### Clinic Add-on

* billing type: per_clinic
* harga: Rp20.000 per klinik aktif per bulan
* quantity = jumlah klinik aktif pada tenant

### 3. Tabel usage billing

#### client_addon_usages

* id
* client_id
* addon_code
* billing_period format YYYY-MM
* quantity
* unit_price
* total_price
* metadata json nullable
* created_at
* updated_at

### 4. Tabel transaksi billing

#### billing_transactions

* id
* client_id
* billing_period
* item_type enum: core_plan, addon
* item_code
* description
* quantity
* unit_price
* amount
* status enum: pending, paid, failed, partial
* processed_at nullable
* created_at
* updated_at

### 5. Mekanisme billing bulanan

Buat job scheduler bulanan yang:

* hitung tagihan core plan
* hitung tagihan add-ons aktif
* buat snapshot quantity per add-on
* potong saldo client secara otomatis
* simpan transaksi billing
* update status billing

### 6. Graceful handling

Jika saldo tidak cukup:

* jangan langsung merusak seluruh sistem
* tandai billing gagal / unpaid
* siapkan status grace period
* core tetap bisa dipertimbangkan tetap aktif sementara
* add-on dapat diberi pembatasan jika diperlukan

### 7. Prinsip

* activation menentukan fitur
* usage quantity menentukan tagihan

---

# PHASE 4 — CLINIC ADD-ON FOUNDATION

## Tujuan

Menambahkan Clinic Add-on sebagai add-on opsional yang memanfaatkan sistem inti WhatsCRM.

## Prompt

Buatkan implementasi Clinic Add-on pada Laravel multi-tenant dengan ketentuan:

### 1. Tabel clinics

* id
* client_id
* name
* code nullable
* description nullable
* phone nullable
* address nullable
* status enum: active, inactive
* is_billable boolean default true
* created_at
* updated_at

### 2. Aturan billing clinic

* setiap clinic aktif dan billable dihitung Rp20.000 per bulan
* quantity billing clinic = jumlah record clinics yang active dan is_billable = true

### 3. Menu Clinic Add-on

Jika add-on clinic aktif, tampilkan menu:

* Clinics
* Appointments
* Patients
* Clinic Dashboard

Jika tidak aktif:

* menu tersebut disembunyikan

### 4. Prinsip integrasi

* Clinic Add-on tidak membuat sistem inbox baru
* Clinic Add-on tidak membuat messaging engine baru
* harus menggunakan core system existing

---

# PHASE 5 — APPOINTMENT MANAGEMENT

## Tujuan

Membangun pondasi operasional klinik.

## Prompt

Buatkan fitur Appointment Management untuk Clinic Add-on dengan ketentuan:

### 1. Tabel appointments

* id
* client_id
* clinic_id
* contact_id
* service_name
* appointment_date
* appointment_time
* source enum: manual, whatsapp_booking
* status enum: pending, confirmed, completed, no_show, cancelled
* notes nullable
* created_at
* updated_at

### 2. Fitur utama

* tambah appointment manual
* filter berdasarkan tanggal
* filter berdasarkan klinik
* ubah status appointment
* tampilkan sumber appointment

### 3. Integrasi contacts

Gunakan data contact existing sebagai dasar patient, jangan membuat sistem pasien terpisah dari nol jika bisa memanfaatkan contacts existing

### 4. Syarat

* hanya bisa diakses jika Clinic Add-on aktif
* tidak mengganggu fitur contacts existing
* tetap multi-tenant

---

# PHASE 6 — PATIENT VIEW DARI CONTACTS

## Tujuan

Membuat tampilan patient management tanpa memutus sistem contact existing.

## Prompt

Implementasikan Patient Management sebagai layer di atas contacts existing dengan ketentuan:

### 1. Jangan duplikasi sistem kontak

Gunakan contacts existing sebagai sumber utama data pasien

### 2. Tambahkan data pendukung pasien

Bisa melalui tabel tambahan atau field tambahan:

* last_visit
* patient_status enum: active, inactive
* total_appointments
* total_completed_appointments

### 3. Halaman patient

Tampilkan:

* data pasien
* last visit
* status aktif/tidak aktif
* history booking
* history appointment
* history chat

### 4. Integrasi inbox

Dari chat inbox, jika Clinic Add-on aktif, tampilkan:

* status patient
* appointment berikutnya
* history appointment ringkas

---

# PHASE 7 — REMINDER OTOMATIS KLINIK

## Tujuan

Membangun fitur paling cepat dijual: reminder appointment otomatis.

## Prompt

Implementasikan reminder otomatis untuk Clinic Add-on dengan ketentuan:

### 1. Rule default

* reminder H-1
* reminder H-3 jam

### 2. Template

Gunakan template system existing, tambahkan kategori:

* reminder
* follow_up
* promo

### 3. Pengiriman

Reminder harus dikirim melalui messaging engine existing, bukan sistem baru

### 4. Log reminder

Tambahkan tabel reminder_logs:

* id
* client_id
* appointment_id
* template_id nullable
* send_at
* status enum: pending, sent, delivered, read, failed
* channel_id nullable
* created_at
* updated_at

### 5. Scheduling

Gunakan Laravel scheduler + queue jobs

### 6. UI

Pada detail appointment tampilkan:

* reminder H-1 status
* reminder H-3 jam status

---

# PHASE 8 — BOOKING VIA WHATSAPP

## Tujuan

Mengubah chat menjadi booking dan langsung terhubung ke appointment.

## Prompt

Tambahkan fitur booking via WhatsApp untuk Clinic Add-on dengan ketentuan:

### 1. Flow booking

Saat pasien chat:

* sistem atau agent dapat memulai flow booking
* pilih layanan
* pilih tanggal
* pilih jam
* konfirmasi booking

### 2. Anti double booking

Sebelum appointment dibuat:

* validasi slot tanggal + jam + klinik
* cegah double booking

### 3. Hasil akhir

* buat appointment otomatis
* source = whatsapp_booking
* auto schedule reminder
* kirim pesan konfirmasi ke pasien

### 4. Integrasi inbox

Flow booking harus terlihat di dalam percakapan/inbox, bukan aplikasi terpisah

---

# PHASE 9 — FOLLOW UP & RE-ENGAGEMENT

## Tujuan

Menjadikan Clinic Add-on sebagai growth engine, bukan hanya tool reminder.

## Prompt

Implementasikan automation sederhana untuk Clinic Add-on dengan ketentuan:

### 1. Follow up otomatis

* kirim H+1 setelah appointment completed
* gunakan template custom
* log hasil pengiriman

### 2. Re-engagement sederhana

* jika pasien tidak datang 30 hari, kirim pesan follow up / promo
* gunakan rule-based sederhana dulu
* tidak perlu automation builder kompleks pada tahap awal

### 3. Tracking

Tampilkan:

* sent
* delivered
* read
* replied jika tersedia dari sistem existing

---

# PHASE 10 — CLINIC DASHBOARD

## Tujuan

Mengubah use case dari sekadar chat menjadi business dashboard klinik.

## Prompt

Buatkan Clinic Dashboard dengan metrik:

* appointment hari ini
* booking hari ini
* no-show rate
* reminder terkirim
* pasien aktif vs tidak aktif

Gunakan optimasi:

* summary table / shadow table
* update via scheduled job setiap 1 jam
* jangan melakukan heavy query live jika bisa dihindari

Pastikan dashboard tetap cepat dan aman untuk multi-tenant.

---

# PHASE 11 — HALAMAN ADD-ONS & UX REFINEMENT

## Tujuan

Merapikan pengelolaan add-ons agar client bisa melihat status, harga, dan usage dengan jelas.

## Prompt

Buatkan halaman Settings > Add-ons dengan ketentuan:

### Tampilkan setiap add-on dalam card

Untuk setiap add-on tampilkan:

* nama
* deskripsi
* status active / inactive
* model billing
* harga per unit
* jumlah usage aktif
* estimasi biaya bulanan

### Contoh tampilan

#### Mobile Apps Add-on

* harga Rp35.000 / login agent / bulan
* usage aktif: X agent
* estimasi biaya: RpY

#### Clinic Add-on

* harga Rp20.000 / klinik / bulan
* usage aktif: X klinik
* estimasi biaya: RpY

### Tambahan

* tombol aktif/nonaktif
* link ke pengaturan add-on
* badge coming soon untuk add-on masa depan

Catatan:
Mobile Add-on sudah existing, jadi fokus halaman ini adalah **merapikan penempatan, visibilitas, dan pengelolaan**, bukan membangun ulang logic utamanya.

---

# PRINSIP WAJIB UNTUK SEMUA PHASE

Gunakan prinsip berikut di semua implementasi:

* jangan merusak fitur existing
* sistem dasar tetap berjalan walau tanpa add-on aktif
* semua add-on harus opsional
* add-on hanya menambah capability, bukan menggantikan core
* gunakan core messaging existing
* gunakan core inbox existing
* gunakan queue dan scheduler untuk proses otomatis
* jangan hardcode logic berdasarkan jenis client
* gunakan feature flag / addon_enabled
* tetap support multi-tenant
* desain clean untuk vertical lain di masa depan

---

# URUTAN EKSEKUSI YANG DISARANKAN

Agar aman dan realistis, kerjakan urutan ini:

1. Phase 1 — Onboarding Foundation
2. Phase 2 — Add-ons Core System
3. Phase 3 — Billing Engine
4. Phase 4 — Clinic Foundation
5. Phase 5 — Appointment
6. Phase 6 — Patient Layer
7. Phase 7 — Reminder
8. Phase 8 — Booking via WhatsApp
9. Phase 9 — Follow Up & Re-engagement
10. Phase 10 — Clinic Dashboard
11. Phase 11 — Add-ons Page & UX refinement

---

# CATATAN STRATEGIS

Untuk **menu Mobile Add-on yang sekarang dirasa kurang bagus**, saya sarankan jangan dibenahi dulu secara besar-besaran.
Cukup masukkan ke backlog:

* rapikan posisi menu Mobile Add-on
* evaluasi apakah lebih cocok di Settings, Add-ons, atau Workspace menu
* samakan pola UX-nya dengan Clinic Add-on

Jadi fokus tim tetap ke fondasi add-ons dan Clinic Add-on dulu.

Kalau Anda mau, langkah berikutnya paling pas adalah saya bantu ubah semua phase ini menjadi **sprint mingguan yang actionable** dengan format task per module, per database, per backend, dan per UI.
