[← หน้ารวม](../index.html)

# affiliate บนแอป dailyMu — ขอบเขตและ flow

> **สถานะ: ขอบเขตเคาะแล้ว — แต่ยังเหลือ 3 เรื่องที่ต้องเคาะก่อนเริ่มงาน**
> อ่าน [`affiliate-handoff.md`](affiliate-handoff.md) ก่อนเสมอ
> คู่กับ prototype ที่กดเล่นได้ [`prototype/affiliate.html`](../prototype/affiliate.html)
> และผังสำหรับทีม [`affiliate-flow.html`](affiliate-flow.html)
>
> **อ้างอิงระบบจริง** — พอร์ทัล affiliate กลางที่ `affiliate.zuprefam.workers.dev`
> เอกสารที่ใช้อ้าง: `prd-affiliate` (สเปกฝั่งสมาชิก 8 หน้า) · `status-reference` (ทุกสถานะ) ·
> `config-impact` (ค่าตั้งและผลกระทบ) · `diagrams-affiliate` (7 ผังของพอร์ทัล — คนละชุดกับ 6 ผังของเรา)

---

## 1. หลักคิด

dailyMu คือ **แอปดูดวง** คนเปิดมาเพื่อดูสีมงคลกับวอลเปเปอร์ประจำวัน
affiliate เป็นรายได้เสริมของคนส่วนน้อย ไม่ใช่เหตุผลที่คนโหลดแอป

ระบบ affiliate ตัวจริงมีอยู่แล้วที่พอร์ทัลกลาง เดฟทำ open API ออกมาให้แอปดึงไปใช้
**เราไม่สร้างอะไรใหม่ ไม่แก้อะไรที่หลังบ้าน** — แอปเป็น client บางๆ ที่หยิบมาแสดงเท่าที่จำเป็น

กฎ 3 ข้อที่คุมทุกการตัดสินใจ:

| กฎ | ผลที่ตามมา |
|---|---|
| **affiliate ต้องไม่โผล่ในเส้นทางใช้งานปกติ** | ทางเข้าเดียว = แถวในเมนูโปรไฟล์ · ไม่มีแท็บล่าง ไม่มีการ์ดหน้าแรก |
| **ของละเอียดไม่ทำซ้ำในแอป** | กดลิงก์ไปล็อกอินที่พอร์ทัลกลางแทน — ดีกว่าทำครึ่งๆ กลางๆ สองที่ |
| **อิงระบบที่มีอยู่ ไม่เพิ่มงานหลังบ้าน** | ทุกสถานะ ทุกค่าตั้ง ต้องตรงกับพอร์ทัล ไม่ประดิษฐ์เอง |

---

## 2. ⚠️ กฎเหล็ก — ห้ามโชว์เปอร์เซ็นต์ค่าคอม

สเปกพอร์ทัลระบุไว้เป็นกฎธุรกิจข้อแรก: **No rate/pool exposure**

> ห้ามแสดงเปอร์เซ็นต์หรือโครงสร้างการแบ่ง pool ให้สมาชิกเห็น
> แสดงได้แค่ **จำนวนเงินบาท** กับ **ป้ายบอกว่าเป็นการซื้อครั้งที่เท่าไหร่**

เหตุผล: ค่าคอมเป็น **Commission Pool** — สัดส่วนหลักให้ผู้แนะนำตรง (`Direct Share`)
ที่เหลือกระจายขึ้นไปให้ upline หลายชั้น (`Paid Levels` × `Upline Share`)
ถ้าสมาชิกเห็น % จะถอดสูตรย้อนกลับได้ว่าโครงสร้างการแบ่งเป็นยังไง

> 📵 **ตัวเลขจริงของ config พวกนี้ห้ามเขียนลงเอกสารชุดนี้**
> เพราะ `docs/*` ถูก deploy ขึ้น `dailymu-wallpaper.pages.dev` ซึ่ง**เป็นสาธารณะ ไม่มีล็อกอิน**
> เขียนเป็นชื่อ config ได้ แต่ห้ามใส่ค่า — ดูค่าจริงที่พอร์ทัลกลาง (`config-impact`)

**แอปต้องรับมาเป็นจำนวนเงินที่พอร์ทัลคำนวณเสร็จแล้วเท่านั้น**
อย่าให้ API ส่ง rate มา และอย่าคำนวณ `ยอดซื้อ × rate` เองในแอป

แทนที่ % ด้วยป้ายนี้ในทุกรายการ:

| ป้าย | เมื่อไหร่ |
|---|---|
| `ซื้อครั้งแรก` | ลูกค้าคนนี้ซื้อผ่านลิงก์เป็นครั้งแรก |
| `ซื้อซ้ำ · ครั้งที่ N จาก M` | ครั้งถัดไป — บอกด้วยว่าเหลือสิทธิ์อีกกี่ครั้ง |

---

## 3. ขอบเขต

### 3.1 อยู่ในแอป

| หน้า | ทำอะไรได้ |
|---|---|
| **ภาพรวม** | ยอดถอนได้ · รอปล่อย · รอผ่านเป้ารอบนี้ · เพื่อนที่ซื้อแล้ว · ลิงก์ + ปุ่มคัดลอก |
| **แชร์ลิงก์** | QR · คัดลอก · แชร์เข้า LINE/เฟซบุ๊ก/ข้อความ · ข้อความชวนสำเร็จรูป |
| **รายได้ของฉัน** | กราฟ 6 เดือน · ลิสต์ส่วนแบ่ง **ของตัวเองเท่านั้น** · 5 แท็บ · กดดูรายตัว |
| **กระเป๋าเงิน** | ยอดถอนได้ · ประวัติการถอน · รายการเดินบัญชี 10 รายการล่าสุด |
| **ขอถอนเงิน** | ใส่จำนวน · เห็นยอดสุทธิหลังหักภาษีก่อนกดยืนยัน · ยืนยันซ้ำใน sheet |
| **ยืนยันตัวตน** | อัปโหลด 2 ไฟล์ · ดูสถานะ · ยื่นใหม่เมื่อไม่ผ่าน — **บุคคลธรรมดาเท่านั้น** |
| **บัญชีรับเงิน** | ดู · แก้ (ต้องใส่รหัสผ่านยืนยัน + ส่งอีเมลแจ้งเตือน) |

### 3.2 ลิงก์ออกไปพอร์ทัลกลาง

> 🔒 **เฟสนี้รับเฉพาะผู้แนะนำที่เป็นบุคคลธรรมดา**
> ระบบกลางรองรับนิติบุคคลเต็มรูปแบบ แต่แอปไม่ทำ — ส่งไปทำที่พอร์ทัลแทน

| เรื่อง | ทำไมไม่อยู่ในแอป |
|---|---|
| **ทีม · ผู้แนะนำของฉัน** | เฟสแรกไม่มีทีม และต่อให้อนาคตมี แอปก็แสดงแค่ค่าคอมของตัวเอง |
| **นิติบุคคล · ใบกำกับภาษี · VAT 7%** | เฟสนี้ไม่รับนิติบุคคล — มีปุ่มในหน้ายืนยันตัวตนพาไปพอร์ทัล |
| **ยอดละเอียด · ประวัติการถูกตัด · CSV** | ของที่ดูนานๆ ครั้ง ทำบนจอมือถือไม่สนุก |
| **timeline การถอนครบ 7 สถานะ** | แอปโชว์ 4 กลุ่มพอ กดดูละเอียดที่พอร์ทัล |
| **ประวัติการใช้งานบัญชี** | เรื่องความปลอดภัยของพอร์ทัล |
| **การ์ดวัดผล · นับถอยหลังเป้ารอบ** | ออกแบบมาเพื่อเร่งเร้าให้คนขาย ขัดกับการเป็นแอปดูดวง |
| **ศูนย์แจ้งเตือน** | แอปมีระบบแจ้งเตือนของตัวเองอยู่แล้ว ไม่ทำซ้ำ |

### 3.3 บันไดการเข้าร่วม 3 ขั้น

จุดที่คนมักออกแบบพลาดคือ**รวม "เข้าร่วมโปรแกรม" กับ "ลงทะเบียนรับเงิน" เป็นประตูเดียว**
แล้วบังคับให้กรอกเอกสารตั้งแต่วันแรก ผลคือคนกดเข้ามาดูแล้วถอย

เราแยกเป็นคนละขั้น (แพตเทิร์นเดียวกับ [Pinto Affiliate](https://pintobook.com/pinto-affiliate-sales-and-reports)):

| ขั้น | ผู้ใช้ทำอะไร | ต้องใช้อะไร | ปลดล็อกอะไร |
|---|---|---|---|
| **1. มีบัญชี dailyMu** | มีอยู่แล้วตั้งแต่ใช้แอป | — | เห็นแถว "โปรแกรมแนะนำเพื่อน" ในเมนูโปรไฟล์ |
| **2. เข้าร่วมโปรแกรม** | กดปุ่มเดียว + ติ๊กยอมรับเงื่อนไข | **ไม่ต้องกรอกอะไรเลย** | ได้ลิงก์ทันที · แชร์ได้ · **ส่วนแบ่งเริ่มสะสม** |
| **3. ลงทะเบียนรับเงิน** | ตอนอยากถอน (ไม่ต้องรีบ) | ยืนยันตัวตน + บัญชีรับเงิน | ถอนเงินได้ |

**ขั้นที่ 2 อนุมัติอัตโนมัติ ไม่มีสถานะ "รออนุมัติ"** — พอร์ทัลกลางมีระบบอนุมัติอยู่ (`สมัคร → รออนุมัติ → Active/ปฏิเสธ`)
แต่ขอให้ตั้งเป็น auto-approve สำหรับ dailyMu เพราะ:

- คนที่เข้าร่วมคือลูกค้าเราเองที่ใช้แอปอยู่แล้ว ไม่ใช่คนนอก
- ถ้าต้องรีวิวทุกใบ = มีคนต้องนั่งกดทุกวัน
- ถ้าใครทำผิด มี **Suspended** จัดการทีหลังได้อยู่แล้ว

> ถ้าวันหลังอยากเปิดโหมดอนุมัติ ต้องเพิ่มหน้าจอ 3 แบบ (รออนุมัติ · ไม่อนุมัติ+เหตุผล · ภาพรวมตอนยังไม่มีลิงก์)
> **ทำทีหลังแพงกว่าทำตอนนี้** แต่เฟสนี้ตกลงว่าไม่ทำ

### 3.4 ระหว่างขั้น 2 กับ 3 — การ์ด "ลงทะเบียนรับเงิน"

คนที่เข้าร่วมแล้วแต่ยังไม่ลงทะเบียน จะเห็นการ์ดเช็กลิสต์คาไว้บนหน้าภาพรวม บอก 3 อย่าง:

| รายการ | สถานะ |
|---|---|
| อีเมลสำหรับรับเอกสาร | ✓ เสร็จแล้วเสมอ — มาจากบัญชี dailyMu |
| ยืนยันตัวตน | กดไปทำได้ |
| บัญชีรับเงิน | กดไปทำได้ |

**การ์ดนี้หายไปเองเมื่อครบทุกขั้น** จะได้ไม่รกหน้าคนที่พร้อมแล้ว
และมันเป็นคนละอย่างกับแบนเนอร์เตือน — การ์ดนี้**ไม่เร่งเร้า** เป็นแค่เช็กลิสต์
คนที่ยอด ฿0 เห็นการ์ดนี้ได้โดยไม่รู้สึกว่าถูกไล่ (เทียบกับแบนเนอร์ที่ขึ้นเฉพาะเมื่อมียอดแล้ว)

### 3.5 อีเมล — มีอยู่แล้ว แต่แก้ไม่ได้

แอป dailyMu เก็บอีเมลตั้งแต่ตอนสมัครใช้แอป **ทุกคนจึงมีอีเมลอยู่แล้ว และแก้ไขในแอปไม่ได้**

อีเมลนี้เป็นปลายทางของ: **หนังสือรับรอง 50 ทวิ** · อีเมลแจ้งเตือนตอนเปลี่ยนบัญชีรับเงิน
จึงต้องแสดงให้ผู้ใช้เห็นในการ์ดลงทะเบียน เพื่อให้รู้ว่าเอกสารภาษีจะไปโผล่ที่ไหน

> ⚠️ **`docs/spec.md` ยังไม่มีช่อง `email` ใน `UserProfile`** — สเปกไม่ตรงกับของจริง **ต้องอัปเดต**
> และต้องตอบให้ได้ว่า **ถ้าอีเมลผิดหรือเข้าไม่ได้ ผู้ใช้ทำยังไง** (ติดต่อทีมงาน? แก้ที่ไหน?)
> เพราะเอกสารภาษีส่งไปแล้วเอาคืนไม่ได้

---

## 4. ค่าตั้ง — ทั้งหมดมาจาก API ห้าม hardcode

ค่าพวกนี้**ตั้งได้รายโปรเจกต์** (เช่น ถอนขั้นต่ำ TAKRA ฿500 · Delima ฿300)
และสเปกระบุว่า *"ทุกรายการ snapshot ค่า config ณ เวลาที่เกิดรายการ
การเปลี่ยนค่าทีหลังมีผลเฉพาะรายการใหม่"* — แปลว่าค่าพวกนี้ไม่คงที่ตามเวลาด้วย

| ค่า (ชื่อในระบบกลาง) | แอปเอาไปทำอะไร |
|---|---|
| `Minimum Withdrawal` | ด่านที่ 3 ก่อนถอน · ข้อความปุ่ม · ปุ่มลัดจำนวนเงิน |
| `Hold Period` | "ปล่อยเข้ากระเป๋าในอีก N วัน" — **ต้องครอบระยะขอคืนเงินของ dailyMu** |
| `Repeat Purchase Count` + `Time Ceiling` | ป้าย "ครั้งที่ N จาก M" |
| `Monthly Sales Threshold` + `Monthly Summary Date` | แบนเนอร์เป้ารอบ · ยอด "รอผ่านเป้ารอบนี้" · แท็บ "ถูกตัด" |
| `Attribution Policy` | "เพื่อนที่กดลิงก์นับเป็นของคุณ N วัน" (ปัจจุบัน 30 วัน last-click) |
| `Payout Schedule` | ข้อความบอกรอบโอน |
| ภาษีหัก ณ ที่จ่าย 3% (ภ.ง.ด.3) | สรุปก่อนยืนยันถอน |

ใน prototype รวมไว้ที่ `const CONF` ก้อนเดียว เพื่อให้ย้ายไปเป็นค่าจาก API ได้ในจุดเดียว

> ❓ **คำถามถึงเดฟ** — `Payout Schedule` มี 2 รูปแบบในระบบ (TAKRA = วันที่ 1 และ 16 ·
> Delima = ทุกวันศุกร์) API ส่งมาเป็นข้อความสำเร็จรูปให้แสดงเลย หรือส่งข้อมูลดิบให้แอปประกอบเอง

---

## 5. สถานะ — ต้องตรงกับ `status-reference` ของพอร์ทัล

### 5.1 ส่วนแบ่ง — 6 สถานะจริง ยุบเหลือ 5 แท็บ

| สถานะจริง | ป้ายในแอป | แท็บ | เข้ายอดถอนได้ |
|---|---|---|---|
| `Pending` | รอปล่อย | รอปล่อย | ไม่ |
| `Available` | เข้ากระเป๋าแล้ว | เข้ากระเป๋าแล้ว | **ใช่** |
| `Paid` | ถอนออกไปแล้ว | เข้ากระเป๋าแล้ว | ถอนไปแล้ว |
| `Reversed` | ลูกค้าขอคืนเงิน | ยกเลิก | ไม่ |
| `Canceled` | ยกเลิก | ยกเลิก | ไม่ |
| `QuotaCut` | **ถูกตัด** | **ถูกตัด** | ไม่ |

`QuotaCut` เกิดจากยอดขายของตัวเองไม่ถึงเป้ารอบนั้น — **ต้องแยกจาก `Canceled` เด็ดขาด**
เพราะคนละสาเหตุ และเป็นเงินที่ผู้ใช้เคยเห็นว่าจะได้แล้วหายไป ถ้าอธิบายไม่ได้จะกลายเป็นเรื่องร้องเรียน

### 5.2 คำขอถอน — 7 สถานะจริง ยุบเหลือ 4 กลุ่ม

| กลุ่มที่แอปแสดง | ครอบสถานะจริง |
|---|---|
| ⏳ **รออนุมัติ** | `Requested` · `Approved` |
| → **กำลังโอน** | `Processing` |
| ✓ **โอนแล้ว** | `Paid` |
| ↩ **ไม่สำเร็จ · คืนเงิน** | `Rejected` · `Failed` · `Returned` |

แอปแสดงชื่อกลุ่มเป็น pill และ**สถานะจริงเป็นบรรทัดรอง** กดเข้าไปเห็นสถานะจริงกับยอดสุทธิ
ส่วน **timeline ครบทุกขั้นพร้อมเวลาอยู่ที่พอร์ทัล** → มีปุ่มพาไป

### 5.3 ยืนยันตัวตน — 5 สถานะ

| สถานะในระบบกลาง | ป้ายในแอป | ถอนเงินได้ไหม |
|---|---|---|
| ยังไม่ยื่น | **ยังไม่ยื่น** | ไม่ได้ |
| รอตรวจสอบ | **รอตรวจสอบ** | ไม่ได้ — แต่ส่วนแบ่งยังสะสม |
| ผ่าน | **ยืนยันแล้ว** | ได้ |
| ไม่ผ่าน | **ไม่ผ่าน** | ไม่ได้ · ยื่นใหม่ได้ไม่จำกัด |
| ถูกเพิกถอน | **ถูกเพิกถอน** | ไม่ได้ · ต้องยื่นใหม่ทั้งชุด |

เส้นทาง: `ยังไม่ยื่น` → `รอตรวจสอบ` → `ผ่าน` / `ไม่ผ่าน` (ยื่นใหม่ได้)
และ `ผ่าน → ถูกเพิกถอน` เมื่อแอดมินตรวจซ้ำแล้วพบข้อมูลไม่ตรง

**ส่วนแบ่งสะสมได้ตลอด ไม่ว่ายืนยันตัวตนแล้วหรือยัง** — ยืนยันตัวตนขวางแค่ "การถอน"

### 5.4 สถานะบัญชี — 3 สถานะ

| สถานะในระบบกลาง | ป้ายในแอป | ล็อกอิน | ถอนเงิน | รับคอมใหม่ |
|---|---|---|---|---|
| `Active` | **ปกติ** | ได้ | ได้ | ได้ |
| `Inactive` (ไม่ล็อกอินเกินเกณฑ์) | **ไม่เคลื่อนไหว** | ได้ | ได้ | ถูกข้ามตอนแบ่ง pool |
| `Suspended` (แอดมินระงับ) | **ถูกระงับ** | ได้ | **ได้** | ไม่ได้ |

> **`Suspended` ถอนเงินได้** — เป็นข้อยกเว้นที่ต่างจาก lock ตัวอื่น ระงับแค่การรับคอมใหม่
> แอปต้องขึ้นแบนเนอร์แดงบอกสถานะ แต่**ห้ามปิดปุ่มถอน**

---

## 6. เงื่อนไขการถอน — ตรวจ 3 ชั้นตามลำดับ

ปุ่มถอน**เปลี่ยนข้อความตามชั้นที่ติด** แทนที่จะปล่อยให้กดแล้วขึ้น error:

| ชั้น | ปุ่มขึ้นว่า | กดแล้วไปไหน |
|---|---|---|
| 1. ยืนยันตัวตนผ่านแล้ว | 🪪 ยืนยันตัวตนก่อนถอน | หน้ายืนยันตัวตน |
| 2. มีบัญชีรับเงิน | 🏦 เพิ่มบัญชีรับเงินก่อน | หน้าแก้บัญชี |
| 3. ยอด ≥ ขั้นต่ำ | 💸 ยอดยังไม่ถึง ฿X | ไม่ไปไหน บอกว่าขาดอีกเท่าไหร่ |

สเปกพอร์ทัลมีด่านที่ 4 — **ใบกำกับภาษีค้าง** — แต่เป็นของนิติบุคคล เฟสนี้ไม่มี

**เปลี่ยนบัญชีรับเงิน** ต้อง: ใส่รหัสผ่านยืนยัน + แนบหน้าสมุดบัญชีใหม่ + ระบบส่งอีเมลแจ้งเตือน
และสถานะยืนยันตัวตน**เด้งกลับไป "รอตรวจสอบ" อัตโนมัติ** กันคนเปลี่ยนไปโอนเข้าบัญชีคนอื่นหลังผ่านแล้ว

> ⚠️ **ระหว่างรอตรวจบัญชีใหม่ ต้องถอนไม่ได้** — ไม่งั้นการบังคับให้ตรวจซ้ำไม่มีความหมายเลย
> เพราะคนร้ายเปลี่ยนบัญชีแล้วรีบกดถอนก่อนแอดมินตรวจก็จบ
>
> **จุดที่พลาดง่าย** — ด่านนี้ต้องตรวจ **ทุกครั้งที่เข้าหน้าขอถอน** ไม่ใช่แค่ตอนกดปุ่มเข้ามา
> เพราะผู้ใช้เข้าถึงหน้านั้นได้อีกหลายทางโดยไม่ผ่านปุ่ม เช่น เข้าหน้าขอถอน → กด "เปลี่ยน" บัญชี →
> บันทึก → กดย้อนกลับ ก็เด้งกลับเข้าฟอร์มเดิมที่กรอกค้างไว้
> **prototype เคยมีบั๊กนี้จริง** (เจอตอนทดลองใช้ 21 ก.ย. 2569) แก้แล้วโดยตรวจ 3 จุด:
> ตอน render หน้า · ตอนพิมพ์จำนวนเงิน · และตอนกดยืนยันใน sheet

ข้อความบนปุ่มต้องแยก **"รอผลตรวจ"** ออกจาก **"ยังไม่เคยยืนยันตัวตน"**
คนที่เพิ่งเปลี่ยนบัญชีจะงงมากถ้าระบบบอกให้ไปยืนยันตัวตนอีกรอบ ทั้งที่เพิ่งยื่นไป

---

## 7. ยอด 3 ก้อน — ไม่ใช่ 2

พอเปิด `Monthly Sales Threshold` การ์ดยอดเงินมี 3 ก้อน:

| ก้อน | ความหมาย |
|---|---|
| **ยอดถอนได้** | ผ่าน hold แล้ว และผ่านเป้ารอบแล้ว — ถอนได้จริง |
| **รอปล่อย** | ยังอยู่ในระยะ hold |
| **รอผ่านเป้ารอบนี้** | พ้น hold แล้ว แต่ยอดขายรอบนี้ยังไม่ถึงเป้า จึงยังไม่นับเข้ายอดถอนได้ |

ถ้าตั้ง `Monthly Sales Threshold = 0` ก้อนที่ 3 หายไป พร้อมกับแท็บ "ถูกตัด" และแบนเนอร์เป้ารอบ
(ใน prototype กดปุ่ม **🎯 เป้ารอบ** ที่แถบล่างเพื่อดูความต่างได้)

> ⚠️ **`0` คือค่าที่แปลว่าปิด — `1 บาท` ไม่ใช่**
> ที่ 1 บาท ตรรกะยังทำงาน ใครที่รอบนั้นขายเองไม่ได้เลยสักบาทจะไม่ผ่านเป้าและโดนตัดคอม

---

## 8. แบนเนอร์บนสุด — โชว์ทีละเรื่อง

เรียงตามความเร่งด่วน กดจบเรื่องหนึ่งแล้วเรื่องถัดไปถึงโผล่:

1. **บัญชีผู้แนะนำถูกระงับ** — แดง · ย้ำว่ายังถอนยอดค้างได้
2. **รายการถอนไม่สำเร็จ** — แดง · ปุ่มไปแก้บัญชีรับเงิน
3. **สิทธิ์ยืนยันตัวตนถูกเพิกถอน** — แดง · ปุ่มยื่นใหม่
4. **ยืนยันตัวตนไม่ผ่าน** — แดง · ปุ่มยื่นใหม่ · แสดงเหตุผลเต็มๆ
5. **กำลังตรวจเอกสาร** — เหลือง · ไม่มีปุ่ม · บอกว่าส่วนแบ่งยังสะสมได้
6. **ยอดขายรอบนี้ยังไม่ถึงเป้า** — เหลือง · บอกยอดที่ค้าง ยอดที่ขาด และ**วันสรุปรอบ** · ลิงก์ไปพอร์ทัล
7. **ยังไม่ยืนยันตัวตน** *(เฉพาะเมื่อมียอดแล้ว)*
8. **ยังไม่มีบัญชีรับเงิน** *(เฉพาะเมื่อมียอดแล้ว)*

เงื่อนไข "เฉพาะเมื่อมียอดแล้ว" สำคัญ — คนเพิ่งสมัครยอด ฿0 ไม่ควรโดนไล่ให้ไปยืนยันตัวตนทันที
**ยืนยันตัวตนคือด่านก่อนรับเงิน ไม่ใช่ด่านแรกเข้า**

badge ในเมนูโปรไฟล์ขึ้นเฉพาะ **เรื่องที่ต้องลงมือทำ** — บัญชีถูกระงับ · ยืนยันไม่ผ่าน · ถอนไม่สำเร็จ
**เงินเข้าไม่เตือน** กันไม่ให้ aff กลายเป็นตัวเรียกคนเข้าแอปแทนการดูดวง

---

## 9. PDPA

| เห็นได้ | เห็นไม่ได้ |
|---|---|
| มีคนซื้ออะไร เมื่อไหร่ | ชื่อจริง เบอร์ อีเมลของผู้ซื้อ |
| จำนวนเงินส่วนแบ่งที่ได้ | **อัตราส่วนแบ่งและโครงสร้าง pool** |
| ชื่อแบบปิดบัง `ก***ญ` | **วอลเปเปอร์หรือดวงที่ผู้ซื้อสร้าง** |

ไม่ใช่แค่ PDPA — ถ้าผู้แนะนำเห็นว่าเพื่อนดูดวงเรื่องอะไร จะทำลายความเชื่อใจในตัวแอปทั้งหมด

**ต้องเช็กว่า API ไม่ส่งข้อมูลเกินนี้มาตั้งแต่ต้นทาง** อย่าอาศัยการซ่อนที่ฝั่งแอป
ข้อมูลที่ส่งมาถึงเครื่องผู้ใช้แล้วถือว่ารั่วแล้ว แม้จอจะไม่แสดง

ไฟล์เอกสารยืนยันตัวตนส่งตรงเข้าพอร์ทัลกลาง ไม่เก็บใน storage ของแอป

---

## 10. คำถามที่ต้องถามเดฟ

เรียงตามผลกระทบ — ข้อบนสุดถ้าตอบอีกแบบต้องรื้อ flow ใหม่

| เรื่อง | คำถาม |
|---|---|
| **API ต้องไม่ส่ง rate** | ยืนยันว่า endpoint ส่งมาแต่จำนวนเงิน ไม่มี % หรือ pool structure ติดมา |
| **ยอด "รอผ่านเป้ารอบนี้"** | API ส่งมาเป็นก้อนแยกเลยไหม หรือแอปต้องคำนวณเอง (ถ้าต้องคำนวณเอง = ต้องรู้ rate = ผิดกฎข้อ 2) |
| **คอมจากทีม** | ถ้าอนาคตเปิดทีม API แยกได้ไหมว่าก้อนไหนจากยอดตัวเอง ก้อนไหนจาก upline — แอปจะแสดงแค่ของตัวเอง |
| `Payout Schedule` | ส่งข้อความสำเร็จรูป หรือข้อมูลดิบ (ดูข้อ 4) |
| **นิติบุคคลที่มีอยู่แล้ว** | ถ้าคนที่เป็นนิติบุคคลในพอร์ทัลล็อกอินเข้าแอป จะให้เห็นอะไร — กันไม่ให้เข้า · ดูได้แต่ถอนไม่ได้ · หรือ API ไม่ส่งเคสนี้มาเลย *(ทางที่สะอาดสุดน่าจะเป็นข้อหลัง)* |
| **เปิด auto-approve ให้ dailyMu** | พอร์ทัลมีระบบอนุมัติใบสมัคร — ตั้งเป็นอนุมัติอัตโนมัติสำหรับ tenant นี้ได้ไหม (เราตกลงว่าไม่มีสถานะ "รออนุมัติ" ในแอป) |
| **อีเมลผู้ใช้** | API ส่งอีเมลจากบัญชี dailyMu มาให้ใช้เป็นปลายทาง 50 ทวิ ได้ไหม (แอปเก็บอีเมลตั้งแต่ตอนสมัครใช้แอปอยู่แล้ว · แก้ในแอปไม่ได้) |
| **ลิงก์เข้าพอร์ทัล** | มี **one-time login link + return URL** ให้ไหม — แอปมีปุ่มลิงก์ออกพอร์ทัล 6 จุด ถ้าผู้ใช้ต้องกรอกล็อกอินใหม่ทุกครั้ง กฎ "ของละเอียดให้ไปพอร์ทัล" ใช้ไม่ได้ทั้งข้อ |
| **อัปโหลดเอกสาร** | รับ multipart ตรง หรือต้องขอ signed URL ก่อน · จำกัดขนาด/ชนิดไฟล์เท่าไหร่ |
| **เปลี่ยนบัญชี** | พอร์ทัลรีเซ็ตสถานะ KYC เองไหม · ยืนยันรหัสผ่านทำที่ API ฝั่งไหน |
| **ลิงก์แนะนำ** | ใครออกโค้ด · ผูกกับ user id ของ dailyMu หรือของพอร์ทัล · ทำ deep link เข้าแอปได้ไหม |
| **Inactive** | เกณฑ์ไม่ล็อกอินของ dailyMu เท่าไหร่ · ถ้าไม่มีทีม การเป็น Inactive มีผลกับคอมของตัวเองไหม |

---

## 11. เคสจำลองใน prototype

แถบล่างจอสลับได้ 10 เคส:

| เคส | ไว้ทดสอบอะไร |
|---|---|
| ใช้งานปกติ | ทุกอย่างเรียบร้อย · มีทั้ง 4 สถานะคอม · ประวัติถอน 2 ครั้ง |
| **★ ดูครบทุกสถานะ** | **เคสสำหรับดีไซเนอร์** — ยัดสถานะคอมครบ 6 ตัว และสถานะการถอนครบ 7 ตัวไว้ในคนเดียว จะได้แคปหน้าจอไปทำ Figma ครบในที่เดียว ไม่สมจริงโดยตั้งใจ |
| **ยังไม่ผ่านเป้ารอบนี้** | ยอดก้อนที่ 3 · แบนเนอร์เป้า · แท็บ "ถูกตัด" มีของ |
| **ถูกระงับบัญชี** | แบนเนอร์แดง แต่**ปุ่มถอนยังกดได้** |
| เพิ่งสมัคร | ยอด ฿0 · ต้องไม่โดนไล่ให้ยืนยันตัวตนทันที |
| รอตรวจเอกสาร | ปุ่มถอนปิด · ส่วนแบ่งยังสะสม |
| ยืนยันไม่ผ่าน | เหตุผลเต็มๆ · badge ในเมนูโปรไฟล์ · ยื่นใหม่ได้ |
| โอนไม่สำเร็จ | คืนยอดเข้ากระเป๋า · แก้บัญชีแล้วเลิกเตือน แต่รายการยังอยู่ในประวัติ |
| ยอดไม่ถึงขั้นต่ำ | ปุ่มปิด + บอกว่าขาดอีกเท่าไหร่ |
| ยังไม่สมัคร | เห็นแค่หน้าชวนสมัคร |

ปุ่มเสริม: **⏭ ปล่อยส่วนแบ่งที่รออยู่** (ข้ามเวลาพ้น hold) · **🎯 เป้ารอบ** (สลับเปิด/ปิด threshold เพื่อดูว่า UI หายไปกี่ชิ้น) ·
**🪪 วน KYC** และ **👤 วนสถานะบัญชี** (สองอย่างนี้มีได้ทีละค่า ยัดรวมในเคสเดียวไม่ได้ จึงทำปุ่มวนให้กดดูครบทุกแบบ) · **↺ ล้างข้อมูล**

> 🎨 **สำหรับดีไซเนอร์** — ใช้เคส **★ ดูครบทุกสถานะ** คู่กับปุ่มวน 2 อัน จะเห็นครบทุกหน้าตาที่ต้องออกแบบ
> รวม **21 แบบ**: สถานะคอม 6 · สถานะการถอน 4 กลุ่ม (จาก 7 สถานะจริง) · KYC 5 · บัญชี 3 · เปิด/ปิดเป้ารอบอีก 2 หน้าตา

---

## 12. ยังไม่ได้ตัดสินใจ

- ~~สมัครในแอปได้เลยไหม~~ — **เคาะแล้ว: เข้าร่วมได้ทันที auto-approve** (ดูข้อ 3.3)
- **แจ้งเตือน push ตอนมีส่วนแบ่งเข้า** — ยังไม่ทำ เสี่ยงทำให้ aff กลายเป็นตัวเรียกคนเข้าแอปแทนดูดวง
- **ระบบทีมหลายชั้น** — เฟสแรกไม่มี และต่อให้มี แอปก็แสดงแค่ค่าคอมของตัวเอง ดูทีมที่พอร์ทัล
- **รองรับนิติบุคคล** — เฟสนี้ไม่รับ ระบบกลางรองรับอยู่แล้ว ถ้าจะเปิดทีหลังคือเอา UI จากพอร์ทัลมาใส่ ไม่ใช่สร้างใหม่

### เคสธุรกิจที่ยังไม่มีใครตอบ — เจอตอนตรวจรอบสุดท้าย

| เคส | สถานะ |
|---|---|
| **ใช้ลิงก์ตัวเองซื้อเอง** | ✅ **เคาะแล้ว — กดได้แต่ไม่ได้ค่าคอม** · เป็นตรรกะหลังบ้านล้วน **แอปไม่ต้องทำอะไร** ไม่มีหน้าจอ ไม่มีข้อความเตือน (ส่วนแบ่งก็แค่ไม่เกิดขึ้น) · แต่ควรเขียนลงเงื่อนไขให้ชัด กันคนมาถามว่าทำไมซื้อเองแล้วไม่ได้คอม |
| **เลิกเข้าร่วมโปรแกรมได้ไหม** | ❓ ถ้าได้ ต้องมีปุ่มและต้องตอบว่า**ส่วนแบ่งที่ค้างอยู่จะยังไง** (ได้ต่อ / ริบ / ถอนให้หมดก่อน) · ถ้าไม่ได้ ต้องเขียนในเงื่อนไขให้ชัดตั้งแต่ตอนเข้าร่วม |
| **เพื่อนที่เป็นผู้ใช้ dailyMu อยู่แล้ว กดลิงก์แล้วนับไหม** | ❓ ถ้านับ = คนชวนกันเองในกลุ่มเพื่อนที่ใช้อยู่แล้ว ไม่ได้ลูกค้าใหม่ · ถ้าไม่นับ ต้องบอกผู้แนะนำให้ชัด ไม่งั้นเขาจะงงว่าทำไมแชร์แล้วไม่ได้คอม |

ทั้ง 3 เคสนี้ควรเขียนลง**เงื่อนไขโปรแกรมผู้แนะนำ** ด้วย
