📋 Báo cáo kỹ thuật & phân tích chuyển đổi

Phân tích Chuyển đổi Hệ thống
24HStation → Chagee

Báo cáo chi tiết về sự thay đổi kiến trúc, nỗ lực lập trình (effort) và các rủi ro khi chuyển đổi từ nền tảng POS Kiosk sang Mobile App khách hàng.

38–50
Ngày FE (1 dev Flutter)
32–44
Ngày BE P0 (Medusa v2)
70%+
Code viết mới (FE + BE)
47
Tính năng backend phân tích
01Khác biệt cốt lõi
Loại hình & đối tượng
24HStation
POS Kiosk (Tablet)
Nhân viên dùng
Chagee
Customer Mobile App
Khách hàng End-user
Kỹ thuật & thiết kế
Kích thước800×1280 vs 390×844
Màu sắc#FFB806 vs Navy/Gold
FontRoboto vs Serif Luxury
Điều hướngKiosk Flow vs Bottom Tab
02Phân tích từng màn hình
01Trang chủ (Home Screen)
85% code mới5–7 ngày
Chagee có: Banner carousel, Promo popup, Pickup/Delivery selection, Coupon cards, Grid menu (Lịch sử, Giới thiệu bạn, Điểm thưởng, Calo), Welcome bar + Đăng nhập, Bottom tab bar.
App hiện tại: Home screen chỉ có banner carousel đơn giản, không có tabs, không có promotion section.
Hạng mụcEffortFiles liên quan
Redesign toàn bộ layout Home
40% UI mới
screens/home_screen/
Banner carousel (tái sử dụng ~30%)
20% chỉnh sửa
cubits_v2/banner/, cubits_v2/header_banner/
Welcome bar + Login trigger
100% mới
Tạo mới widget
Pickup/Delivery toggle
100% mới
Tạo mới widget + provider
Coupon/Promotion cards
100% mới
Tạo mới model + cubit + widget
Grid menu (4 ô vuông)
100% mới
Tạo mới widget
Popup promo (Grand Opening)
100% mới
Dialog widget mới
Bottom Tab Navigation
100% mới
Refactor main.dart routing
Effort: ~85% code mới
Thời gian: 5–7 ngày
Files: ~12 files
02Chọn cửa hàng (Store Selection)
85% code mới3–4 ngày
Chagee có: Search bar, Tabs (Gần bạn / Yêu thích), Store cards (tên, địa chỉ, khoảng cách, ảnh, số ly đang chuẩn bị), nút "Đặt hàng ngay".
App hiện tại: screens/select_store/ — có màn chọn store dạng kiosk, không có search, không có tabs.
Hạng mụcEffortFiles liên quan
Redesign store list UI
70% mới
screens/select_store/
Search bar
100% mới
Tạo widget mới
Tabs Gần bạn / Yêu thích
100% mới
Tạo mới
Store card (ảnh, khoảng cách, capacity)
80% mới
models_v2/store.dart cần mở rộng
Location/GPS integration
100% mới
Package mới + permission
Favorite store logic
100% mới
Hive local storage
Effort: ~85% code mới
Thời gian: 3–4 ngày
Files: ~8 files
03Thực đơn (Menu / Order Screen)
55% code mới4–5 ngày
Chagee có: Header (tên store, khoảng cách), Category sidebar bên trái, Banner promo trên đầu, Product list dạng card (ảnh + tên + giá + mô tả + nút +), Deal section riêng.
App hiện tại: screens/menu_screen/ — đã có sidebar menu + product list, thiết kế cho tablet kiosk.
Hạng mụcEffortFiles liên quan
Category sidebar (đã có ~60% logic)
30% chỉnh UI
widgets/_menu_wheel.dart, cubits_v2/menuSideBar/
Product list redesign
50% mới
widgets/_product_menu_item.dart, cubits_v2/productList/
Store header info
80% mới
Widget mới
Deal/Promo banner section
100% mới
Widget mới
Nút + thêm nhanh vào giỏ
60% cần UI
cubits_v2/cart/
Scroll sync sidebar ↔ list
50% mới
Logic mới
Effort: ~55% code mới
Thời gian: 4–5 ngày
Files: ~10 files
04Chi tiết sản phẩm (Product Detail)
35% code mớiTái sử dụng nhiều nhất2–3 ngày
Chagee có: Full-screen ảnh sản phẩm, Tên + mô tả, Size selector, Mức đá, Độ ngọt, Số lượng picker, 2 nút: Thêm vào giỏ / Đặt hàng.
App hiện tại: screens/select_product_opts_v2/ — đã có image slider, option selectors, quantity picker.
Hạng mụcEffortFiles liên quan
Image hero section (đã có slider)
30% chỉnh
widget/_image_slider.dart
Option selectors (đã có logic)
30% chỉnh UI
widget/_select_product_opts.dart
Chip-style buttons (Size, Đá, Ngọt)
50% redesign
Widget styling
Dual CTA buttons (Thêm giỏ + Đặt)
60% mới
Layout mới
Quantity picker (đã có)
20% chỉnh
widgets/_number_picker.dart
Mô tả expandable
70% mới
Widget mới
Effort: ~35% code mới
Thời gian: 2–3 ngày
Files: ~6 files
05Lịch sử đặt hàng (Order History)
95% code mới4–5 ngày
Chagee có: Tabs (Tất cả, Trực tuyến, Tại cửa hàng, Khác), Empty state illustration, Nút "Đặt hàng ngay".
App hiện tại: Không có màn tương đương (chỉ có notification screens cho order status).
Hạng mụcEffortFiles liên quan
Order history screen
100% mới
Tạo screen mới
Tab filtering
100% mới
Widget + logic mới
Order list item widget
100% mới
Widget mới
Order detail screen
100% mới
Screen mới
Empty state
100% mới
Widget mới
Re-order logic
100% mới
Cubit mới
API integration
50% (api_order_service)
Mở rộng service
Effort: ~95% code mới
Thời gian: 4–5 ngày
Files: ~10 files
06Tài khoản (Profile / Tab "Tôi")
95% code mới3–4 ngày
Chagee có: Avatar + tên, Membership card (FRIEND rank), Tea Leaves + Voucher counters, Settings/Notification icons, FAQ link, Quyền lợi link.
App hiện tại: Không có (chỉ có settings cho kiosk config).
Hạng mụcEffortFiles liên quan
Profile screen
100% mới
Screen mới
Membership card widget
100% mới
Widget + model mới
Points/Voucher display
100% mới
Widget + cubit mới
Settings icon navigation
30% (đã có setting)
Link lại
Notification bell
100% mới
Widget + logic mới
FAQ webview
100% mới
Screen mới
Effort: ~95% code mới
Thời gian: 3–4 ngày
Files: ~8 files
07Đăng nhập / Đăng ký (Authentication)
100% code mới5–7 ngày
Chagee có: Bottom sheet modal, Phone input (+84), Mã giới thiệu, Email/Apple login, Điều khoản checkbox.
App hiện tại: Không có authentication.
Hạng mụcEffortFiles liên quan
Auth flow (login/register/OTP)
100% mới
3–4 screens mới
Phone input widget
100% mới
Widget mới
Social login (Apple, Email)
100% mới
Packages + logic mới
Token management
100% mới
Service + interceptor mới
User session/profile model
100% mới
Model + cubit mới
Effort: ~100% code mới
Thời gian: 5–7 ngày
Files: ~12 files
03Các trang phụ bổ sung
8aThanh toán QR
40% code mới1–2 ngày
App hiện tại đã có: screens/payment_screen_v2/ với QR code display + timer. Chủ yếu redesign UI cho mobile style, logic giữ nguyên.
Hạng mụcEffortGhi chú
Redesign UI cho mobile style
40% chỉnh
Giữ nguyên logic hiện tại
Logic QR / Timer
0% — tái sử dụng
screens/payment_screen_v2/
Effort: ~40%
Thời gian: 1–2 ngày
Files: ~4 files
8bĐặt tại bàn + Gọi thêm khi đơn ở bàn
100% code mới5–6 ngày
App hiện tại: Có table selection trong settings, không có flow "gọi thêm". Toàn bộ flow đặt bàn và order management phải xây dựng mới.
Hạng mụcEffortFiles liên quan
Table selection screen (visual map)
100% mới
Active order at table detection
100% mới
"Gọi thêm" — Add to existing order
100% mới
Order merge logic (append items)
100% mới
Table status (Trống/Đang phục vụ)
100% mới
Effort: ~100%
Thời gian: 5–6 ngày
Files: ~12 files
8cGiỏ hàng / Checkout
50% code mới2–3 ngày
App hiện tại: Có cart logic + checkout screen. Cần redesign giao diện phù hợp với nền tảng mobile.
Hạng mụcEffortGhi chú
Cart review redesign cho mobile
50% chỉnh
Checkout flow redesign
50% chỉnh
Effort: ~50%
Thời gian: 2–3 ngày
Files: ~6 files
04Bảng tổng hợp effort
#Màn hình% Code mớiNgày ước tínhFiles
01Trang chủ
85%
5–7 ngày~12
02Chọn cửa hàng
85%
3–4 ngày~8
03Thực đơn (Menu)
55%
4–5 ngày~10
04Chi tiết sản phẩm
35%
2–3 ngày~6
05Lịch sử đặt hàng
95%
4–5 ngày~10
06Tài khoản (Tôi)
95%
3–4 ngày~8
07Đăng nhập / Đăng ký
100%
5–7 ngày~12
8aThanh toán QR
40%
1–2 ngày~4
8bĐặt tại bàn + Gọi thêm
100%
5–6 ngày~12
8cGiỏ hàng / Checkout
50%
2–3 ngày~6
Bottom Tab Nav + Theme + Routing
80%
3–4 ngày~8
05Tổng kết dự án
Tổng effort ước tính
38–50
ngày làm việc (1 dev Flutter)
Code viết mới hoàn toàn
70–75%
tổng codebase
Code tái sử dụng được
25–30%
cart, product, models, API services
Thay đổi lớn nhất
Kiosk → Mobile
POS tablet → Customer-facing app
06Phân loại module
Modules tái sử dụng tốt nhất
Cart cubitTái sử dụng
Product modelsTái sử dụng
Menu sidebar logicTái sử dụng
Payment QR (logic)Tái sử dụng
API servicesTái sử dụng
Image slider widgetTái sử dụng
Number picker widgetTái sử dụng
Modules phải viết lại hoàn toàn
Authentication (Auth)Viết mới
Profile / Tài khoảnViết mới
Order historyViết mới
Home pageViết mới
Navigation (Tab bar)Viết mới
Theme systemViết mới
Token / Session managementViết mới
07Phân tích Backend (Medusa v2)
Tổng P0 (Bắt buộc)
32–44
ngày · 16 items
Tổng P1 (Quan trọng)
28–42
ngày · 18 items
Code hiện có tái sử dụng
~15%
Banner, IPOS client, Cart, Payment
Modules hoàn toàn mới
70%+
Auth, Loyalty, Voucher, Table, Notification
AAuthentication & User Management
0–5% hiện có9–15 ngày
Hiện tại: Không có code OTP, SMS, phone auth. Auth module của Medusa chưa enable trong medusa-config.js. Chỉ có JWT_SECRETCOOKIE_SECRET trong config.
Cần làm: Enable Auth Module, Custom Auth Provider cho SĐT+OTP (SMS gateway), Apple Sign-In Provider, JWT refresh token logic, Referral Module.
IDTính năngHiện cóEffortChi tiết
A1Đăng ký SĐT + OTP
0%
3–4 ngàyKhông có code OTP, SMS, phone auth
A2Đăng nhập SĐT + OTP
0%
2–3 ngàyChung hạ tầng A1
A3Apple Sign-In
0%
2–3 ngàyKhông có OAuth provider
A4Đăng nhập Email
0%
1–2 ngàyMedusa có built-in nhưng chưa enable
A5Token management (JWT)
5%
1–2 ngàyChỉ có JWT_SECRET, chưa có refresh logic
A6Logout
0%
0.5 ngàyKhông có endpoint hay session revocation
A7Mã giới thiệu (Referral)
0%
2–3 ngàyKhông có referral table, code, hay logic
Tổng effort: 9–15 ngày
Trạng thái: Hoàn toàn mới
BCustomer Profile & Membership
0% hiện có9–13 ngày
Hiện tại: Không có route /store/customers/me. Medusa có Customer Module built-in nhưng chưa có custom route nào. Không có membership model, tier logic, points model hay "Tea Leaves" reference.
Lưu ý: B1+B2 dùng Medusa Customer Module built-in (effort thấp). B3+B4 là Loyalty system — cần xây dựng custom module hoàn toàn mới.
IDTính năngHiện cóEffortChi tiết
B1Lấy thông tin profile
0%
1 ngàyEnable built-in Customer Module
B2Cập nhật profile
0%
0.5 ngàyEnable built-in
B3Membership / Hạng thành viên
0%
3–4 ngàyCustom module hoàn toàn mới
B4Điểm tích lũy (Tea Leaves)
0%
3–4 ngàyCustom module mới
B5Lịch sử điểm
0%
1–2 ngàyPhụ thuộc B4
B6Quyền lợi thành viên
0%
1–2 ngàyKhông có benefits configuration
Tổng effort: 9–13 ngày
Trạng thái: Hoàn toàn mới (B1-B2 effort thấp)
CVoucher & Promotion
10–15% hiện có9–14 ngày
Hiện tại: Banner model có sẵn (5 fields) với CRUD routes. HaravanProductCombo model tồn tại. IPOS client có check_voucher().
Medusa Promotion Module (Built-in, chưa enable): 29 API methods, hỗ trợ Standard discount, Buy X Get Y, Campaign management, Rules engine, computeActions(). Chỉ cần enable trong medusa-config.js.
IDTính năngHiện cóEffortChi tiết
C1Danh sách voucher của tôi
0%
2–3 ngàyKhông có voucher module, table, hay route
C2Voucher người mới
0%
1–2 ngàyKhông có auto-grant logic
C3Thu thập voucher
0%
1 ngàyKhông có collect logic
C4Áp voucher vào đơn
0%
2–3 ngàyIPOS check_voucher() có nhưng chưa tích hợp cart
C5Promotion banner
15%
1–2 ngàyBanner model + CRUD có sẵn, cần mở rộng
C6Deal/Combo products
10%
2–3 ngàyCombo model có, chưa có API route/cart integration
Tổng effort: 9–14 ngày
Code tái sử dụng: Banner CRUD, IPOS check_voucher(), Combo model
EMenu & Product
75–85% hiện có1 ngày
Hiện tại: Collections, Products, Product detail + variants đã hoạt động tốt. Route GET /v2/settings/admin/pos/pos_menu + filter product_collection_id đã implement. IposItem model (17 fields) + customizations + options.
Chỉ cần: Explicit availability API cho store-specific items.
IDTính năngHiện cóEffortChi tiết
E1Collections/categories
80%
0PosMenuConfig + collection support
E2Products theo collection
85%
0Filter product_collection_id hoạt động
E3Product detail + variants
75%
0IposItem (17 fields) + variant mapping
E4Available per store
40%
1 ngàyItems linked via store_id, chưa có API riêng
Tổng effort: 1 ngày
Trạng thái: Phần lớn giữ nguyên
FCart & Checkout
50% hiện có4–6 ngày
Hiện tại: Medusa native Cart module được sử dụng. Cart tạo, thêm/sửa/xóa line items, complete cart → order đã hoạt động. Delivery type enum có (STORE = "1", DELI = "2").
Cần bổ sung: Gắn cart với customer, chuẩn hóa delivery type (PICKUP/DELIVERY/DINE_IN), áp voucher/discount vào cart, expose rõ ghi chú đơn hàng.
IDTính năngHiện cóEffortChi tiết
F1Tạo cart
60%
0Medusa native Cart module
F2Thêm/sửa/xóa line item
60%
0Medusa native API
F3Complete cart → Order
60%
0Medusa native flow
F4Gắn cart với customer
20%
1–2 ngàyCustomer link chưa implement
F5Delivery type
75%
1 ngàyCần chuẩn hóa PICKUP/DELIVERY/DINE_IN
F6Áp voucher/discount
0%
2–3 ngàycheck_voucher() có nhưng chưa tích hợp cart
F7Ghi chú đơn hàng
0%
0.5 ngàyField note trong workflow, cần expose rõ hơn
Tổng effort: 4–6 ngày
Trạng thái: Cơ bản có, cần bổ sung
GPayment
60% hiện có3–5 ngày
Hiện tại: VNPay đã có full implementation: QR code generation (createQRCode()), config model, payment service hoàn chỉnh. Callback webhook hoạt động: POST /v2/payment/vnpay_callback. Transaction check: POST /v2/cart/check_vn_pay_transaction.
Cần thêm: Thanh toán bằng điểm (phụ thuộc Loyalty B4), polling endpoint cho mobile app.
IDTính năngHiện cóEffortChi tiết
G1Payment collection + session
90%
0Full implementation trong payment-vnpay/
G2QR Payment (VNPay)
90%
0QR generation, config, service hoàn chỉnh
G3Manual Payment
40%
0pp_system_default, PAYMENT_ON_DELIVERY
G4Thanh toán bằng điểm
0%
2–3 ngàyPhụ thuộc Loyalty module (B4)
G5Payment status polling (mobile)
80%
1–2 ngàyVNPay callback có, cần thêm polling endpoint
Tổng effort: 3–5 ngày
Trạng thái: VNPay tốt, cần bổ sung
HOrder Management
40–50% hiện có7–12 ngày
Hiện tại: Orders theo table/device hoạt động tốt (GET /v2/orders/pos). Đơn processing có route. IPOS callback cập nhật trạng thái qua workflow (CONFIRMED → IN PROCESS → COMPLETED).
Thiếu: Route /store/customers/me/orders (lịch sử đơn theo customer), Store API route riêng cho chi tiết đơn, Re-order, WebSocket/SSE cho mobile, Filter API.
IDTính năngHiện cóEffortChi tiết
H1Orders theo table/device
85%
0GET /v2/orders/pos hoạt động tốt
H2Đơn đang processing
90%
0GET /v2/orders/pos/processing
H3Lịch sử đơn theo customer
0%
2–3 ngàyChỉ query theo table/device, không theo customer_id
H4Chi tiết đơn hàng
50%
1–2 ngàyLogic có trong workflow, chưa có store API route
H5Re-order
0%
1–2 ngàyKhông có implementation
H6Order tracking realtime
40%
2–3 ngàyIPOS callback có, thiếu WebSocket/SSE
H7Filter đơn theo loại
30%
0.5 ngàyDelivery type trong metadata, chưa có filter API
Tổng effort: 7–12 ngày
Trạng thái: POS tốt, cần API cho customer-facing
08Backend — Phân chia ưu tiên

P0 Bắt buộc — Core flow không hoạt động nếu thiếu

IDTính năngLoạiEffort
Version Upgrade (Medusa v2)Upgrade7–9 ngày
A1Đăng ký SĐT + OTPMỚI3–4 ngày
A2Đăng nhập SĐT + OTPMỚI2–3 ngày
A5Token management (JWT)MỚI1–2 ngày
A6LogoutMỚI0.5 ngày
B1Lấy profile customerMỚI1 ngày
D1Store + toạ độ/ảnh/giờSỬA2–3 ngày
D2Tìm store gần nhất (GPS)SỬA2–3 ngày
F4Gắn cart với customerSỬA1–2 ngày
F5Chuẩn hóa delivery typeSỬA1 ngày
G5Payment status polling mobileSỬA1–2 ngày
H3Lịch sử đơn hàng customerMỚI2–3 ngày
H4Chi tiết đơn hàngMỚI1–2 ngày
I1Danh sách bàn + trạng tháiMỚI2–3 ngày
I2Trạng thái bàn realtimeMỚI2–3 ngày
I3Gọi thêm món vào đơn bànMỚI2–3 ngày
I4Xem đơn hiện tại của bànSỬA0.5 ngày
Tổng P0: 16 items → 32–44 ngày (bao gồm upgrade)

P1 Quan trọng — App hoạt động nhưng thiếu trải nghiệm

IDTính năngLoạiEffort
A3Apple Sign-InMỚI2–3 ngày
A4Email loginMỚI1–2 ngày
B3Membership / Hạng thành viênMỚI3–4 ngày
B4Điểm tích lũy (Tea Leaves)MỚI3–4 ngày
C1Voucher của tôiMỚI2–3 ngày
C2Voucher người mớiMỚI1–2 ngày
C4Áp voucher vào cartMỚI2–3 ngày
C5Promotion banner managementSỬA1–2 ngày
C6Deal/Combo productsMỚI2–3 ngày
D3Search store theo tênSỬA1 ngày
D5Số ly đang chuẩn bịMỚI1–2 ngày
F6Áp voucher/discountMỚI2–3 ngày
H6Order tracking realtimeMỚI2–3 ngày
H7Filter đơn theo loạiSỬA0.5 ngày
I5Đóng bàn / Thanh toánMỚI1–2 ngày
I6QR scan bànMỚI (FE)0.5 ngày
J1Push notification (FCM)MỚI3–4 ngày
K4App config / Feature flagsMỚI1–2 ngày
Tổng P1: 18 items → 28–42 ngày

P2 Nice to have

IDTính năngLoạiEffort
A7Mã giới thiệuMỚI2–3 ngày
B2Cập nhật profileMỚI0.5 ngày
B5Lịch sử điểmMỚI1–2 ngày
B6Quyền lợi thành viênMỚI1–2 ngày
C3Thu thập tất cả voucherMỚI1 ngày
D4Cửa hàng yêu thíchMỚI1–2 ngày
D6Thời gian chờ ước tínhMỚI1–2 ngày
E5Mô tả sản phẩm rich textSỬA0.5 ngày
F7Ghi chú đơn hàngSỬA0.5 ngày
G4Thanh toán bằng điểmMỚI2–3 ngày
H5Re-orderMỚI1–2 ngày
J2Danh sách thông báoMỚI1–2 ngày
J3Đánh dấu đã đọcMỚI1 ngày
09Backend — Code hiện tại có thể tái sử dụng
Files / modules giữ nguyên hoặc mở rộng
src/modules/pos/models/banner.tsMở rộng
src/api/settings/pos/admin/banner/route.tsGiữ
src/api/settings/pos/app/banner/route.tsGiữ
src/modules/libs/ipos_client.tsTái sử dụng
src/modules/haravan/models/product.tsTái sử dụng
src/modules/haravan/models/product_combo.tsMở rộng
src/modules/providers/payment-vnpay/Giữ
Medusa Cart Module (native)Giữ
Order routes /v2/orders/posGiữ
Modules hoàn toàn mới cần xây
Auth Module (SĐT + OTP + Social)Viết mới
Customer Profile routesViết mới
Loyalty / Membership ModuleViết mới
Tea Leaves (Điểm tích lũy)Viết mới
Voucher ModuleViết mới
Table Management ModuleViết mới
Notification Module (FCM)Viết mới
Store API (GPS, favorite, capacity)Viết mới
Customer Order History routesViết mới
10Rủi ro chính
Responsive Breakpoint
Design size 800×1280 px (tablet) chuyển sang 390×844 px (phone) yêu cầu refactor toàn bộ responsive layout. Tất cả widget hiện tại được tối ưu cho màn hình lớn hơn gần gấp đôi.
Mức độ cao
Navigation Paradigm
Chuyển từ Kiosk flow tuyến tính (linear) sang Tab-based (free navigation) là thay đổi kiến trúc cốt lõi. Cần refactor toàn bộ routing, state management và back-stack handling.
Mức độ cao
Authentication Backend
Backend hiện tại không có authentication module. Xây mới hoàn toàn hệ thống auth (phone OTP, social login, token refresh) tạo dependency với hầu hết các tính năng customer-facing khác.
Mức độ trung bình
Medusa v2 Upgrade
Version upgrade là P0 bắt buộc (7–9 ngày). Nhiều built-in module (Auth, Customer, Promotion) chưa enable. Upgrade có thể ảnh hưởng đến toàn bộ code hiện tại.
Mức độ cao
Loyalty System
Membership + Tea Leaves + Voucher là 3 custom modules phụ thuộc lẫn nhau, cần thiết kế data model cẩn thận. Thanh toán bằng điểm (G4) phụ thuộc Loyalty (B4).
Mức độ trung bình
Realtime (WebSocket/SSE)
Order tracking (H6) và Table status (I2) cần realtime. Medusa v2 không có built-in WebSocket — cần custom implementation hoặc third-party (Socket.io, Pusher).
Mức độ trung bình