Skip to content

Rủ bạn cùng học và tài khoản ảo của member ​

Chỉ đạo chủ dự án 2026-09-22: "Tạo một page riêng, giúp learner có thể gửi link referral, để khi người khác nhận được link rồi login vào hệ thống, thì người đi giới thiệu sẽ được ghi nhận, và có thông tin. Nếu người được referral mà trở thành paid member, thì người đi giới thiệu cũng nhìn thấy thông tin. Người đi giới thiệu được 10%, người nhận giới thiệu được giảm 10% so với giá tiêu chuẩn. 10% hoa hồng đó được cộng thêm vào tài khoản ảo của mỗi member. Việc đổi từ con số đó ra tiền mặt là một tính năng riêng, tôi sẽ làm sau."

1. Việc mà tài liệu này giải ​

Phần lớn thứ chỉ đạo trên mô tả đã chạy trên production từ SRC-450 và SRC-754: trang riêng, mã mỗi người, ghi công lúc đăng nhập, bảy mốc hoạt động, ba lá thư. Tài liệu này tồn tại vì hai lý do khác:

  1. Mô tả ấy chưa từng nằm ở một chỗ. Nó rải trong một dòng bảng của PRD-001, một mục của emails.md, ba migration và một module code. Người muốn biết "referral của Nemo12 hoạt động thế nào" phải đọc bốn nơi và tự ghép. Một dòng bảng không đủ chỗ cho một tính năng có sáu luật chống gian lận.
  2. Chỉ đạo hôm nay mở một thứ thật sự mới: tài khoản ảo. Trước hôm nay, hoa hồng là một dòng pending không đi đâu cả, vì Nemo12 chưa có cổng thanh toán và hứa tiền trước khi trả được là hứa suông. "Cộng vào tài khoản ảo" tháo đúng nút thắt đó: nó biến một lời hứa tiền mặt thành một số dư nội bộ — thứ Nemo12 tự phát hành, tự ghi sổ và tự tiêu được, không cần ngân hàng đứng giữa.

Ngoài phạm vi, và cố ý: quy đổi số dư ra tiền mặt (chủ dự án nói rõ "sẽ làm sau"), cổng thanh toán online, và mô hình thu phí (Q-014/Q-015 vẫn mở).

2. Bốn người trong câu chuyện ​

VaiHọ muốn gìHọ sợ gì
Người đi giới thiệuBiết người mình rủ có dùng thật không, và mình được gìRủ xong rơi vào im lặng, không biết có được ghi công
Người được giới thiệuVào học, và biết mình đang được giảm giáBị coi như một món hàng ai đó vừa bán được
Chủ dự ánNgười học mới, với chi phí thấp hơn quảng cáoTrả 10% cho những lượt không mang ai mới vào
Phụ huynh của learnerCon mình không bị người lạ thu thập thông tinTên thật của con hiện trên màn hình người không quen

Hai nỗi sợ cuối là nguồn của phần lớn luật trong §5 và §6. Chúng không phải rủi ro lý thuyết: cả hai đã được chỉ ra bằng kịch bản cụ thể khi rà soát SRC-754.

3. Yêu cầu — trang giới thiệu ​

#Yêu cầuTrạng thái
R-01Trang riêng có URL riêng, sau đăng nhập: learn.nemo12.com/referral cho learner, cùng một trang trên marlins.nemo12.com cho phụ huynh. Vào được từ menu chính ("Rủ bạn")✅ đang chạy
R-02Mỗi người một mã cố định trọn đời, sinh lần đầu họ mở trang. Không có chuyện mỗi lần bấm sinh một mã mới✅ đang chạy
R-03Mã viết CHỮ HOA, và lúc tra thì chuẩn hoá: bỏ dấu cách, bỏ gạch nối, đổi về hoa. Người gõ tay nem-7k2 vẫn vào đúng✅ đang chạy
R-04Trang hiện link đầy đủ, nút chép một chạm, và tỷ lệ ưu đãi hiện hành đọc từ bảng giá chứ không viết cứng trong giao diện✅ đang chạy
R-05Trang hiện: số người đã vào qua link, danh sách từng người, và số dư quyền lợi gom theo trạng thái✅ đang chạy

4. Yêu cầu — ghi công ​

#Yêu cầuLý do
R-10Ghi công ngay khi người được giới thiệu đăng nhập lần đầu, không đợi mốc nào khácĐây là thời điểm duy nhất biết được ai giới thiệu ai; để muộn là mất
R-11Link mời phải sống sót qua vòng Google OAuth — mã lưu lại trước khi rời trang, đọc lại sau khi quay vềVòng OAuth đưa người dùng qua tên miền khác rồi trả về một URL sạch; không giữ thì mã bốc hơi. Lỗ này đã từng làm mất trắng mọi lượt giới thiệu phía learn cho tới 16.09.2026
R-12First touch thắng, trọn đời. Mỗi người chỉ được ghi công đúng một lần và không ai đổi được người giới thiệu của mình về sauGhi công là nền của tiền; một nền sửa được là một nền tranh chấp được
R-13Cửa sổ ghi công 30 ngày kể từ lúc bấm linkBấm hôm nay đăng nhập sang năm thì lượt giới thiệu ấy không còn là nguyên nhân của việc đăng nhập nữa

5. Yêu cầu — chống gian lận ​

Sáu luật, mỗi luật đóng một lỗ đã chỉ ra được bằng kịch bản có thật. Bốn luật đầu đặt ở tầng dữ liệu (ràng buộc trong schema), không ở tầng code — vì một luật mà code phải nhớ đi kiểm là một luật sẽ có ngày quên.

#LuậtKịch bản nó chặn
R-20Mã phải có thật—
R-21Không tự giới thiệu chính mìnhLập email thứ hai để tự ăn cả hai đầu ưu đãi
R-22Mỗi người được ghi công một lần trọn đờiĐổi người giới thiệu sau khi thấy ai trả cao hơn
R-23Không giới thiệu chéo hai chiềuHai phụ huynh đã dùng Nemo12 nửa năm đổi mã cho nhau: mỗi người ăn cả giảm giá lẫn hoa hồng, mà không mang người mới nào vào. Đây là mất tiền trực tiếp
R-24Người được giới thiệu phải là người mớiCùng lý lẽ với R-23, cho vòng dài hơn hai người
R-25Hai bên phải cùng vai: phụ huynh giới thiệu phụ huynh, learner giới thiệu learnerMột người lớn bất kỳ rải link learn.nemo12.com/?ref=… vào nhóm chat của trẻ con; mọi đứa đang đăng nhập mà bấm vào đều bị ghi công, và trang giới thiệu của người lạ ấy liệt kê họ tên thật trên Google của từng đứa kèm ngày tham gia. Bố mẹ không được hỏi, không được báo

R-25 là luật đắt nhất trong danh sách và cũng là luật dễ bỏ sót nhất, vì nó không bảo vệ tiền — nó bảo vệ trẻ con.

6. Yêu cầu — người giới thiệu được biết gì ​

Đây là chỗ hai mong muốn cắn nhau: người rủ muốn biết người mình rủ có học thật không; người được rủ không đăng ký để bị theo dõi. Đường phân ranh:

Được thấyKhông bao giờ thấy
Tên hiển thị, ngày tham giaEmail, số điện thoại, trường lớp
Danh sách mốc đã đi qua, mỗi mốc một câu viết sẵn + một ngàyĐiểm số, bài làm, nội dung học, lịch học
Trạng thái quyền lợi của chính mìnhBất kỳ thứ gì người kia không tự nói ra

Bảy mốc, chọn theo đúng một tiêu chí: đọc được từ dữ liệu đã có. Một mốc đòi thêm chỗ ghi mới ở nơi khác là một mốc sẽ mãi mãi bằng không.

MốcNghĩa
joinedĐã được ghi công
learner_linkedĐã có hồ sơ học thật
diagnostic_doneXong một bài chẩn đoán đầu vào
first_lessonCó bằng chứng học đầu tiên
active_weekHọc từ 3 ngày trở lên trong một tuần
course_enrolledVào một khoá có lịch
paidCó quyền học mua bằng tiền (không phải admin cấp tay)

Mốc paid chính là "trở thành paid member" trong chỉ đạo. Nó phân biệt được mua bằng tiền với admin cấp tay — cần phân biệt vì chỉ trường hợp đầu mới sinh hoa hồng.

R-30: mỗi mốc ghi lại một lần, trọn đời, kèm thời điểm chuyện xảy ra — không phải thời điểm hệ nhìn thấy nó. Tính lại từ dữ liệu thô mỗi lần đọc thì "lần đầu tiên" trôi theo dữ liệu: một learner bị lưu trữ, một dòng bằng chứng bị xoá, và cái mốc đã báo cho người giới thiệu tuần trước biến mất khỏi màn hình tuần này. Câu chuyện kể cho người giới thiệu không được tự sửa sau lưng họ.

R-31: người được giới thiệu, ngay khi được ghi công, thấy một lời chào nói rõ ai mời mình và ưu đãi đã ghi. Vào bằng link của A mà màn hình im lặng thì A không có gì để nói tiếp, và người mới không biết mình đang được giảm giá.

7. Yêu cầu — ưu đãi và tài khoản ảo ​

7.0 Học phí, chốt 25.09.2026 ​

Nemo12 bán một thứ: thành viên học không giới hạn, giá như nhau bất kể learner tăng bao nhiêu band.

Đơn giá1.800.000đ / tháng
Chu kỳ đóng3 tháng một lần
Một đợt, trong 20265.400.000đ
Một đợt, từ 01.01.20278.400.000đ
Số đợt tối thiểu mỗi learner2 đợt

Hai điều bổ sung 25.09.2026 (SRC-1039), và cả hai đều đổi con số hoa hồng:

  1. Mỗi learner đóng tối thiểu HAI đợt, cách nhau 3 tháng. Nên người giới thiệu nhận hoa hồng ở mỗi lần đóng, không chỉ lần đầu. Tính một đợt là báo thiếu khoảng một nửa.
  2. Đợt từ 2027 đắt hơn: 8.400.000 thay vì 5.400.000. Một ví dụ 12 tháng bắc qua mốc ấy mà dùng một giá duy nhất thì sai ở hơn nửa số dòng.

Hoa hồng của một đợt thuộc về tháng đóng tiền, không phải tháng vào học: dồn cả hai đợt vào tháng vào học là hứa tiền tới sớm hơn thực tế.

Chỉ đạo chủ dự án 25.09.2026 (SRC-1036). Đây là lần thứ ba đơn vị bán đổi, và ghi lại cả ba là cách duy nhất để người đọc sau không tưởng mình đang nhìn một con số gõ nhầm:

Đơn vị bánMức
tới 22.09.2026mỗi 1.0 band tăng thêmnhân theo mức band learner muốn tăng
22.09 → 25.09.2026một kỳ 6 tháng trọn gói20.000.000, giảm còn 10 / 15 / 18 triệu theo đợt
từ 25.09.2026một tháng, đóng 3 tháng1.800.000 / tháng

Kỳ 6 tháng không còn, và ba mức của nó (10, 15, 18 triệu) đã hạ cờ trong migration 0293 — giữ lại làm lịch sử giá, không bán nữa. Dòng nguy hiểm nhất là mức 18 triệu từ 01.01.2027: nó không có hạn kết thúc, nên sót một dòng active là tới đầu 2027 trang lặng lẽ quay về bán kỳ 6 tháng mà không ai đụng vào gì.

Trang công khai hiện hai con số, và cả hai đều từ API. Đơn giá tháng là con số PHÁI SINH (amount_vnd ÷ months), tính ở đúng một chỗ trong showcase/membershipPricing.ts; chia không hết thì API trả null và trang bỏ dòng ấy đi, thay vì hiện một đơn giá làm tròn mà không ai trả đúng bằng nó.

Đợt giảm giá vẫn tự rụng theo ngày, không chờ ai hạ cờ — cơ chế ấy giữ nguyên, chỉ là hiện không có đợt nào đang chạy.

"Không giới hạn" được neo bằng một con số đo được: learner học cao điểm thường 20–30 giờ mỗi tuần, học vừa phải 10–15 giờ mỗi tuần. Không có câu ấy thì mỗi người đọc ra một kỳ vọng khác.

R-39 — Hai tầng: 10% trực tiếp, 2% gián tiếp (chỉ đạo chủ dự án 24.09.2026).

AiTôi nhận
Người tôi trực tiếp rủ10% học phí họ thực trả
Người do họ rủ tiếpthêm 2%
Người do tầng hai rủ tiếp nữakhông có gì

Đúng hai tầng, và đây là một ranh giới nằm trong dữ liệu chứ không trong trí nhớ ai. Mỗi tầng thêm vào là một lớp chi phí mới trên cùng một khoản thu, và một cây không đáy thì không còn là chương trình giới thiệu nữa. Hai tầng cộng lại đã là 12% của một khoản thu đã giảm 10% cho người mới.

Cả hai tỷ lệ sống trong bảng giá (pricing_items: referral-bonus, referral-bonus-l2), sửa được từ admin. Mỗi tầng rơi về hằng số riêng khi dòng của nó bị tắt: dùng chung một phép kiểm thì một dòng tắt sẽ kéo cả chính sách về mặc định, ở chỗ không ai đụng vào.

R-40 — Tỷ lệ 10%, hai chiều. Người giới thiệu nhận 10% số tiền người mới trả; người được giới thiệu giảm 10% trên tổng phải trả. Con số đọc từ bảng giá (pricing_items, mã referral-bonus), không viết cứng trong code. (Hệ đang đặt 15% từ SRC-450; chỉ đạo 22.09.2026 hạ xuống 10%.)

R-40.1 — Gốc tính: giá THỰC TRẢ, và CỘNG DỒN với ưu đãi đang chạy. Người mới trả 5.400.000 − 10% = 4.860.000; người giới thiệu nhận 486.000 vào tài khoản ảo. Không tính trên giá niêm yết 5.400.000 — làm vậy là trả 540.000 hoa hồng trên một khoản thu 4.860.000.

R-41 — Đổi tỷ lệ không hồi tố. Mỗi dòng quyền lợi chụp lại tỷ lệ tại thời điểm ghi công. Hạ từ 15% xuống 10% hôm nay không được rút bớt của người đã giới thiệu từ tháng trước — cùng một lý lẽ với R-30.

R-42 — Hoa hồng cộng vào tài khoản ảo. Khi người được giới thiệu thật sự trả tiền, 10% vào số dư nội bộ của người giới thiệu. Không phải tiền mặt, không phải lời hứa tiền mặt: một đơn vị Nemo12 tự phát hành.

R-43 — Số dư là tổng của một sổ, không phải một con số lưu sẵn. Không có cột "số dư" nào được cập nhật tại chỗ. Số dư = cộng dồn các dòng ghi sổ. Lý do ở SDD-041 §3.

R-44 — Giảm giá cho người được giới thiệu KHÔNG đi qua tài khoản ảo. Nó là một khoản trừ trên hoá đơn. Hai thứ khác nhau về bản chất: giảm giá là tiền chưa bao giờ thu, số dư là tiền đã thu rồi trả lại dưới dạng khác. Gộp chúng làm sổ sách không đối soát được.

R-45 — Số dư tiêu được vào học phí Nemo12. Chưa có cổng thanh toán nên bước áp số dư vào hoá đơn hiện là thao tác của admin, có ghi vết.

R-46 — Quy đổi ra tiền mặt: ngoài phạm vi, theo đúng chỉ đạo. Nhưng sổ phải được dựng từ đầu sao cho thêm việc rút tiền sau này không phải viết lại sổ — xem SDD-041 §6.

R-47 — Hoa hồng bị thu hồi khi khoản thu bị hoàn. Người mới trả tiền rồi đòi lại trong 7 ngày thì 10% đã cộng phải bị rút. Không có luật này, hoàn tiền trở thành cách rút tiền khỏi Nemo12 mà không cần học gì.

7b. Yêu cầu — khu "chính sách và ví dụ" trên trang Referral ​

Chỉ đạo chủ dự án 24.09.2026: "Có một khu vực kiểu như là dữ liệu giả... để khi click vào đó thì xem được chính sách hoa hồng, và cả xem được các dữ liệu ví dụ, để learner dễ hiểu... Cụm dữ liệu giả này cần mặc định là collapsed."

#Yêu cầuLý do
R-59Ví dụ tính mọi đợt đóng của mỗi người, mỗi đợt theo giá của tháng nó rơi vào; đợt rơi ra ngoài khung thời gian thì không tínhĐây là lý do ví dụ 12 tháng không ra gấp đôi con số một đợt
R-60Gập sẵn, bấm mới mởViệc của trang là đưa cái link. Một bảng 12 dòng mở sẵn biến một trang một-việc thành một trang phải đọc
R-61Mở ra thì thấy chính sách (hai tầng, gốc tính, tiền đi đâu, ghi công một lần)
R-62Và một ví dụ 12 tháng bằng số thật: 35 người trực tiếp, tăng dần, hai tháng không ra ai; 15 người trong số đó tự rủ tiếpĐúng tình huống chủ dự án nêu
R-63Học phí trong ví dụ đổi theo tháng (10tr → 15tr → 18tr)Dùng một giá cho cả 12 tháng là một con số gọn gàng và sai
R-64Ví dụ tự khai là số giả ở chỗ mắt chạm đầu tiên, và viết ra mọi giả địnhĐây là bảng nói về tiền; người đọc rất dễ đọc nó thành lời hứa. Một ví dụ giấu giả định là một ví dụ không kiểm lại được
R-65Tỷ lệ đọc từ API, không viết cứng trong giao diệnChép vào giao diện là dựng một bảng giá thứ hai, và nó lệch đúng vào ngày chủ dự án đổi tỷ lệ
R-66Toàn bộ trang này nói tiếng ViệtChỉ đạo trực tiếp. Đây là chữ Nemo giải thích một chương trình TIỀN BẠC cho learner, đúng vế SRC-953 — và hiểu lỗ chỗ về tiền thì tệ hơn hiểu lỗ chỗ về một bài đọc

Người tầng hai rơi ra ngoài 12 tháng thì không được cộng vào. Dồn họ vào tháng cuối cho "đỡ phí" là làm ví dụ nói dối đúng ở chỗ nó hứa nhiều nhất.

8. Yêu cầu — thư ​

Ba lá, đã chạy (chi tiết ở emails.md):

ThưGửi choKhi nào
referral-invitedNgười được giới thiệuVừa được ghi công. Một đời một thư
referral-joinedNgười giới thiệuCó người mới vào. Gộp mọi người trong ngày vào một lá
referral-progressNgười giới thiệuNgười được giới thiệu đạt mốc mới. Trần riêng 1 thư/7 ngày

R-50: thư chỉ mang tên hiển thị + câu mốc viết sẵn. Không mang bài vở, không mang liên lạc (QG-008).

R-51 (mới): khi hoa hồng thật sự vào tài khoản ảo, người giới thiệu được báo — kèm số tiền và số dư mới. Đây là lá thư duy nhất trong cụm mang một con số tiền, nên nó phải đọc được từ sổ chứ không tính lại trong lúc soạn thư.

9. Điều chưa chốt ​

Câu hỏiVì sao chưa trả lời được
Số dư có hạn dùng không?Đề xuất: không. Hạn dùng biến một khoản đã hứa thành một khoản có thể lặng lẽ biến mất
Trần số dư một người?Đề xuất: không trần, nhưng có ngưỡng cảnh báo để rà gian lận
Số dư có chuyển cho người khác được không?Đề xuất: không. Chuyển được thì nó thành tiền tệ, và kéo theo cả một lớp nghĩa vụ pháp lý
Mô hình thu phíQ-014/Q-015 vẫn mở — và mọi con số trong §7 chỉ có nghĩa khi có giá

Trace ​

Yêu cầuThiết kế
R-01..R-05, R-10..R-13, R-20..R-25, R-30..R-31REQ-GRW-02 — đã chạy, xem emails.md và workers/api/src/modules/referral/
R-39, R-40..R-47, R-51, R-59..R-66REQ-GRW-03 → SDD-041