Bạn là data analyst kiêm front-end developer. Tôi đính kèm file "Tuan3_AnNhien_DoanhThu_Q1_2026.xlsx" — dữ liệu giao dịch Q1/2026 của chuỗi cà phê An Nhiên (5 chi nhánh ở TP.HCM và Hà Nội). # Bối cảnh dữ liệu File có 5 sheet, chỉ dùng 4 sheet sau (bỏ qua "Hướng dẫn"): - "Giao dịch": ~866 dòng GD, là dữ liệu chính. CẢNH BÁO: dữ liệu BẨN. - "Chi nhánh": bảng tham chiếu — cột "Mã chi nhánh" và "Tên chính thức" là chuẩn để chuẩn hóa tên chi nhánh trong sheet Giao dịch. - "Sản phẩm": bảng giá chuẩn — dùng đối chiếu để phát hiện GD nhập sai giá. - "Mục tiêu KPI": chỉ tiêu doanh thu / số đơn Q1 cho từng chi nhánh. Các vấn đề chất lượng cần xử lý trước khi vẽ: - Cột "Thời gian" có 5 định dạng lẫn lộn (yyyy-mm-dd, dd/mm/yyyy, mm/dd/yyyy kiểu Mỹ, dd-mm-yyyy, dd/mm/yy). Quy tắc: nếu phần đầu > 12 thì chắc chắn dd/mm; nếu phần giữa > 12 thì là mm/dd; còn lại mặc định dd/mm theo VN. - Cột "Chi nhánh" có 5–6 cách viết cho cùng một chi nhánh — chuẩn hóa về "Tên chính thức" trong sheet Chi nhánh bằng fuzzy match hoặc bảng map. - Cột "Mã SP" có hoa/thường, có dấu gạch, có khoảng trắng — chuẩn hóa về định dạng UPPERCASE không khoảng trắng (CF001, TR002, …). - "Số lượng": có thể null, âm (refund hợp lệ), hoặc text như "2 ly". Loại bỏ dòng null/text, GIỮ giá trị âm (đánh dấu là refund). - "Đơn giá": có thể null hoặc text "35,000 VND". Nếu thiếu/sai → tra lại từ sheet Sản phẩm theo Mã SP đã chuẩn hóa. - 8 dòng duplicate hoàn toàn — loại bỏ. - 5 dòng "rỗng giữa dữ liệu" — loại bỏ. - 3 outlier: số lượng/giá bất thường — GIỮ LẠI và đánh dấu để hiển thị ở section "Giao dịch nghi ngờ". # Mục tiêu Tạo MỘT file HTML duy nhất chứa dashboard tương tác để Giám đốc vận hành mở trong trình duyệt mà không cần cài gì. File phải tự đọc được file Excel do người dùng kéo-thả vào trang. # Tech stack - Single-file HTML, không build tool. - Chart.js (CDN) để vẽ biểu đồ. - SheetJS / xlsx.js (CDN) để đọc file .xlsx phía client. - Tailwind CSS (CDN) cho layout và style. - Vanilla JS — không React/Vue. - Toàn bộ logic clean + render trong cùng 1 file, có comment phân section. # Deliverable: dashboard gồm các thành phần 1. Header: tên dashboard + ô upload file Excel (drag-drop được). 2. 4 KPI cards: Tổng doanh thu Q1, Tổng số đơn, AOV (giá trị trung bình/đơn), % đạt KPI tổng. 3. Bộ filter: dropdown Chi nhánh (multi-select), date range, dropdown Danh mục. 4. Bar chart "Doanh thu theo chi nhánh" có overlay đường KPI mục tiêu — chi nhánh nào không đạt thì cột màu đỏ, đạt màu xanh. 5. Line chart "Doanh thu theo ngày" — mỗi chi nhánh một đường, có legend bật/tắt. 6. Horizontal bar "Top 10 sản phẩm" — sort theo doanh thu. 7. Donut "Tỷ trọng Đồ uống vs Đồ ăn". 8. Bảng "Giao dịch nghi ngờ" — list các outlier kèm cột "Lý do nghi ngờ" (số lượng > 99 percentile, đơn giá lệch >20% giá chuẩn, refund...). # Tiêu chuẩn chất lượng - Phối màu pastel, chuyên nghiệp (xanh #2E75B6 chủ đạo, cam #ED7D31 nhấn). - Font Inter hoặc system-ui. - Số tiền format kiểu VN: 1.234.567 ₫. - Responsive, đẹp trên mobile. - Hover có tooltip chi tiết. - Code có comment // ===== SECTION ===== để dễ đọc. - Có error handling: nếu file Excel sai format hiện thông báo rõ ràng. Bắt đầu bằng cách trình bày kế hoạch ngắn gọn (5–8 dòng) trước khi viết code.