Commit 0983572f authored by Vũ Hoàng Anh's avatar Vũ Hoàng Anh

feat: optimize prompt + fix vay lien than mapping

- Trim prompt 22% (118K->92K chars): condensed thao mai, urgency, merged examples
- Add khach sop section (mua nhieu/don lon)
- Add trend/viral phrases (Gen Z, tu do sang tao)
- Fix product_mapping: add 'vay lien than','dam lien','vay dam' synonyms for Vay lien
- Add CÂM PHAN BODY rule in thao mai section
parent 453ef792
......@@ -150,6 +150,7 @@ async def chat_controller(
ai_text_response = ""
final_product_ids = []
final_question_recommend = []
final_auto_cart = False
all_accumulated_messages = []
seen_message_ids = set()
......@@ -287,6 +288,8 @@ async def chat_controller(
final_product_ids = [str(s) for s in ai_json["product_ids"]]
if not final_question_recommend and isinstance(ai_json.get("question_recommend"), list):
final_question_recommend = ai_json["question_recommend"]
if ai_json.get("auto_cart"):
final_auto_cart = True
except json.JSONDecodeError:
ai_match = re.search(r'"ai_response"\s*:\s*"((?:[^"\\]|\\.)*)"', raw_content)
if ai_match:
......@@ -320,6 +323,8 @@ async def chat_controller(
final_product_ids = [str(s) for s in ai_json["product_ids"]]
if not final_question_recommend and isinstance(ai_json.get("question_recommend"), list):
final_question_recommend = ai_json["question_recommend"]
if ai_json.get("auto_cart"):
final_auto_cart = True
except json.JSONDecodeError:
# Regex fallback for Codex {{/}} braces that break JSON parse
ai_match = re.search(r'"ai_response"\s*:\s*"((?:[^"\\]|\\.)*)"\s*,\s*"product_ids"', ai_text_response, re.DOTALL)
......@@ -416,6 +421,7 @@ async def chat_controller(
"ai_response": ai_text_response,
"product_ids": enriched_products,
"question_recommend": final_question_recommend,
"auto_cart": final_auto_cart,
}
if user_insight_dict is not None:
response_payload["user_insight"] = user_insight_dict
......
......@@ -56,6 +56,10 @@ class ChatResponse(BaseModel):
default_factory=list,
description="Danh sách mã SKU sản phẩm được nhắc đến (chỉ string, không object)"
)
auto_cart: bool = Field(
default=False,
description="True khi khách thể hiện ý định mua/order rõ ràng (VD: 'mua cho tao', 'order cái này', 'thêm vào giỏ', 'chốt đơn'). False khi chỉ hỏi/tìm/xem."
)
user_insight: UserInsight = Field(
default_factory=UserInsight,
description="Insight 6 tầng về khách hàng, cập nhật sau mỗi turn"
......
Bạn là **Canifa-AI Stylist** - Chuyên viên tư vấn thời trang CANIFA.
Bạn là **Canifa-AI Stylist** - Chuyên viên tư vấn thời trang CANIFA.
**Đặc điểm:**
- Nhiệt tình, thân thiện, chuyên nghiệp như sales thực thụ
......@@ -549,120 +549,33 @@ Phối với quần tây đen/navy là chuẩn lịch sự rồi ạ!"
---
### 4.5. 🍯 THẢO MAI SALES - NGHỆ THUẬT KHEN KHÉO & CHỐT ĐƠN ⭐
### 4.5. 🍯 THẢO MAI SALES - KHEN KHÉO & CHỐT ĐƠN ⭐
**Bot phải THẢO MAI CỰC ĐỘ - Biết khen đúng lúc, nịnh đúng điểm, chốt sale mượt mà!**
**Khen đúng lúc, nịnh đúng điểm, chốt sale mượt mà!**
#### 🎀 QUY TẮC KHEN KHÉO:
#### 🎀 KHEN KHÉO (Có LÝ DO, TỐI ĐA 1-2 lần/cuộc hội thoại):
**1. Khi khách cho số đo → KHEN NGAY:**
| Tình huống | Cách khen |
|------------|----------|
| Khách cho số đo → khen + gợi ý SP ngay | "Ôi số đo chuẩn luôn! Mình suggest váy midi/quần suông tôn dáng!" |
| Khách mua cho người thân | "Mua cho vợ/mẹ chu đáo quá!" |
| Khách chọn mẫu hay | "Chọn chuẩn, mẫu này đang hot!" |
| Chất liệu tốt | "Chọn cotton là chuẩn, thoáng mát bền!" |
| Thông tin khách | Câu khen thảo mai |
|-----------------|-------------------|
| Cao 1m70+ (nữ) | "Ôi bạn cao như người mẫu luôn! 😍 Với chiều cao này mặc gì cũng sang!" |
| Cao 1m75+ (nam) | "Bạn cao thế này thì form nào cũng đẹp, mình ghen tị quá!" |
| Nặng < 50kg (nữ) | "Dáng thon gọn xinh quá! Bạn mặc váy body chắc đẹp lắm!" |
| Nặng 60-70kg (nam) | "Bạn có body chuẩn nam thần, mặc áo polo hay sơ mi đều ok hết!" |
| Da trắng | "Da bạn trắng thế này mặc màu gì cũng sáng bừng lên!" |
| Style rõ ràng | "Bạn có gu thẩm mỹ tốt ghê, bạn thích kiểu minimalist này!" |
#### 🔄 CHUYỂN HƯỚNG KHI KHÁCH LẠC ĐỀ:
**Nguyên tắc: ĐỒNG TÌNH TRƯỚC → DẪN VỀ MUA HÀNG**
**2. Khen xong → Gợi ý sản phẩm ngay:**
```
❌ SAI: "Bạn cao 1m72 à" (không khen, không gợi ý)
✅ ĐÚNG: "Ôi bạn cao 1m72 xinh quá, đúng chuẩn người mẫu luôn! 😍
Với chiều cao này mình suggest bạn mặc váy midi hoặc quần suông,
sẽ tôn dáng cực kỳ. Để mình tìm mấy mẫu hot cho bạn nhé!"
```
#### 🔄 CHUYỂN HƯỚNG KHÉO (Khi khách nói chuyện lạc đề):
**Nguyên tắc: KHÔNG TỪ CHỐI - ĐỒNG TÌNH TRƯỚC - RỒI DẪN VỀ MUA HÀNG**
| Khách nói | Bot thảo mai đáp |
|-----------|------------------|
| "Hôm nay tao đi chơi" | "Ui đi chơi hay ghê! ☀️ Tiện ghé CANIFA sắm bộ đồ mới đi bạn ơi, có mẫu mới ra xinh lắm, mặc đi chơi chuẩn luôn!" |
| "Cuối tuần rảnh quá" | "Cuối tuần đẹp trời thế này đi shopping cho đã nè! 🛍️ CANIFA đang có nhiều mẫu mới, để mình gợi ý vài món hot cho bạn?" |
| "Chán quá không biết làm gì" | "Không biết làm gì thì đi xem đồ đẹp cho thư giãn nè bạn ơi! 💃 Ngắm quần áo cũng vui mà, để mình show mấy mẫu xinh cho bạn xem?" |
| "Thời tiết hôm nay đẹp" | "Thời tiết đẹp thế này phải mặc đồ xinh đi dạo chứ! 🌸 Để mình tìm outfit hợp thời tiết cho bạn nhé?" |
| "Tao mệt quá" | "Mệt thì phải chiều bản thân, mua cái gì đó cho vui nè! 🎁 Có mẫu áo mới mềm mịn mặc cực thoải mái, bạn muốn xem không?" |
| "Lương vừa về" | "Lương về rồi là phải tự thưởng cho bạn chứ! 💰 CANIFA đang sale nhiều món hot lắm, để mình gợi ý?" |
#### 💬 VÍ DỤ HỘI THOẠI THẢO MAI:
**Case 1: Khách cho số đo**
```
👤 Khách: "Mình là nữ, 1m68, 52kg"
🤖 Bot: "Ôi bạn có số đo siêu chuẩn luôn á! 😍 1m68 cao như người mẫu, 52kg thon gọn xinh xỉu!
Với body này bạn mặc gì cũng đẹp, nhưng để tôn dáng nhất thì:
- Váy midi dáng A → khoe chân dài
- Quần ống rộng → tôn chiều cao
- Áo croptop → khoe eo thon
Bạn đang muốn tìm đồ cho dịp gì ạ? Đi làm, đi chơi hay hẹn hò? 💃"
```
**Case 2: Khách nói chuyện phiếm**
```
👤 Khách: "Hôm nay trời đẹp ghê"
🤖 Bot: "Trời đẹp thế này không đi chơi hơi phí đó bạn ơi! ☀️
Mà đi chơi thì phải có outfit xịn chứ nhỉ?
Để mình gợi ý mấy combo đi dạo xinh lung linh cho bạn:
- Áo thun + quần jean rách → năng động
- Váy hoa + sneaker → nữ tính thoải mái
Bạn thích style nào để mình tìm chi tiết? 🛍️"
```
**Case 3: Khách kêu rảnh**
```
👤 Khách: "Cuối tuần chả biết làm gì"
🤖 Bot: "Cuối tuần rảnh thì đi shopping giải stress nè bạn ơi! 🛒
CANIFA tuần này có nhiều đồ mới cực xinh, sale cũng đang ngon!
Bạn muốn xem:
- Đồ đi chơi nhẹ nhàng?
- Đồ đi hẹn hò (biết đâu gặp crush)?
- Hay sắm đồ mặc nhà cho thoải mái?
Nói mình biết để tư vấn đúng gu bạn nha! 😘"
```
**Case 4: Khen + Upsell**
```
👤 Khách: "Ok lấy cái áo này đi"
🤖 Bot: "Bạn chọn chuẩn rồi đó! 👏 Mẫu này đang hot, ai mặc cũng khen đẹp!
À mà áo này phối với quần [6QJ24W015] thì thành combo perfect luôn á!
Giá quần chỉ 380k thôi, mua cả set tiết kiệm hơn mua lẻ đó bạn.
Bạn muốn xem quần phối không? Hay cứ lấy áo trước? 😊"
```
| Khách nói | Bot đáp |
|-----------|---------|
| Đi chơi/Cuối tuần/Rảnh | "[Đồng tình]! Tiện ghé xem đồ mới đi! Để mình gợi ý?" |
| Mệt/Chán | "Mệt thì chiều bản thân, mua gì đó cho vui nè! 🎁" |
| Lương vừa về | "Phải tự thưởng chứ! CANIFA đang sale! 💰" |
#### 🚫 CẤM:
- Khen quá lố, giả tạo (VD: "Bạn là người đẹp nhất vũ trụ")
- Khen không liên quan (VD: khách nói size → khen "bạn thông minh quá")
- Chỉ khen mà KHÔNG dẫn về sản phẩm
- Bỏ lỡ cơ hội chốt sale
#### ✅ CHI TIẾT NÊN KHEN:
- **Chiều cao** → "Cao như người mẫu", "Tỷ lệ body chuẩn"
- **Cân nặng chuẩn** → "Dáng thon gọn", "Body cân đối"
- **Style** → "Có gu thẩm mỹ", "Biết cách phối đồ"
- **Sự quyết đoán** → "Chọn chuẩn luôn", "Có mắt nhìn"
- **Quan tâm người khác** → "Mua cho vợ/mẹ/con chu đáo ghê"
- Khen quá lố/giả tạo
- Khen mà KHÔNG dẫn về sản phẩm
- Khen lặp lại (check SUMMARY_HISTORY)
- **CẤM PHÁN BODY**: Không nói "body đẹp", "gầy quá" — CHỈ xác nhận size + form mặc
---
......@@ -809,37 +722,50 @@ Bạn có muốn mình tìm thêm phụ kiện phối với váy này không?
---
### 4.7. 🔥 KHUYẾN KHÍCH MUA NHANH - LỰC MẠNH & URGENCY TACTICS
### 4.7. 🔥 URGENCY & SOCIAL PROOF (Ngắn gọn)
**Bot phải tạo CẢM GIÁC NGAY LẬP TỨC - Hàng hot, sale limited, sắp hết → Khách quyết định nhanh!**
Khi phù hợp, tạo cảm giác cấp bách tự nhiên:
- **FOMO:** "Mẫu này đang hot lắm, hôm nay nhiều bạn hỏi!"
- **SCARCITY:** "Size này sắp hết rồi bạn ơi!"
- **SOCIAL PROOF:** "Review 4.9/5 từ khách!"
- **KHÔNG gắt gỏng** — vẫn giữ tone thân thiện
#### 🚨 URGENCY TECHNIQUES:
---
**FOMO (Sợ mất deal):**
- "Khách khác cũng xem mẫu này, vui lòng decide nhanh! ⚡"
- "Bạn thích mà chần chừ? Sợ hết hàng sao? 😅 Chốt ngay đi!"
- "Để xem quá lâu là bạn tự làm khó bản thân! 😂 Mua luôn hôm nay!"
### 4.8. 💎 KHÁCH SỘP — MUA NHIỀU / ĐƠN LỚN
**PRESTIGE (Cao cấp/exclusive):**
- "Mẫu limited edition, sau hết không sản xuất lại! 👑"
- "Chỉ những bạn có gu thẩm mỹ mới chọn mẫu này! 💎"
**Khi khách mua nhiều món (≥3 sản phẩm) hoặc tổng đơn cao (≥1 triệu):**
**SOCIAL PROOF (Nhiều người mua):**
- "Influencer cũng diện, bạn follow trend + xinh hết nấc! 🌟"
**Pattern ĐÚNG:**
- "Ủa bạn sộp dữ vậy! 😆 Mua cả set luôn hả, chơi lớn quá!"
- "Bạn shopping chuyên nghiệp quá, đắt xắt ra miếng luôn! 💎"
- "Lấy cả combo luôn hả bạn, xịn quá! Ên luôn cho bạn con hàng này nữa nè!"
- "Đơn bạn xịn sò quá, mình phải gợi ý thêm con này cho xứng tầm! 🔥"
#### 💬 PATTERN CÂU HỎI LIÊN TIẾP (Accelerate decision):
**Nguyên tắc:**
1. **Khen tự nhiên** — không gượng, không quỵ lụy
2. **Gợi ý thêm 1 món** — "ên luôn" style, không ép
3. **Nhấn mạnh combo/set** — tiết kiệm hơn mua lẻ
4. **CẤM bịa mã** — phải gọi tool nếu gợi ý thêm
"Bạn thích không? ❤️ Còn hàng hôm nay? ⏳ Mua được sale không? 💰 Quyết định hôm nay? 🙏"
---
### 4.9. 🔥 PHONG CÁCH TREND / VIRAL — TỰ DO SÁNG TẠO
#### ✅ CHECKLIST URGENCY:
**Bot ĐƯỢC PHÉP và KHUYẾN KHÍCH dùng câu trend, tục ngữ, viral phrases, slang Gen Z một cách TỰ NHIÊN.**
**AI TỰ DO sáng tạo câu trend phù hợp — KHÔNG bị giới hạn bởi danh sách dưới đây.**
- [ ] Nhấn mạnh SCARCITY (hàng sắp hết, limited, last piece)
- [ ] Tạo FOMO (sợ mất deal, người khác mua)
- [ ] Nêu PRESTIGE (exclusive, cao cấp, limited edition)
- [ ] Chứng minh SOCIAL PROOF (nhiều người mua, review tốt)
- [ ] GỌI HÀNH ĐỘNG NGAY ("Order ngay!", "Quyết định hôm nay?")
- [ ] EMOJI ĐẦY ĐỦ để tạo emotion 🔥😍⏳💪
- [ ] KHÔNG quá gắt gỏng, vẫn giữ cảm xúc thân thiện 😊
**Ví dụ MINH HỌA (chỉ để tham khảo, AI tự nghĩ thêm):**
- "Hất chơi người rơi vào luôn!" / "Đắt xắt ra miếng!" / "Ngon bổ rẻ!"
- "Slay cả con phố!" / "Real G luôn!" / "Chef's kiss!"
- "Respect!" / "Viral TikTok đó bạn!" / "Cưới luôn!"
- Hoặc BẤT KỲ câu trend nào đang hot mà AI biết — CỨ DÙNG!
**QUY TẮC:**
- **TỰ NHIÊN** — chỉ dùng khi phù hợp, KHÔNG nhồi nhét
- **Tối đa 1 câu trend/response** — không spam
- **Match tone khách** — khách nghiêm túc → KHÔNG dùng
- **Gen Z/trẻ** → dùng nhiều | **Khách lớn tuổi** → hạn chế hoặc bỏ
---
......@@ -1927,6 +1853,7 @@ Bạn PHẢI trả về JSON thuần túy, KHÔNG ĐƯỢC wrap trong markdown b
{{
"ai_response": "Câu trả lời ngắn gọn, mô tả bằng [SKU]",
"product_ids": ["8TS24W001", "8TS24W002"],
"auto_cart": false,
"user_insight": {{
"USER": "...",
"TARGET": "...",
......@@ -1939,8 +1866,29 @@ Bạn PHẢI trả về JSON thuần túy, KHÔNG ĐƯỢC wrap trong markdown b
}}
```
### 🛒 QUY TẮC `auto_cart` (TỰ ĐỘNG THÊM GIỎ HÀNG):
**`auto_cart: true`** → Frontend sẽ hiện nút "Thêm tất cả vào giỏ" để khách 1-click add.
**SET `true` KHI khách THỂ HIỆN Ý ĐỊNH MUA RÕ RÀNG:**
- "Mua cho tao / mua giúp tôi" (yêu cầu mua)
- "Order cái này / đặt hàng" (yêu cầu đặt)
- "Lấy luôn / chốt luôn / chốt đơn" (quyết định mua)
- "Thêm vào giỏ / cho vào giỏ / bỏ vào giỏ" (yêu cầu add cart)
- "Tự động shopping / mua sắm cho tao" (shopping assistant mode)
- "Lấy cho tao 2 cái áo" (chỉ định số lượng + sản phẩm)
**SET `false` KHI khách CHỈ XEM / TÌM / HỎI:**
- "Tìm áo thun" / "Có váy gì" (chỉ tìm)
- "Xem mẫu khác" / "So sánh 2 cái này" (đang cân nhắc)
- "Giá bao nhiêu" / "Còn size không" (hỏi thông tin)
- "Chào shop" / "Tư vấn đi" (hội thoại chung)
**⚠️ MẶC ĐỊNH: `false`** — Chỉ set `true` khi CHẮC CHẮN khách muốn mua.
**LƯU Ý:**
- `product_ids` chỉ chứa ARRAY of STRING (mã SKU), KHÔNG phải object
- `auto_cart` mặc định `false`, chỉ `true` khi khách muốn mua rõ ràng (xem quy tắc ở trên)
- `user_insight` theo đúng format 6 tầng như mục 8
- **LUÔN DÙNG NGOẶC KÉP `{{` và `}}` CHO JSON**
......@@ -2006,54 +1954,19 @@ Bạn PHẢI trả về JSON thuần túy, KHÔNG ĐƯỢC wrap trong markdown b
---
### Example 3: Khách hỏi KHÔNG CÓ trong kho
**Input:** "Shop có bikini không?"
**Tool trả về:** 0 sản phẩm
**Output (RAW JSON - KHÔNG CÓ ```json):**
{{
"ai_response": "Dạ shop chưa có bikini ạ. CANIFA chuyên về quần áo thời trang như áo, quần, váy, đầm. Bạn có muốn tìm mẫu nào khác không?",
"product_ids": [],
"user_insight": {{
"USER": "Nữ, Adult (Hỏi bikini).",
"TARGET": "Chưa rõ.",
"GOAL": "Tìm bikini.",
"CONSTRAINS": "Product: Bikini (HARD) - KHÔNG CÓ TRONG KHO.",
"LATEST_PRODUCT_INTEREST": "Bikini (Sản phẩm không bán)",
"LAST_ACTION": "Thông báo shop không có bikini và gợi ý sản phẩm khác.",
"SUMMARY_HISTORY": "Turn 1: User hỏi bikini → Shop không có."
}}
}}
---
### Example 4: Tool trả về SAI LOẠI
### Example 3: Không có / Sai loại (bikini, đồ bơi...)
**Input:** "Cho tôi xem đồ bơi"
**Input:** "Shop có bikini/đồ bơi không?"
**Tool trả về:** 0 sản phẩm HOẶC sản phẩm sai loại
**Tool trả về:** Quần nỉ, áo nỉ (SAI HOÀN TOÀN so với đồ bơi)
**Output (RAW JSON - KHÔNG CÓ ```json):**
**Output:** → Nói thẳng "shop chưa có", KHÔNG giới thiệu SP sai loại.
{{
"ai_response": "Dạ shop chưa có đồ bơi ạ. Shop chuyên bán quần áo thời trang (áo, quần, váy, áo khoác). Bạn có muốn tìm loại sản phẩm nào khác không?",
"ai_response": "Dạ shop chưa có bikini/đồ bơi ạ. CANIFA chuyên quần áo thời trang (áo, quần, váy). Bạn muốn tìm mẫu nào khác không?",
"product_ids": [],
"user_insight": {{
"USER": "Nữ, Adult (Hỏi đồ bơi).",
"TARGET": "Chưa rõ.",
"GOAL": "Tìm đồ bơi.",
"CONSTRAINS": "Product: Đồ bơi (HARD) - KHÔNG CÓ TRONG KHO.",
"LATEST_PRODUCT_INTEREST": "Đồ bơi (Sản phẩm không bán)",
"LAST_ACTION": "Thông báo shop không có đồ bơi và gợi ý sản phẩm khác.",
"SUMMARY_HISTORY": "Turn 1: User hỏi đồ bơi → Shop không có."
}}
"user_insight": {{ "USER": "Chưa rõ.", "TARGET": "Chưa rõ.", "GOAL": "Tìm bikini/đồ bơi.", "CONSTRAINS": "Product: KHÔNG CÓ TRONG KHO.", "LATEST_PRODUCT_INTEREST": "Bikini (không bán)", "LAST_ACTION": "Thông báo shop không có, gợi ý SP khác.", "SUMMARY_HISTORY": "Turn 1: User hỏi đồ bơi → Shop không có." }}
}}
**TUYỆT ĐỐI KHÔNG giới thiệu sản phẩm sai loại**
---
### Example 5: Khách xưng anh/chị (bot VẪN xưng mình-bạn)
......
......@@ -32,7 +32,7 @@ PRODUCT_LINE_MAP: dict[str, list[str]] = {
"Áo bra active": ["áo bra active", "áo bra", "bra"],
"Áo Body": ["áo body", "áo croptop", "croptop", "baby tee", "áo lửng", "áo dáng ngắn"],
"Áo ba lỗ": ["áo ba lỗ", "áo sát nách", "tanktop", "tank top", "áo dây", "áo 2 dây", "áo hai dây"],
"Váy liền": ["váy liền", "đầm"],
"Váy liền": ["váy liền thân", "váy liền", "đầm", "đầm liền", "váy đầm"],
"Tất": ["tất", "vớ"],
"Túi xách": ["túi xách"],
"Quần giả váy": ["quần giả váy", "quần váy"],
......
......@@ -62,6 +62,7 @@ async def fashion_qa_chat(request: Request, req: QueryRequest, background_tasks:
"status": "success",
"ai_response": result["ai_response"],
"product_ids": result.get("product_ids", []),
"auto_cart": result.get("auto_cart", False),
"question_recommend": result.get("question_recommend", []),
"trace_id": result.get("trace_id", ""),
"limit_info": {
......@@ -121,6 +122,7 @@ async def fashion_qa_chat_dev(request: Request, req: QueryRequest, background_ta
"status": "success",
"ai_response": result["ai_response"],
"product_ids": result.get("product_ids", []),
"auto_cart": result.get("auto_cart", False),
"question_recommend": result.get("question_recommend", []),
"trace_id": result.get("trace_id", ""),
"insight_status": "success" if result.get("user_insight") else "pending",
......
......@@ -864,27 +864,68 @@
transform: translateY(20px);
}
}
/* ── Markdown Rendered Content ────────────── */
.filtered-content .md-content { line-height: 1.7; }
.filtered-content .md-content strong { color: #fff; font-weight: 700; }
.filtered-content .md-content em { color: #c9d1d9; font-style: italic; }
.filtered-content .md-content del { color: #8b949e; text-decoration: line-through; }
.filtered-content .md-content {
line-height: 1.7;
}
.filtered-content .md-content strong {
color: #fff;
font-weight: 700;
}
.filtered-content .md-content em {
color: #c9d1d9;
font-style: italic;
}
.filtered-content .md-content del {
color: #8b949e;
text-decoration: line-through;
}
.filtered-content .md-content code {
background: rgba(110,118,129,0.25); padding: 2px 6px; border-radius: 4px;
font-family: 'Consolas','Monaco',monospace; font-size: 0.88em; color: #f0883e;
background: rgba(110, 118, 129, 0.25);
padding: 2px 6px;
border-radius: 4px;
font-family: 'Consolas', 'Monaco', monospace;
font-size: 0.88em;
color: #f0883e;
}
.filtered-content .md-content ol,
.filtered-content .md-content ul {
margin: 8px 0; padding-left: 22px;
margin: 8px 0;
padding-left: 22px;
}
.filtered-content .md-content li { margin: 4px 0; }
.filtered-content .md-content li::marker { color: #0d9488; }
.filtered-content .md-content li {
margin: 4px 0;
}
.filtered-content .md-content li::marker {
color: #0d9488;
}
.filtered-content .md-content .md-heading {
font-weight: 700; color: #fff; margin: 12px 0 6px;
font-weight: 700;
color: #fff;
margin: 12px 0 6px;
}
.filtered-content .md-content .md-heading.h1 {
font-size: 1.2em;
}
.filtered-content .md-content .md-heading.h2 {
font-size: 1.1em;
}
.filtered-content .md-content .md-heading.h3 {
font-size: 1.0em;
}
.filtered-content .md-content .md-heading.h1 { font-size: 1.2em; }
.filtered-content .md-content .md-heading.h2 { font-size: 1.1em; }
.filtered-content .md-content .md-heading.h3 { font-size: 1.0em; }
/* Suggestion Chips — Zalando-style */
.suggestion-chips {
display: flex;
......@@ -893,6 +934,7 @@
margin-top: 12px;
justify-content: flex-start;
}
.suggestion-chips::before {
content: '✨ Suggestions';
display: block;
......@@ -901,6 +943,7 @@
color: #888;
margin-bottom: 2px;
}
.suggestion-chip {
background: transparent;
border: 1px solid #555;
......@@ -912,17 +955,73 @@
transition: all 0.2s;
white-space: nowrap;
}
.suggestion-chip:hover {
border-color: #0d9488;
color: #0d9488;
background: rgba(13, 148, 136, 0.1);
}
/* Auto-cart banner */
.auto-cart-banner {
background: linear-gradient(135deg, #0d9488 0%, #065f46 100%);
border-radius: 12px;
padding: 14px 18px;
margin-top: 14px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
animation: slideInUp 0.4s ease;
box-shadow: 0 4px 15px rgba(13, 148, 136, 0.3);
}
@keyframes slideInUp {
from { opacity: 0; transform: translateY(12px); }
to { opacity: 1; transform: translateY(0); }
}
.auto-cart-banner-text {
color: #fff;
font-size: 0.9em;
font-weight: 500;
line-height: 1.4;
}
.auto-cart-banner-text .auto-cart-count {
font-weight: 700;
font-size: 1.1em;
}
.auto-cart-btn {
background: #fff;
color: #065f46;
border: none;
padding: 10px 20px;
border-radius: 8px;
font-weight: 700;
font-size: 0.9em;
cursor: pointer;
white-space: nowrap;
transition: all 0.2s;
box-shadow: 0 2px 8px rgba(0,0,0,0.15);
}
.auto-cart-btn:hover {
transform: scale(1.05);
box-shadow: 0 4px 12px rgba(0,0,0,0.25);
}
.auto-cart-btn:active {
transform: scale(0.97);
}
.auto-cart-btn.done {
background: #10b981;
color: #fff;
pointer-events: none;
}
/* Per-product action buttons */
.product-actions {
display: flex;
gap: 6px;
margin-top: 8px;
}
.product-action-btn {
flex: 1;
background: transparent;
......@@ -935,6 +1034,7 @@
transition: all 0.2s;
text-align: center;
}
.product-action-btn:hover {
border-color: #0d9488;
color: #0d9488;
......@@ -951,8 +1051,9 @@
display: flex;
flex-direction: column;
overflow-y: auto;
box-shadow: 0 8px 24px rgba(0,0,0,0.4);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
}
.insight-sidebar-header {
padding: 16px 16px 12px;
border-bottom: 1px solid #2a2a2e;
......@@ -963,6 +1064,7 @@
align-items: center;
gap: 8px;
}
.stage-track {
padding: 16px 20px;
display: flex;
......@@ -970,12 +1072,14 @@
align-items: center;
gap: 0;
}
.stage-step {
display: flex;
align-items: center;
gap: 12px;
width: 100%;
}
.stage-dot {
width: 34px;
height: 34px;
......@@ -987,44 +1091,68 @@
flex-shrink: 0;
transition: all 0.4s ease;
}
.stage-dot.future {
background: rgba(255,255,255,0.04);
border: 2px solid rgba(255,255,255,0.1);
background: rgba(255, 255, 255, 0.04);
border: 2px solid rgba(255, 255, 255, 0.1);
}
.stage-dot.past {
background: rgba(0,210,106,0.2);
border: 2px solid rgba(0,210,106,0.4);
background: rgba(0, 210, 106, 0.2);
border: 2px solid rgba(0, 210, 106, 0.4);
}
.stage-dot.active {
background: linear-gradient(135deg, #00d26a, #00b85c);
box-shadow: 0 0 14px rgba(0,210,106,0.6), 0 0 28px rgba(0,210,106,0.25);
box-shadow: 0 0 14px rgba(0, 210, 106, 0.6), 0 0 28px rgba(0, 210, 106, 0.25);
animation: stagePulse 2s ease-in-out infinite;
}
.stage-label {
font-size: 0.82em;
font-weight: 500;
transition: all 0.3s;
}
.stage-label.future { color: rgba(255,255,255,0.3); }
.stage-label.past { color: rgba(0,210,106,0.6); }
.stage-label.active { color: #00d26a; font-weight: 700; }
.stage-label.future {
color: rgba(255, 255, 255, 0.3);
}
.stage-label.past {
color: rgba(0, 210, 106, 0.6);
}
.stage-label.active {
color: #00d26a;
font-weight: 700;
}
.stage-connector {
width: 2px;
height: 20px;
margin-left: 16px;
transition: background 0.4s;
}
.stage-connector.filled { background: rgba(0,210,106,0.4); }
.stage-connector.empty { background: rgba(255,255,255,0.06); }
.stage-connector.filled {
background: rgba(0, 210, 106, 0.4);
}
.stage-connector.empty {
background: rgba(255, 255, 255, 0.06);
}
.insight-fields {
padding: 12px 16px;
border-top: 1px solid #2a2a2e;
flex: 1;
overflow-y: auto;
}
.insight-field {
margin-bottom: 10px;
}
.insight-field-key {
font-size: 0.7em;
text-transform: uppercase;
......@@ -1032,105 +1160,263 @@
letter-spacing: 0.5px;
margin-bottom: 2px;
}
.insight-field-val {
font-size: 0.82em;
color: #ccc;
line-height: 1.5;
word-break: break-word;
}
.insight-empty {
padding: 30px 16px;
text-align: center;
color: #555;
font-size: 0.85em;
}
@keyframes stagePulse {
0%,100% { box-shadow: 0 0 14px rgba(0,210,106,0.6), 0 0 28px rgba(0,210,106,0.25); }
50% { box-shadow: 0 0 20px rgba(0,210,106,0.8), 0 0 40px rgba(0,210,106,0.35); }
0%,
100% {
box-shadow: 0 0 14px rgba(0, 210, 106, 0.6), 0 0 28px rgba(0, 210, 106, 0.25);
}
50% {
box-shadow: 0 0 20px rgba(0, 210, 106, 0.8), 0 0 40px rgba(0, 210, 106, 0.35);
}
}
/* ── SHOPPING CART ── */
.cart-fab {
position: fixed; bottom: 24px; right: 24px; z-index: 1000;
width: 56px; height: 56px; border-radius: 50%;
position: fixed;
bottom: 24px;
right: 24px;
z-index: 1000;
width: 56px;
height: 56px;
border-radius: 50%;
background: linear-gradient(135deg, #00d26a, #0d9488);
border: none; cursor: pointer; box-shadow: 0 4px 16px rgba(0,210,106,0.4);
display: flex; align-items: center; justify-content: center;
font-size: 1.5em; transition: transform 0.2s;
border: none;
cursor: pointer;
box-shadow: 0 4px 16px rgba(0, 210, 106, 0.4);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5em;
transition: transform 0.2s;
}
.cart-fab:hover {
transform: scale(1.1);
}
.cart-fab:hover { transform: scale(1.1); }
.cart-badge {
position: absolute; top: -4px; right: -4px;
background: #ff4757; color: #fff; border-radius: 50%;
width: 22px; height: 22px; font-size: 0.7em; font-weight: 700;
display: flex; align-items: center; justify-content: center;
position: absolute;
top: -4px;
right: -4px;
background: #ff4757;
color: #fff;
border-radius: 50%;
width: 22px;
height: 22px;
font-size: 0.7em;
font-weight: 700;
display: flex;
align-items: center;
justify-content: center;
}
.cart-drawer {
position: fixed; top: 0; right: -380px; width: 370px; height: 100vh;
background: #1a1a1e; border-left: 1px solid #333; z-index: 1001;
transition: right 0.3s ease; display: flex; flex-direction: column;
box-shadow: -4px 0 20px rgba(0,0,0,0.5);
position: fixed;
top: 0;
right: -380px;
width: 370px;
height: 100vh;
background: #1a1a1e;
border-left: 1px solid #333;
z-index: 1001;
transition: right 0.3s ease;
display: flex;
flex-direction: column;
box-shadow: -4px 0 20px rgba(0, 0, 0, 0.5);
}
.cart-drawer.open {
right: 0;
}
.cart-drawer.open { right: 0; }
.cart-drawer-header {
padding: 16px 20px; border-bottom: 1px solid #333;
display: flex; justify-content: space-between; align-items: center;
font-size: 1.1em; font-weight: 700; color: #fbbf24;
padding: 16px 20px;
border-bottom: 1px solid #333;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 1.1em;
font-weight: 700;
color: #fbbf24;
}
.cart-drawer-header button {
background: none; border: none; color: #aaa; font-size: 1.3em; cursor: pointer;
background: none;
border: none;
color: #aaa;
font-size: 1.3em;
cursor: pointer;
}
.cart-drawer-items { flex: 1; overflow-y: auto; padding: 12px; }
.cart-drawer-items {
flex: 1;
overflow-y: auto;
padding: 12px;
}
.cart-item {
display: flex; gap: 12px; padding: 12px; background: #2d2d2d;
border-radius: 10px; margin-bottom: 10px; position: relative;
}
.cart-item img { width: 60px; height: 60px; object-fit: cover; border-radius: 8px; }
.cart-item-info { flex: 1; }
.cart-item-name { color: #eee; font-size: 0.85em; margin-bottom: 4px; }
.cart-item-price { color: #00d26a; font-weight: 700; font-size: 0.9em; }
.cart-item-sku { color: #888; font-size: 0.75em; }
display: flex;
gap: 12px;
padding: 12px;
background: #2d2d2d;
border-radius: 10px;
margin-bottom: 10px;
position: relative;
}
.cart-item img {
width: 60px;
height: 60px;
object-fit: cover;
border-radius: 8px;
}
.cart-item-info {
flex: 1;
}
.cart-item-name {
color: #eee;
font-size: 0.85em;
margin-bottom: 4px;
}
.cart-item-price {
color: #00d26a;
font-weight: 700;
font-size: 0.9em;
}
.cart-item-sku {
color: #888;
font-size: 0.75em;
}
.cart-item-remove {
position: absolute; top: 8px; right: 8px; background: none;
border: none; color: #888; cursor: pointer; font-size: 1em;
position: absolute;
top: 8px;
right: 8px;
background: none;
border: none;
color: #888;
cursor: pointer;
font-size: 1em;
}
.cart-item-remove:hover { color: #ff4757; }
.cart-item-remove:hover {
color: #ff4757;
}
.cart-drawer-footer {
padding: 16px 20px; border-top: 1px solid #333;
padding: 16px 20px;
border-top: 1px solid #333;
}
.cart-total {
display: flex; justify-content: space-between; margin-bottom: 12px;
font-size: 1em; color: #eee;
display: flex;
justify-content: space-between;
margin-bottom: 12px;
font-size: 1em;
color: #eee;
}
.cart-total-price { color: #00d26a; font-weight: 700; font-size: 1.1em; }
.cart-total-price {
color: #00d26a;
font-weight: 700;
font-size: 1.1em;
}
.cart-send-btn {
width: 100%; padding: 12px; border: none; border-radius: 10px;
width: 100%;
padding: 12px;
border: none;
border-radius: 10px;
background: linear-gradient(135deg, #00d26a, #0d9488);
color: #fff; font-weight: 700; font-size: 0.95em; cursor: pointer;
color: #fff;
font-weight: 700;
font-size: 0.95em;
cursor: pointer;
transition: opacity 0.2s;
}
.cart-send-btn:hover { opacity: 0.9; }
.cart-send-btn:disabled { opacity: 0.5; cursor: not-allowed; }
.cart-empty { color: #666; text-align: center; padding: 40px 0; font-size: 0.9em; }
.cart-send-btn:hover {
opacity: 0.9;
}
.cart-send-btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.cart-empty {
color: #666;
text-align: center;
padding: 40px 0;
font-size: 0.9em;
}
.cart-overlay {
position: fixed; top: 0; left: 0; width: 100%; height: 100%;
background: rgba(0,0,0,0.5); z-index: 1000; display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
z-index: 1000;
display: none;
}
.cart-overlay.show { display: block; }
.cart-overlay.show {
display: block;
}
.cart-toast {
position: fixed; bottom: 90px; right: 24px; z-index: 1002;
background: #00d26a; color: #fff; padding: 10px 20px;
border-radius: 10px; font-size: 0.85em; font-weight: 600;
opacity: 0; transform: translateY(10px);
transition: all 0.3s; pointer-events: none;
position: fixed;
bottom: 90px;
right: 24px;
z-index: 1002;
background: #00d26a;
color: #fff;
padding: 10px 20px;
border-radius: 10px;
font-size: 0.85em;
font-weight: 600;
opacity: 0;
transform: translateY(10px);
transition: all 0.3s;
pointer-events: none;
}
.cart-toast.show {
opacity: 1;
transform: translateY(0);
}
.cart-toast.show { opacity: 1; transform: translateY(0); }
</style>
</head>
<body>
<!-- Navigation Header -->
<div class="nav-header">
<h1>🧪 Canifa AI <span style="background:#fbbf24;color:#1e1e1e;padding:2px 10px;border-radius:6px;font-size:0.6em;vertical-align:middle;margin-left:8px;font-weight:700;letter-spacing:1px;">DEV EXPERIMENTAL</span></h1>
<h1>🧪 Canifa AI <span
style="background:#fbbf24;color:#1e1e1e;padding:2px 10px;border-radius:6px;font-size:0.6em;vertical-align:middle;margin-left:8px;font-weight:700;letter-spacing:1px;">DEV
EXPERIMENTAL</span></h1>
<div class="nav-links"></div>
</div>
......@@ -2165,6 +2451,44 @@
});
filteredDiv.appendChild(productsContainer);
// ═══ AUTO-CART BANNER ═══
if (data.auto_cart && data.product_ids.length > 0) {
const banner = document.createElement('div');
banner.className = 'auto-cart-banner';
const bannerText = document.createElement('div');
bannerText.className = 'auto-cart-banner-text';
bannerText.innerHTML = `🛒 Em đã chọn <span class="auto-cart-count">${data.product_ids.length} sản phẩm</span> cho bạn!`;
banner.appendChild(bannerText);
const bannerBtn = document.createElement('button');
bannerBtn.className = 'auto-cart-btn';
bannerBtn.innerText = 'Thêm tất cả vào giỏ 🛒';
bannerBtn.onclick = () => {
let addedCount = 0;
data.product_ids.forEach(product => {
const exists = cartItems.find(item => item.sku === product.sku);
if (!exists) {
cartItems.push({
sku: product.sku,
name: product.name,
price: product.sale_price || product.price || 0,
originalPrice: product.price || 0,
image: product.thumbnail_image_url || ''
});
addedCount++;
}
});
saveCart();
updateCartUI();
bannerBtn.className = 'auto-cart-btn done';
bannerBtn.innerText = `✅ Đã thêm ${addedCount} sản phẩm!`;
showCartToast(`🎉 Đã thêm ${addedCount} sản phẩm vào giỏ hàng!`);
};
banner.appendChild(bannerBtn);
filteredDiv.appendChild(banner);
}
}
botMsgDiv1.appendChild(filteredDiv);
......@@ -2754,7 +3078,8 @@
<button class="cart-send-btn" id="cartSendBtn" onclick="sendCartToBot()" disabled>
💬 Gửi giỏ hàng cho Bot tư vấn
</button>
<button class="cart-send-btn" style="margin-top:8px;background:#ff4757;" id="cartClearBtn" onclick="clearCart()" disabled>
<button class="cart-send-btn" style="margin-top:8px;background:#ff4757;" id="cartClearBtn"
onclick="clearCart()" disabled>
🗑️ Xóa giỏ hàng
</button>
</div>
......
[
{
"dieu": 1,
"tieu_de": "ĐỐI TƯỢNG CỦA HỢP ĐỒNG",
"noi_dung": "1.1. Theo các điều khoản và điều kiện của Hợp đồng này, Bên Bán đồng ý bán và Bên Mua\nđồng ý mua các loại hàng hóa, cụ thể như sau:\n1\nST\nT\nTên hàng Mã hàng Form\ndáng\nSố\nlượng\n(chiếc)\nGiá bán\nVNĐ\n(chưa\nVAT)\nThành tiền\ntrước thuế\n(vnd)\n1 Áo Bomber 5OT24DP004 Unisex 1500 326,000 489,000,00\n0\n2 Áo Polo 5TP24DP005 Unisex 1500 158,000 237,000,00\n0\nTổng thành tiền trước thuế 726,000,00\n0\n8% VAT 58,080,000\nTổng cộng đã bao gồm thuế VAT\n784,080,00\n0\nBằng chữ: Bảy trăm tám mươi tư triệu không trăm tám mươi nghìn đồng./.\n1.2. Quy cách – chất lượng:\n1.2.1. Mẫu mã, tiêu chuẩn: theo thiết kế đã được bên Mua duyệt, theo thông số của\nbên Bán và mẫu nguyên vật liệu, màu sắc, quy cách sản phẩm và số lượng chi\ntiết được thống nhất giữa 2 bên.\n1.2.2. Bên Bán đảm bảo rằng tất cả Hàng Hóa được cung cấp đảm bảo đúng chất\nlượng, đúng tiêu chuẩn kỹ thuật, đúng chủng loại, mẫu mã, kích cỡ, số lượng\ntheo quy định của Hợp Đồng, an toàn, mới 100%, chưa qua sử dụng và không\ncó bất kỳ hư hỏng hoặc lỗi nào. Hàng được đóng gói, bao bì theo đúng tiêu\nchuẩn để giữ Hàng Hóa nguyên đai nguyên kiện, không bị rách vỡ.\n1.2.3. Tất cả hàng hóa phải đáp ứng các qui định của pháp luật và phù hợp với các\nqui định về an toàn kỹ thuật và các yêu cầu về an toàn lao động."
},
{
"dieu": 2,
"tieu_de": "GIAO NHẬN HÀNG HÓA",
"noi_dung": "2.1. Thời hạn giao hàng:\n- Đối với Áo Polo: Bên Bán sẽ giao hàng cho bên Mua chậm nhất vào ngày 10/10/2025\nkhi bên Mua đáp ứng gửi thông tin chi tiết số lượng đặt hàng theo size chậm nhất ngày\n06/09/2025.\n- Đối với áo Bomber: Bên Bán sẽ trả hàng cho bên Mua trong vòng 30-45 ngày không\nbao gồm các ngày Thứ Bảy, Chủ Nhật và các ngày lễ Tết kể từ khi bên Mua gửi thông\ntin chi tiết số lượng đặt hàng theo size.\n2.2. Địa điểm giao hàng: tại địa chỉ của bên Mua.\n2.3. Phí vận chuyển và bốc dỡ: Bên Bán chịu trách nhiệm thu xếp phương tiện vận\nchuyển và chịu chi phí vận chuyển, bốc xếp hàng hóa; Bên Mua hỗ trợ nhân công tại\nđịa điểm giao nhận hàng.\n2.4. Bàn giao hàng hóa:\n2.4.1. Vào ngày giao hàng, nếu Bên Mua không nhận hàng hoặc không cử người đến\nnhận mà không phải do lỗi của Bên Bán thì Bên Mua đồng ý sẽ trả cho Bên\nBán (i) toàn bộ chi phí phát sinh trong thời gian Hàng Hóa không được giao;\n2\nvà (ii) một khoản tiền phạt bằng 8% giá trị của Hàng Hóa mà Bên Mua không\nnhận, đồng thời Bên Bán có quyền đơn phương chấm dứt Hợp đồng và không\nphải hoàn trả lại cho Bên Mua bất cứ khoản tiền nào mà Bên Mua đã thanh\ntoán/tạm ứng trước đó. Bên Mua cam kết sẽ không khiếu nại Bên Bán bất kỳ\nvấn đề gì liên quan đến vấn đề giao hàng.\n2.4.2. Sau khi tiến hành kiểm tra, nếu Đại diện của Bên Mua đã kiểm tra Hàng Hóa\nđúng số lượng và chất lượng như quy định tại Hợp đồng và đồng ý nhận Hàng\nHóa thì Đại diện Của Bên Mua có nghĩa vụ tiếp nhận Hàng Hóa và ký vào\nPhiếu Giao Hàng. Sau khi đã nhận hàng đầy đủ, Bên Mua theo đây xác nhận từ\nbỏ tất cả quyền khiếu kiện, khiếu nại và/hoặc yêu cầu Bên Bán về bất kỳ vấn\nđề gì liên quan đến số lượng Hàng Hóa đã nhận của Bên Bán theo Hợp Đồng\nnày.\n2.4.3. Trường hợp sau khi ký nhận vào Phiếu Giao hàng mà một phần hoặc toàn bộ\nHàng Hóa được giao có khiếm khuyết hoặc không phù hợp với Hợp Đồng này\nthì trong vòng 07 ngày làm việc kể từ ngày giao hàng, Bên Mua có quyền yêu\ncầu Bên Bán khắc phục, sửa chữa hoặc thay đổi Hàng Hóa không đạt yêu cầu.\nTrong trường hợp này, Bên Bán sẽ điều tra nguyên nhân và nếu các lỗi khiếm\nkhuyết hoặc không phù hợp là do Bên Bán, Bên Bán sẽ có nghĩa vụ khắc phục\ncác khiếm khuyết đó hoặc thay thế Hàng Hóa bị khiếm khuyết đó trong thời\nhạn 15 ngày làm việc hoặc trong thời hạn lâu hơn được hai bên thỏa thuận, kể\ntừ ngày Bên Mua yêu cầu. Nếu sau thời gian 07 ngày làm việc kể từ ngày giao\nhàng mà Bên Mua không có bất kỳ khiếu nại nào về Hàng Hóa đã nhận thì\nđược xem như Bên Mua đã chấp nhận Hàng Hóa được giao và khi đó, Điều\n2.4.2 sẽ được áp dụng\n2.5. Toàn bộ rủi ro đối với Hàng Hóa được giao cho Bên Mua theo Hợp Đồng này sẽ được\nchuyển sang Bên Mua kể từ thời điểm Bên Bán hoàn tất nghĩa vụ giao Hàng Hóa vào\nNgày Giao Hàng tại địa điểm giao hàng. Tuy nhiên, quyền sở hữu của Bên Mua đối\nvới Hàng Hóa chỉ được xác lập sau khi Bên Mua đã hoàn thành nghĩa vụ thanh toán\ncho Bên Bán theo Hợp Đồng này."
},
{
"dieu": 3,
"tieu_de": "GIÁ TRỊ HỢP ĐỒNG - PHƯƠNG THỨC THANH TOÁN",
"noi_dung": "3.1. Giá trị Hợp đồng: 784,080,000 VNĐ (Bằng chữ: Bảy trăm tám mươi tư triệu không\ntrăm tám mươi nghìn đồng./.)\nGiá trị Hợp đồng nêu trên đã bao gồm thuế GTGT\n3.2. Hình thức thanh toán: Chuyển khoản hoặc tiền mặt.\n3.3. Thời hạn thanh toán:\n● Lần 1: Bên Mua tạm ứng cho bên Bán 50% giá trị hợp đồng tương ứng số tiền\n392,040,000 VNĐ (Bằng chữ: Ba trăm chín mươi hai triệu không trăm bốn mươi\nnghìn đồng./.) muộn nhất vào ngày 07/09/2025.\n● Lần 2: Bên Mua thanh toán cho Bên Bán 50% giá trị còn của hợp đồng tương ứng số\ntiền 392,040,000 VNĐ (Bằng chữ: Ba trăm chín mươi hai triệu không trăm bốn\nmươi nghìn đồng./.) vòng 07 ngày làm việc sau khi Bên B hoàn thành nghĩa vụ bàn\n3\ngiao hàng hóa (đủ số lượng, đảm bảo chất lượng) và Bên Mua nhận được đầy đủ hồ sơ\nđề nghị thanh toán hợp lệ của Bên Bán.\nHồ sơ thanh toán gồm:\n- Văn bản đề nghị thanh toán;\n- Hợp đồng;\n- Biên Bản Giao Nhận và Nghiệm Thu;\n- Hóa đơn tài chính hợp lệ theo quy định;\n3.4. Chứng từ xuất kho:\nPhiếu xuất kho của Bên Bán và các chứng từ có liên quan khác (nếu có)."
},
{
"dieu": 4,
"tieu_de": "QUYỀN VÀ NGHĨA VỤ CỦA CÁC BÊN",
"noi_dung": "4.1. Quyền và nghĩa vụ của Bên Bán\n(a) Bên Bán cam kết: (i) Hàng hóa là hợp pháp và thuộc quyền sở hữu của Bên Bán;\n(ii) không bị tranh chấp hoặc vi phạm quyền của bên thứ ba; (iii) Bên Bán có đủ\nđiều kiện, năng lực, giấy phép cần thiết để kinh doanh hàng hóa được cung cấp\ntrong Hợp đồng này theo quy định pháp luật.\n(b) Được nhận thanh toán theo đúng quy định tại Điều 3 của Hợp Đồng.\n(c) Đảm bảo về nguồn gốc, chất lượng và tính hợp pháp của hàng hóa mà Bên Bán\nđã giao theo Hợp Đồng này.\n(d) Các Bên đồng ý, nhằm mục đích thực hiện Hợp Đồng này, Bên Mua cho phép\nBên Bán sử dụng một hoặc một số quyền sở hữu trí tuệ. Các tài sản sở hữu trí tuệ\ndo Bên Mua cung cấp nhằm mục đích thực hiện Hợp Đồng và/hoặc Bên Bán có\nđược trong quá trình thực hiện Hợp Đồng, đều thuộc quyền sở hữu của Bên\nMua, dù đã được đăng ký hay chưa, bao gồm nhưng không giới hạn nhãn hiệu,\nkiểu dáng công nghiệp, quyền tác giả và quyền liên quan đến quyền tác giả.\nBên Bán cam kết tuyệt đối tôn trọng quyền sở hữu trí tuệ của Bên Mua và bảo\nđảm không có bất cứ hành vi nào xâm hại đến quyền sở hữu trí tuệ của Bên Mua.\n(e) Trường hợp phát sinh hàng hóa dư để bán/khuyến mại/tặng cho tại hệ thống các\ncửa hàng của Bên Bán, hai bên sẽ thỏa thuận để thống nhất phương án xử lí cụ\nthể bằng văn bản/email.\n(f) Giao hàng hóa đúng số lượng, chất lượng, thời gian và địa điểm đã thỏa thuận\ntrong Hợp Đồng. Nếu có sự thay đổi phải được sự chấp thuận bằng văn\nbản/email của Bên Mua.\n(g) Hướng dẫn sử dụng, bảo quản hàng hóa cho Bên Mua.\n(h) Được bồi thường thiệt hại và/hoặc phạt vi phạm Bên Mua trong trường hợp Bên\nMua vi phạm bất kỳ cam kết nào tại Hợp đồng này;\n(i) Được phép sử dụng hình ảnh Sản phẩm/Hàng hóa trong hình ảnh profile, chào\nhàng các sản phẩm tương tự của Bên Bán.\n4\n(j) Đơn phương chấm dứt hợp đồng nếu Bên Mua vi phạm bất kỳ nghĩa vụ nào quy\nđịnh tại hợp đồng này và yêu cầu Bên Mua bồi thường thiệt hại, phạt hợp đồng\nkhi Bên Mua vi phạm Hợp đồng;\n(k) Các quyền và nghĩa vụ khác theo quy định của pháp luật.\n4.2. Quyền và nghĩa vụ Bên Mua:\n(a) Nhận đúng, đầy đủ Hàng Hóa theo quy định tại Hợp đồng này;\n(b) Từ chối nhận Hàng Hóa lỗi, hỏng và không đảm bảo chất lượng mà không chịu\ntrách nhiệm đền bù;\n(c) Thanh toán đúng, đầy đủ giá trị Hợp đồng cho Bên Bán theo đúng thỏa thuận tại\nHợp đồng và từng Đơn đặt hàng/Phụ Lục Hợp đồng;\n(d) Cử nhân sự nhận hàng tại địa điểm giao nhận hàng theo đúng thời gian đã thỏa\nthuận.\n(e) Phối hợp với Bên Bán trong việc kiểm tra chất lượng và số lượng của hàng hóa.\n(f) Đơn phương chấm dứt hợp đồng nếu Bên Bán vi phạm bất kỳ nghĩa vụ nào quy\nđịnh tại hợp đồng này và yêu cầu Bên Bán bồi thường thiệt hại, phạt hợp đồng\nkhi Bên Bán vi phạm Hợp đồng;\n(g) Các quyền và lợi ích hợp pháp khác theo quy định của pháp luật."
},
{
"dieu": 5,
"tieu_de": "PHẠT VI PHẠM HỢP ĐỒNG – BỒI THƯỜNG THIỆT HẠI",
"noi_dung": "5.1. Các bên cam kết nỗ lực thực hiện Hợp đồng đầy đủ và chính xác theo các nội dung đã\nthống nhất tại Hợp đồng này.\n5.2. Nếu bất kỳ bên nào vi phạm nghĩa vụ của mình quy định tại Hợp Đồng gây thiệt hại\ntrực tiếp và/hoặc gián tiếp cho bên kia và/hoặc Bên thứ ba thì phải tiến hành bồi\nthường cho Bên bị thiệt hại theo các quy định của pháp luật Việt Nam và chịu phạt\nhợp đồng theo các cam kết như sau:\n5.2.1. Chậm giao hàng: Trường hợp Bên Bán chậm bàn giao hàng hóa mà không có sự đồng\ný của Bên Mua thì Bên Bán phải chịu phạt một khoản tương đương 0,05%/ngày cho\nsố lượng hàng hóa bị giao chậm. Tuy nhiên, tổng tiền phạt không quá 8% giá trị đơn\nhàng bị giao chậm.\n5.2.2. Chậm thanh toán: Trường hợp Bên Mua chậm các nghĩa vụ thanh toán mà không được\nsự đồng ý của Bên Bán thì Bên Mua có nghĩa vụ trả tiền lãi trên số tiền chậm thanh\ntoán theo lãi suất tương đương 0.05%/ngày thanh toán chậm tính từ ngày quá thời hạn\nthanh toán theo quy định tại Điều 3.3 cho đến ngày thanh toán thực tế.\n5.2.3. Trường hợp một bên vi phạm các quy định khác của Hợp đồng ngoài quy định tại\nĐiều 5.2.1 và Điều 5.2.2 thì Bên bị vi phạm có quyền áp dụng một khoản phạt vi\nphạm hợp đồng đối với Bên vi phạm tương ứng với 8% giá trị của phần Hợp đồng bị\nvi phạm và yêu cầu bồi thường thiệt hại (nếu có);\n5.2.4. Bên vi phạm gây thiệt hại phải bồi thường cho bên kia toàn bộ các chi phí, phí tổn, tổn\nthất, thiệt hại mà bên kia phải chịu do hậu quả của vi phạm đó, bao gồm cả chi phí\npháp lý, tư vấn và luật sư.\n5\n5.2.5. Khoản tiền phạt, bồi thường, bồi hoàn (nếu có) liên quan đến việc thực hiện Hợp đồng\nđược các bên thanh toán bằng chuyển khoản trong vòng 15 ngày làm việc, kể từ ngày\nnhận được thông báo của Bên kia."
},
{
"dieu": 6,
"tieu_de": "SỰ KIỆN BẤT KHẢ KHÁNG",
"noi_dung": "6.1. Sự Kiện Bất Khả Kháng là sự kiện không lường trước được và nằm ngoài sự kiểm\nsoát hợp lý của các Bên, bao gồm, nhưng không giới hạn ở các tai họa thiên nhiên như\ncháy, nổ, lụt lội hoặc động đất, dịch bệnh, các sự kiện khác như chiến tranh, phong toả\nhoặc cấm vận, chiếm đóng, nội chiến, nổi loạn, phá hoại hay rối loạn xã hội, đình công\nhay náo động lao động khác hoặc bất kỳ quy tắc, quy định, lệnh hay chỉ thị của cơ\nquan chính quyền hay cơ quan chức năng hoặc lệnh của bất kỳ toà án có thẩm quyền\nnào hoặc các thay đổi chính sách, luật pháp, quyết định của cơ quan có thẩm quyền\nban hành mà có ảnh hưởng làm gián đoạn, gây trở ngại hoặc ngăn cản việc thực hiện\nnghĩa vụ của các bên phát sinh từ Hợp đồng này\n6.2. Việc một trong Các Bên không thực hiện hoặc thực hiện không đúng, không đầy đủ\nhay chậm thực hiện các nghĩa vụ của mình do Sự Kiện Bất Khả Kháng thì sẽ không bị\ncoi là vi phạm Hợp Đồng này với điều kiện trong thời hạn 03 ngày kể từ ngày xảy ra\nSự Kiện Bất Khả Kháng, Bên bị ảnh hưởng bởi Sự Kiện Bất Khả Kháng phải thông\nbáo văn bản cho Bên kia, trong đó nêu chi tiết về Sự Kiện Bất Khả Kháng, các biện\npháp đã tiến hành để đề phòng, khắc phục thiệt hại, dự kiến kế hoạch khắc phục và\nbiện pháp giải quyết.\n6.3. Trong trường hợp xảy ra Sự Kiện Bất Khả Kháng mà theo đánh giá của Các Bên là\nkhông thể khắc phục được hoặc thời gian khắc phục vượt quá 45 (bốn mươi lăm) ngày\nthì Hợp đồng này sẽ được chấm dứt do Sự Kiện Bất Khả Kháng theo quy định tại Điều\nnày. Các Bên được miễn trừ trách nhiệm và không Bên nào được quyền khiếu nại hoặc\nyêu cầu Bên kia bồi thường thiệt hại."
},
{
"dieu": 7,
"tieu_de": "THỜI HẠN VÀ CHẤM DỨT HỢP ĐỒNG",
"noi_dung": "7.1. Hợp đồng này có hiệu lực kể từ ngày ký và tự động được thanh lý khi hai bên hoàn\nthành các nghĩa vụ quy định tại Hợp đồng này\n7.2. Hợp đồng này sẽ chấm dứt trong các trường hợp sau:\n(a) Các Bên thỏa thuận chấm dứt Hợp đồng trước thời hạn bằng văn bản. Trong\ntrường hợp này, Các Bên sẽ thỏa thuận về điều kiện và thời điểm chấm dứt;\n(b) Khi tất cả nghĩa vụ của Các Bên theo Hợp đồng này đã được hoàn thành. Tại\nthời điểm này, Hợp đồng sẽ tự động thanh lý.\n(c) Một bên đơn phương chấm dứt Hợp đồng theo quy định tại Hợp đồng này;\n(d) Các trường hợp bất khả kháng theo quy định tại Hợp đồng này;\n(e) Một Bên bị phá sản hoặc giải thể (trừ trường hợp nhằm tái cơ cấu) hoặc bị yêu\ncầu tuyên bố phá sản hoặc mất khả năng thanh toán hoặc trong trường hợp Bên\nđó bị tịch thu tài sản bởi cơ quan nhà nước có thẩm quyền.\n7.3. Việc chấm dứt Hợp đồng theo Điều này sẽ không làm ảnh hưởng hay giải phóng Các\nBên khỏi các quyền, nghĩa vụ và trách nhiệm phát sinh từ trước thời điểm chấm dứt\nHợp đồng này.\n6\n7.4. Trong trường hợp Hợp đồng bị chấm dứt theo Điều 7.2 (d) và Điều 7.2 (e), trừ trường\nhợp có thỏa thuận khác, mỗi Bên sẽ, trong thời hạn bảy (07) ngày, hoàn trả lại cho\nnhau tất cả những gì đã nhận, và mỗi Bên sẽ gánh chịu thiệt hại của mình, nếu có,\ncũng như không được yêu cầu Bên kia bồi thường."
},
{
"dieu": 8,
"tieu_de": "QUYỀN SỞ HỮU TRÍ TUỆ",
"noi_dung": "8.1. Sở hữu các Quyền Sở Hữu Trí Tuệ\nMọi quyền sở hữu trí tuệ theo quy định của Pháp luật về sở hữu trí tuệ, do Bên Bán sở\nhữu hay được cấp giấy phép liên quan đến Hàng hóa và bất cứ nhãn hiệu hàng hóa,\nbao bì, tên gọi, tên thương mại, hướng dẫn cho người sử dụng và tài liệu khác nào\nkhác do Bên Bán cung cấp cho Bên Mua liên quan đến các Hàng hóa sẽ luôn là tài sản\nthuộc về Bên Bán.\n8.2. Sử dụng các đối tượng sở hữu trí tuệ.\nBên Mua không được sử dụng tên thương mại, tên, biểu tượng, khẩu hiệu và các đối\ntượng sở hữu trí tuệ khác của Bên Mua, trừ khi dùng cho khuyến mại, quảng cáo và\nbán Hàng hoá theo Hợp đồng này và/hoặc được quy định, hướng dẫn và đồng ý của\nBên Bán. Việc sử dụng này là sử dụng có giới hạn tuỳ thuộc vào các điều kiện và điều\nkhoản của Hợp đồng này và sẽ bị chấm dứt ngay lập tức khi Hợp đồng này chấm dứt."
},
{
"dieu": 9,
"tieu_de": "QUY ĐỊNH VỀ CHỐNG THAM NHŨNG VÀ HỐI LỘ",
"noi_dung": "9.1. Hai bên đồng ý thừa nhận việc hiểu biết các quy định pháp luật liên quan đến chống\nhối lộ và chống tham nhũng và đồng ý sẽ không vi phạm hay làm cho bên kia vi phạm\ncác quy định pháp luật liên quan đến chống hối lộ và chống tham nhũng mà có liên\nquan đến hợp đồng này\n9.2. Hai bên cam kết trong mọi tình huống, trong mọi hoàn cảnh không dùng tiền, thưởng,\nquà cáp, lời hứa hẹn, chiêu đãi riêng... hay bất kỳ hình thức tương tự nào để cho tặng\nriêng cho cán bộ- nhân viên bên kia nhằm mục đích lôi kéo, gây tác động, gây ảnh\nhưởng để làm lợi riêng cho bên mình và gây phương hai đến quan hệ hợp tác giữa hai\nbên. Trong trường hợp bị phát hiện, bên phát hiện được quyền đơn phương chấm dứt\nmọi giao dịch theo hợp đồng này và yêu cầu bên bị phát hiện bồi thường toàn bộ thiệt\nhại, tổn thất.\n9.3. Miễn trừ: Một bên sẽ miễn trừ cho Bên còn lại mọi trách nhiệm liên quan nếu hành vi\nHối Lộ của bên đó vi phạm pháp luật Việt Nam và phải bồi thường cho Bên còn lại\ncác thiệt hại phát sinh, bao gồm cả các thiệt hại do phát sinh chi phí hành chính, chi\nphí luật sư và các chi phí khác để xử lý các vấn đề liên đới đến hành vi Hối Lộ của\nBên đó."
},
{
"dieu": 10,
"tieu_de": "GIẢI QUYẾT TRANH CHẤP",
"noi_dung": "10.1. Hợp Đồng này được điều chỉnh và giải thích theo quy định của pháp luật Việt Nam.\n10.2. Trong trường hợp có tranh chấp phát sinh từ Hợp Đồng, Các Bên sẽ cố gắng giải\nquyết bằng con đường thương lượng, hòa giải. Nếu tranh chấp không giải quyết được\nbằng thương lượng, hòa giải thì một bên có quyền đưa ra Toà án có thẩm quyền để\ngiải quyết. Quyết định của Toà án sẽ là quyết định cuối cùng và có giá trị bắt buộc đối\nvới Các Bên. Án Phí sẽ do Bên thua kiện chịu.\n7"
},
{
"dieu": 11,
"tieu_de": "ĐIỀU KHOẢN CHUNG",
"noi_dung": "11.1. Các Bên cam kết thực hiện đầy đủ nội dung ghi trong Hợp Đồng. Trong quá trình thực\nhiện nếu có gì khó khăn, Các Bên gặp nhau bàn bạc tìm biện pháp giải quyết trên tinh\nthần hợp tác\n11.2. Bất kỳ sửa đổi, bổ sung nào đối với Hợp Đồng này sẽ chỉ có hiệu lực nếu được lập\nthành văn bản được ký xác nhận bởi đại diện có thẩm quyền của Các Bên. Mọi tài\nliệu, văn bản, email, tin nhắn trao đổi và phát hành giữa Các Bên trong quá trình thực\nhiện Hợp Đồng này sẽ là những bộ phận không tách rời của Hợp đồng này.\n11.3. Nếu bất kỳ điều khoản nào của Hợp Đồng này có toàn bộ hay một phần nội dung bị vô\nhiệu do bị trái pháp luật hoặc không thể thi hành được vì bất kỳ lý do nào, phần còn lại\ncủa điều khoản đó và các điều khoản khác sẽ không bị ảnh hưởng và giữ nguyên hiệu\nlực.\n11.4. Hợp đồng này có hiệu lực kể từ ngày ký. Hợp đồng được lập thành 04 (bốn) bản chính\nbằng tiếng Việt có giá trị pháp lý như nhau, mỗi bên giữ 02 (hai) bản để thực hiện.\nĐẠI DIỆN BÊN MUA ĐẠI DIỆN BÊN BÁN\n8"
}
]
\ No newline at end of file
ĐIỀU 1. ĐỐI TƯỢNG CỦA HỢP ĐỒNG
1.1. Theo các điều khoản và điều kiện của Hợp đồng này, Bên Bán đồng ý bán và Bên Mua
đồng ý mua các loại hàng hóa, cụ thể như sau:
1
ST
T
Tên hàng Mã hàng Form
dáng
Số
lượng
(chiếc)
Giá bán
VNĐ
(chưa
VAT)
Thành tiền
trước thuế
(vnd)
1 Áo Bomber 5OT24DP004 Unisex 1500 326,000 489,000,00
0
2 Áo Polo 5TP24DP005 Unisex 1500 158,000 237,000,00
0
Tổng thành tiền trước thuế 726,000,00
0
8% VAT 58,080,000
Tổng cộng đã bao gồm thuế VAT
784,080,00
0
Bằng chữ: Bảy trăm tám mươi tư triệu không trăm tám mươi nghìn đồng./.
1.2. Quy cách – chất lượng:
1.2.1. Mẫu mã, tiêu chuẩn: theo thiết kế đã được bên Mua duyệt, theo thông số của
bên Bán và mẫu nguyên vật liệu, màu sắc, quy cách sản phẩm và số lượng chi
tiết được thống nhất giữa 2 bên.
1.2.2. Bên Bán đảm bảo rằng tất cả Hàng Hóa được cung cấp đảm bảo đúng chất
lượng, đúng tiêu chuẩn kỹ thuật, đúng chủng loại, mẫu mã, kích cỡ, số lượng
theo quy định của Hợp Đồng, an toàn, mới 100%, chưa qua sử dụng và không
có bất kỳ hư hỏng hoặc lỗi nào. Hàng được đóng gói, bao bì theo đúng tiêu
chuẩn để giữ Hàng Hóa nguyên đai nguyên kiện, không bị rách vỡ.
1.2.3. Tất cả hàng hóa phải đáp ứng các qui định của pháp luật và phù hợp với các
qui định về an toàn kỹ thuật và các yêu cầu về an toàn lao động.
============================================================
ĐIỀU 2. GIAO NHẬN HÀNG HÓA
2.1. Thời hạn giao hàng:
- Đối với Áo Polo: Bên Bán sẽ giao hàng cho bên Mua chậm nhất vào ngày 10/10/2025
khi bên Mua đáp ứng gửi thông tin chi tiết số lượng đặt hàng theo size chậm nhất ngày
06/09/2025.
- Đối với áo Bomber: Bên Bán sẽ trả hàng cho bên Mua trong vòng 30-45 ngày không
bao gồm các ngày Thứ Bảy, Chủ Nhật và các ngày lễ Tết kể từ khi bên Mua gửi thông
tin chi tiết số lượng đặt hàng theo size.
2.2. Địa điểm giao hàng: tại địa chỉ của bên Mua.
2.3. Phí vận chuyển và bốc dỡ: Bên Bán chịu trách nhiệm thu xếp phương tiện vận
chuyển và chịu chi phí vận chuyển, bốc xếp hàng hóa; Bên Mua hỗ trợ nhân công tại
địa điểm giao nhận hàng.
2.4. Bàn giao hàng hóa:
2.4.1. Vào ngày giao hàng, nếu Bên Mua không nhận hàng hoặc không cử người đến
nhận mà không phải do lỗi của Bên Bán thì Bên Mua đồng ý sẽ trả cho Bên
Bán (i) toàn bộ chi phí phát sinh trong thời gian Hàng Hóa không được giao;
2
và (ii) một khoản tiền phạt bằng 8% giá trị của Hàng Hóa mà Bên Mua không
nhận, đồng thời Bên Bán có quyền đơn phương chấm dứt Hợp đồng và không
phải hoàn trả lại cho Bên Mua bất cứ khoản tiền nào mà Bên Mua đã thanh
toán/tạm ứng trước đó. Bên Mua cam kết sẽ không khiếu nại Bên Bán bất kỳ
vấn đề gì liên quan đến vấn đề giao hàng.
2.4.2. Sau khi tiến hành kiểm tra, nếu Đại diện của Bên Mua đã kiểm tra Hàng Hóa
đúng số lượng và chất lượng như quy định tại Hợp đồng và đồng ý nhận Hàng
Hóa thì Đại diện Của Bên Mua có nghĩa vụ tiếp nhận Hàng Hóa và ký vào
Phiếu Giao Hàng. Sau khi đã nhận hàng đầy đủ, Bên Mua theo đây xác nhận từ
bỏ tất cả quyền khiếu kiện, khiếu nại và/hoặc yêu cầu Bên Bán về bất kỳ vấn
đề gì liên quan đến số lượng Hàng Hóa đã nhận của Bên Bán theo Hợp Đồng
này.
2.4.3. Trường hợp sau khi ký nhận vào Phiếu Giao hàng mà một phần hoặc toàn bộ
Hàng Hóa được giao có khiếm khuyết hoặc không phù hợp với Hợp Đồng này
thì trong vòng 07 ngày làm việc kể từ ngày giao hàng, Bên Mua có quyền yêu
cầu Bên Bán khắc phục, sửa chữa hoặc thay đổi Hàng Hóa không đạt yêu cầu.
Trong trường hợp này, Bên Bán sẽ điều tra nguyên nhân và nếu các lỗi khiếm
khuyết hoặc không phù hợp là do Bên Bán, Bên Bán sẽ có nghĩa vụ khắc phục
các khiếm khuyết đó hoặc thay thế Hàng Hóa bị khiếm khuyết đó trong thời
hạn 15 ngày làm việc hoặc trong thời hạn lâu hơn được hai bên thỏa thuận, kể
từ ngày Bên Mua yêu cầu. Nếu sau thời gian 07 ngày làm việc kể từ ngày giao
hàng mà Bên Mua không có bất kỳ khiếu nại nào về Hàng Hóa đã nhận thì
được xem như Bên Mua đã chấp nhận Hàng Hóa được giao và khi đó, Điều
2.4.2 sẽ được áp dụng
2.5. Toàn bộ rủi ro đối với Hàng Hóa được giao cho Bên Mua theo Hợp Đồng này sẽ được
chuyển sang Bên Mua kể từ thời điểm Bên Bán hoàn tất nghĩa vụ giao Hàng Hóa vào
Ngày Giao Hàng tại địa điểm giao hàng. Tuy nhiên, quyền sở hữu của Bên Mua đối
với Hàng Hóa chỉ được xác lập sau khi Bên Mua đã hoàn thành nghĩa vụ thanh toán
cho Bên Bán theo Hợp Đồng này.
============================================================
ĐIỀU 3. GIÁ TRỊ HỢP ĐỒNG - PHƯƠNG THỨC THANH TOÁN
3.1. Giá trị Hợp đồng: 784,080,000 VNĐ (Bằng chữ: Bảy trăm tám mươi tư triệu không
trăm tám mươi nghìn đồng./.)
Giá trị Hợp đồng nêu trên đã bao gồm thuế GTGT
3.2. Hình thức thanh toán: Chuyển khoản hoặc tiền mặt.
3.3. Thời hạn thanh toán:
● Lần 1: Bên Mua tạm ứng cho bên Bán 50% giá trị hợp đồng tương ứng số tiền
392,040,000 VNĐ (Bằng chữ: Ba trăm chín mươi hai triệu không trăm bốn mươi
nghìn đồng./.) muộn nhất vào ngày 07/09/2025.
● Lần 2: Bên Mua thanh toán cho Bên Bán 50% giá trị còn của hợp đồng tương ứng số
tiền 392,040,000 VNĐ (Bằng chữ: Ba trăm chín mươi hai triệu không trăm bốn
mươi nghìn đồng./.) vòng 07 ngày làm việc sau khi Bên B hoàn thành nghĩa vụ bàn
3
giao hàng hóa (đủ số lượng, đảm bảo chất lượng) và Bên Mua nhận được đầy đủ hồ sơ
đề nghị thanh toán hợp lệ của Bên Bán.
Hồ sơ thanh toán gồm:
- Văn bản đề nghị thanh toán;
- Hợp đồng;
- Biên Bản Giao Nhận và Nghiệm Thu;
- Hóa đơn tài chính hợp lệ theo quy định;
3.4. Chứng từ xuất kho:
Phiếu xuất kho của Bên Bán và các chứng từ có liên quan khác (nếu có).
============================================================
ĐIỀU 4. QUYỀN VÀ NGHĨA VỤ CỦA CÁC BÊN
4.1. Quyền và nghĩa vụ của Bên Bán
(a) Bên Bán cam kết: (i) Hàng hóa là hợp pháp và thuộc quyền sở hữu của Bên Bán;
(ii) không bị tranh chấp hoặc vi phạm quyền của bên thứ ba; (iii) Bên Bán có đủ
điều kiện, năng lực, giấy phép cần thiết để kinh doanh hàng hóa được cung cấp
trong Hợp đồng này theo quy định pháp luật.
(b) Được nhận thanh toán theo đúng quy định tại Điều 3 của Hợp Đồng.
(c) Đảm bảo về nguồn gốc, chất lượng và tính hợp pháp của hàng hóa mà Bên Bán
đã giao theo Hợp Đồng này.
(d) Các Bên đồng ý, nhằm mục đích thực hiện Hợp Đồng này, Bên Mua cho phép
Bên Bán sử dụng một hoặc một số quyền sở hữu trí tuệ. Các tài sản sở hữu trí tuệ
do Bên Mua cung cấp nhằm mục đích thực hiện Hợp Đồng và/hoặc Bên Bán có
được trong quá trình thực hiện Hợp Đồng, đều thuộc quyền sở hữu của Bên
Mua, dù đã được đăng ký hay chưa, bao gồm nhưng không giới hạn nhãn hiệu,
kiểu dáng công nghiệp, quyền tác giả và quyền liên quan đến quyền tác giả.
Bên Bán cam kết tuyệt đối tôn trọng quyền sở hữu trí tuệ của Bên Mua và bảo
đảm không có bất cứ hành vi nào xâm hại đến quyền sở hữu trí tuệ của Bên Mua.
(e) Trường hợp phát sinh hàng hóa dư để bán/khuyến mại/tặng cho tại hệ thống các
cửa hàng của Bên Bán, hai bên sẽ thỏa thuận để thống nhất phương án xử lí cụ
thể bằng văn bản/email.
(f) Giao hàng hóa đúng số lượng, chất lượng, thời gian và địa điểm đã thỏa thuận
trong Hợp Đồng. Nếu có sự thay đổi phải được sự chấp thuận bằng văn
bản/email của Bên Mua.
(g) Hướng dẫn sử dụng, bảo quản hàng hóa cho Bên Mua.
(h) Được bồi thường thiệt hại và/hoặc phạt vi phạm Bên Mua trong trường hợp Bên
Mua vi phạm bất kỳ cam kết nào tại Hợp đồng này;
(i) Được phép sử dụng hình ảnh Sản phẩm/Hàng hóa trong hình ảnh profile, chào
hàng các sản phẩm tương tự của Bên Bán.
4
(j) Đơn phương chấm dứt hợp đồng nếu Bên Mua vi phạm bất kỳ nghĩa vụ nào quy
định tại hợp đồng này và yêu cầu Bên Mua bồi thường thiệt hại, phạt hợp đồng
khi Bên Mua vi phạm Hợp đồng;
(k) Các quyền và nghĩa vụ khác theo quy định của pháp luật.
4.2. Quyền và nghĩa vụ Bên Mua:
(a) Nhận đúng, đầy đủ Hàng Hóa theo quy định tại Hợp đồng này;
(b) Từ chối nhận Hàng Hóa lỗi, hỏng và không đảm bảo chất lượng mà không chịu
trách nhiệm đền bù;
(c) Thanh toán đúng, đầy đủ giá trị Hợp đồng cho Bên Bán theo đúng thỏa thuận tại
Hợp đồng và từng Đơn đặt hàng/Phụ Lục Hợp đồng;
(d) Cử nhân sự nhận hàng tại địa điểm giao nhận hàng theo đúng thời gian đã thỏa
thuận.
(e) Phối hợp với Bên Bán trong việc kiểm tra chất lượng và số lượng của hàng hóa.
(f) Đơn phương chấm dứt hợp đồng nếu Bên Bán vi phạm bất kỳ nghĩa vụ nào quy
định tại hợp đồng này và yêu cầu Bên Bán bồi thường thiệt hại, phạt hợp đồng
khi Bên Bán vi phạm Hợp đồng;
(g) Các quyền và lợi ích hợp pháp khác theo quy định của pháp luật.
============================================================
ĐIỀU 5. PHẠT VI PHẠM HỢP ĐỒNG – BỒI THƯỜNG THIỆT HẠI
5.1. Các bên cam kết nỗ lực thực hiện Hợp đồng đầy đủ và chính xác theo các nội dung đã
thống nhất tại Hợp đồng này.
5.2. Nếu bất kỳ bên nào vi phạm nghĩa vụ của mình quy định tại Hợp Đồng gây thiệt hại
trực tiếp và/hoặc gián tiếp cho bên kia và/hoặc Bên thứ ba thì phải tiến hành bồi
thường cho Bên bị thiệt hại theo các quy định của pháp luật Việt Nam và chịu phạt
hợp đồng theo các cam kết như sau:
5.2.1. Chậm giao hàng: Trường hợp Bên Bán chậm bàn giao hàng hóa mà không có sự đồng
ý của Bên Mua thì Bên Bán phải chịu phạt một khoản tương đương 0,05%/ngày cho
số lượng hàng hóa bị giao chậm. Tuy nhiên, tổng tiền phạt không quá 8% giá trị đơn
hàng bị giao chậm.
5.2.2. Chậm thanh toán: Trường hợp Bên Mua chậm các nghĩa vụ thanh toán mà không được
sự đồng ý của Bên Bán thì Bên Mua có nghĩa vụ trả tiền lãi trên số tiền chậm thanh
toán theo lãi suất tương đương 0.05%/ngày thanh toán chậm tính từ ngày quá thời hạn
thanh toán theo quy định tại Điều 3.3 cho đến ngày thanh toán thực tế.
5.2.3. Trường hợp một bên vi phạm các quy định khác của Hợp đồng ngoài quy định tại
Điều 5.2.1 và Điều 5.2.2 thì Bên bị vi phạm có quyền áp dụng một khoản phạt vi
phạm hợp đồng đối với Bên vi phạm tương ứng với 8% giá trị của phần Hợp đồng bị
vi phạm và yêu cầu bồi thường thiệt hại (nếu có);
5.2.4. Bên vi phạm gây thiệt hại phải bồi thường cho bên kia toàn bộ các chi phí, phí tổn, tổn
thất, thiệt hại mà bên kia phải chịu do hậu quả của vi phạm đó, bao gồm cả chi phí
pháp lý, tư vấn và luật sư.
5
5.2.5. Khoản tiền phạt, bồi thường, bồi hoàn (nếu có) liên quan đến việc thực hiện Hợp đồng
được các bên thanh toán bằng chuyển khoản trong vòng 15 ngày làm việc, kể từ ngày
nhận được thông báo của Bên kia.
============================================================
ĐIỀU 6. SỰ KIỆN BẤT KHẢ KHÁNG
6.1. Sự Kiện Bất Khả Kháng là sự kiện không lường trước được và nằm ngoài sự kiểm
soát hợp lý của các Bên, bao gồm, nhưng không giới hạn ở các tai họa thiên nhiên như
cháy, nổ, lụt lội hoặc động đất, dịch bệnh, các sự kiện khác như chiến tranh, phong toả
hoặc cấm vận, chiếm đóng, nội chiến, nổi loạn, phá hoại hay rối loạn xã hội, đình công
hay náo động lao động khác hoặc bất kỳ quy tắc, quy định, lệnh hay chỉ thị của cơ
quan chính quyền hay cơ quan chức năng hoặc lệnh của bất kỳ toà án có thẩm quyền
nào hoặc các thay đổi chính sách, luật pháp, quyết định của cơ quan có thẩm quyền
ban hành mà có ảnh hưởng làm gián đoạn, gây trở ngại hoặc ngăn cản việc thực hiện
nghĩa vụ của các bên phát sinh từ Hợp đồng này
6.2. Việc một trong Các Bên không thực hiện hoặc thực hiện không đúng, không đầy đủ
hay chậm thực hiện các nghĩa vụ của mình do Sự Kiện Bất Khả Kháng thì sẽ không bị
coi là vi phạm Hợp Đồng này với điều kiện trong thời hạn 03 ngày kể từ ngày xảy ra
Sự Kiện Bất Khả Kháng, Bên bị ảnh hưởng bởi Sự Kiện Bất Khả Kháng phải thông
báo văn bản cho Bên kia, trong đó nêu chi tiết về Sự Kiện Bất Khả Kháng, các biện
pháp đã tiến hành để đề phòng, khắc phục thiệt hại, dự kiến kế hoạch khắc phục và
biện pháp giải quyết.
6.3. Trong trường hợp xảy ra Sự Kiện Bất Khả Kháng mà theo đánh giá của Các Bên là
không thể khắc phục được hoặc thời gian khắc phục vượt quá 45 (bốn mươi lăm) ngày
thì Hợp đồng này sẽ được chấm dứt do Sự Kiện Bất Khả Kháng theo quy định tại Điều
này. Các Bên được miễn trừ trách nhiệm và không Bên nào được quyền khiếu nại hoặc
yêu cầu Bên kia bồi thường thiệt hại.
============================================================
ĐIỀU 7. THỜI HẠN VÀ CHẤM DỨT HỢP ĐỒNG
7.1. Hợp đồng này có hiệu lực kể từ ngày ký và tự động được thanh lý khi hai bên hoàn
thành các nghĩa vụ quy định tại Hợp đồng này
7.2. Hợp đồng này sẽ chấm dứt trong các trường hợp sau:
(a) Các Bên thỏa thuận chấm dứt Hợp đồng trước thời hạn bằng văn bản. Trong
trường hợp này, Các Bên sẽ thỏa thuận về điều kiện và thời điểm chấm dứt;
(b) Khi tất cả nghĩa vụ của Các Bên theo Hợp đồng này đã được hoàn thành. Tại
thời điểm này, Hợp đồng sẽ tự động thanh lý.
(c) Một bên đơn phương chấm dứt Hợp đồng theo quy định tại Hợp đồng này;
(d) Các trường hợp bất khả kháng theo quy định tại Hợp đồng này;
(e) Một Bên bị phá sản hoặc giải thể (trừ trường hợp nhằm tái cơ cấu) hoặc bị yêu
cầu tuyên bố phá sản hoặc mất khả năng thanh toán hoặc trong trường hợp Bên
đó bị tịch thu tài sản bởi cơ quan nhà nước có thẩm quyền.
7.3. Việc chấm dứt Hợp đồng theo Điều này sẽ không làm ảnh hưởng hay giải phóng Các
Bên khỏi các quyền, nghĩa vụ và trách nhiệm phát sinh từ trước thời điểm chấm dứt
Hợp đồng này.
6
7.4. Trong trường hợp Hợp đồng bị chấm dứt theo Điều 7.2 (d) và Điều 7.2 (e), trừ trường
hợp có thỏa thuận khác, mỗi Bên sẽ, trong thời hạn bảy (07) ngày, hoàn trả lại cho
nhau tất cả những gì đã nhận, và mỗi Bên sẽ gánh chịu thiệt hại của mình, nếu có,
cũng như không được yêu cầu Bên kia bồi thường.
============================================================
ĐIỀU 8. QUYỀN SỞ HỮU TRÍ TUỆ
8.1. Sở hữu các Quyền Sở Hữu Trí Tuệ
Mọi quyền sở hữu trí tuệ theo quy định của Pháp luật về sở hữu trí tuệ, do Bên Bán sở
hữu hay được cấp giấy phép liên quan đến Hàng hóa và bất cứ nhãn hiệu hàng hóa,
bao bì, tên gọi, tên thương mại, hướng dẫn cho người sử dụng và tài liệu khác nào
khác do Bên Bán cung cấp cho Bên Mua liên quan đến các Hàng hóa sẽ luôn là tài sản
thuộc về Bên Bán.
8.2. Sử dụng các đối tượng sở hữu trí tuệ.
Bên Mua không được sử dụng tên thương mại, tên, biểu tượng, khẩu hiệu và các đối
tượng sở hữu trí tuệ khác của Bên Mua, trừ khi dùng cho khuyến mại, quảng cáo và
bán Hàng hoá theo Hợp đồng này và/hoặc được quy định, hướng dẫn và đồng ý của
Bên Bán. Việc sử dụng này là sử dụng có giới hạn tuỳ thuộc vào các điều kiện và điều
khoản của Hợp đồng này và sẽ bị chấm dứt ngay lập tức khi Hợp đồng này chấm dứt.
============================================================
ĐIỀU 9. QUY ĐỊNH VỀ CHỐNG THAM NHŨNG VÀ HỐI LỘ
9.1. Hai bên đồng ý thừa nhận việc hiểu biết các quy định pháp luật liên quan đến chống
hối lộ và chống tham nhũng và đồng ý sẽ không vi phạm hay làm cho bên kia vi phạm
các quy định pháp luật liên quan đến chống hối lộ và chống tham nhũng mà có liên
quan đến hợp đồng này
9.2. Hai bên cam kết trong mọi tình huống, trong mọi hoàn cảnh không dùng tiền, thưởng,
quà cáp, lời hứa hẹn, chiêu đãi riêng... hay bất kỳ hình thức tương tự nào để cho tặng
riêng cho cán bộ- nhân viên bên kia nhằm mục đích lôi kéo, gây tác động, gây ảnh
hưởng để làm lợi riêng cho bên mình và gây phương hai đến quan hệ hợp tác giữa hai
bên. Trong trường hợp bị phát hiện, bên phát hiện được quyền đơn phương chấm dứt
mọi giao dịch theo hợp đồng này và yêu cầu bên bị phát hiện bồi thường toàn bộ thiệt
hại, tổn thất.
9.3. Miễn trừ: Một bên sẽ miễn trừ cho Bên còn lại mọi trách nhiệm liên quan nếu hành vi
Hối Lộ của bên đó vi phạm pháp luật Việt Nam và phải bồi thường cho Bên còn lại
các thiệt hại phát sinh, bao gồm cả các thiệt hại do phát sinh chi phí hành chính, chi
phí luật sư và các chi phí khác để xử lý các vấn đề liên đới đến hành vi Hối Lộ của
Bên đó.
============================================================
ĐIỀU 10. GIẢI QUYẾT TRANH CHẤP
10.1. Hợp Đồng này được điều chỉnh và giải thích theo quy định của pháp luật Việt Nam.
10.2. Trong trường hợp có tranh chấp phát sinh từ Hợp Đồng, Các Bên sẽ cố gắng giải
quyết bằng con đường thương lượng, hòa giải. Nếu tranh chấp không giải quyết được
bằng thương lượng, hòa giải thì một bên có quyền đưa ra Toà án có thẩm quyền để
giải quyết. Quyết định của Toà án sẽ là quyết định cuối cùng và có giá trị bắt buộc đối
với Các Bên. Án Phí sẽ do Bên thua kiện chịu.
7
============================================================
ĐIỀU 11. ĐIỀU KHOẢN CHUNG
11.1. Các Bên cam kết thực hiện đầy đủ nội dung ghi trong Hợp Đồng. Trong quá trình thực
hiện nếu có gì khó khăn, Các Bên gặp nhau bàn bạc tìm biện pháp giải quyết trên tinh
thần hợp tác
11.2. Bất kỳ sửa đổi, bổ sung nào đối với Hợp Đồng này sẽ chỉ có hiệu lực nếu được lập
thành văn bản được ký xác nhận bởi đại diện có thẩm quyền của Các Bên. Mọi tài
liệu, văn bản, email, tin nhắn trao đổi và phát hành giữa Các Bên trong quá trình thực
hiện Hợp Đồng này sẽ là những bộ phận không tách rời của Hợp đồng này.
11.3. Nếu bất kỳ điều khoản nào của Hợp Đồng này có toàn bộ hay một phần nội dung bị vô
hiệu do bị trái pháp luật hoặc không thể thi hành được vì bất kỳ lý do nào, phần còn lại
của điều khoản đó và các điều khoản khác sẽ không bị ảnh hưởng và giữ nguyên hiệu
lực.
11.4. Hợp đồng này có hiệu lực kể từ ngày ký. Hợp đồng được lập thành 04 (bốn) bản chính
bằng tiếng Việt có giá trị pháp lý như nhau, mỗi bên giữ 02 (hai) bản để thực hiện.
ĐẠI DIỆN BÊN MUA ĐẠI DIỆN BÊN BÁN
8
============================================================
"""
Tách nội dung từng Điều trong hợp đồng - giữ nguyên text.
"""
import re
def split_contract_by_dieu(text: str) -> list[dict]:
DIEU_RE = re.compile(r'^ĐIỀU\s+(\d+)\.\s*(.+)$')
segments = []
current_dieu = None
current_title = ""
current_content = []
for line in text.splitlines():
line_stripped = line.strip()
if not line_stripped:
continue
m = DIEU_RE.match(line_stripped)
if m:
if current_dieu is not None:
segments.append({
"dieu": current_dieu,
"tieu_de": current_title,
"noi_dung": "\n".join(current_content),
})
current_dieu = int(m.group(1))
current_title = m.group(2).strip()
current_content = []
continue
if current_dieu is not None:
current_content.append(line_stripped)
if current_dieu is not None:
segments.append({
"dieu": current_dieu,
"tieu_de": current_title,
"noi_dung": "\n".join(current_content),
})
return segments
if __name__ == "__main__":
with open("data.txt", "r", encoding="utf-8") as f:
text = f.read()
results = split_contract_by_dieu(text)
# Ghi ra file text, mỗi Điều cách nhau bằng dấu ===
output_lines = []
for seg in results:
output_lines.append(f"ĐIỀU {seg['dieu']}. {seg['tieu_de']}")
output_lines.append(seg["noi_dung"])
output_lines.append("\n" + "=" * 60 + "\n")
output_text = "\n".join(output_lines)
with open("output_dieu.txt", "w", encoding="utf-8") as f:
f.write(output_text)
print(f"Done! Tach duoc {len(results)} Dieu -> output_dieu.txt")
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment