Slide 3: CLAUDE.md & .claude/ — Setup chuẩn 2026 cho CAS
MARKDOWN
# Vagataba Development Context (./CLAUDE.md)
## Tech Stack
- Odoo 17 Community Edition (Python 3.10+, PostgreSQL 14)
- Pancake API (Facebook/Zalo OA integration)
- Viettel Post (VTP) & GHTK Shipping API
- MISA Accounting & E-Invoice API (tuân thủ NĐ 254/2026/NĐ-CP)
## Chuẩn vận hành V7.1 & Rules (.claude/rules/)
- KHÔNG thay đổi production database trực tiếp; mọi script PHẢI qua staging + pytest
- KHÔNG commit secrets, API keys, PII khách hàng (tuân thủ Luật BVDLCN 91/2025/QH15)
- Đối soát COD: dung sai <= 5.000 VNĐ/đơn tự khớp TK 6418; lệch > 5.000 VNĐ treo đối soát
- Chống hoàn DVO: 5 cờ đỏ + Claude Fraud Score >= 31 (Verify 6 bước), >= 61 (Hold COD)
- Tên SP chuẩn: "Thực phẩm bổ sung Protein từ thực vật Bách Niên Kiện" (955.000đ/hộp 14 gói — CẤM gọi là "sữa" hay "thuốc")
Slide 4: Prompt — Odoo Server Action (ADM-01)
TEXT
Đọc spec.md và .claude/CLAUDE.md trong folder hiện tại.
Implement Server Action cho Odoo 17 theo chuẩn Vagataba V7.1.
Task: Tự động chấm điểm rủi ro đơn COD (Claude Fraud Score 0–100) & 5 cờ đỏ DVO
- Trigger: on_create / on_write sale.order
- 5 tiêu chí cờ đỏ: (1) Địa chỉ thiếu số nhà/thôn/xóm hoặc chỉ ghi bưu cục;
(2) Đặt khung giờ đêm 22:00–05:00; (3) Giá trị đơn COD > 1.500.000đ (hoặc >= 3 hộp khách mới);
(4) Lịch sử hoàn KLM >= 3 lần; (5) Ghi chú hẹn giao lùi > 7 ngày.
- Output: x_fraud_score (Integer 0–100) + x_dvo_status (Selection: standard / verify_6_steps / hold_cod)
- Quy tắc: >= 1 cờ đỏ hoặc score >= 31 -> bắt buộc DVO gọi xác minh 6 bước;
score >= 61 -> khóa COD (hold_cod), thông báo DVO + STL yêu cầu CK trước.
Yêu cầu:
- Module trong /addons/vaga_cod_fraud_scoring/
- Unit test pytest coverage >= 80% (bao gồm boundary test tại 30, 31, 60, 61 và 1.500.000đ)
- Docstring tiếng Việt, tuân thủ PEP 8.
Slide 5: Prompt — Debug Automation (ADM-02)
XML
<role>Chuyên viên Quản trị Hệ thống Odoo (CAS) tại Vagataba.</role>
<context>
Vấn đề: Automation Rule "Auto-assign DVO Verify" chạy lặp 2 lần cho cùng 1 đơn hàng khi đồng bộ từ Pancake sang Odoo 17.
</context>
<error_log trust="untrusted">
[PASTE LOG ODOO / WEBHOOK PAYLOAD ĐÃ ẨN SĐT KHÁCH HÀNG]
</error_log>
<task>
Phân tích:
1. Điều kiện trigger nào đang kích hoạt kép (race condition giữa webhook create và write)?
2. Cách khắc phục triệt để (idempotency key / check trạng thái trước khi chạy).
3. Viết bản vá code Python + kế hoạch kiểm thử trên Staging.
</task>
Slide 6: Git Safety — 7 quy tắc
#
Quy tắc
1
Branch trước, code sau — feature/xxx, fix/xxx
2
Commit state trước khi AI edit — tạo checkpoint an toàn
3
Review diff MỌI thay đổi AI — git diff + Subagent security-auditor
4
Test sau mỗi edit — chạy pytest trên Staging
5
KHÔNG commit secrets/PII — dùng .env + PreToolUse Hook chặn đọc .env
6
PR require review — tối thiểu 1 reviewer con người
7
Rollback plan — luôn có script revert sẵn sàng
Slide 7: Progressive Trust cho Code
Giai đoạn
Mức tin
Cách làm
Lần đầu dùng AI code
🔴
Review từng dòng, test mọi boundary case
Sau 5 lần thành công
🟡
Spot check diff + automated test (pytest)
Sau 20 lần thành công
🟢
Trust cho boilerplate + monitor log
Task MỚI / stakes cao
🔴 Reset
Review lại từng dòng từ đầu
⚠️ KHÔNG BAO GIỜ skip review cho: code xử lý tiền/đối soát COD (TK 6418, duyệt chi 4-Eye > 5M), dữ liệu cá nhân khách hàng (91/2025/QH15), và API hóa đơn điện tử (NĐ 254/2026/NĐ-CP).
Slide 8: Pháp lý TPBS / TPBVSK cho CAS — Tại sao cần biết?
Rủi ro
Ví dụ vi phạm
Hành động bắt buộc của CAS
Template Zalo OA tự động
Tin nhắn tự động D+3 ghi "Sữa BNK chữa đau khớp"
Rà soát mọi template (D+0, D+3, D+10, D+20, D+25, D+35): cấm từ "sữa", cấm từ "chữa/trị/khỏi", không gán công dụng khớp cho TPBS Protein
Landing page / Webhook
Script tạo LP chứa claim sai hoặc thiếu disclaimer
Thêm regex filter chặn từ cấm trước khi publish
Odoo E-Invoice & Email
Hóa đơn ghi "Thuốc BNK" hoặc "Sữa hạt BNK"
Khóa cứng tên danh mục chuẩn: "Thực phẩm bổ sung Protein từ thực vật Bách Niên Kiện" (955.000đ) và "TPBVSK Viên xương khớp Bách Niên Kiện" (699.000đ / 185.000đ)
Báo cáo tự động
Script tổng hợp báo cáo lọt SĐT/CCCD khách lên AI
Masking PII (090***1234) bằng script local trước khi gọi API
Slide 9: Bài tập CAS
Bài
Nội dung
Điểm
1
Viết spec.md cho Server Action chấm Claude Fraud Score → dùng Claude Code implement + pytest
/10
2
Debug 1 automation rule từ <error_log trust="untrusted"> → tìm root cause + viết bản vá idempotency
/10
3
Thiết lập ./CLAUDE.md + .claude/rules/ + PreToolUse Hook bảo vệ .env cho repo Vagataba