Audit log
Audit log = lịch sử mọi thay đổi data trong dự án DVDPM. Mỗi action (tạo, sửa, xoá) được lưu với:
- Thời gian
- User Windows (= account đăng nhập máy)
- Loại entity (Contract, BoQ item, Payment, VO…)
- Action (Create / Update / Delete)
- Snapshot data trước + sau
Phù hợp cho:
- Compliance: track ai sửa BoQ trị giá lớn lúc nào
- Debugging: data bất thường — track xem ai gây ra
- Audit độc lập: kiểm toán nội bộ / kiểm toán CĐT
Mở Audit log viewer
Tab DVDPM → Audit log (icon scroll/history).
Dialog hiển thị bảng với filter:
| Filter | Mô tả |
|---|---|
| Date range | From - To (default: 30 ngày qua) |
| Entity type | All / Contract / BoQ / Payment / VO / … |
| Action | All / Create / Update / Delete |
| User | Filter theo Windows username |
| Search | Free-text search trong description |
Mỗi row: timestamp + user + action + entity ID + summary.
Drill-down 1 entry
Click row → expand panel với:
- Before: JSON snapshot data trước khi sửa
- After: JSON snapshot data sau khi sửa
- Diff: highlight các field thay đổi (vd Contract.Value:
1,000,000,000→1,200,000,000)
→ Track precise điều gì thay đổi.
Render Audit log
Click Render to Excel → sheet AuditLog với:
- Filter applied (date range, entity…)
- Mỗi action 1 row
- Cột Diff hiển thị compact
→ Forward kế toán / kiểm toán làm evidence.
Audit log limits
DVDPM lưu audit log trong sidecar .dvdpm.db cùng với data. Vì vậy:
- Mỗi dự án 1 audit log riêng (không cross-project)
- Audit log persist khi backup file
.dvdpm.db - Không có expire — entries giữ vĩnh viễn (cho đến khi xoá DB)
Performance: 1 dự án dùng 1 năm tích lũy ~5,000-20,000 entries → vẫn fast.
Export full audit log
Cho compliance / kiểm toán cuối năm:
- Tab Audit log → Filter “All time” + “All actions”.
- Click Render to Excel → sheet đầy đủ.
- Save as PDF với watermark “AUDIT — DỰ ÁN XYZ — 2026” để có version locked.
PDF này có thể đóng dấu công ty + lưu archive.
Audit log KHÔNG track
⚠ Vì lý do hiệu năng + relevance, audit log KHÔNG track:
- View data (chỉ track Create/Update/Delete)
- Click ribbon button (chỉ user tương tác data)
- Render Excel sheet (output, không phải data change)
- Settings UI (theme, lang)
- License operations
→ Chỉ track data change trong DB sidecar.
Use case examples
Trường hợp 1: BoQ tăng giá trị
CĐT phát hiện tổng BoQ HĐ-001 ngày 10/05 = 5 tỉ, ngày 15/05 = 5.5 tỉ → ai sửa?
- Audit log → Filter Entity = BoQ + From 10/05 + To 15/05.
- Tìm action Update với entity ID HĐ-001.
- Click drill-down → thấy:
- Before: Quantity = 100 m³, UnitPrice = 50,000,000
- After: Quantity = 110 m³ (sửa)
- User: PM_Hoang
- Time: 12/05/2026 14:30
- Confirm với PM Hoàng vì sao tăng → có VO duyệt không?
Trường hợp 2: Đợt thanh toán biến mất
Đợt 3 status Approved đã có hôm qua, hôm nay không thấy?
- Audit log → Filter Entity = Payment + Action = Delete.
- Tìm entry tương ứng → thấy:
- User: Admin
- Time: 09:00 today
- Reason: (ghi chú nếu có)
- Có thể restore từ backup
.dvdpm.dbcủa hôm qua.
Trường hợp 3: Kiểm toán cuối năm
Auditor yêu cầu evidence ai approve VO trị giá >100tr trong Q4 2025:
- Filter Entity = VO + Action = Update + Date range = 01/10 - 31/12.
- Filter results với Status = Approved.
- Render PDF → chữ ký số.
Audit log + Backup
Khi .dvdpm.db lớn (>50 MB), audit log chiếm phần đáng kể. Nếu:
- Cần lưu vĩnh viễn → backup file
.dvdpm.dbtrước khi cleanup. - Cleanup audit log cũ → dùng SQL CLI tools (advanced, có thể destructive).
- Roadmap v1.x: built-in feature archive audit cũ tự động.
Tip thực tế
- Review weekly: cuối tuần PM check audit để biết team làm gì tuần qua.
- Filter by user: tìm activity của 1 thành viên cụ thể (vd “QS_Linh đã sửa BoQ items nào tuần này”).
- Export trước khi share file Excel: nếu share workbook với CĐT, export audit PDF kèm để có evidence.
- KHÔNG xoá audit entries: dù có nút “Delete” trong DB level, đừng làm — mất chain of custody.
Sự cố thường gặp
Audit log trống
→ Có thể:
- Dự án mới (chưa có activity)
- Filter quá hẹp → expand date range / clear filter
- Sidecar
.dvdpm.dbbị reset (qua Promote scratch?) → audit cũ mất
Audit log show “user” = SYSTEM
→ Action do hệ thống tự thực hiện (vd seed sample data, migration). Không phải bug.
Tiếp theo: FAQ + Lỗi thường gặp → | Liên quan: Backup / Restore