1 flowchart cho toàn bộ app. Ô thoi = câu hỏi (Yes/No), nhãn trên mũi tên = thao tác dẫn tới màn kế.
flowchart TD
classDef order fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d;
classDef vou fill:#fce7f0,stroke:#e0348c,stroke-width:1.5px,color:#831843;
classDef dec fill:#fef9c3,stroke:#ca8a04,color:#713f12;
classDef todo fill:#fdf6e6,stroke:#c79a3a,color:#7a5b12,stroke-dasharray:5 3;
classDef sec fill:#eef2f7,stroke:#94a3b8,color:#334155;
S(["Mở app · màn chờ 3s / chạm"]) --> H["🏠 Trang chủ"]
H -->|"bấm PICKUP / DELIVERY"| MODE{"Chọn hình thức?"}
MODE -->|"Pickup"| MP["Menu — Tự đến lấy"]
MODE -->|"Delivery"| MD["Menu — Giao hàng"]
MP -->|"bấm dòng cửa hàng"| ST["Chọn cửa hàng tự lấy"]
ST --> MP
MD -->|"bấm Giao đến"| AD["Chọn / thêm địa chỉ giao"]
AD --> MD
MP -->|"chọn món"| PD["Chi tiết sản phẩm"]
MD -->|"chọn món"| PD
PD -->|"Thêm vào giỏ 🔒"| GATE{"Đã đăng nhập?"}
GATE -->|"Chưa"| LOGIN["Đăng nhập: nhập SĐT + đồng ý điều khoản"]
LOGIN --> OTP{"Nhập mã OTP đúng?"}
OTP -->|"Sai (≥4 lần → khoá 10 phút)"| LOGIN
OTP -->|"Đúng"| CART["🧺 Giỏ hàng"]
GATE -->|"Rồi"| CART
CART --> USEV{"Dùng voucher?"}
USEV -->|"Có"| VOU["🎟️ Voucher của tôi"]
USEV -->|"Không"| PAY["Thanh toán"]
VOU --> HASV{"Có mã hợp lệ?"}
HASV -->|"Không → nhập/thêm mã"| VE["Thêm voucher (nhập mã) / trạng thái rỗng"]
VE --> CART
HASV -->|"Có"| VA["Chọn mã · áp giảm giá vào đơn"]
VA --> PAY
PAY --> GW{"Cần cổng đối tác? (ví/thẻ/QR)"}
GW -->|"Có"| GATEP["Cổng thanh toán đối tác"]
GW -->|"Không (tiền mặt/tại quầy)"| RES{"Thanh toán thành công?"}
GATEP --> RES
RES -->|"Chưa"| PAY
RES -->|"Thành công"| DONE["✅ Đặt hàng thành công"]
DONE -->|"Xem đơn hàng"| OH["Lịch sử đơn"]
DONE -->|"Về Trang chủ"| H
H -->|"Voucher 🔒"| VOU
H -->|"Tài khoản → Voucher 🔒"| VOU
VOU -->|"Dùng ngay → về Menu"| MODE
H -->|"Đơn hàng 🔒"| OH
OH -->|"chọn đơn"| OD["Chi tiết đơn"]
OD -->|"Đánh giá"| RVW["Đánh giá đơn"]
OD -->|"Đặt lại → đặt hàng lại"| MODE
H -->|"Tài khoản 🔒"| ACC["👤 Tài khoản"]
ACC -->|"ảnh/tên/bánh răng"| PROF["Thông tin cá nhân"]
ACC -->|"chuông"| NOTI["Thông báo"]
PROF -->|"Đổi SĐT"| CHP["Xác minh số cũ → kéo trượt → OTP → nhập số mới → xác nhận"]
PROF -->|"Đăng xuất"| H
NOTI -->|"chạm 1 thông báo"| MODE
H -->|"Calorie"| CAL["Calorie"]
CAL --> CALC["Danh mục"]
CALC --> CALD["Chi tiết · đổi size/đá/ngọt"]
class MP,MD,ST,AD,PD,CART,OH,OD order;
class VOU,VE,VA vou;
class MODE,GATE,OTP,USEV,HASV,GW,RES dec;
class PAY,GATEP,DONE todo;
class LOGIN,ACC,PROF,NOTI,CHP,RVW,CAL,CALC,CALD sec;