Audit log — Ghi nhận thay đổi
Audit log là nhật ký immutable (không xoá được) của mọi hành động nhạy cảm trong DentIQ: thay đổi giá, xóa visit, phát e-invoice, sửa quyền, v.v. Dùng để kiểm toán, compliance, và rà soát hành động của nhân viên.
Audit log là gì
Audit log ghi nhật ký mọi hành động:
- Ai: tên nhân viên, login.
- Khi nào: timestamp (chính xác đến giây).
- Hành động gì: tạo, sửa, xóa, phát hành, hủy…
- Đối tượng gì: bệnh nhân, visit, payment, e-invoice, role, v.v.
- Giá trị cũ / mới: (tùy hành động; không bao gồm nội dung nhạy cảm).
Immutable: Audit log không bao giờ bị xóa hoặc sửa — nó là bằng chứng chính thức. Chỉ admin hệ thống (platform, không clinic) mới có thể hard-delete theo retention policy.
Cách mở Audit Log
- Vào
Tổ chức → Audit Loghoặc/admin/clinic/audit. - Yêu cầu quyền
audit.read. Nếu không có, không thấy menu. - Hiển thị danh sách event theo thứ tự mới nhất trước (reverse timeline).
Hành động nào được ghi audit
Audit log ghi tất cả thay đổi "nhạy cảm" (tài chính, bệnh nhân, quyền, document):
Lâm sàn & Bệnh nhân
- Tạo / xóa visit: ai mở visit, ai kết thúc, service nào thêm vào.
- Tạo / sửa chẩn đoán: thay đổi tooth chart, chẩn đoán răng.
- Tạo / chấp nhận treatment plan: tạo, sửa giai đoạn, hoàn thành plan.
- Merge bệnh nhân: merge từ BN này sang BN kia (2 BN trùng).
- Cập nhật consent: patient consent (lưu hồ sơ, liên hệ, hình ảnh…).
Tài chính
- Tạo / sửa / hủy payment: số tiền, loại thanh toán (tiền mặt, chuyển khoản…).
- Ghi sổ quỹ (Cash entry): mỗi ghi sổ tiền.
- Phát hành / hủy e-invoice: mã hoá đơn, số tờ, ngày phát.
- Cấu hình doctor earnings: thay đổi % commission.
Document & Print
- In document: ai in phiếu tư vấn, hoá đơn, đơn thuốc lúc nào.
- Xuất báo cáo: ai xuất Excel (nhân sự, kho, thanh toán…).
Org & Access
- Tạo / sửa / xóa chi nhánh: giờ hoạt động, địa chỉ.
- Tạo / sửa / deactivate nhân viên: tên, login, role, branch scope.
- Sửa role + quyền: ai cấp hoặc bỏ quyền nào cho role nào.
- Cấu hình service / medicine: tạo, sửa giá, warranty.
Hành động KHÔNG ghi audit
- Xem dữ liệu (read, dashboard, filter…) — quá nhiều event.
- Nội dung clinical note, doanh tính, file content — lưu metadata thay vì full payload.
- Thay đổi tạm thời (hiểu là UI state, không persistent như local storage).
Cấu trúc một event audit
Mỗi dòng trong audit log ghi:
- Timestamp: 2026-05-28 14:30:45 GMT+7.
- Actor: Nguyễn Văn A (user_id, login).
- Action: PAYMENT_CREATED, VISIT_CLOSED, EINVOICE_ISSUED, ROLE_UPDATED…
- Entity type: Patient, Visit, Payment, EInvoice, Role…
- Entity ID: ID của bệnh nhân, thanh toán, v.v.
- Branch: chi nhánh thực hiện (CI-01: source branch).
- Changes: giá trị cũ → giá trị mới (nếu áp dụng).
- Reason / note: (tuỳ chọn) lý do, ghi chú từ nhân viên.
Tìm kiếm & lọc audit
- By actor: chọn nhân viên để xem hành động của người đó.
- By action type: "Payment", "Visit", "Role", "EInvoice"…
- By date range: từ ngày X đến ngày Y.
- By entity: tìm kiếm ID bệnh nhân, ID payment, mã e-invoice.
- Text search: tìm trong ghi chú hoặc tên nhân viên.
Ví dụ tìm kiếm
- "Tìm mọi payment mà Nguyễn Tố Uyên (lễ tân) tạo trong tháng 5" → filter actor + action_type + date range.
- "Tìm khi nào bệnh nhân 'Trần Văn B' bị xóa visit" → action VISIT_DELETED + entity patient_id.
- "Tìm ai sửa role 'Doctor' vào ngày 25/5" → action ROLE_UPDATED + date = 25/5.
Export audit log
Nút Export (yêu cầu document.export ngoài audit.read):
- Xuất Excel tất cả event trong filter hiện tại.
- Cột: Timestamp, Actor, Action, Entity Type, Entity ID, Branch, Changes, Note.
- File bao gồm cả event cũ (tuân theo retention policy).
Retention policy (lưu trữ)
Audit log được giữ theo quy tắc:
- 7 năm: audit event liên quan tài chính (payment, cash, e-invoice, earnings) — yêu cầu pháp lệ kế toán VN.
- 3 năm: audit event liên quan bệnh nhân, treatment, consent.
- 1 năm: audit event "quản trị" khác (staff, role, branch, service config).
Hard delete: Audit event quá hạn lưu trữ sẽ tự động xóa vật lý (chỉ platform admin làm được). Clinic admin không thể xóa thủ công.
Quyền liên quan
audit.read— xem Audit Log, tìm kiếm, export.document.export— (ngoài audit.read) cần để export Excel.
Audit log không lưu nội dung nhạy cảm (clinical note, payment payload chi tiết, file content). Nó lưu metadata (ai, khi nào, hành động gì) để kiểm toán mà không rò rỉ dữ liệu bệnh nhân. Nếu cần chi tiết payment, xem Payment tab trong Patient 360 (yêu cầu payment.read).
Use case thực tế
Case 1: Kiểm toán định kỳ
Kế toán trưởng hàng tháng:
- Vào Audit Log, filter action "PAYMENT_*" + tháng hiện tại.
- Kiểm tra: ai tạo payment, số tiền, thời gian.
- So sánh với sổ sách (booking system).
- Nếu thấy payment khác thường (vd hủy thanh toán lớn, sửa giá), hỏi nhân viên.
Case 2: Rà soát e-invoice
Nếu cơ quan thuế kiểm tra:
- Filter action "EINVOICE_ISSUED" + date range kiểm tra.
- Export Excel → gửi cơ quan thuế (chứng minh hóa đơn phát chính thức).
Case 3: Điều tra sự cố
Nếu clinic phát hiện visit đã kết thúc bị xóa:
- Tìm patient_id, filter action "VISIT_DELETED".
- Xem ai xóa, lúc nào, có ghi chú không.
- Kiểm tra audit log của nhân viên đó ngày hôm đó.
Edge cases
Audit log và Privacy
DentIQ tuân thủ:
- GDPR / PDPA: audit log lưu metadata, không lưu raw patient data.
- Bảo mật lâm sàn: clinical note, image data không đưa vào audit.
- Quyền truy cập: chỉ
audit.readmới xem, và mỗi clinic chỉ xem audit clinic của mình.
Audit của hành động audit
Khi admin export audit log, hành động đó cũng được ghi (action AUDIT_EXPORT). Vô vòng lặp? Không — audit của audit chỉ lưu metadata (who, when), không log nội dung export.