Dr.Well-B
Dr.Well-B là nền tảng thành viên dành cho bác sĩ, nha sĩ và sinh viên y khoa tại Nhật Bản, ra mắt công khai năm 2023. Thay vì giải một nghiệp vụ đơn lẻ, nền tảng gom nhiều dịch vụ vào một cổng: tài khoản chuyên môn có xác minh, quảng cáo theo hồ sơ, khảo sát, tuyển dụng và tìm việc, nội dung chuyên ngành và chương trình point thưởng — tất cả được đội vận hành điều khiển từ một trang quản trị riêng.
Tôi đảm nhận vai trò Tech Lead trong giai đoạn 2022–2024, đồng thời trực tiếp làm backend: định hướng kỹ thuật, thiết kế hệ thống và luồng dữ liệu, API Node.js / NestJS, Firestore, search, xử lý nền cùng các dịch vụ Google Cloud liên quan, review code, và phối hợp giữa phía Nhật Bản với team phát triển tại Việt Nam.
Vì sao đây là dự án hệ thống quản lý: mọi module cùng đọc một hồ sơ thành viên và cùng ghi vào một action log. Đổi cách chọn quảng cáo là đổi luôn point, báo cáo và file export phía sau — nên phần việc chính nằm ở workflow, luồng dữ liệu và khả năng kiểm soát của trang quản trị, không chỉ ở từng tính năng riêng lẻ.
Các module và người dùng
Hệ thống phục vụ hai nhóm. Thành viên — bác sĩ, nha sĩ, bác sĩ đang đào tạo, bác sĩ hành nghề độc lập và sinh viên y khoa — dùng Member Portal. Operator và admin dùng trang quản trị riêng để duyệt tài khoản, quản lý quảng cáo, supplier, survey, tin tuyển dụng và dữ liệu download.
Sơ đồ vừa khung
Vai trò của tôi
- Định hướng kỹ thuật và chọn giải pháp cho từng chức năng lớn, đánh giá rủi ro kỹ thuật trước khi triển khai.
- Thiết kế kiến trúc hệ thống và cách các module trao đổi dữ liệu.
- Thiết kế và phát triển backend API bằng Node.js / NestJS.
- Thiết kế dữ liệu Firestore, search trên Elasticsearch, xử lý nền và các dịch vụ cloud phía sau.
- Review technical design và pull request, review bảo mật, hỗ trợ team xử lý các vấn đề kỹ thuật khó.
- Xây dựng chiến lược unit test và automation test (Cypress) cho một hệ thống nhiều rule nghiệp vụ.
- Hỗ trợ triển khai staging / production, theo dõi tiến độ kỹ thuật và rủi ro của các chức năng lớn.
Đăng ký thành viên có xác minh chuyên môn
Đăng ký ở đây là một workflow xác minh, không phải form email và mật khẩu. Nền tảng thu thập thông tin nghề nghiệp — chuyên khoa và chuyên ngành phụ, cơ sở công tác, khoa, chức vụ, năm tốt nghiệp, trường đại học, mã số sinh viên, số giấy phép hành nghề, thông tin đào tạo lâm sàng — cùng tài liệu xác minh như ảnh giấy phép, thẻ sinh viên, chứng chỉ đào tạo và CV.
Thông tin xác minh được thì tài khoản được kích hoạt ngay. Không xác minh được thì hồ sơ chuyển sang quy trình duyệt của admin: thành viên được yêu cầu gửi thêm giấy tờ, admin kiểm tra, quyết định được ghi vào approval history, và hồ sơ bị khóa thao tác sau khi đã duyệt. Mỗi kết quả có email riêng.
Sơ đồ vừa khung
Quảng cáo theo hồ sơ người dùng
Quảng cáo không phải banner hiển thị ngẫu nhiên. Mỗi quảng cáo mang luật phân phối riêng: khu vực hiển thị và kích thước banner, URL đích, banner hoặc text, tag, chuyên khoa và hội chuyên ngành mục tiêu, thời gian hiệu lực, giới hạn click, độ ưu tiên và trạng thái. Hệ thống lọc mọi quảng cáo đang chạy theo hồ sơ và lịch sử của từng thành viên, và hành vi của thành viên quay lại ảnh hưởng lần chọn sau — hide hoặc refresh một quảng cáo có thể loại nó khỏi danh sách candidate hoặc giảm priority với riêng người đó, còn tín hiệu quan tâm giữ các quảng cáo tương tự tiếp tục xuất hiện.
Ở trang quản trị, operator tạo, copy và lên lịch quảng cáo, đặt giới hạn và độ ưu tiên, quản lý supplier, và tải được danh sách thành viên khớp tag của từng quảng cáo.
Sơ đồ vừa khung
Survey engine cấu hình động
Admin dựng survey không cần code: tên, mô tả, ghi chú, số response tối thiểu và tối đa, trạng thái publish và quảng cáo liên kết, rồi thêm câu hỏi với loại câu hỏi, required hoặc optional, danh sách answer và free input. Các câu hỏi có thể phụ thuộc nhau — "câu 1 chọn A thì bật câu 2" — tạo ra nhánh điều kiện, sub-question và embedded question. Thành viên nhận một form thay đổi theo câu trả lời, và trong một số luồng, câu trả lời sửa lại sẽ ghi đè bản cũ thay vì tạo submission trùng lặp.
Sơ đồ vừa khung
Point thưởng tính từ action log
Point không được tính ngay trong request phát sinh ra nó. Các hành động hợp lệ — click quảng cáo, thao tác với job, các booking được cấu hình — được ghi vào action log, phần còn lại do batch xử lý. Batch hằng ngày đọc log chưa xử lý, kiểm tra điều kiện, tra số point tương ứng, áp dụng rule (nhiều click vào cùng một quảng cáo hoặc job trong cùng ngày chỉ tính một lần; point có giới hạn theo tháng), tạo point distribution plan rồi đánh dấu log đã xử lý. Batch đầu tháng tổng hợp point và số profile thành kết quả phân phối và file báo cáo. Thành viên đổi point qua một ứng dụng point đối tác.
Sơ đồ vừa khung
Export bất đồng bộ và thông báo
Kết quả survey, export toàn bộ doctor profile, file CSV và ZIP có thể mất nhiều thời gian hơn một request nên có. Chúng chạy nền trên Cloud Tasks và Cloud Functions; file được lưu vào Cloud Storage, và Firebase Cloud Messaging báo cho admin khi file sẵn sàng — trang quản trị xin quyền thông báo chính cho việc này. Lịch sử download lưu lại các lần export trước.
Email nghiệp vụ bao phủ phần còn lại của vòng đời: đăng ký thành công, xác minh giấy phép thành công, không thể xác minh, yêu cầu bổ sung giấy tờ, thông báo sự cố và vận hành.
Sơ đồ vừa khung
Tìm việc trên Elasticsearch
Member Portal có khu vực tuyển dụng và tìm việc, lọc theo từ khóa, hình thức làm việc và tỉnh thành. Tìm kiếm, lọc và sắp xếp chạy trên index Elasticsearch thay vì Firestore, và hành vi tìm kiếm, click được ghi log để tính point, tracking và analytics.
Kiến trúc mức high-level
Các ứng dụng Angular xác thực qua Firebase Authentication và gọi backend Node.js / NestJS. Firestore giữ dữ liệu nghiệp vụ, Cloud Storage giữ file, Elasticsearch phục vụ search, còn Cloud Run, Cloud Functions và Cloud Tasks gánh phần xử lý nền. BigQuery phục vụ tổng hợp dữ liệu và reporting, Cloud Logging gom log, Firebase Cloud Messaging gửi thông báo.
Sơ đồ vừa khung
Luồng dữ liệu giữa các module
Sơ đồ vừa khung
Dự án bao phủ những gì
| Bài toán của một hệ thống quản lý lớn | Thể hiện trong Dr.Well-B |
|---|---|
| Workflow nghiệp vụ có phê duyệt | Xác minh giấy phép, admin approval, approval history, khóa hồ sơ sau duyệt |
| Rule do operator cấu hình, không cần code | Survey engine với quan hệ câu hỏi; luật phân phối quảng cáo |
| Cá nhân hóa | Chọn quảng cáo theo chuyên khoa, society, tag, thời gian, giới hạn và hành vi |
| Xử lý sự kiện và batch | Action log, batch point hằng ngày, rồi tổng hợp và file hằng tháng |
| Tác vụ chạy lâu | Export nền trên Cloud Tasks / Cloud Functions, thông báo qua FCM |
| Search quy mô lớn | Index và sorting trên Elasticsearch, tách khỏi Firestore |
| Báo cáo | Tổng hợp trên BigQuery, export CSV/ZIP, lịch sử download |
| Giữ nhiều rule không bị hồi quy | Automation test Cypress cho nhiều service, survey và trình duyệt mobile |
Các sơ đồ được dựng lại ở mức thành phần từ tài liệu thiết kế của dự án. Chúng lược bỏ URL nội bộ, định danh hệ thống, source code độc quyền và dữ liệu của khách hàng; ảnh chụp dùng tài khoản test và dữ liệu demo, các tên nội bộ đã được làm mờ.
Ảnh 1 trên 5
