Sổ tay nội bộ

PhimFlix · Gamikey · Tài liệu nội bộ — không phổ biến ra ngoài

Sổ tay Vận hành PhimFlix

Tài liệu huấn luyện nội bộ: giải thích tính năng, chuẩn hoá quy trình nghiệp vụ, và sổ tay xử lý tình huống cho toàn đội (Quản trị, CSKH, Kế toán, Vận hành kho).

Phiên bản 1.0 · 04/09/2026 Đối tượng: nhân sự được phân quyền Rà soát lại: mỗi quý
Mục lục

    1 Tổng quan hệ thống

    PhimFlix là nền tảng bán tài khoản Netflix chia sẻ (mỗi tài khoản gốc chia thành nhiều slot / profile bán cho nhiều khách). Nguồn tài khoản gồm SELF (công ty tự mua thẻ gia hạn) và CTV (cộng tác viên góp tài khoản, được hoàn tiền theo chu kỳ).

    1.1 Các bên tham gia

    VaiLà aiLàm gì trên hệ thống
    Khách hàngNgười mua gói NetflixĐăng nhập, mua gói, nạp ví, lấy mã OTP Netflix, xác nhận hộ gia đình, gửi đánh giá, mở ticket hỗ trợ.
    CTVNgười góp tài khoản Netflix vào khoXem tài khoản mình quản lý, xác nhận đã gia hạn Netflix (kèm bill), lấy mã / xác nhận hộ gia đình cho profile của mình, nhận tiền hoàn theo chu kỳ.
    AdminNhân sự công tyVận hành kho, xử lý đơn, đối soát, duyệt bill CTV, chăm sóc khách, quản lý nội dung, xem tài chính. Phân quyền theo vai trò — xem mục 2.

    1.2 Luồng cốt lõi

    Luồng tài khoản (nhập kho → giao khách)

    CTV/Công ty gia hạn Netflix → Admin thêm tài khoản vào Kho tài khoản, khai báo nguồn & số slot → khách mua gói → hệ thống tự cấp 1 profile trống đúng nhóm gói → khách nhận email & PIN → khi cần đăng nhập Netflix, khách bấm “Lấy mã” → hệ thống đọc email OTP từ Netflix và trả về.

    Luồng tiền

    Tiền vào: khách trả qua MoMo / chuyển khoản VietQR / Ví PhimFlix → đơn chuyển PAID → ghi WalletTransaction loại PURCHASE. Tiền ra: hoàn tiền CTV theo chu kỳ (VietQR), thưởng đánh giá cho khách (cộng ví). Giá vốn = tiền công ty trả Netflix (SELF) + tiền hoàn CTV → dùng để tính lợi nhuận gộp (mục 5.5).

    1.3 Địa chỉ & kênh vận hành

    Hạng mụcĐịa chỉ / kênh
    Website kháchhttps://phimflix.com
    Khu quản trịhttps://phimflix.com/admin
    APIhttps://api.phimflix.com
    Công cụ QA (chỉ khi test)/qa-dev — chỉ bật trong đợt kiểm thử, tắt khi vận hành thật
    Cảnh báo & vận hànhTelegram, chia 4 nhóm/topic: Đơn hàng · Cảnh báo · Hỗ trợ · CTV (mục 8)
    Máy chủVPS riêng · PM2: phimflix-api, phimflix-web · CSDL PostgreSQL phimflix_prod

    2 Vai trò & phân quyền nội bộ (RBAC)

    Khu Admin → Cài đặt → Phân Quyền & Quyền. Máy chủ chặn truy cập theo vai trò — không chỉ ẩn menu. Mỗi thay đổi đều có hộp xác nhận.

    2.1 Bốn vai trò mặc định

    Vai tròPhạm vi
    SUPER_ADMIN Quản trị tối caoToàn quyền, gồm cả cấp/thu quyền admin và tạo vai trò tùy biến.
    INVENTORY Vận hành kho & đơnKho tài khoản, đơn hàng, CTV (đầy đủ). Xem thống kê & nhật ký. Không vào Tài chính, Cài đặt, Người dùng, Đánh giá.
    ACCOUNTANT Kế toán / Tài chínhTài chính, cổng thanh toán (đầy đủ). Xem đơn hàng, CTV, thống kê, nhật ký. Không xem Kho tài khoản (chứa mật khẩu/PIN).
    SUPPORT Chăm sóc khách hàngPhiếu hỗ trợ, đánh giá, nội dung blog/hướng dẫn (đầy đủ). Xem người dùng & đơn hàng. Không xem Kho tài khoản, Tài chính, Cài đặt.

    2.2 Vai trò tùy biến

    SUPER_ADMIN bấm “+ Thêm vai trò tùy biến” → đặt tên + chọn mức truy cập cho từng trong 14 hạng mục (Không / Chỉ xem / Toàn quyền) → dùng lại cho nhiều người. Sửa vai trò tùy biến ảnh hưởng ngay tới mọi người đang giữ nó. Không xoá được vai trò đang có người dùng.

    2.3 Tùy chỉnh quyền cho một người

    Trong danh sách quản trị viên, bấm “Tùy chỉnh quyền” ở dòng của người đó. Panel cho:

    • Đổi vai trò — chọn vai trò khác → bấm “Đổi vai trò” (xoá mọi tùy chỉnh riêng cũ).
    • Tinh chỉnh từng hạng mục — chọn mức riêng cho người này; danh sách này đè lên vai trò, có hiệu lực ngay ở request kế tiếp.
    Nguyên tắc cấp quyền

    1. Cấp ít nhất có thể — chỉ đủ để làm việc. 2. Không cấp SUPER_ADMIN cho quá 2–3 người. 3. Việc nhạy cảm (gán quyền admin, chỉnh số dư ví khách) chỉ SUPER_ADMIN. 4. Nhân sự nghỉ việc → “Thu hồi” ngay (nút đỏ) — người đó biến mất khỏi danh sách và mọi phiên đăng nhập bị chặn ở request kế tiếp.

    3 Tính năng phía khách hàng

    Nắm rõ phần này để trả lời khách và tự thao tác kiểm tra khi cần.

    3.1 Đăng nhập & tài khoản

    • Magic link: khách nhập email → nhận mail có link → bấm vào là đăng nhập. Email chưa có sẽ được tạo tài khoản mới.
    • Google: đăng nhập bằng Google. Nếu email đã dùng magic link thì không tạo tài khoản trùng.
    • Phiên đăng nhập kéo dài 7 ngày. Thu hồi quyền / xoá tài khoản có hiệu lực ngay ở request kế tiếp (đọc thẳng từ CSDL).
    • 2FA: khách tự bật trong Tài khoản → Bảo mật, quét mã bằng app Authenticator. Nhập sai mã 5 lần → khoá tạm ~15 phút.
    • Tự yêu cầu xoá tài khoản: khách nhập mã 6 số gửi về email. Tài khoản bị ẩn danh hoá (không xoá cứng) — đơn hàng, đánh giá, giao dịch ví vẫn giữ cho kế toán. Sau khi xoá, không đăng nhập lại được. Tài khoản admin / CTV không tự xoá được.

    3.2 Bảng giá & mã giảm giá

    • Bảng giá lấy trực tiếp từ cấu hình Gói cước (mục 5.3). Gói bị admin tắt sẽ biến mất và không mua được.
    • Mã giảm giá có thể ràng buộc: đơn tối thiểu, chỉ đơn đầu tiên. Mã sai / hết hạn / chưa đạt điều kiện → báo lỗi, không làm hỏng trang.

    3.3 Thanh toán mua gói

    Cách trảCơ chếLưu ý CSKH
    MoMoTrang MoMo (QR + ví + deeplink). Nhận kết quả qua IPN, và hệ thống tự hỏi lại MoMo khi khách quay về + tự đối soát mỗi 5 phút.Đóng tab giữa chừng: không bị trừ oan, đơn ở trạng thái chờ, tự kích hoạt khi đối soát hoặc khách bấm lại.
    Chuyển khoản (VietQR / Pay2S)QR có logo VietQR, đủ số tài khoản + nội dung. Hệ thống nhận webhook và giao tài khoản trong ~15 giây.Phải chuyển đúng số tiền + đúng nội dung. Sai nội dung → không tự khớp, cần đối soát tay (mục 6.7).
    Ví PhimFlixTrả 100% bằng ví → xong ngay. Trả một phần bằng ví → phần còn lại qua cổng, tổng tiền khớp.Order.totalAmount = giá cuối sau giảm; walletDeducted = phần trừ từ ví.
    Hết slot khi có đơn

    Nếu lúc kích hoạt đơn mà kho hết profile trống đúng nhóm gói → đơn chuyển FAILED (mã OUT_OF_INVENTORY) và bắn cảnh báo. INVENTORY phải bổ sung kho rồi kích hoạt lại thủ công. Xem playbook 7.5.

    3.4 Ví tiền & nạp tiền

    • Nạp qua MoMo / VietQR. Có mức tối thiểu / tối đa — nhập ngoài khoảng thì khoá nút.
    • Lệnh nạp không thanh toán trong 15 phút → tự chuyển “Đã huỷ (quá hạn)”. Nếu tiền về muộn vẫn được cộng lại.
    • Màu & nhãn trạng thái: Đang xử lý = cam · Thành công = xanh lá · Thưởng = xanh dương.
    • Loại giao dịch: DEPOSIT (nạp) · PURCHASE (mua, số âm) · REFUND (hoàn) · REWARD (thưởng).

    3.5 Gói của tôi & lấy mã Netflix

    • Danh sách gói + lọc theo tab. Mở rộng thẻ để xem email Netflix, tên profile, PIN, ngày hết hạn.
    • Lấy mã OTP đăng nhập Netflix (Request Gate): khách bấm “Lấy mã” → hệ thống khoá (mỗi tài khoản chỉ 1 yêu cầu chờ tại một thời điểm) → khi khách đăng nhập Netflix, Netflix gửi email mã → hệ thống đọc qua Gmail API + bóc tách → trả mã 6 số. Khách đóng modal mà chưa lấy được → khoá tự nhả.
    • Xác nhận hộ gia đình (Smart TV): tab riêng. Khách gửi yêu cầu → nhận link xác nhận từ Netflix.
    • Lịch sử yêu cầu: xem lại thời gian / loại / trạng thái các lần lấy mã.
    • Yêu cầu đổi tài khoản: khách gửi kèm lý do → tự tạo ticket hỗ trợ (playbook 7.3 / SOP-8).
    • Gia hạn gói: cộng thêm số ngày của gói, KHÔNG đổi tài khoản Netflix khách đang dùng.

    3.6 Đánh giá & chương trình thưởng

    • Khách gửi đánh giá — có bộ đếm ký tự và ngưỡng thưởng hiển thị theo cấu hình.
    • Đánh giá “sạch” được đăng ngay. Đánh giá có link / số điện thoại / từ khoá cấm → vào hàng chờ duyệt.
    • Sau thời gian giữ, thưởng cộng vào ví khách + gửi thông báo & email. Số tiền thưởng tính trên giá trị đơn sau khi trừ mã giảm.

    3.7 Live chat, thông báo

    • Live chat (khung “Cần hỗ trợ” góc dưới phải) — tự xây, có AI chatbot. CSKH trực và trả lời các hội thoại vượt khả năng bot.
    • Trung tâm thông báo — lọc theo nhóm, đánh dấu đã đọc / tất cả.
    • Web push — khách bật trong Cài đặt, nhận thông báo khi có mã OTP hoặc giao dịch (iOS cần cài PWA vào màn hình chính).

    4 Tính năng phía CTV

    CTV là “người thứ 6” trên tài khoản Netflix — đi qua đúng cơ chế Request Gate như khách.

    • Bảng điều khiển CTV: hồ sơ nhận tiền (mã hoá), danh sách tài khoản đang quản lý, lịch sử hoàn tiền.
    • Xác nhận đã thanh toán Netflix: CTV tải ảnh bill + gửi → chờ Admin duyệt (SOP-3) → được hoàn tiền theo chu kỳ.
    • Lấy mã / xác nhận hộ gia đình cho CTV: 2 tab (mã đăng nhập / hộ gia đình); hiển thị danh sách PIN các profile của CTV.
    Ràng buộc 1 tài khoản = 1 CTV

    Mỗi tài khoản Netflix chỉ gắn một CTV đang hoạt động. Muốn chuyển sang CTV khác phải qua thao tác “Đổi CTV A → B” có xác nhận (mục 5.2). Cộng tác đã kết thúc không còn hiển thị như đang gắn.

    5 Tính năng phía Admin

    5.1 Đơn hàng & đối soát INVENTORY ACCOUNTANT (xem)

    • Danh sách đơn: lọc theo trạng thái / ngày / từ khoá, xem chi tiết, xuất Excel.
    • Đối soát MoMo: với đơn đã trả tiền thật nhưng còn “chờ”, mở chi tiết đơn → bấm “Đối soát MoMo”. Ngoài ra có bộ quét tự động mỗi 5 phút cho đơn/nạp ví MoMo tuổi 3 phút – 6 giờ.
    • Đơn qua cổng khác (Pay2S/Stripe/…) treo > 30 phút → hệ thống cảnh báo để đối soát thủ công.

    5.2 Kho tài khoản Netflix INVENTORY

    • Thẻ tài khoản: ruy-băng chéo tình trạng góc trên trái, tag Nguồn CTV / SELF, dòng “Còn trống X/Y”, email Netflix đầy đủ.
    • Thêm tài khoản: nhập thông tin, chọn Nguồn = SELF hoặc CTV; nếu CTV thì chọn CTV cụ thể (tự tạo cộng tác).
    • Import hàng loạt: theo cú pháp có giải thích sẵn; tự tạo User nếu email chưa tồn tại.
    • Xem chi tiết → Chỉnh sửa: mở ở chế độ xem (khoá sửa), có dòng “Nguồn: CTV [tên] / SELF” và tình trạng tô màu. Bấm “Chỉnh sửa” mới sửa được.
    • Đổi CTV A → B: hộp thoại xác nhận rõ. Xác nhận xong: kết thúc cộng tác cũ, tạo cộng tác mới.
    • Gia hạn tài khoản + ghi giá vốn: modal gia hạn có ô “Số tiền trả Netflix chu kỳ này” → nhập vào tạo một dòng giá vốn (mục 5.5).

    5.3 Gói cước · Khuyến mãi · Đánh giá · Cổng thanh toán SUPER

    • Gói cước: tạo / sửa / bật / tắt. Gói tắt biến mất khỏi bảng giá khách.
    • Mã giảm giá: tạo (điều kiện đơn tối thiểu, đơn đầu tiên), sửa, tắt.
    • Duyệt đánh giá & thưởng SUPPORT: duyệt / từ chối đánh giá, duyệt / trả / từ chối thưởng, trả lời đánh giá. Trả thưởng = cộng ví khách.
    • Auto-duyệt đánh giá: có tuỳ chọn “Tất cả (1–5★)” — vẫn chặn nếu chứa link / số điện thoại / từ khoá cấm.
    • Cổng thanh toán: 5 tab (MoMo, Pay2S, VTCPay, Alepay, Stripe). Mỗi cổng có công tắc + nút Lưu riêng; khoá bí mật hiển thị dạng ẩn; nút “Kiểm tra kết nối” gọi thật.
    • Mẫu email: sửa nội dung, gửi thử.

    5.4 Thông báo vận hành & nội dung

    • Định tuyến Telegram: 4 ô Chat ID theo nhóm (Đơn hàng / Cảnh báo / Hỗ trợ / CTV). Nhập dạng chatId hoặc chatId:threadId. Ô trống → tin loại đó về nhóm mặc định. Có nút kiểm tra bắn tin thật.
    • Blog / Hướng dẫn: thêm / sửa / xoá. Nội dung soạn trên Airtable (Blog · Guide · FAQ · Kịch bản CSKH) rồi bấm “Kéo từ Airtable”. FAQ & kịch bản CSKH đã xuất bản được trợ lý AI dùng để trả lời.

    5.5 Tài chính — Lợi nhuận gộp ACCOUNTANT

    Admin → Tài chính. Chọn kỳ (tháng này / tháng trước / 30 ngày / tuỳ chọn). Báo cáo: Doanh thu · Giá vốn (tách CTV / SELF) · Chi phí tồn kho nhàn rỗi · Lợi nhuận gộp · biên %.

    Công thức giá vốn động (Mô hình B)

    Chi phí một tài khoản được rải đều theo ngày trong chu kỳ. Mỗi ngày, phần “burn” của tài khoản chia cho số slot bán được trong ngày đó. Ngày bán đủ slot → giá vốn/slot thấp; ngày bán ít → giá vốn/slot cao hơn; ngày không bán được slot nào → khoản đó rơi vào “chi phí tồn kho nhàn rỗi”. Doanh thu cũng phân bổ theo ngày.

    • Bảng lãi/lỗ theo từng tài khoản: tài khoản lỗ nặng xếp lên đầu — ưu tiên xem để quyết định tiếp tục hay không.
    • Cảnh báo thiếu dữ liệu giá vốn: liệt kê tài khoản có doanh thu nhưng chưa ghi giá vốn. Còn cảnh báo → lợi nhuận đang bị tính cao hơn thực tế. Kế toán phải nhắc Vận hành kho nhập giá vốn khi gia hạn.

    5.6 CTV · Người dùng · Hỗ trợ

    • Duyệt bill & hoàn tiền CTV INVENTORY: xác minh bill → “Hoàn tiền” (hiện VietQR) → “Xác nhận đã chuyển”. Hệ thống tự: cộng 1 tháng hạn cho tài khoản + thông báo CTV + sinh dòng giá vốn.
    • Hồ sơ CTV & tài khoản gắn: chỉ hiện cộng tác đang hoạt động; bấm 1 tài khoản mở được thông tin đầy đủ.
    • Ticket hỗ trợ SUPPORT: xem / trả lời / đóng. Loại đặc biệt: “Yêu cầu đổi tài khoản”, “Yêu cầu xoá tài khoản”.
    • Người dùng & phân quyền SUPER: tìm người dùng, cấp / thu quyền admin, chỉnh số dư ví (thận trọng — có ghi audit).
    • Nhật ký hoạt động (Audit log): ghi lại các thao tác quan trọng — đổi CTV, ghi giá vốn, đổi vai trò admin, khách tự xoá tài khoản… Dùng để truy vết khi có sự cố hoặc tranh chấp.

    6 Quy trình nghiệp vụ chuẩn (SOP)

    Mỗi quy trình: mục tiêu → các bước (kèm vai trò) → lưu ý. Ký hiệu vai trò: SUPER Vận hành kho Kế toán CSKH

    SOP-1 · Xử lý đơn hàng mới

    Mục tiêu: khách trả tiền xong nhận được tài khoản trong vài phút, không sót đơn.

    1. Đơn tự kích hoạt khi cổng thanh toán báo thành công — không cần thao tác tay trong trường hợp bình thường.
    2. Vận hành kho mỗi ca mở Admin → Đơn hàng, lọc PENDING tuổi > 15 phút. Đơn MoMo: bấm “Đối soát MoMo”. Đơn chuyển khoản: đối chiếu sao kê (SOP-7).
    3. Đơn FAILED / OUT_OF_INVENTORY → bổ sung kho (SOP-2) rồi kích hoạt lại; báo khách thời gian dự kiến.
    4. Đơn đã PAID: kiểm tra khách đã nhận email biên nhận + thông tin tài khoản. Chưa nhận → gửi lại từ chi tiết đơn.
    Chuẩn

    Toàn bộ đơn PENDING > 30 phút phải được xử lý hoặc ghi chú trong ca. Không để đơn treo qua đêm.

    SOP-2 · Nạp / bổ sung kho tài khoản Netflix

    1. Vận hành kho xác định nguồn: SELF (công ty vừa mua thẻ) hay CTV (CTV vừa xác nhận bill).
    2. Admin → Kho tài khoản → “Thêm tài khoản”. Nhập email/mật khẩu Netflix, số slot (Y), chọn Nguồn. Nếu CTV: chọn đúng CTV.
    3. Tài khoản SELF vừa gia hạn: mở modal gia hạn, nhập “Số tiền trả Netflix chu kỳ này” → tạo dòng giá vốn.
    4. Kiểm tra thẻ mới hiện “Còn trống Y/Y” và tình trạng xanh (Active).
    5. Nhiều tài khoản một lúc → dùng Import hàng loạt.

    SOP-3 · Duyệt bill & hoàn tiền CTV

    1. CTV gửi bill gia hạn Netflix qua Cổng CTV → tin về topic CTV trên Telegram.
    2. Vận hành kho mở Admin → CTV → bill chờ duyệt, đối chiếu: đúng tài khoản, đúng chu kỳ, số tiền hợp lý, ảnh bill rõ.
    3. Hợp lệ → bấm “Hoàn tiền” (hiện VietQR của CTV) → chuyển khoản → bấm “Xác nhận đã chuyển”.
    4. Hệ thống tự: cộng 1 tháng hạn cho tài khoản, thông báo CTV, sinh dòng giá vốn CTV_REFUND.
    5. Bill sai / mờ / nghi ngờ → bấm “Từ chối” kèm lý do; nhắn CTV gửi lại.
    Kiểm soát

    Không hoàn tiền khi chưa nhìn thấy bill. Số tiền hoàn bất thường (cao/thấp hơn giá Netflix niêm yết nhiều) → hỏi lại trước khi duyệt.

    SOP-4 · Đối soát thanh toán cuối ngày Kế toán

    1. Cuối ngày mở Admin → Đơn hàng, lọc theo ngày. Đối chiếu tổng doanh thu với báo cáo cổng MoMo và sao kê ngân hàng.
    2. Chạy kiểm tra toàn vẹn dữ liệu tiền (SOP-11) — không phát sinh dòng lệch mới.
    3. Đơn PENDING còn sót → chuyển Vận hành kho; đơn FAILED → xác định lý do.
    4. Ghi nhận chênh lệch (nếu có) vào sổ theo dõi.

    SOP-5 · Xử lý ticket hỗ trợ CSKH

    1. Ticket mới → tin về topic Hỗ trợ. Mở Admin → Hỗ trợ & Khiếu nại.
    2. Phân loại: Kỹ thuật · Yêu cầu đổi tài khoản · Yêu cầu xoá tài khoản · Thanh toán · Khác.
    3. Trả lời trong SLA: phản hồi đầu ≤ [điền] phút giờ hành chính; giải quyết ≤ [điền] giờ với vấn đề thường, ≤ [điền] giờ với vấn đề cần đổi tài khoản.
    4. Vấn đề vượt quyền CSKH (đổi tài khoản, hoàn tiền, lỗi hệ thống) → chuyển đúng bộ phận, ghi chú rõ, không đóng ticket khi chưa xong.
    5. Xử lý xong → tóm tắt cách giải quyết trong ticket → đóng.

    SOP-6 · Duyệt đánh giá & trả thưởng CSKH

    1. Admin → Đánh giá dịch vụ, xem hàng chờ duyệt.
    2. Duyệt nếu: đúng khách có đơn thật, nội dung không spam / không chèn link liên hệ ngoài / không xúc phạm.
    3. Từ chối kèm lý do nếu vi phạm. Nghi nhiều đánh giá từ một người / một mẫu câu → playbook 7.10.
    4. Thưởng đến hạn trả → kiểm tra rồi bấm trả (cộng ví khách). Từ chối thưởng nếu đánh giá bị gỡ sau đó.

    SOP-7 · Đối soát chuyển khoản sai nội dung Vận hành kho

    1. Khách báo đã chuyển khoản nhưng đơn chưa lên → xin ảnh biên lai + 4 số cuối tài khoản gửi + thời gian chuyển.
    2. Đối chiếu sao kê ngân hàng công ty: tìm giao dịch đúng số tiền + thời gian.
    3. Khớp được → mở chi tiết đơn của khách → đối soát / kích hoạt thủ công.
    4. Không khớp (chuyển nhầm số tài khoản / chưa chuyển) → hướng dẫn khách và ghi ticket.

    SOP-8 · Yêu cầu đổi tài khoản CSKH + Vận hành kho

    1. Ticket “Yêu cầu đổi tài khoản” — xác minh lý do (tài khoản lỗi Netflix, bị đăng xuất liên tục, sai gói…).
    2. Lý do chính đáng → Vận hành kho cấp 1 profile trống khác cùng nhóm gói, cập nhật thông tin trong gói của khách.
    3. Ghi rõ tài khoản cũ có vấn đề gì để cách ly / kiểm tra lại.
    4. Báo khách thông tin mới, đóng ticket.

    SOP-9 · Yêu cầu xoá tài khoản khách CSKH

    1. Khách tự xoá được qua trang Tài khoản (nhập mã email). CSKH chỉ hỗ trợ khi khách gặp trục trặc thao tác.
    2. Giải thích trước: dữ liệu bị ẩn danh, mất gói đang dùng và số dư ví, không hoàn lại.
    3. Không tự ý xoá hộ khách trừ khi có yêu cầu bằng văn bản/email từ chính khách. Ghi lại trong ticket.

    SOP-10 · Onboard / offboard nhân sự admin SUPER

    1. Vào: nhân sự tạo tài khoản PhimFlix bằng email công ty → SUPER vào Phân Quyền & Quyền → Thêm nhân sự → nhập email, chọn vai trò tối thiểu đủ việc → xác nhận.
    2. Bàn giao tài liệu này + kèm 1–2 ca đầu có người hướng dẫn thực tế.
    3. Ra: ngay ngày cuối làm việc, SUPER bấm “Thu hồi” ở dòng của người đó. Kiểm tra người đó biến mất khỏi danh sách.
    4. Nghi tài khoản bị lộ: thu hồi + đổi các khoá bí mật liên quan (playbook 7.14).

    SOP-11 · Kiểm tra toàn vẹn dữ liệu tiền Kế toán + kỹ thuật

    1. Định kỳ (hằng tuần) chạy script kiểm tra: mọi đơn PAID qua cổng phải có WalletTransaction loại PURCHASE khớp số tiền.
    2. Lệnh: npx tsx scripts/check-order-wallet-integrity.ts --all (chạy trên máy chủ, trong thư mục backend).
    3. Chỉ quan tâm dòng lệch mới phát sinh (bỏ qua dữ liệu test cũ đã biết). Có dòng lệch mới → dựng lại nguyên nhân với kỹ thuật trước khi backfill.

    7 Sổ tay xử lý tình huống (Playbook)

    Mỗi thẻ: Dấu hiệuChẩn đoán nhanhXử lýKhi nào chuyển cấp. Mức độ: P1 Khẩn P2 Cao P3 Thường

    7.1 Khách không nhận được mã OTP Netflix

    P2

    Dấu hiệu

    Khách bấm “Lấy mã” nhiều phút không có mã, hoặc mã báo sai.

    Chẩn đoán

    • Khách đã thực sự thao tác đăng nhập trên Netflix chưa? (mã chỉ về khi Netflix gửi email).
    • Xem Lịch sử yêu cầu của khách: yêu cầu đang PENDING hay đã hết hạn / bị nhả.
    • Có cảnh báo đường ống Gmail / DNS trên Telegram không (mục 8)?

    Xử lý

    1. Hướng dẫn khách: mở Netflix → nhập email tài khoản → chọn “Gửi mã đăng nhập qua email” → rồi mới bấm “Lấy mã” trên PhimFlix.
    2. Vẫn không có sau ~5 phút: yêu cầu khách đóng modal (nhả khoá) rồi thử lại.
    3. Vẫn lỗi: Vận hành kho kiểm tra tài khoản gốc còn đăng nhập được không; nếu bị đổi mật khẩu → xử lý như 7.3.

    Chuyển cấp

    Nhiều khách cùng lỗi một lúc → nghi lỗi đường ống Gmail API → báo kỹ thuật ngay (P1).

    7.2 “Đã trả tiền nhưng đơn vẫn chờ”

    P2

    Chẩn đoán

    • Trả bằng gì? MoMo → dùng “Đối soát MoMo” ở chi tiết đơn.
    • Chuyển khoản → đúng số tiền + đúng nội dung? Sai nội dung → SOP-7.
    • Đơn có ở trạng thái FAILED / OUT_OF_INVENTORY không.

    Xử lý

    1. MoMo: mở đơn → “Đối soát MoMo”. MoMo xác nhận đã trả → đơn tự kích hoạt.
    2. Chuyển khoản đúng nội dung nhưng chưa lên sau 15 phút → đối chiếu sao kê, kích hoạt tay.
    3. Hết slot → bổ sung kho (SOP-2) rồi kích hoạt; báo khách thời gian.

    Chuyển cấp

    MoMo xác nhận đã trả nhưng hệ thống vẫn không kích hoạt → kỹ thuật (P1, nguy cơ lệch tiền).

    7.3 Tài khoản Netflix bị đăng xuất / đổi mật khẩu

    P1

    Dấu hiệu

    Nhiều khách trên cùng một tài khoản gốc báo không vào được / bị hỏi đổi mật khẩu.

    Xử lý

    1. Vận hành kho khoá tài khoản gốc đó lại (không cấp thêm), đánh dấu tình trạng lỗi trong Kho.
    2. Xác định nguyên nhân: CTV tự đổi mật khẩu? Netflix bắt xác minh? Bị lộ?
    3. Chuyển toàn bộ khách đang trên tài khoản đó sang profile trống ở tài khoản khác cùng nhóm (SOP-8).
    4. Liên hệ CTV (nếu nguồn CTV) để khôi phục hoặc chấm dứt cộng tác.
    5. CSKH chủ động nhắn các khách bị ảnh hưởng kèm thông tin mới + lời xin lỗi.

    Chuyển cấp

    Ảnh hưởng > 5 khách → báo ban điều hành, cân nhắc thông báo sự cố.

    7.4 “Gói đã hết hạn nhưng vẫn còn ngày” / ngược lại

    P3

    Chẩn đoán

    So ngày hết hạn trong Gói của tôi với ngày mua + thời hạn gói. Kiểm tra có lần gia hạn nào chưa cộng ngày.

    Xử lý

    1. Do gia hạn chưa cộng ngày (đơn gia hạn PENDING): đối soát đơn đó trước.
    2. Sai lệch thật do lỗi: Vận hành kho chỉnh ngày hết hạn của gói cho đúng, ghi chú lý do.

    7.5 Kho hết slot khi có đơn (OUT_OF_INVENTORY)

    P2

    Dấu hiệu

    Đơn chuyển FAILED, cảnh báo “hết slot nhóm X” về topic Cảnh báo.

    Xử lý

    1. Vận hành kho bổ sung tài khoản nhóm đó (SOP-2) — ưu tiên nguồn SELF cho nhanh.
    2. Mở lại đơn FAILED → kích hoạt thủ công.
    3. Báo khách thời gian giao (mục tiêu < 30 phút).
    4. Sau sự cố: rà lại ngưỡng cảnh báo tồn kho, đặt mức tồn tối thiểu cho từng nhóm.

    7.6 Cảnh báo Telegram “🔴 LỖI HỆ THỐNG”

    P1

    Là gì

    Hệ thống giám sát tự bắn khi có lỗi máy chủ (5xx / lỗi không bắt được) hoặc lỗi runtime phía web của khách. Có kèm loại lỗi, nơi xảy ra, và stack rút gọn.

    Xử lý

    1. Người trực kỹ thuật đọc nội dung cảnh báo (loại lỗi, route, số lần).
    2. Lỗi lặp lại nhiều / ảnh hưởng luồng mua–thanh toán–lấy mã → xử lý ngay, cân nhắc rollback (mục 9.2).
    3. Lỗi lẻ tẻ, không ảnh hưởng khách → ghi nhận, xử lý trong ngày.
    4. Nếu đã bật Sentry: mở Sentry xem chi tiết & tần suất.

    Lưu ý

    Cảnh báo có chống lặp 15 phút mỗi loại lỗi và trần 15 cảnh báo / 5 phút — im lặng không có nghĩa là hết lỗi, xem log đầy đủ.

    7.7 Cảnh báo “DNS ra ngoài KHÔNG ổn định”

    P1

    Là gì

    Máy chủ không phân giải được tên miền ra ngoài (Telegram / Google). Ảnh hưởng: gửi mail, lấy OTP Netflix, đăng nhập Google có thể lỗi.

    Xử lý

    1. Hệ thống tự chuyển sang máy chủ DNS công cộng sau 3 lần lỗi liên tiếp — theo dõi xem có tin “DNS đã phục hồi” không.
    2. Kỹ thuật kiểm tra systemctl status systemd-resolved và mục FallbackDNS trong /etc/systemd/resolved.conf.
    3. Khởi động lại systemd-resolved nếu cần.

    7.8 Cảnh báo “đơn cổng khác treo > 30 phút”

    P2

    Là gì

    Có đơn Pay2S / Stripe / VTCPay / Alepay ở trạng thái “chờ” quá lâu — thường do bỏ lỡ webhook.

    Xử lý

    1. Vận hành kho mở Đơn hàng, lọc PENDING theo các cổng đó.
    2. Đối chiếu với cổng thanh toán / sao kê. Trả tiền thật → kích hoạt tay.
    3. Chưa trả → để nguyên, đơn sẽ tự hết hạn.

    7.9 CTV báo “đã gia hạn nhưng chưa được hoàn tiền”

    P3

    Xử lý

    1. Kiểm tra CTV đã gửi bill qua Cổng CTV chưa (nhiều CTV quên bước này).
    2. Đã gửi → xử lý theo SOP-3, ưu tiên các bill chờ quá 48 giờ.
    3. Bill bị từ chối trước đó → nhắc CTV gửi lại đúng yêu cầu.

    7.10 Nghi gian lận đánh giá / lạm dụng mã giảm giá

    P2

    Dấu hiệu

    Nhiều đánh giá cùng mẫu câu / cùng khoảng thời gian; một người tạo nhiều tài khoản để lấy mã “đơn đầu tiên”.

    Xử lý

    1. CSKH tạm không duyệt các đánh giá nghi ngờ, đánh dấu để rà.
    2. Đối chiếu email / số điện thoại / thiết bị (qua Audit log & danh sách người dùng).
    3. Xác nhận lạm dụng → từ chối thưởng, khoá mã giảm nếu cần, báo ban điều hành.
    4. Rà lại điều kiện mã giảm (đơn tối thiểu, đơn đầu tiên) cho chặt hơn.

    7.11 Data tiền lệch (đơn PAID thiếu giao dịch ví)

    P2

    Xử lý

    1. Kỹ thuật chạy scripts/check-order-wallet-integrity.ts --all trên máy chủ.
    2. Phân biệt dữ liệu test cũ (ref TEST_..., giao dịch nhỏ trước ngày vá) — bỏ qua.
    3. Lệch mới → dựng lại nguyên nhân (thiếu idempotency callback?), sau đó backfill bằng script riêng có rà từng dòng.

    7.12 Cần rollback bản deploy

    P1

    Khi nào

    Sau khi deploy, healthcheck fail hoặc lỗi hàng loạt ở luồng chính.

    Xử lý

    1. Script deploy tự rollback nếu healthcheck fail — kiểm tra log deploy xác nhận đã quay lui.
    2. Bản mới đã lên nhưng phát hiện lỗi sau đó: git revert commit lỗi trên nhánh main → push → chạy lại deploy.sh api / deploy.sh web.
    3. Thông báo đội, theo dõi cảnh báo & healthcheck 30 phút sau.

    7.13 Khách yêu cầu hoàn tiền

    P3

    Xử lý

    1. CSKH xác định lý do & đối chiếu chính sách hoàn tiền.
    2. Đủ điều kiện → chuyển Kế toán duyệt. Hoàn về ví PhimFlix của khách (nhanh, có dấu vết) hoặc chuyển khoản nếu khách yêu cầu.
    3. Ghi rõ trong ticket + Audit: số tiền, lý do, người duyệt.

    Lưu ý

    Chưa có nút “hoàn tiền đơn” tự động — thao tác qua điều chỉnh số dư ví (SUPER) hoặc chuyển khoản tay, luôn ghi chú.

    7.14 Nghi tài khoản admin bị lộ / nhân sự nghỉ đột xuất

    P1

    Xử lý

    1. SUPER vào Phân Quyền → “Thu hồi” ngay tài khoản đó.
    2. Đổi các khoá bí mật mà người đó có thể biết: khoá ký JWT, khoá cổng thanh toán, token Telegram / Airtable, mật khẩu máy chủ, mật mã công cụ QA.
    3. Rà Audit log các thao tác của người đó 30 ngày gần nhất.
    4. Đổi mật khẩu tài khoản Google dùng cho Gmail API nếu liên quan.

    8 Cảnh báo hệ thống & cách phản ứng

    Thông báo Telegram được định tuyến theo 4 nhóm. Ai trực nhóm nào, phản ứng ra sao.

    Nhóm / topicLoại tinNgười trựcPhản ứng
    Đơn hàngĐơn mới, đơn đã thanh toán, đối soát tự động kích hoạt đơnVận hành khoTheo dõi luồng bình thường; đối chiếu cuối ca.
    Cảnh báo🔴 Lỗi hệ thống · DNS không ổn định · hết slot kho · tài khoản Netflix sắp hết hạn · đơn cổng khác treoKỹ thuật + Vận hành khoTheo playbook 7.5–7.8. Lỗi hệ thống / DNS = P1.
    Hỗ trợTicket mới, ticket khách phản hồiCSKHSOP-5. Không để ticket quá SLA.
    CTVCTV gửi bill, CTV xác nhận thanh toán NetflixVận hành khoSOP-3. Ưu tiên bill chờ > 48 giờ.
    Cấu hình

    Chat ID từng nhóm khai ở Admin → Cài đặt → Telegram, dạng chatId hoặc chatId:threadId. Ô trống → tin về nhóm mặc định. Đổi nhóm/topic → bấm nút kiểm tra để chắc chắn tin về đúng chỗ.

    9 Vận hành kỹ thuật

    9.1 Deploy

    SSH vào máy chủ rồi chạy:

    • bash ~/scripts/deploy.sh api — backend (migrate CSDL → build → khởi động lại PM2 → healthcheck → tự rollback nếu fail).
    • bash ~/scripts/deploy.sh web — frontend.

    Deploy tự lấy code mới nhất từ nhánh main. Commit & push trước, rồi mới deploy.

    9.2 Rollback

    Xem playbook 7.12. Tóm tắt: healthcheck fail → tự rollback; lỗi phát hiện sau → git revert + push + deploy lại.

    9.3 Tiến trình chạy nền (scheduler)

    Tiến trìnhChu kỳViệc
    Đối soát MoMo tự động5 phútKích hoạt đơn/nạp ví MoMo còn “chờ” (tuổi 3′–6h) + cảnh báo đơn cổng khác treo.
    Huỷ lệnh nạp ví quá hạn5 phútLệnh nạp PENDING > 15 phút → FAILED.
    Giám sát DNS ra ngoài5 phútPhân giải Telegram / Google; lỗi liên tục → đổi DNS + cảnh báo.
    Trả thưởng đánh giá6 giờĐến hạn giữ → cộng ví + email.
    Nhắc gia hạn (đơn khách + tài khoản CTV)hằng ngàyGói / tài khoản sắp hết hạn → nhắc.
    Quét hết hạn profileđịnh kỳProfile hết hạn → thu hồi, trả slot về kho.
    Gia hạn Gmail watchđịnh kỳGiữ đường ống đọc email OTP luôn sống.

    9.4 Script kiểm tra

    • npx tsx scripts/check-order-wallet-integrity.ts --all — đối chiếu đơn ↔ giao dịch ví (SOP-11).

    9.5 Biến môi trường quan trọng (backend .env)

    BiếnÝ nghĩa
    QA_DEV_TOOLSPhải bỏ / đặt khác “on” khi vận hành thật. “on” = mở công cụ QA /qa-dev.
    RBAC_ENFORCEMặc định “on”. “off” = tắt phân quyền chi tiết (chỉ dùng khi gỡ rối).
    MOMO_RECONCILE_SWEEPMặc định “on”. Bộ quét đối soát MoMo tự động.
    OUTBOUND_HEALTHCHECKMặc định “on”. Giám sát DNS ra ngoài.
    SENTRY_DSNCó → đẩy lỗi lên Sentry. Trống → chỉ cảnh báo Telegram (vẫn đủ dùng).

    9.6 Sao lưu

    CSDL được sao lưu định kỳ trên máy chủ. Cần diễn tập phục hồi định kỳ để chắc chắn file backup đọc được. Giữ tối thiểu 7 bản gần nhất.

    10 Phụ lục

    10.1 Bảng trạng thái

    NhómGiá trịNghĩa
    Đơn hàngPENDINGChờ thanh toán / chờ xử lý.
    PAIDĐã thanh toán & đã cấp tài khoản.
    FAILEDLỗi khi kích hoạt (thường do hết slot) — cần admin.
    Giao dịch víPENDINGĐang chờ cổng xác nhận.
    SUCCESSThành công.
    FAILEDThất bại / quá hạn.
    Loại giao dịch víDEPOSITNạp tiền.
    PURCHASEMua gói (số âm).
    REFUNDHoàn tiền.
    REWARDThưởng đánh giá.
    Gói của kháchPENDINGChưa kích hoạt.
    ACTIVEĐang dùng.
    EXPIREDHết hạn.
    CANCELLEDĐã huỷ.
    Nguồn tài khoảnSELFCông ty tự mua/gia hạn.
    CTVCộng tác viên góp.

    10.2 Thuật ngữ

    Slot / ProfileMột “chỗ” trên tài khoản Netflix gốc, bán cho một khách.
    Request GateCơ chế khoá: mỗi tài khoản chỉ 1 yêu cầu lấy mã đang chờ tại một thời điểm.
    Giá vốn (COGS)Tiền công ty bỏ ra cho tài khoản: mua/gia hạn Netflix (SELF) + hoàn tiền CTV.
    Chi phí tồn kho nhàn rỗiPhần giá vốn của những ngày không bán được slot nào.
    Đối soátKiểm tra khớp giữa tiền thực nhận (cổng / ngân hàng) và trạng thái đơn trên hệ thống.
    Household verificationXác nhận “hộ gia đình” của Netflix khi đăng nhập trên Smart TV.
    Cần chốt trước khi ban hành

    Các số SLA trong [điền] ở SOP-5 phải được ban điều hành chốt cụ thể trước khi phát tài liệu cho đội. Checklist go-live được quản lý riêng, không nằm trong tài liệu này.

    Sổ tay Vận hành PhimFlix · v1.0 · 04/09/2026 · Tài liệu nội bộ Gamikey — không chia sẻ ra ngoài.
    Tài liệu này mô tả hệ thống tại thời điểm biên soạn; khi có thay đổi tính năng, cập nhật lại phiên bản và thông báo cho đội.