# 3. Core Logic: Rules & Scoring Algorithm

Thuật toán phối đồ không chọn ngẫu nhiên mà tính điểm (Max 100 điểm) dựa trên 4 tiêu chí cốt lõi, kết hợp với bộ lọc cứng (Hard Filters).

## 1. Hard Filters (Bộ lọc cứng)
Sản phẩm Target sẽ bị loại bỏ ngay lập tức nếu:
- **Khác tệp khách hàng:** Mix đồ Người lớn với Trẻ em (Dựa vào `age_group`, `gender`, và cả từ khóa trong `name`).
- **Lệch giới tính:** Nam không mặc đồ Nữ (Trừ hàng Unisex).
- **Blacklist:** Thuộc các dòng sản phẩm không dùng để phối đồ (nội y, đồ bơi tùy cấu hình).

## 2. Tiêu chí Chấm điểm (Scoring - Max 100đ)

### a. Color Synergy (Tối đa 30đ)
Dựa trên Color Groups (Neutral, Light, Dark) và Demographic.
- **Công thức An toàn:** Neutral + Neutral.
- **Công thức Điểm nhấn:** Neutral + Light / Dark.
- Tự động cộng/trừ điểm (Boost/Penalty) dựa trên đặc điểm của khách hàng (VD: Bé gái ưu tiên nhóm màu Light Pastel).

### b. Occasion Overlap (Tối đa 20đ)
So sánh `occasion_tags` giữa Anchor và Target:
- Trùng khớp cả hai (Both match): 20đ
- Có ít nhất một từ khóa khớp (Either match): 12đ
- Mặc định: 6đ

### c. Role Priority Bonus (Tối đa 15đ)
Tạo độ ưu tiên khi chọn đồ. Ví dụ: Nếu Anchor là Top (Áo), AI sẽ ưu tiên lấy Bottom (Quần/Chân váy) cao hơn là lấy Phụ kiện (Accessory) để tạo thành một bộ cơ bản trước.

### d. Material & Season (Tối đa 10đ)
Mùa (`season_tags`) của Target phải tương thích với Mùa của Anchor. 
- Vải mùa hè (cotton, linen) tương hợp cực tốt với nhau.
- Các chất liệu "chống chọi thời tiết" (phao, nỉ) được khớp vào mùa Đông. Đạt max điểm nếu tương thích.

## 3. Hậu xử lý (Deduplication)
Engine không lấy 3 chiếc "Quần Khaki Màu Đen". Lọc Deduplicate đảm bảo mỗi Role (Top/Bottom/Outerwear/Accessory) sẽ lấy các sản phẩm đa dạng về **Màu sắc** và **Product Line**.