Gợi ý tầm soát ung thư sớm, có bác sĩ xác nhận
Ba nguyên tắc xuyên suốt mọi tính năng: mọi khuyến nghị có nguồn trích dẫn, bác sĩ duyệt trước khi tới người dùng, AI không quyết thay ai.
VMEC-19 · ĐỒ ÁN NHÓM
5
LOẠI UNG THƯ
27
NGUỒN GUIDELINE THẬT
633
TEST
Ba điểm nghẽn cần gỡ
VẤN ĐỀ
Người dùng gặp ba điểm nghẽn trước khi tới được đúng nơi khám.
Không biết dấu hiệu nào đáng lo
Không biết khám ở đâu
Ghé nhà thuốc xong không ai theo dõi tiếp
01 / 13
Luồng đánh giá
TÍNH NĂNG 1
Từ bảng khảo sát tới khuyến nghị — ai làm gì trong 8 bước
intake → red_flag → risk_scoring → rag_retriever → recommender → guardrail → hitl_interrupt → emit
1
Quét dấu hiệu cảnh báo trên câu chữ thô — chạy trước mọi thứ, không gì tắt được.
2
Chấm điểm bằng công thức thuần, không dùng AI — kết quả tất định.
3
Truy xuất 3–5 đoạn guideline đúng loại ung thư đang xét.
4
AI viết khuyến nghị chỉ dựa trên các đoạn vừa lấy — không tự tính điểm.
5
Chốt chặn kiểm ngôn ngữ chẩn đoán và trích dẫn, rồi dừng chờ bác sĩ duyệt.
Trạng thái lưu bằng Postgres checkpointer nên dừng ở bước bác sĩ duyệt rồi chạy tiếp được, kể cả sau khi server khởi động lại.
02 / 13
Chấm điểm nguy cơ
TÍNH NĂNG 2
Vì sao điểm nguy cơ giải thích được từng con số
1
Điểm nền theo tuổi và giới tính — tra bảng ngưỡng của từng loại ung thư. Nữ 52 tuổi được 50 điểm nền cho ung thư vú.
2
Cộng thêm từng yếu tố nguy cơ — tiền sử gia đình, hút thuốc theo gói-năm, rượu bia, BMI, polyp, viêm gan B, thói quen ăn uống.
3
Lưu lại phần phân rã ngay lúc chấm: mỗi yếu tố cộng bao nhiêu điểm được ghi kèm hồ sơ, không tính lại sau.
Người dùng thấy được vì sao
Trang kết quả hiện bảng phân rã: “điểm nền theo tuổi/giới 50 + tiền sử gia đình 40 = 90”. Không phải một con số từ hộp đen.
Cùng công thức dùng lại ở 2 chỗ khác
Bảng mô phỏng và phần chấm lại khi có dữ liệu mới đều gọi đúng hàm này — không có bản sao công thức nào chạy song song rồi lệch nhau.
Điểm là thang ưu tiên tầm soát 0–100, không phải xác suất mắc bệnh — trình bày sai chỗ này từng là một lỗi thật đã vá.
03 / 13
Trích dẫn
TÍNH NĂNG 3
Cách hệ thống đảm bảo mọi khuyến nghị đều có nguồn
1
Cắt tài liệu theo tiêu đề mục, mỗi đoạn 500–800 từ, chồng lấn 80 từ để không cắt ngang ý.
2
Tìm kiếm lai — kết hợp độ tương đồng ngữ nghĩa với xếp hạng từ khoá, lọc theo loại ung thư trước rồi mới xếp hạng.
3
Kiểm tra sau khi sinh — nếu câu trả lời nghe như trích guideline mà không kèm trích dẫn, thay bằng câu an toàn cố định.
4
Chặn ngay từ câu hỏi — hỏi loại ung thư ngoài 5 loại có tài liệu thì từ chối luôn, không đợi AI trả lời.
Vì sao cần lớp thứ 4: khi kiểm thử trên production, hỏi về ung thư cổ tử cung — loại ngoài phạm vi — chatbot tự bịa nguyên hướng dẫn tầm soát. Lớp 3 không bắt được vì câu chữ AI dùng khác với mẫu đang dò. Chặn từ câu hỏi thì không phụ thuộc AI diễn đạt thế nào.
Mã trích dẫn dạng USPSTF_Breast_Screening_v2024#p10 — truy ngược được tới đúng trang tài liệu gốc.
04 / 13
Dấu hiệu cảnh báo
TÍNH NĂNG 4
Quyền phủ quyết tuyệt đối hoạt động thế nào
1
Quét từ khoá cố định trên câu chữ thô, không nhờ AI phán đoán — tránh rủi ro mô hình bỏ sót triệu chứng nguy hiểm.
2
Trúng thì tạo hồ sơ khẩn ngay, đẩy lên đầu hàng đợi bác sĩ với mức ưu tiên cao nhất.
3
Báo người giám hộ cùng lúc qua tin nhắn trong ứng dụng, nếu tài khoản đó do người khác quản lý.
Lỗ hổng thật đã tìm ra và vá
Tài khoản người phụ thuộc phải qua bước người giám hộ duyệt. Nhưng đoạn quét dấu hiệu cảnh báo lại nằm sau bước đó — người giám hộ từ chối là tín hiệu khẩn biến mất vĩnh viễn. Đã chuyển quét lên trước mọi bước duyệt, và thêm test bắt buộc mọi đường tạo hồ sơ đều phải chạy quét.
Kiểm chứng trên môi trường thật: hồ sơ vào hàng đợi bác sĩ và người giám hộ nhận cảnh báo trong cùng một giây.
05 / 13
Bác sĩ duyệt
TÍNH NĂNG 5
Người dùng thấy gì trước và sau khi bác sĩ duyệt
1
Luồng dừng ở bước duyệt, trạng thái lưu Postgres — chờ bao lâu cũng không mất.
2
Chờ duyệt vẫn hiện dữ liệu và điểm nguy cơ của người dùng, không phải nhìn màn hình trắng.
3
Thẻ duyệt 30 giây: điểm cần chú ý và trích dẫn đọc thẳng từ hồ sơ, không qua AI tóm tắt lại.
Hai bác sĩ duyệt cùng một ca thì người sau nhận báo xung đột, không ghi đè âm thầm quyết định người trước.
06 / 13
Mức độ | Cần bác sĩ duyệt | Việc tiếp theo |
Khẩn cấp | Có — ưu tiên cao nhất | AI giữ tạm lịch khám ngay |
Nên tầm soát sớm | Có | Tạo nhắc chu kỳ 6 tháng |
Nên tầm soát định kỳ | Có | Tạo nhắc theo mốc guideline |
Chưa cần tầm soát | Không | Hiện ngay cho người dùng |
Hệ sinh thái B2B
TÍNH NĂNG 6
Đơn thuốc tại quầy trở thành tín hiệu theo dõi sức khoẻ
Dược sĩ ghi đơn → chấm điểm lại → AI đề xuất & giữ chỗ → người dùng tự xác nhận → lễ tân gọi kiểm tra
1
Dược sĩ nhập đơn thuốc và triệu chứng ngay tại quầy — nơi người dân ghé thường xuyên nhất.
2
Dữ liệu chạy qua đúng bộ kiểm tra như wizard: quét dấu hiệu cảnh báo, bác sĩ duyệt, ẩn danh trước khi ghi log. Không ngoại lệ cho nguồn mới.
3
AI giữ tạm một khung giờ và gửi thẻ đề xuất — nhưng lịch chỉ chốt khi chính người dùng bấm xác nhận.
Ranh giới không được vượt: bác sĩ duyệt mức độ nguy cơ không đồng nghĩa với chốt lịch thay người dùng. Kể cả lễ tân gọi điện và bệnh nhân nói "sẽ đến", hệ thống vẫn không tự chốt — nói qua điện thoại không phải là hành động xác nhận.
Lịch giữ tạm tự hết hạn sau 24 giờ không phản hồi, trả khung giờ về cho người khác đặt.
07 / 13
Mô phỏng
TÍNH NĂNG 7
“Nếu tôi bỏ hút thuốc thì điểm đổi ra sao”
1
Đọc lại bản khảo sát gốc đã lưu nguyên trạng, không đọc hồ sơ hiện tại — hồ sơ có thể đã mất vài trường trong quá trình lưu.
2
Thay đúng những trường người dùng bật/tắt — hút thuốc, rượu bia, BMI, chế độ ăn. Tuổi, giới, tiền sử gia đình giữ nguyên vì đó là sự thật.
3
Chạy lại đúng công thức chấm điểm thật — cùng hàm mà luồng chính dùng. AI chỉ diễn giải kết quả, không tự tính con số nào.
Vì sao đọc bản khảo sát gốc
Lúc thiết kế phát hiện hồ sơ bệnh nhân không lưu mức rượu bia và thói quen ăn uống — nếu đọc từ đó, mô phỏng sẽ luôn sai. Lỗi đó đã được ghi lại và vá riêng.
Có cảnh báo riêng
Màn hình mô phỏng có dòng nhắc rõ đây là ước tính theo công thức nội bộ, không phải lời hứa y khoa.
Người dùng thấy được hành vi nào thực sự ảnh hưởng tới điểm của mình, thay vì nghe lời khuyên chung chung.
08 / 13
Học viện tầm soát
TÍNH NĂNG 8
Dạy kiến thức theo đúng loại ung thư của từng người
1
Chọn chủ đề theo dữ liệu, không theo menu — lấy loại ung thư có điểm nguy cơ cao nhất trong hồ sơ gần nhất.
2
Mỗi bài học sinh từ đoạn guideline đã truy xuất, bắt buộc kèm trích dẫn. Không tìm được đoạn nào thì trả câu an toàn cố định.
3
Phản biện niềm tin sai — người dùng gõ quan niệm phổ biến, hệ thống đối chiếu với guideline, không tự phán đúng sai.
4
Ghi tiến độ học vào hồ sơ để lần sau không lặp lại bài đã học.
Vì sao dựng trên đường chat sẵn có
Mỗi cửa vào mới là một chỗ có thể quên nối lớp an toàn — đúng cách lỗ hổng dấu hiệu cảnh báo đã xảy ra. Dựng trên đường cũ, Học viện tự động thừa hưởng quét dấu hiệu cảnh báo, chốt chặn ngôn ngữ chẩn đoán và kiểm tra trích dẫn.
Năm công cụ tra cứu guideline được nối vào đây — trong đó bốn công cụ vốn đã tồn tại nhưng hỏng và chưa từng chạy.
09 / 13
Nhắc tái tầm soát
TÍNH NĂNG 9
Nhắc leo thang ba nấc, mốc lấy từ chính guideline
1
Mốc tái khám trích từ đoạn guideline mà AI đã dùng để viết khuyến nghị. Không có mốc cụ thể thì lùi về bảng chu kỳ theo mức độ.
2
Nấc 1 — nhắc nhẹ qua email khi tới hạn.
3
Nấc 2 — im lặng 14 ngày thì nhắc lại kèm một khung giờ trống cụ thể, bấm đặt được ngay.
4
Nấc 3 — vẫn im lặng thì báo người thân qua email, không chỉ tin nhắn trong ứng dụng.
Dừng leo thang khi người dùng phản hồi
Bấm “tắt nhắc” là dừng ngay — khác với “đã đi tầm soát”, vì hai việc đó không giống nhau.
Một lỗi thật: nhắc mà không gửi gì
Hàm quét chỉ đổi trạng thái thành “đã gửi” mà chưa bao giờ gọi bộ gửi email. Trạng thái nói dối nhiều tháng, phát hiện khi kiểm thử trên production.
Kích hoạt bằng cron bên ngoài, không dùng bộ hẹn giờ trong tiến trình — máy chủ miễn phí ngủ sau 15 phút không hoạt động.
10 / 13
Lễ tân
TÍNH NĂNG 10
Gọi xác nhận và đổi lịch, nhưng không thấy hồ sơ bệnh
1
Hàng đợi gọi trong 6 giờ — ca đặt quá 6 tiếng mà chưa ai gọi thì gắn cờ đỏ, có bộ lọc riêng.
2
Ghi lại từng cuộc gọi — liên hệ được, không nghe máy, sai số. Bảng riêng giữ đủ lịch sử khi phải gọi lại nhiều lần.
3
Đổi bác sĩ ngay trong cuộc gọi nếu bệnh nhân vướng giờ hoặc bác sĩ bận đột xuất. Bắt buộc nhập lý do, tự gửi email báo.
Thấy được
Họ tên, số điện thoại, giờ hẹn, bác sĩ và khám gì — cần để xếp phòng và chọn bác sĩ thay thế đúng chuyên khoa.
Không thấy
Điểm nguy cơ, mức độ, triệu chứng, lý do khuyến nghị. Ranh giới: biết khám gì, không biết ca đó đáng lo tới mức nào.
Email đổi lịch gửi hỏng thì màn hình báo rõ "đã đổi nhưng chưa báo được" — bệnh nhân tới nhầm giờ vì tưởng không đổi.
11 / 13
Phân tích vận hành
TÍNH NĂNG 11
Đo tác động của từng yếu tố nguy cơ trên toàn dân số
1
Gộp phần phân rã điểm của từng hồ sơ đã lưu lên cấp dân số — dữ liệu vốn có sẵn nhưng chưa từng được tổng hợp.
2
Hiện cả tổng lẫn trung bình — một yếu tố hiếm nhưng nặng và một yếu tố phổ biến nhưng nhẹ trông giống hệt nhau nếu chỉ nhìn một con số.
3
Phễu duyệt và thời gian phản hồi — bao nhiêu ca đang chờ, bác sĩ duyệt trung bình mất bao lâu.
Số liệu thật đọc từ hệ thống đang chạy. Toàn bộ là tổng hợp — ràng buộc này khoá bằng test, thêm một trường mới là test đỏ.
12 / 13
Yếu tố | Tổng điểm đóng góp | Số lần xuất hiện | TB mỗi lần |
Điểm nền theo tuổi/giới | 4.210 | 109 | 38,6 |
Tiền sử gia đình | 560 | 14 | 40,0 |
Hút thuốc ≥20 gói-năm | 120 | 4 | 30,0 |
Tổng kết
TỔNG KẾT
Ba nguyên tắc, mười một tính năng, một hệ thống đang chạy thật
Có nguồn
Mọi khuyến nghị truy ngược được tới trang guideline thật. Không có nguồn thì từ chối, không đoán.
Có người
Bác sĩ duyệt trước khi kết quả tới người dùng. Người dùng tự chốt lịch. AI không quyết thay ai.
Có đường đi tiếp
Nhắc lịch, học kiến thức, mô phỏng thay đổi, đặt khám, và lễ tân gọi xác nhận.
1
2
3
633
TEST
45
KỊCH BẢN KIỂM THỬ THẬT
9
LỖI THẬT ĐÃ VÁ
Nhiều lỗi nghiêm trọng nhất chỉ lộ ra khi chạy thật — không lộ ra trong test đơn vị.