# Flash Sale (Chương Trình Giảm Giá Chớp Nhoáng)

## Tổng quan

Chức năng **Flash Sale** cho phép người bán Shopee tạo và quản lý các chương trình giảm giá chớp nhoáng (Flash Sale) hàng loạt một cách tự động. Thay vì tạo thủ công từng Flash Sale trên Shopee Seller Center, công cụ này cho phép chọn nhiều khung giờ, nhiều sản phẩm và tự động tạo Flash Sale cho tất cả.

**Tính năng chính:**
- Tạo Flash Sale hàng loạt cho nhiều khung giờ cùng lúc
- Clone Flash Sale từ chương trình đã lưu
- Hẹn giờ tạo Flash Sale tự động (Scheduler)
- Chiến dịch tự động lặp lại (Campaign)
- Báo cáo thống kê hiệu quả Flash Sale

**Yêu cầu:** Tài khoản trả phí (Premium) cho tính năng Campaign.

---

## Quản lý Flash Sale (Danh sách)

**Đường dẫn:** `Shopee > Seller > Auto > Flash Sale`

### Các tab trạng thái

| Tab | Mô tả |
|-----|-------|
| **Scheduler** | Các Flash Sale đã hẹn giờ, chờ hệ thống tự động tạo |
| **Sắp diễn ra** (Next) | Flash Sale đã tạo, chưa bắt đầu |
| **Đang diễn ra** (Current) | Flash Sale đang hoạt động |
| **Đã kết thúc** (End) | Flash Sale đã kết thúc |
| **Đã lưu** (Save) | Flash Sale đã lưu làm mẫu để clone |

### Màu sắc trạng thái

| Màu | Ý nghĩa |
|-----|---------|
| Đỏ | Không có sản phẩm hoặc quá hạn hẹn giờ |
| Vàng | Số sản phẩm dưới mức tối đa |
| Xanh dương | Flash Sale đã được tạo từ Scheduler |

### Thao tác với từng Flash Sale

| Nút | Chức năng |
|-----|-----------|
| **Mở link** | Mở Flash Sale trên Shopee Seller Center |
| **Clone** | Tạo Flash Sale mới dựa trên Flash Sale này |
| **Lưu** | Lưu cấu hình Flash Sale làm mẫu (nhập tên để lưu) |
| **Tạo từ Scheduler** | Tạo Flash Sale thực tế từ bản hẹn giờ |
| **Xóa** | Xóa Flash Sale (hỗ trợ xóa hàng loạt) |

### Bộ lọc

- **Lọc theo ngày:** Chọn ngày cụ thể hoặc "Tất cả"
- **Chọn tất cả / Bỏ chọn:** Checkbox để chọn nhiều Flash Sale cùng lúc
- **Xóa hàng loạt:** Xóa tất cả Flash Sale đã chọn

### Tự động hẹn giờ (Auto Scheduler)

Tại tab **Scheduler**, bật công tắc **Auto** để hệ thống tự động tạo Flash Sale từ các bản hẹn giờ khi đến thời điểm phù hợp. Hệ thống kiểm tra mỗi 15 giây.

---

## Tạo Flash Sale

**Đường dẫn:** `Shopee > Seller > Auto > Flash Sale > Tạo mới` hoặc nhấn **Clone** từ danh sách

Quy trình tạo Flash Sale gồm **5 bước**:

```
1. Cấu hình → 2. Chọn khung giờ → 3. Chọn sản phẩm → 4. Thiết lập giá → 5. Tạo Flash Sale
```

> Khi **clone**, bước 3 (Chọn sản phẩm) được bỏ qua vì sản phẩm được lấy từ Flash Sale gốc.

---

### Bước 1: Cấu hình

Thiết lập các tùy chọn trước khi tạo Flash Sale.

#### Loại giá gốc (Price Base)

Chọn cách tính giá gốc để tính phần trăm giảm giá:

| Loại | Mô tả |
|------|-------|
| **Giá gốc** (Original) | Giá bán gốc của sản phẩm |
| **Giá đã giảm** (Discounted) | Giá sau khi đã áp dụng giảm giá thường |
| **Giá chương trình** (Campaign) | Giá đang áp dụng trong chương trình khuyến mãi |

#### Phương thức tạo

| Phương thức | Mô tả |
|-------------|-------|
| **Mặc định** (Default) | Tạo Flash Sale ngay lập tức trên Shopee |
| **Hẹn giờ** (Scheduler) | Lưu cấu hình lên hệ thống, tự động tạo khi đến giờ |

#### Cấu hình thời gian

- **Hẹn giờ:** Số giờ trước Flash Sale để hệ thống tự động tạo (phương thức Scheduler)
- **Delay giữa mỗi lần tạo:** Số giây chờ giữa mỗi Flash Sale để tránh bị giới hạn API (phương thức Default)

---

### Bước 2: Chọn khung giờ

Hiển thị danh sách các khung giờ Flash Sale khả dụng từ Shopee, nhóm theo ngày.

- Tích chọn từng khung giờ hoặc chọn tất cả khung giờ trong ngày
- Hiển thị số lượng đã chọn / tổng khung giờ
- Các khung giờ đã có Flash Sale sẽ được đánh dấu
- Các khung giờ đã có Scheduler sẽ hiển thị thông tin kèm theo

---

### Bước 3: Chọn sản phẩm (chỉ khi tạo mới)

Tìm kiếm và thêm sản phẩm vào Flash Sale.

#### Tìm kiếm sản phẩm

| Loại tìm kiếm | Mô tả |
|----------------|-------|
| **Tên** | Tìm theo tên sản phẩm |
| **ID** | Tìm theo ID sản phẩm |
| **Phân loại** (Variation) | Tìm theo tên phân loại |
| **SKU** | Tìm theo mã SKU |
| **MSKU** | Tìm theo mã MSKU |

#### Bảng sản phẩm

| Cột | Mô tả |
|-----|-------|
| ID | Mã sản phẩm |
| SKU | Mã SKU |
| Ngày tạo | Thời điểm đăng sản phẩm |
| Tên | Tên sản phẩm kèm ảnh đại diện |
| Phân loại | Số lượng model/variant |
| Đã bán | Số lượng đã bán |
| Tồn kho | Số lượng tồn kho hiện tại |
| Giá gốc | Giá bán gốc |
| Giá KM | Giá khuyến mãi đang áp dụng |
| Thao tác | Nút thêm vào Flash Sale |

#### Trạng thái sản phẩm

Sản phẩm sẽ tự động bị đánh dấu **không hoạt động** nếu:
- Đang bị khóa (status = 4)
- Đang ẩn (status = 8)
- Là sản phẩm đặt trước (pre-order)
- Hết hàng (tồn kho = 0)

**Giới hạn:** Tối đa **10 sản phẩm** cho mỗi Flash Sale.

---

### Bước 4: Thiết lập giá khuyến mãi

Cấu hình giá, tồn kho và giới hạn mua cho từng sản phẩm/phân loại trong Flash Sale.

#### Chỉnh sửa hàng loạt

Áp dụng thay đổi cho tất cả sản phẩm cùng lúc:

| Trường | Mô tả |
|--------|-------|
| **% Giảm giá** | Phần trăm giảm so với giá gốc |
| **Giới hạn tồn kho** | Số lượng tối đa bán trong Flash Sale |
| **Giới hạn mua** | Số lượng tối đa mỗi khách được mua |
| **Trạng thái** | Bật/tắt sản phẩm trong Flash Sale |

#### Giảm giá tối thiểu

Thiết lập phần trăm giảm giá tối thiểu (mặc định: **5%**). Sản phẩm có mức giảm thấp hơn sẽ bị cảnh báo.

#### Bảng thiết lập giá

| Cột | Mô tả |
|-----|-------|
| Tên | Tên sản phẩm |
| Phân loại | Tên model/variant |
| Tồn kho | Tồn kho hiện tại |
| Giá gốc | Giá gốc (theo loại đã chọn ở Bước 1) |
| Giá giảm | Giá sau giảm giá thường |
| % Giảm | Phần trăm giảm giá (tự động tính) |
| Giá Flash Sale | Giá bán trong Flash Sale (có thể chỉnh sửa) |
| Giới hạn tồn kho | Số lượng bán trong Flash Sale (có thể chỉnh sửa) |
| Giới hạn mua | Số lượng mỗi khách được mua (có thể chỉnh sửa) |
| Trạng thái | Bật/tắt sản phẩm |

#### Quy tắc tính toán

- **Tồn kho Flash Sale** = `(Tồn kho hiện tại / Số khung giờ) - 1`
- **Giá tối thiểu** = `Giá gốc × 5%`
- **Giá tối đa** = `Giá gốc × 100%`
- **Giảm tối đa** = 90% (giá Flash Sale = 10% giá gốc)
- **Giảm tối thiểu** = 20% (giá Flash Sale = 80% giá gốc)

#### Cảnh báo phần trăm giảm giá

| Mức | Hiển thị |
|-----|----------|
| 95% - 100% | Cảnh báo (vàng) — giảm quá sâu |
| > 100% hoặc < 0% | Lỗi (đỏ) — giá không hợp lệ |

#### Highlight hàng

- **Đỏ:** Sản phẩm không đủ tồn kho

---

### Bước 5: Tạo Flash Sale

Nhấn **"Tạo"** để bắt đầu quá trình tạo Flash Sale.

#### Quy trình thực hiện

Hệ thống xử lý tuần tự từng khung giờ đã chọn:

1. **Phương thức Mặc định:**
   - Tạo Flash Sale trên Shopee từ khung giờ
   - Thêm danh sách sản phẩm vào Flash Sale (`set`)
   - Cập nhật giá và tồn kho cho từng sản phẩm (`index`)
   - Chờ delay trước khi tạo khung giờ tiếp theo

2. **Phương thức Hẹn giờ:**
   - Lưu cấu hình lên AutoShopee server
   - Hệ thống tự động tạo Flash Sale khi đến thời điểm được cấu hình

#### Theo dõi tiến trình

- Thanh tiến độ hiển thị: `đang tạo / tổng số`
- Log realtime hiển thị kết quả từng bước
- Sau khi hoàn tất: nút **"Xem log lỗi"** và **"Xuất Excel"**

#### Xuất Excel kết quả

File Excel chứa thông tin chi tiết:

| Cột | Mô tả |
|-----|-------|
| ID | Mã sản phẩm |
| Trạng thái | Thành công / Thất bại |
| Thời gian | Khung giờ Flash Sale |
| Tên sản phẩm | Tên sản phẩm |
| Phân loại | Tên model |
| Tồn kho | Giới hạn tồn kho |
| % Giảm | Phần trăm thay đổi giá |
| Giá gốc | Giá gốc |
| Giá Flash Sale | Giá trong Flash Sale |
| Giới hạn mua | Giới hạn mỗi khách |
| URL | Link sản phẩm |
| Log | Chi tiết kết quả / lỗi |

#### Mã lỗi thường gặp

| Mã lỗi | Ý nghĩa |
|---------|---------|
| `IN_PLATFORM_FLASH_SALE` | Sản phẩm đang tham gia Flash Sale khác của Shopee |
| `355310007` | Sản phẩm đã tồn tại trong chương trình Flash Sale này |

---

## Chiến dịch (Campaign)

**Đường dẫn:** `Shopee > Seller > Auto > Flash Sale > Campaign`

**Yêu cầu:** Tài khoản trả phí (Premium).

Chiến dịch cho phép tự động lặp lại việc tạo Flash Sale dựa trên một Flash Sale mẫu đã lưu. Hệ thống sẽ tự động tạo Scheduler entries cho các khung giờ phù hợp.

### Tạo chiến dịch

| Trường | Mô tả |
|--------|-------|
| **Tên chiến dịch** | Tên gợi nhớ cho chiến dịch |
| **Flash Sale mẫu** | Chọn từ danh sách Flash Sale đã lưu |
| **Khung giờ bắt đầu** | Giờ bắt đầu trong ngày (0-24) |
| **Khung giờ kết thúc** | Giờ kết thúc trong ngày (0-24) |
| **Số giờ trước Flash Sale** | Thời gian chuẩn bị trước khi Flash Sale diễn ra (tối thiểu 6 giờ) |
| **Số ngày hẹn trước** | Số ngày trước để tạo Scheduler (tối thiểu 2 ngày) |

### Quản lý chiến dịch

Danh sách chiến dịch hiển thị:
- Checkbox bật/tắt chiến dịch
- Link đến Flash Sale mẫu
- Khoảng khung giờ (ví dụ: 0h - 24h)
- Số lượng sản phẩm
- Thông tin cấu hình thời gian
- Nút **"Xóa"** và **"Chạy"**

### Tự động chạy Campaign

Bật công tắc **Auto** để hệ thống tự động chạy tất cả chiến dịch đang bật. Khi chạy, hệ thống sẽ:
1. Lấy danh sách khung giờ khả dụng trong phạm vi đã cấu hình
2. Tạo Scheduler entry cho từng khung giờ
3. Scheduler sẽ tự động tạo Flash Sale thực tế khi đến thời điểm

### Cảnh báo

- **Trùng khung giờ:** Nếu các chiến dịch có khung giờ chồng chéo, hệ thống sẽ hiển thị cảnh báo

---

## Báo cáo thống kê (Report)

**Đường dẫn:** `Shopee > Seller > Auto > Flash Sale > Analytics`

Hiển thị dữ liệu thống kê hiệu quả Flash Sale với 2 biểu đồ:

### Biểu đồ đơn hàng theo ngày (Line Chart)

- **Trục X:** Ngày (DD/MM)
- **Trục Y:** Số lượng đơn hàng
- Dữ liệu tổng hợp từ tối đa 200 Flash Sale gần nhất

### Biểu đồ đơn hàng theo khung giờ (Pie Chart)

- Hiển thị tỷ lệ đơn hàng theo từng khung giờ Flash Sale (HH:mm)
- Sắp xếp theo số đơn hàng giảm dần

### Dữ liệu thu thập

| Chỉ số | Mô tả |
|--------|-------|
| Tổng doanh thu (saleTotal) | Tổng giá trị bán hàng |
| Số đơn hàng (orderCount) | Tổng số đơn hàng |
| Số người mua (buyerCount) | Số khách hàng unique |
| Lượt click (clickCount) | Số lượt nhấp vào Flash Sale |
| Lượt hiển thị (impressionCount) | Số lượt hiển thị Flash Sale |

---

## Cấu trúc dữ liệu

### Flash Sale (Shopee)

```
- flashsale_id: ID Flash Sale
- timeslot_id: ID khung giờ
- start_time: Thời gian bắt đầu (Unix timestamp)
- end_time: Thời gian kết thúc (Unix timestamp)
- status: Trạng thái (0: upcoming, 1: ongoing, 2: expired, 3: saved)
- item_count: Số sản phẩm
```

### Flash Sale Product

```
- itemid: ID sản phẩm
- modelid: ID phân loại (model)
- name: Tên sản phẩm
- model_name: Tên phân loại
- stock: Tồn kho hiện tại
- priceOriginal: Giá gốc
- priceDiscount: Giá đã giảm
- pricePromotion: Giá Flash Sale
- priceBase: Giá được chọn làm cơ sở tính
- stockLimit: Giới hạn tồn kho Flash Sale
- purchaseLimit: Giới hạn mua mỗi khách
- status: Bật/tắt trong Flash Sale
```

### Scheduler Entry

```
- flashsaleId: ID Flash Sale gốc (mẫu)
- shopId: ID shop
- timeSlotId: ID khung giờ
- timeBefore: Số giờ trước để tạo
- status: Trạng thái (pending / created / expired)
- listSet: Danh sách sản phẩm
- listIndex: Cấu hình giá/tồn kho
```

### Campaign

```
- campaignName: Tên chiến dịch
- flashsaleIdClone: ID Flash Sale mẫu
- timeSlotStart: Giờ bắt đầu (0-24)
- timeSlotEnd: Giờ kết thúc (0-24)
- timeFlashsaleBefore: Số giờ chuẩn bị trước
- daySchedulerBefore: Số ngày hẹn trước
- active: Bật/tắt chiến dịch
- listSet: Danh sách sản phẩm từ mẫu
- listIndex: Cấu hình giá/tồn kho từ mẫu
```

---

## Lưu ý quan trọng

1. **Giới hạn sản phẩm:** Tối đa **10 sản phẩm** cho mỗi Flash Sale.
2. **Tồn kho chia đều:** Khi tạo nhiều khung giờ, tồn kho được chia đều cho số khung giờ và trừ đi 1 đơn vị đệm.
3. **Delay giữa các lần tạo:** Nên cấu hình delay (3-5 giây) khi tạo nhiều Flash Sale cùng lúc để tránh bị giới hạn API Shopee.
4. **Hẹn giờ tối thiểu:** Scheduler cần ít nhất 6 giờ trước Flash Sale để đảm bảo kịp tạo.
5. **Campaign tối thiểu:** Campaign cần ít nhất 2 ngày trước để tạo Scheduler entries.
6. **Dữ liệu đồng bộ:** Flash Sale đã lưu (Save) được lưu trên PouchDB local và đồng bộ với CouchDB remote.
7. **Sản phẩm trùng lặp:** Nếu sản phẩm đang tham gia Flash Sale khác của Shopee, sẽ không thể thêm vào và hiển thị lỗi.
