Delivery log: PRD
Domain Notifications · function
delivery-log· mã storyNOTIF-LOG· SDD · Tests
Mục tiêu
Trả lời được "hệ đã gửi gì cho người này, lúc nào, tới không, mở chưa" cho mọi lượt gửi, và đọc số đó một cách trung thực.
User story
NOTIF-LOG-01: mọi lượt gửi một dòng, kể cả hỏng
Là người vận hành, tôi muốn mọi lượt gửi có một dòng sổ với trạng thái và mã lỗi, để không lượt gửi hỏng nào im lặng.
- Given nhà cung cấp trả lỗi When
sendEmail()kết thúc Then có dòngstatus='failed'kèmerror_code,error_message.
NOTIF-LOG-02: tách bản sao kiểm tra khỏi thư thật, hoặc nói thẳng khi không tách được
Chế độ hiện tại là EMAIL_AUDIT_COPY.mode = 'cc' (từ 08.09.2026, quyết định của người soạn): bản sao là người nhận CC trên chính thư của người dùng, nên KHÔNG có dòng bản sao riêng để loại.
- Given chế độ
'separate'và một thư sinh bản sao kiểm tra (thư riêng) When thống kê Then bản sao cóaudit_ofkhác rỗng và bị loại khỏi mọi con số. - Given chế độ
'cc'hoặc'bcc'và một loại thư có bản sao When thống kê hay hiện lượt mở (thư báo cáo, Email Catalog, Email Logs) Then con số mang nhãn "có lẫn lượt mở của người vận hành" ngay cạnh nó; loại không có bản sao (login_code, thư gắn kết) không mang nhãn.
NOTIF-LOG-03: ai đã mở, vào những lúc nào
Là người vận hành, tôi muốn xem từng lượt mở của một thư, để biết người ta đọc vào giờ nào.
- Given người nhận tải ảnh theo dõi ba lần When xem chi tiết lượt gửi Then thấy ba mốc thời gian; id không có thật thì vẫn trả ảnh nhưng không ghi dòng.
NOTIF-LOG-04: số mở là cận dưới, có nhiễu
- Given lượt tải đến từ proxy ảnh đã biết When ghi Then đánh dấu
via_proxy = 1; báo cáo nêu rõ tỉ lệ mở bị thổi lên khi bản sao đi chung thư, ngay cạnh số (dòng tỉ lệ mở, tiêu đề thư, nhãn trạng thái) chứ không chỉ ở ghi chú cuối thư. - Given kỳ báo cáo không có thư nào thuộc loại có bản sao được mở When thư báo cáo dựng Then không chỗ nào ghi "có lẫn": nhãn theo số liệu (
operatorOpensInKindStat), không theo chế độ. - Given một lượt gửi trước
EMAIL_AUDIT_COPY.modeSince, hoặc có bản sao riêng đi kèm When mở chi tiết ở Email Logs Then không mang cảnh báo "lượt mở có thể là của người vận hành" (operatorOpensForDelivery).
NOTIF-LOG-05: màn hình sổ gửi ở admin
- Given tôi mở admin
/community/emailWhen lọc theo người nhận hoặc loại Then thấy lượt gửi, trạng thái, số lần mở; có nút gửi thử.
NOTIF-LOG-06: lượt bị bỏ qua vì người nhận đã huỷ
Là người vận hành, tôi muốn biết thư nào đã không gửi vì người nhận huỷ nhận, để phân biệt "không gửi" với "chưa từng có lý do gửi".
- Given một thư gắn kết tới người đã huỷ When
sendEmail()bỏ qua Then có dấu vết truy vấn được.