15 — Completion Audit Matrix (post DONE_QUEUE)
Audit chức năng/UX: 2026-07-30 · Inventory FE thật (CON ~106 · PAR 13 · DRV 11 · ADM 14 modules)
Mục đích: Ma trận màn còn thiếu theo chuỗi logic L→D→C/E→A→S/E→H + lifecycle entity — không phải pixel Figma.
Nguồn: 01 · 13 · 14 · scan *Screen*.tsx
0. Snapshot
| Metric |
Value |
| BE OpenAPI ops |
350 IMP / 0 STUB · 40 tags |
| Machine queue |
nextRecommended: **null** |
| Soft CON/PAR depth (doc 13–14) |
DONE |
| Soft polish map/health (§4 cũ) |
DONE (trừ Figma/Mapbox) |
CON *Screen.tsx |
~106 |
| PAR screens / tabs |
13 / ~41 tabs |
| DRV screens |
~11 |
| ADM modules |
14 |
| Release blocker Figma MCP |
NO (ngoại vi) |
Verdict: Domain lõi IMP. Gap còn lại = P8 FE thin + OWNER Pay/SMS/EAS — không còn BE STUB.
Số liệu runtime: npm run audit:refresh → 350/0/40. Snapshot cũ (267/303/307/308/310) = lịch sử.
1. Phân loại còn lại
| Loại |
Ví dụ |
Gate |
| A · Design sync |
Pixel vs Figma/JPG lệch token |
Cần node-id / JPG · không rewrite logic |
| B · Journey depth |
Success / Rate / History / Chat wire |
P6 — ưu tiên «tiếp» |
| C · Data quality |
Seed · gallery · live GPS |
Local PASS trước IMP |
| D · Harden / prod |
Mapbox token · SMS · Pay live |
STOP-GATE secret |
| E · Contract hygiene |
OpenAPI vs controller |
Diff nhỏ BE docs |
| F · Partner form bind |
Promo/Rx/Stock còn local draft |
1 domain / turn |
2. Ma trận surface × trạng thái hoàn thiện
| Surface |
Core chain L→D→C→A→S |
Child screens |
Pixel vs JPG |
Realtime |
Harden |
| CON |
● IMP · Rate+Chat rides IMP · còn FNB Success |
● phần lớn |
● JPG · Figma deferred |
chat/rides ● |
Mapbox/Pay/SMS optional |
| PAR |
● multi-tab IMP |
○ form bind API thiếu |
● proxy boards |
chat ● |
ownership BE ● |
| DRV |
● trips/in-trip · H/Cancel thiếu |
● |
● 7b769 proxy |
GPS WS ● |
— |
| ADM |
● queues/CMS · vertical thin |
○ |
boards without JPG |
— |
— |
| API |
● 0 STUB |
— |
— |
WS ● |
secrets STOP-GATE |
3. Chuỗi chức năng chuẩn (quy ước audit)
Một vertical / entity chỉ DONE journey khi đủ (hoặc N/A có lý do):
List → Detail → Create/Edit → Action → Success/Error → History
| Entity |
States (logic) |
UI bắt buộc |
| Ride |
REQUESTED→…→COMPLETED | CANCELLED |
CON rate + chat · DRV history + cancel |
| Order FNB/Grocery/Pharm |
NEW→…→DONE | CANCELLED |
Success riêng → Track/History |
| Hotel / School |
book → success → history |
Đã có pattern Success screen |
| Rental viewing / Med appt |
schedule → success → history |
Success riêng (hiện inline) |
| KYC / Partner |
PENDING→APPROVED|REJECTED |
Wizard + ADM queue (IMP) |
| Wallet tx |
PENDING→SUCCESS|FAILED |
Result screen (IMP CON) |
4. Soft polish cũ (P5c — đã đóng)
| # |
WP |
Status |
| 1–4, 7–18 |
PLACE/HEALTH/ATM/SEED/MAP/WALLET/KYC/SOC/FUEL/PARK/HOTEL/RENT/SCH/MAP-HARDEN/HISTORY |
IMP |
| 5 |
WP-FE-ROUTE-05-FIGMA-SYNC |
BLOCKED external |
| 6 |
WP-ROUTE-MAPBOX-LIVE |
OPTIONAL (OSM/OSRM thay thế — WP-ROUTE-OSM-01) |
5. Audit màn còn thiếu — theo logic & UX (2026-07-30)
5.1 Snapshot đếm
| Surface |
Files |
Ghi chú |
| CON |
~106 *Screen* |
MapStack + MainTabs |
| PAR |
13 screen + ~41 tab |
Multi-tab shell |
| DRV |
~11 |
MainShell state |
| ADM |
14 *Module* |
SPA sidebar |
5.2 CON — gap journey
| Domain |
Thiếu / đứt |
Evidence code |
Pri |
WP |
| D-RIDES |
RideRateScreen + bind rate API |
RideRateScreen.tsx · RidesApi.rate |
P0 |
WP-FE-RIDE-RATE-01 IMP |
| D-RIDES |
Chat/Call trên RideDetail → ChatThread / tel |
RideDetailScreen openDriverChat · driver brief |
P0 |
WP-FE-RIDE-CHAT-01 IMP |
| D-FNB |
OrderSuccessScreen → Track (bỏ Alert) |
OrderSuccessScreen.tsx · Cart replace |
P0 |
WP-FE-FNB-SUCCESS-01 IMP |
| D-MED |
Booking success riêng (hiện modal inline) |
MedicalDetailScreen |
P1 |
WP-FE-MED-SUCCESS-01 ✅ |
| D-RENTAL |
Viewing success riêng (inline) |
RentalDetailScreen |
P1 |
WP-FE-RENT-SUCCESS-01 ✅ |
| D-PROMO |
Detail / apply checkout sâu |
PromoCheckoutField · FNB/Pharm/RideQuote |
P2 |
WP-FE-PROMO-02 IMP |
| D-NOTIF |
Detail màn thông báo |
NotificationDetailScreen |
P2 |
WP-FE-NOTIF-02 IMP |
N/A hợp lệ: Fuel/ATM/Places = L→D (+ Route fuel) — không cần Create/Success.
5.3 CON chain cheat-sheet
| Vertical |
L |
D |
C/E |
A |
S |
H |
| rides |
● |
● |
Quote |
Matching |
embedded |
history · Rate IMP |
| fnb |
● |
Menu |
Cart |
pay |
● Success |
OrderList · Track · Rate |
| grocery |
● |
Store |
Checkout |
— |
● Success |
→ OrderList |
| hotels |
● |
● |
Confirm |
book |
● Success |
Bookings |
| rentals |
● |
● |
schedule |
viewing |
inline |
Viewings |
| parking |
● |
Lot |
— |
pay |
● PayOk |
Bookings |
| pharmacy |
● |
● |
Cart |
— |
● Success |
Prescriptions |
| medical |
● |
● |
book |
— |
inline |
Appointments |
| schools |
● |
● |
consult |
— |
● Success |
Consultations |
| wallet |
● |
TxDetail |
Action |
topup… |
● result |
TxHistory |
| support |
● |
Detail |
Create |
— |
— |
Tickets |
| chat |
Inbox |
Thread |
— |
Call |
— |
— |
5.4 PAR — gap
| Domain |
Thiếu |
Evidence |
Pri |
WP |
| D-PROMO |
Promo create bind API |
FnbPromoPanel «Chưa có API promo partner — toggle cục bộ» |
P1 |
WP-FE-PAR-PROMO-01 ✅ |
| D-PHARM |
Stock edit |
PharmStockTab «qua API inventory khi sẵn sàng» |
P1 |
WP-FE-PAR-PHARM-STOCK-01 ✅ |
| D-MED |
Rx persist |
MedRxForm local draft |
P1 |
WP-FE-PAR-MED-RX-02 ✅ |
| PAR multi |
Empty/Error/Success thống nhất tabs |
StateBlocks · list tabs + StatusBanner |
P2 |
WP-FE-PAR-EMPTY-01 IMP |
5.5 DRV — gap
| Domain |
Thiếu |
Evidence |
Pri |
WP |
| D-DRIVER |
Trip history tab — COMPLETED/CANCELLED |
GET /driver/trips/history · TripsScreen |
P0 |
WP-FE-DRV-HIST-01 IMP |
| D-DRIVER |
Reject available + Cancel active |
POST …/reject · …/cancel · TripDetail/InTrip |
P0 |
WP-DRV-CANCEL-01 IMP |
| D-WALLET |
Earnings/tx detail — TxDetailScreen |
TxDetailScreen.tsx · tap row Wallet |
P1 |
WP-FE-DRV-EARN-01 IMP |
| D-CHAT |
Call in-trip (SĐT trống) |
InTripScreen tel: + passenger brief |
P1 |
WP-FE-DRV-CALL-01 IMP |
5.6 ADM — gap
| Domain |
Thiếu |
Pri |
WP |
| Verticals hotel/med/pharm/school |
Module thin (stats/list, ít action) |
P1 |
WP-FE-ADM-VERT-01 ✅ |
| Rentals / fuel / parking admin |
Chưa có module (hoặc Ops tab) |
P1 |
WP-FE-ADM-VERT-02 ✅ |
6. Soft queue P6 — Journey UX (agent «tiếp»)
Làm 1 WP / turn. Không gộp 2 domain. Clone pattern Success từ GrocerySuccess / HotelBookingSuccess / PharmacySuccess.
| # |
WP |
Surfaces |
Mục tiêu |
Design / pattern |
Status |
| 1 |
WP-FE-RIDE-RATE-01 |
CON |
RideRateScreen + POST /rides/:id/rate sau COMPLETE |
090d… rate panel |
IMP |
| 2 |
WP-FE-RIDE-CHAT-01 |
CON |
Wire RideDetail chat → ChatThread (peer driver) |
BOARD-SHR-CHAT |
IMP |
| 3 |
WP-FE-FNB-SUCCESS-01 |
CON |
OrderSuccessScreen → Track (bỏ Alert→OrderList) |
0beb… / GrocerySuccess |
IMP |
| 4 |
WP-FE-DRV-HIST-01 |
DRV |
Tab history thật + mở past trip |
BOARD-DRV-01 |
IMP |
| 5 |
WP-DRV-CANCEL-01 |
API+DRV |
Reject/cancel available/active + CTA |
BOARD-DRV-01 |
IMP |
| 6 |
WP-FE-DRV-EARN-01 |
DRV |
Tx/earnings detail (mirror CON WalletTxDetail) |
7b769 |
IMP |
| 7 |
WP-FE-MED-SUCCESS-01 |
CON |
Booking success → Appointments |
HotelSuccess pattern |
IMP |
| 8 |
WP-FE-RENT-SUCCESS-01 |
CON |
Viewing success → Viewings |
HotelSuccess pattern |
IMP |
| 9 |
WP-FE-PAR-PROMO-01 |
PAR |
Promo create/edit qua promotions API |
BOARD-PAR-FORM-04 |
IMP |
| 10 |
WP-FE-PAR-PHARM-STOCK-01 |
PAR |
Stock/price edit form |
56cd… |
IMP |
| 11 |
WP-FE-PAR-MED-RX-02 |
PAR(+API) |
Persist Rx ngoài local draft |
BOARD-PAR-FORM-02 |
IMP |
| 12 |
WP-FE-ADM-VERT-01 |
ADM |
Actionable ops hotel/med/pharm/school |
BOARD-ADM-03 |
IMP |
| 13 |
WP-FE-ADM-VERT-02 |
ADM |
Rentals (+ fuel/parking thin) module/Ops |
BOARD-ADM-03 |
IMP |
| 14 |
WP-FE-DRV-CALL-01 |
DRV |
In-trip call với SĐT passenger từ trip |
BOARD-DRV-02 |
IMP |
| 15 |
WP-FE-PAR-EMPTY-01 |
PAR |
Empty/Error/Success blocks trên tabs |
CON StateBlocks |
IMP |
Default «tiếp»: 16-PHASE-P7-HARDEN · OWNER_REQUIRED / P7e (P7a–c agent DONE).
MVP 2026-07-31 — Đặt xe + chỉ đường phòng trọ: WP-FE-RIDE-FLOW-01 · WP-FE-RENT-DIR-01 · WP-FE-ROUTE-PARAMS-01 · WP-RIDE-VEHICLE-01 · WP-RIDE-PAY-01 → IMP · reports/RIDE-RENTAL-DIRECTIONS-AUDIT.md.
OWNER ngoài P7a: FIGMA-SYNC · SMS/Pay live · OpenAI.
Map: WP-ROUTE-OSM-01 IMP (OSRM). Mapbox optional.
Polish 2026-07-31 («làm tất» unblocked):
- WP-FE-RENT-GPS-01 —
RentalList nearby theo GPS (useDeviceLocation) · fallback DEFAULT_GEO
- WP-FE-ROUTE-ACTIVE-01 —
RouteActive watch GPS · follow camera · speed/ETA · auto-advance step
- expo-location align SDK 54 (
~19.0.8) · User NODE_OPTIONS=--use-system-ca (TLS Windows)
- Mapbox live vẫn OWNER_REQUIRED (token trống)
Device bootstrap (2026-07-31): …
ENV packaging (2026-07-31): npm run env:bootstrap · docs/ENV-PACKAGING.md — đóng gói .env.example / .env.production.example theo root · api · mobile · driver · partner · dashboard.
7. Smoke checklist (mọi WP completion)
npm run infra:up
npm run audit:refresh # stub=0
npm run smoke:chain
curl -s http://localhost:3000/api/v1/health
# surface: mobile | partner | driver | dashboard tsc/build theo WP
| State |
Expect |
| Empty list |
EmptyBlock / SYS |
| Error API |
ErrorBlock + retry |
| Loading |
LoadingBlock |
| Offline / GPS deny |
banner hoặc default geo |
| Success journey |
Success screen → History/Track (không chỉ Alert) |
8. Khi Figma MCP mở lại
- Duplicate/share can edit + seat phù hợp.
- Link frame có
node-id (không 0:1).
- Chỉ mở WP
*-FIGMA-SYNC — token polish.
- Không phủ nhận IMP JPG / P6 journey đã PASS.
9. Liên kết