14 — Screen Matrix chính thức (CON · PAR · DRV · ADM)
Chốt 2026-07-29 · Nguồn: inventory FE +
design-index+ Swagger tags · Audit JPG trước đó. Doc này là source of truth cho: mockup còn thiếu · nav · RBAC · API trước khi code sâu. Gap JPG cũ: 13-FE-SCREEN-GAP-MATRIX.md
0. Legend
| Cột | Giá trị |
|---|---|
| Trạng thái | DONE = mockup+code+API khớp MVP · PARTIAL = thiếu form/depth · PLANNED = chưa có mockup/board |
| Có mockup | Y / N / P (partial — có CTA trên board khác, chưa board riêng) |
| Có code | Y / N / P (screen mỏng / gộp tab) |
| API | Tag Swagger · IMP / PARTIAL / N/A |
Quy tắc code sâu (Step 5): một vertical =
List → Detail → Create/Edit → Action → Success/Error → History
Không ship màn rời ngoài chuỗi này.
Ưu tiên code (chốt):
Driver → Admin → Shared KYC/Chat/Wallet → Partner forms → Error states CON
1. Board bổ sung (14) — Step 2
Chưa có file JPG → trạng thái mockup = N. Spec panel ở design-boards/. Khi design xong: thả JPG root + cập nhật
design-index.md+ cột Có mockup → Y.
| # | Board ID | Surface | Domain | Panels tối thiểu | WP |
|---|---|---|---|---|---|
| 1 | BOARD-DRV-01 | DRV | D-DRIVER | Trip list · Trip detail active · Accept/Reject | WP-FE-DRV-UI-01 |
| 2 | BOARD-DRV-02 | DRV | D-DRIVER | In-trip nav · Slide pickup/complete · Chat/Call | WP-FE-DRV-UI-02 |
| 3 | BOARD-DRV-03 | DRV | D-DRIVER · D-KYC | Register · eKYC wizard · Wallet withdraw · Ratings depth | WP-FE-DRV-UI-03 |
| 4 | BOARD-ADM-01 | ADM | Platform | Shell · Login ADMIN · Overview KPIs | WP-FE-ADM-01 |
| 5 | BOARD-ADM-02 | ADM | D-KYC · D-PARTNER · D-DRIVER | Approve queue KYC / Partner / Driver | WP-FE-ADM-02 |
| 6 | BOARD-ADM-03 | ADM | Vertical ops | Trip/Order ops · Wallet ledger · Support desk | WP-FE-ADM-03 |
| 7 | BOARD-ADM-04 | ADM | CMS · Promo | CMS edit · Promo admin · Broadcast notif | WP-FE-ADM-04 |
| 8 | BOARD-SHR-KYC | CON/PAR/DRV | D-KYC | Wizard: loại giấy · upload · status · reject reason | WP-FE-KYC-UI-01 |
| 9 | BOARD-SHR-CHAT | CON/PAR/DRV | D-CHAT | Inbox · Thread · Call · Empty/Error | WP-FE-CHAT-UI-02 |
| 10 | BOARD-SHR-WALLET | CON/DRV | D-WALLET | Topup · Withdraw · Transfer · Success/Fail | WP-FE-WALLET-05 |
| 11 | BOARD-PAR-FORM-01 | PAR | D-RENTAL | Landlord: Create/Edit listing · Tenant list · Messages | WP-FE-PAR-RENT-04 |
| 12 | BOARD-PAR-FORM-02 | PAR | D-MED | Clinic: Create Rx · Edit patient · Exam history | WP-FE-PAR-MED-03 |
| 13 | BOARD-PAR-FORM-03 | PAR | D-SCHOOL | Add student · Teacher · Tuition remind | WP-FE-PAR-SCH-03 |
| 14 | BOARD-PAR-FORM-04 | PAR | D-FNB · D-PROMO | Menu item form · Promo create · Staff invite | WP-FE-PAR-FNB-03 |
Tổng: 3 Driver + 4 Admin + 3 Shared + 4 Partner forms = 14 boards.
2. Screen Matrix — Driver (ưu tiên #1)
| Surface | Domain | Screen (SCR) | Trạng thái | Mockup | Code | API |
|---|---|---|---|---|---|---|
| DRV | D-AUTH | SCR-DRV-LOGIN | PARTIAL | P (7b769 settings) |
Y LoginScreen |
auth IMP |
| DRV | D-DRIVER | SCR-DRV-REGISTER | PARTIAL | N → BOARD-DRV-03 | Y RegisterScreen |
driver POST register IMP |
| DRV | D-KYC | SCR-DRV-KYC-WIZARD | DONE | P → BOARD-DRV-03 | Y KycScreen |
driver PATCH kyc IMP |
| DRV | D-DRIVER | SCR-DRV-HOME | PARTIAL | Y 7b769 |
Y HomeScreen pixel |
driver me/status/earnings IMP |
| DRV | D-DRIVER | SCR-DRV-TRIP-LIST | DONE | P → BOARD-DRV-01 | Y TripsScreen |
GET trips/available|active IMP |
| DRV | D-DRIVER | SCR-DRV-TRIP-DETAIL | DONE | Y 7b769 #1 |
Y TripDetailScreen |
accept/pickup/complete IMP |
| DRV | D-DRIVER | SCR-DRV-IN-TRIP | DONE | Y 7b769 #1 |
Y InTripScreen |
arrive → pickup → complete + WS /rides |
| DRV | D-WALLET | SCR-DRV-WALLET | DONE | Y 7b769 #3 |
Y WalletScreen |
driver earnings + wallet IMP |
| DRV | D-WALLET | SCR-DRV-WITHDRAW | DONE | P → BOARD-SHR-WALLET | Y modal withdraw | POST wallet/withdraw IMP |
| DRV | D-REVIEW | SCR-DRV-RATINGS | DONE | Y 7b769 #5 |
Y RatingsScreen |
GET ratings + reply IMP |
| DRV | D-CHAT | SCR-DRV-CHAT | DONE | P → BOARD-SHR-CHAT | Y ChatInboxScreen |
chat IMP |
| DRV | D-USER | SCR-DRV-SETTINGS | DONE | Y 7b769 #4 |
Y SettingsScreen |
users/me + driver/me IMP |
Nav DRV (chốt):
AuthStack(Login|Register|Kyc) → MainTabs: Home | Trips | Wallet | Ratings | Account
Online toggle chỉ trên Home. In-trip = modal/stack trên Trips.
3. Screen Matrix — Admin (ưu tiên #2)
| Surface | Domain | Screen (SCR) | Trạng thái | Mockup | Code | API |
|---|---|---|---|---|---|---|
| ADM | D-AUTH | SCR-ADM-LOGIN | DONE | P → BOARD-ADM-01 | Y LoginPanel |
auth + ADMIN_EMAILS IMP |
| ADM | Platform | SCR-ADM-OVERVIEW | DONE | P → BOARD-ADM-01 | Y OverviewModule |
KPI từ kyc/partners/driver/support |
| ADM | D-KYC | SCR-ADM-KYC-QUEUE | DONE | P → BOARD-ADM-02 | Y KycModule |
kyc admin IMP |
| ADM | D-PARTNER | SCR-ADM-PARTNER-QUEUE | DONE | P → BOARD-ADM-02 | Y PartnersModule |
partners admin IMP |
| ADM | D-DRIVER | SCR-ADM-DRIVER-QUEUE | DONE | P → BOARD-ADM-02 | Y DriverModule |
driver admin IMP |
| ADM | D-RIDES · D-FNB | SCR-ADM-OPS-TRIPS-ORDERS | DONE | P → BOARD-ADM-03 | Y OpsModule |
rides/orders admin thin IMP |
| ADM | D-WALLET | SCR-ADM-LEDGER | DONE | P → BOARD-ADM-03 | Y LedgerModule |
wallet/admin/ledger IMP |
| ADM | D-SUPPORT | SCR-ADM-SUPPORT-DESK | DONE | P → BOARD-ADM-03 | Y SupportModule |
support IMP |
| ADM | D-HOTEL · D-MED · D-PHARM · D-SCHOOL | SCR-ADM-VERTICAL-* | IMP | N | Y actions | admin cancel/confirm/verify |
| ADM | D-CMS · D-PROMO · D-NOTIF | SCR-ADM-CMS-PROMO | DONE | P → BOARD-ADM-04 | Y CmsModule |
cms/promotions/notifications admin IMP |
| ADM | D-HEALTH | SCR-ADM-HEALTH | PARTIAL | N | Y HealthModule |
health IMP |
Nav ADM (chốt) — WP-FE-ADM-IA-01:
Sidebar: Tổng quan · Duyệt hồ sơ eKYC / Đối tác / Tài xế / Agent AI · Vận hành Chuyến & đơn / Sổ ví / Hỗ trợ · Đặt chỗ KS / Khám / Thuốc / Trường / Trọ / Đỗ · Bản đồ Điểm POI / Xăng · Hệ thống Phân quyền / Nội dung & KM / Health.
Role: chỉ ADMIN.
Gap UI (chưa API admin): Social/Review/Chat mod · ATM/sạc/buýt CMS · Bills/QR/Home · Payment ops — DASHBOARD-AUDIT-PLAN.
4. Screen Matrix — Shared KYC / Chat / Wallet (ưu tiên #3)
| Surface | Domain | Screen (SCR) | Trạng thái | Mockup | Code | API |
|---|---|---|---|---|---|---|
| CON | D-KYC | SCR-KYC-SUBMIT | DONE | P → BOARD-SHR-KYC | Y wizard steps | POST kyc/submit · GET status IMP |
| CON/PAR/DRV | D-KYC | SCR-KYC-WIZARD | DONE | P → BOARD-SHR-KYC | Y KycSubmitScreen |
cùng tag kyc / driver kyc |
| CON | D-KYC | SCR-KYC-STATUS | DONE | P → BOARD-SHR-KYC | Y step status | GET status IMP |
| CON | D-CHAT | SCR-CHAT-INBOX | DONE | P | Y ConversationsScreen |
chat IMP |
| CON | D-CHAT | SCR-CHAT-THREAD | DONE | P | Y ChatThreadScreen |
WS /chat IMP |
| CON | D-CHAT | SCR-CHAT-CALL | DONE | P | Y CallScreen |
signal IMP |
| CON/PAR/DRV | D-CHAT | SCR-CHAT-EMPTY-ERROR | DONE | P → BOARD-SHR-CHAT | Y Empty/Error | N/A UI |
| CON | D-WALLET | SCR-WALLET-HOME | DONE | Y 6183 |
Y | GET wallet IMP |
| CON | D-WALLET | SCR-WALLET-TX | DONE | Y | Y | GET transactions IMP |
| CON | D-WALLET | SCR-WALLET-METHODS | DONE | Y | Y | payment-methods IMP |
| CON | D-WALLET | SCR-WALLET-ADD-CARD | DONE | Y | Y | POST methods IMP |
| CON | D-WALLET | SCR-WALLET-TOPUP | DONE | P → BOARD-SHR-WALLET | Y WalletAction |
POST topup IMP |
| CON | D-WALLET | SCR-WALLET-WITHDRAW | DONE | P → BOARD-SHR-WALLET | Y WalletAction |
POST withdraw IMP |
| CON | D-WALLET | SCR-WALLET-TRANSFER | DONE | P → BOARD-SHR-WALLET | Y WalletAction |
POST transfer IMP |
| CON | D-WALLET | SCR-WALLET-ACTION-RESULT | DONE | P (868c pay) |
Y PaySuccess/Fail | N/A UI |
| CON | D-WALLET | SCR-WALLET-STATS | DONE | Y 1eabc |
Y | PARTIAL (local/agg) |
5. Screen Matrix — Partner forms (ưu tiên #4)
| Surface | Domain | Screen (SCR) | Trạng thái | Mockup | Code | API |
|---|---|---|---|---|---|---|
| PAR | D-RENTAL | SCR-PAR-RENT-LIST | PARTIAL | Y cfcf |
P multi-tab | rentals partner IMP |
| PAR | D-RENTAL | SCR-PAR-RENT-CREATE | PLANNED | N → BOARD-PAR-FORM-01 | N | POST/PATCH listing IMP |
| PAR | D-RENTAL | SCR-PAR-RENT-TENANTS | PLANNED | N → BOARD-PAR-FORM-01 | N | PARTIAL |
| PAR | D-RENTAL | SCR-PAR-RENT-MESSAGES | PLANNED | N → BOARD-PAR-FORM-01 | N | chat IMP |
| PAR | D-MED | SCR-PAR-MED-HOME | PARTIAL | Y 679af |
P | medical partner IMP |
| PAR | D-MED | SCR-PAR-MED-RX-CREATE | IMP | N → BOARD-PAR-FORM-02 | N | medical prescriptions |
| PAR | D-MED | SCR-PAR-MED-PATIENT-EDIT | PLANNED | N → BOARD-PAR-FORM-02 | N | PARTIAL |
| PAR | D-SCHOOL | SCR-PAR-SCH-STUDENTS | PARTIAL | Y f311 |
P | schools IMP |
| PAR | D-SCHOOL | SCR-PAR-SCH-STUDENT-ADD | PLANNED | N → BOARD-PAR-FORM-03 | N | PARTIAL |
| PAR | D-FNB | SCR-PAR-FNB-MENU-FORM | PARTIAL | P c884 |
P | merchants/menu IMP |
| PAR | D-PROMO | SCR-PAR-PROMO-CREATE | IMP | N → BOARD-PAR-FORM-04 | N | promotions IMP |
| PAR | D-PARTNER | SCR-PAR-STAFF-INVITE | PARTIAL | P | P | partners staff IMP |
Nav PAR (chốt):
Auth → Onboarding/KYC → Home (chọn vertical) → mỗi vertical:
Overview | Ops(List) | Catalog/Form | Finance | Account
Role JWT: PARTNER_OWNER · PARTNER_STAFF (scope store) · LANDLORD · DOCTOR.
6. Screen Matrix — Consumer (tóm tắt + Error ưu tiên #5)
CON MVP hầu hết DONE (≈100 screens). Dưới đây chỉ gap / error còn theo ưu tiên.
| Surface | Domain | Screen (SCR) | Trạng thái | Mockup | Code | API |
|---|---|---|---|---|---|---|
| CON | System | SCR-SYS-EMPTY / OFFLINE / GPS / PAY-* / SESSION | DONE | Y 868c |
Y SystemStates + shared | N/A |
| CON | System | SCR-SYS-PER-VERTICAL-EMPTY | PARTIAL | Y | P (chưa gắn hết list) | N/A |
| CON | D-AUTH | Splash · Onboard · Login email · Location · Session | DONE | Y bfb028 |
Y | auth IMP |
| CON | Verticals | List→Detail→Action→Success (FNB…ATM) | DONE | Y 39 JPG | Y | tags IMP |
| CON | D-CHAT | Inbox/Thread/Call | DONE | P | Y | IMP |
| CON | D-KYC / Wallet topup-withdraw | xem §4 | PLANNED/PARTIAL | N | N/P | IMP |
Nav CON (chốt — hiện tại giữ):
MainTabs: Map | Reels | Social | Chat | Account
Services qua MapStack. Role: USER.
7. RBAC & Surfaces (Step 3 — chốt)
| Role JWT | App | Được vào | Cấm |
|---|---|---|---|
USER |
mobile/ |
CON tabs + services | partner/driver ops (trừ POST /driver/register · KYC · GET /driver/application) |
DRIVER |
driver/ |
trips · earnings · ratings · chat rider | CON book / cart / social — cấm dual-account (WP-AUTH-HAT-SPLIT-01) |
PARTNER_OWNER |
partner/ |
full store ops + staff | admin queues |
PARTNER_STAFF |
partner/ |
ops theo org (FNB/KS/thuê…) · ẩn tab NV | settings owner / payout · IMP WP-PAR-STAFF-JWT-01 · WP-PAR-STAFF-OPS-01 |
LANDLORD |
partner/ rental |
listings · viewings · revenue | FNB/Fuel tabs |
DOCTOR |
partner/ medical |
BN · lịch · DT | school/hotel tabs |
ADMIN |
dashboard/ |
mọi queue + CMS | không dùng app CON làm admin |
Capability tài xế (không phải Role): RIDE · COURIER · DELIVERY · SCHOOL_TRIP — ROLE-MATRIX.md · GET /users/me/hats.
Guard BE: JwtAuthGuard + RolesGuard + HatSplitInterceptor + ownership filter (storeId/orgId từ JWT, không tin client).
flowchart TB
subgraph CON["mobile USER"]
M[Map] --> S[Service stacks]
R[Reels] --> Soc[Social]
C[Chat]
A[Account / Wallet / KYC]
end
subgraph PAR["partner roles"]
PH[Home vertical picker] --> VT[Overview/Ops/Form/Finance/Account]
end
subgraph DRV["driver DRIVER"]
DH[Home online] --> DT[Trips] --> DW[Wallet] --> DR[Ratings] --> DA[Account]
end
subgraph ADM["dashboard ADMIN"]
AO[Overview] --> Q[KYC/Partner/Driver]
Q --> OPS[Ops/Ledger/Support]
OPS --> CMS[CMS/Promo]
end
API[(api/v1 JWT)]
CON --> API
PAR --> API
DRV --> API
ADM --> API
8. API contract & data states (Step 4 — chốt)
8.1 Tag ↔ surface (không mở API thứ hai)
| Tag | CON | PAR | DRV | ADM | Data state |
|---|---|---|---|---|---|
auth |
● | ● | ● | ● | IMP |
users |
● | ○ | ○ | ● | IMP |
kyc |
● | ○ | ○ | ● | IMP — wizard UI thiếu |
driver |
— | — | ● | ● | IMP — FE DRV mỏng |
partners |
— | ● | — | ● | IMP |
rides + WS |
● | — | ● | ○ | IMP |
wallet |
● | ○ payout | ● | ○ | IMP — topup/withdraw UI thiếu |
chat + WS |
● | ● | ● | ○ | IMP — board shared thiếu |
orders/cart/merchants |
● | ● | ○ | ○ | IMP |
hotels/rentals/parking/fuel/pharmacy/medical/schools |
● | ● | — | ○ | IMP |
support/reviews/promotions/notifications/cms |
● | ○ | ○ | ● | IMP |
payments |
● | — | — | ● | IMP MOCK/MoMo/VNPay |
health |
○ | — | — | ● | IMP deps |
atm/places/routing/favorites/assistant/social/addresses/media |
● | ○ | — | ○ | IMP |
8.2 Entity lifecycle (trước khi code sâu)
| Entity | States (chuẩn) | UI bắt buộc |
|---|---|---|
| Ride / Trip | REQUESTED → MATCHING → ACCEPTED → PICKUP → IN_TRIP → COMPLETED | CANCELLED |
CON + DRV success/cancel |
| Order (FNB/Grocery/Pharm) | NEW → ACCEPTED → PREPARING → DELIVERING → DONE | CANCELLED |
CON track + PAR accept |
| KYC | NONE → PENDING → APPROVED | REJECTED |
Wizard + ADM queue |
| Partner onboarding | DRAFT → SUBMITTED → APPROVED | REJECTED |
PAR + ADM |
| Wallet tx | PENDING → SUCCESS | FAILED |
Topup/Withdraw result |
| Support ticket | OPEN → IN_PROGRESS → REPLIED → CLOSED |
CON + ADM |
| Hotel booking / Rental viewing / Med appt / School consult | theo module hiện có | Success + History |
8.3 Rule trước code
- Endpoint đã có trên
/docsvới DTO — không invent URL FE. - Response lỗi: Nest
HttpException→ FE mapEmpty | Error | Offline(SCR-SYS). - Realtime chỉ
/chatvà/rides(đã IMP). - Payment live secret = stop-gate (MOCK local OK).
9. Hàng đợi implement (Step 5)
Làm 1 WP / turn, vertical đủ chuỗi L→D→C/E→A→S/E→H.
| # | WP | Surfaces | Board | Mục tiêu | Status |
|---|---|---|---|---|---|
| 1 | WP-FE-DRV-UI-01 | DRV | BOARD-DRV-01 | Tabs Trips: list available/active + detail accept | IMP |
| 2 | WP-FE-DRV-UI-02 | DRV | BOARD-DRV-02 | In-trip UI + slide pickup/complete + chat entry | IMP |
| 3 | WP-FE-DRV-UI-03 | DRV | BOARD-DRV-03 | KYC wizard · Wallet · Ratings · Settings pixel | IMP |
| 4 | WP-FE-ADM-01 | ADM | BOARD-ADM-01 | Overview shell + nav sidebar chốt | IMP |
| 5 | WP-FE-ADM-02 | ADM | BOARD-ADM-02 | KYC/Partner/Driver queue UX thống nhất | IMP |
| 6 | WP-FE-ADM-03 | ADM | BOARD-ADM-03 | Ops trips/orders + ledger + support polish | IMP |
| 7 | WP-FE-KYC-UI-01 | CON(+PAR/DRV) | BOARD-SHR-KYC | Wizard shared | IMP |
| 8 | WP-FE-CHAT-UI-02 | All FE | BOARD-SHR-CHAT | Empty/Error + PAR/DRV entry | IMP |
| 9 | WP-FE-WALLET-05 | CON/DRV | BOARD-SHR-WALLET | Topup · Withdraw · Transfer · result | IMP |
| 10 | WP-FE-PAR-RENT-04 | PAR | BOARD-PAR-FORM-01 | Create listing · tenants · messages | IMP |
| 11 | WP-FE-PAR-MED-03 | PAR | BOARD-PAR-FORM-02 | Rx + patient edit | IMP |
| 12 | WP-FE-PAR-SCH-03 | PAR | BOARD-PAR-FORM-03 | Add student · tuition | IMP |
| 13 | WP-FE-PAR-FNB-03 | PAR | BOARD-PAR-FORM-04 | Menu form · promo · staff | IMP |
| 14 | WP-FE-SYS-02 | CON | 868c |
Gắn empty/error vào mọi list vertical còn thiếu | IMP |
| 7 | WP-FE-ADM-04 | ADM | BOARD-ADM-04 | CMS edit · Promo admin · Broadcast | IMP |
tiếp (P5f) → DONE_QUEUE. Journey còn thiếu → Wave P6 15 §5–6 (Rate · FNB Success · DRV History/Cancel · PAR bind).
9b. Gap journey còn mở (sync 2026-07-30 — chi tiết ở doc 15)
| SCR / gap | Surface | Status | WP P6 |
|---|---|---|---|
| SCR-RIDE-RATE | CON | IMP | WP-FE-RIDE-RATE-01 |
| SCR-RIDE-CHAT-WIRE | CON | IMP | WP-FE-RIDE-CHAT-01 |
| SCR-FNB-ORDER-SUCCESS | CON | IMP | WP-FE-FNB-SUCCESS-01 |
| SCR-DRV-TRIP-HISTORY | DRV | IMP | WP-FE-DRV-HIST-01 |
| SCR-DRV-TRIP-CANCEL | DRV(+API) | IMP | WP-DRV-CANCEL-01 |
| SCR-MED-BOOK-SUCCESS | CON | IMP | WP-FE-MED-SUCCESS-01 |
| SCR-RENT-VIEW-SUCCESS | CON | IMP | WP-FE-RENT-SUCCESS-01 |
| SCR-PAR-PROMO-CREATE | PAR | IMP | WP-FE-PAR-PROMO-01 |
| SCR-PAR-PHARM-STOCK | PAR | IMP | WP-FE-PAR-PHARM-STOCK-01 |
| SCR-PAR-MED-RX-CREATE | PAR | IMP | WP-FE-PAR-MED-RX-02 |
| SCR-ADM-VERTICAL-OPS | ADM | IMP | WP-FE-ADM-VERT-01 |
| SCR-ADM-RENT-FUEL-PARK | ADM | IMP | WP-FE-ADM-VERT-02 |
10. Liên kết
| Doc | Vai trò |
|---|---|
| design-boards/ | Spec 14 board thiếu |
| design-index.md | JPG hiện có + board planned |
| 04-SURFACES-CONTRACT.md | Surface contract |
| 13-FE-SCREEN-GAP-MATRIX.md | Gap JPG↔FE lịch sử |
| 15-COMPLETION-AUDIT-MATRIX.md | P6 journey UX queue |
| 09-AGENT-AUDIT-QUEUE.md | Gate «tiếp» |
| 12-NEXT-WORK-PLAN.md | Wave P5/P4/P6 |