Thấy một mã nằm kho lâu, phản xạ đầu tiên thường là giảm giá. Nhưng mã đó có thể đã hết mùa, sắp quá hạn giao, ảnh chụp tệ, đang để nhầm giá cao, hoặc chỉ là phần mềm ghi sai tồn. Giảm giá cho một mã sai giá hay sai số liệu là mất tiền mà không giải quyết gì. Bài này dùng bảng tồn giả lập 12 mã, các công thức tính bằng bảng tính hay Python, và câu lệnh để AI phân loại kèm lý do. Sau đó người giữ kho đi kiểm hàng thật. AI không nhìn thấy kho của bạn.

Bài làm tiếp: so giảm giá, bán kèm và dừng nhập trên cùng một mã.

Hiểu việc: phần nào là công thức, phần nào là AI, phần nào là người

PhầnAi hay cái gì làmVí dụ
Số tồn, giá vốn, số bánPhần mềm quản lý kho, báo cáo của sànBáo cáo tồn kho, báo cáo bán hàng theo sản phẩm
Tuổi hàng, số ngày bán hết, hạn giao cuốiCông thức (bảng tính hoặc Python), không phải AINgày kiểm trừ ngày nhập
Phân loại và ghi lý do bằng lờiAI soạn nháp theo quy tắc bạn đưa"Hết mùa vì bán 30 ngày gần nhất chỉ bằng 20% ba tháng trước"
Xác nhận hàng còn thật, còn nguyên, đúng lôNgười giữ khoĐếm, xem hạn trên bao bì
Quyết giảm giá, bán kèm, dừng nhậpChủ shopBài tiếp theo

Chuẩn bị dữ liệu

Ví dụ với Sapo, phần mềm quản lý bán hàng nhiều kênh (đối chiếu tài liệu ngày 03/10/2026):

  • Báo cáo tồn kho: cần quyền "Báo cáo kho"; có cột mã SKU, giá vốn, tồn kho, giá trị tồn kho (giá vốn nhân tồn kho); xuất được ra Excel.
  • Báo cáo bán hàng theo sản phẩm: chọn "30 ngày qua" hoặc khoảng tùy chọn; doanh thu ghi nhận theo ngày giao thành công, nên số bán 30 ngày đến chậm hơn ngày khách đặt vài hôm.
  • Sản phẩm quản lý theo lô, hạn sử dụng: tệp xuất đơn nhập hàng có trường mã lô, ngày sản xuất, hạn sử dụng.
  • Tồn kho trong Sapo bằng "đang giao dịch" cộng "có thể bán": hàng đã nằm trong đơn chờ đóng gói vẫn tính là tồn.

Phần mềm khác có tên mục khác; cần đúng các cột, không cần đúng phần mềm. Lượt xem trang sản phẩm lấy từ phần số liệu của sàn (tên chỉ số tùy sàn). Không đưa tên khách, số điện thoại vào bảng.

Bước 1. Bảng tồn giả lập 12 mã

Ngày kiểm 03/10/2026. Ban60, Ban90 là số cộng dồn (Ban60 gồm cả Ban30). Mua: "he" là hàng mùa hè, "noel" là hàng mùa Giáng sinh. Mọi dòng là dữ liệu giả lập, có cài sẵn lỗi.

Ma,Ten,Ton,Nhap_lo,NSX,HSD,Ban30,Ban60,Ban90,Gia_von,Gia_san,Gia_chuan,Xem30,Dang_KM,Mua
BGN-500,Binh giu nhiet 500ml,85,2026-08-20,,,96,190,280,78000,159000,159000,2400,khong,
QM-MINI,Quat mini cam tay,140,2026-04-10,,,9,30,74,62000,149000,149000,1500,khong,he
KCN-50,Kem chong nang 50ml,60,2026-05-02,2025-06-01,2027-05-31,12,25,39,95000,219000,219000,900,co,
SRM-100,Sua rua mat 100ml,48,2026-08-01,2026-03-01,2028-03-01,30,58,85,52000,119000,119000,1300,khong,
HC-3N,Hop com thuy tinh 3 ngan,120,2026-06-15,,,8,17,27,88000,189000,189000,3200,co,
TGN-01,Tui giu nhiet,90,2026-07-01,,,6,14,31,41000,129000,99000,700,khong,
KH-TRE,Khay tre,-6,2026-03-12,,,4,9,15,35000,89000,89000,300,khong,
BTT-200,Banh trang tron 200g,70,2026-09-05,2026-08-25,2026-11-25,25,25,25,18000,45000,45000,1100,co,
DL-USB,Den LED USB,75,2026-02-20,,,5,11,16,21000,59000,59000,400,khong,
OC-HG,O cam hen gio,40,2026-08-28,,,26,49,70,96000,199000,199000,1000,khong,
LG-NOEL,Day den trang tri Noel,200,2026-09-20,,,3,3,3,33000,79000,79000,400,khong,noel
GS-CHU,Gang tay silicon,55,2026-07-10,,,14,10,38,15000,39000,39000,600,khong,

Bước 2. Công thức: đặt ra trước, để AI không tự nghĩ

  1. Tuổi hàng = ngày kiểm trừ ngày nhập lô cũ nhất còn tồn. Phần mềm không theo lô thì chỉ có ngày nhập gần nhất; ghi rõ điều đó.
  2. Bán từng khoảng 30 ngày: K1 = Ban30; K2 = Ban60 trừ Ban30; K3 = Ban90 trừ Ban60.
  3. Tốc độ bán mỗi ngày = K1 chia 30. Hàng nhập chưa đủ 30 ngày thì chia cho số ngày thật kể từ ngày nhập.
  4. Số ngày bán hết ước tính = Tồn chia tốc độ bán. Đây là phép chia, không phải dự báo: nó giả định tháng tới bán như tháng vừa qua.
  5. Hạn giao cuối (hàng có hạn dùng, bán trên Shopee) = HSD trừ số lớn hơn giữa 30 ngày và 30% thời hạn (HSD trừ NSX). Quy định đăng bán của Shopee (bản 14/8/2024) yêu cầu hàng khi giao còn ít nhất 30% thời hạn và ít nhất 30 ngày. Kênh khác kiểm quy định riêng.

Quy tắc phân loại, theo thứ tự ưu tiên (ngưỡng là ví dụ biên tập, bạn tự chỉnh):

Thứ tựLoạiĐiều kiện
1Lỗi số liệuTồn âm, hoặc K2, K3 âm (số cộng dồn bị giảm)
2Cận hạnSố ngày bán hết lớn hơn số ngày còn tới hạn giao cuối
3Sai giáGiá đang bán trên sàn khác bảng giá chuẩn
4Hết mùaHàng mùa hè, K1 không quá 40% của K3
4Chưa tới mùaHàng mùa sắp tới (Noel): không xếp chậm, không giảm
5Ảnh, nội dung kémLượt xem 30 ngày từ 1.000 trở lên mà đơn chia lượt xem dưới 1%
6Chậm, chưa rõ lý doKhông thuộc loại nào, số ngày bán hết trên 60
7Bình thườngCòn lại
Bảng 12 mã giả lập: tuổi hàng, ngày bán hết, phân loại và việc của người kiểm kho
Sơ đồ minh họa của AI Thạo Việc.

Bước 3. Câu lệnh cho AI phân loại kèm lý do

Dán bảng ở Bước 1, công thức và bảng quy tắc ở Bước 2, rồi dán:

Yêu cầu có thể sao chép
Đây là bảng tồn kho GIẢ LẬP của shop, ngày kiểm 03/10/2026, cùng công thức và quy tắc phân loại ở trên.
1. Kiểm dữ liệu trước: liệt kê ô trống, tồn âm, số cộng dồn bị giảm, hạn dùng sớm hơn ngày sản xuất. Mã có lỗi số liệu thì KHÔNG tính tiếp, chỉ ghi "lỗi số liệu" và lỗi gì.
2. Với các mã còn lại, tính và ghi phép tính: tuổi hàng, K1, K2, K3, tốc độ bán mỗi ngày, số ngày bán hết, hạn giao cuối (nếu có HSD), tỷ lệ đơn trên lượt xem.
3. Xếp mỗi mã vào MỘT loại theo đúng thứ tự ưu tiên; nếu thỏa nhiều điều kiện, ghi thêm "lý do phụ".
4. Mỗi mã viết một câu lý do dẫn đúng con số đã tính.
5. Với mỗi mã chậm, ghi một việc người giữ kho cần kiểm tại kho (đếm, xem hạn trên bao bì, xem tình trạng hộp).
Không dự báo doanh số, không đề xuất mức giảm giá, không quyết nhập hay hủy. Không tự sửa số liệu. Chỗ thiếu dữ kiện ghi "thiếu".

Bước 4. Đáp án tính bằng chương trình độc lập

Kết quả của AI phải khớp bảng này. Nếu muốn tự chạy, dùng đoạn Python ở cuối bước.

MãTồnTuổi (ngày)K1/K2/K3Bán mỗi ngàyNgày bán hếtLoạiLý do
BGN-500854496/94/903,2027Bình thường
QM-MINI1401769/21/440,30467Hết mùaK1 bằng 20% K3; phụ: 0,6% lượt xem ra đơn
KCN-506015412/13/140,40150Cận hạnHạn giao cuối 24/10/2026, còn 21 ngày
SRM-100486330/28/271,0048Bình thườngHạn giao cuối 25/07/2027
HC-3N1201108/9/100,27450Ảnh, nội dung kém3.200 lượt xem, 0,25% ra đơn, đang khuyến mãi vẫn chậm
TGN-0190946/8/170,20450Sai giáGiá sàn 129.000 khác giá chuẩn 99.000
KH-TREâm 6không tínhLỗi số liệuTồn âm
BTT-200702825/0/00,8978Cận hạnHàng mới nhập; hạn giao cuối 26/10/2026, còn 23 ngày
DL-USB752255/6/50,17450Chậm, chưa rõKhông thuộc loại nào
OC-HG403626/23/210,8746Bình thường
LG-NOEL200133/0/00,23867Chưa tới mùaHàng Noel nhập 20/09; không giảm
GS-CHU558514/âm 4/28không tínhLỗi số liệuBan60 (10) nhỏ hơn Ban30 (14)

Đọc bảng:

  • KCN-50: 21 ngày tới hạn giao cuối, với tốc độ hiện tại chỉ bán khoảng 8 hộp, còn khoảng 52. Nếu quyết giảm giá vì sắp hết hạn, quy định đăng bán của Shopee yêu cầu nêu rõ ngày hết hạn trong mô tả.
  • BTT-200: K2, K3 bằng 0 vì hàng mới nhập 28 ngày, không phải vì bán chậm dần. Nó vào loại cận hạn vì thời hạn ngắn (92 ngày).
  • HC-3N: đang khuyến mãi mà vẫn chậm, nhiều người xem nhưng ít người mua: giảm thêm khó giúp; cần xem ảnh, mô tả, đánh giá.
  • TGN-01: sửa giá về bảng chuẩn trước, chờ một kỳ rồi mới xét lại.
  • LG-NOEL: bán ít vì chưa vào mùa. Một AI chỉ nhìn số ngày bán hết sẽ đòi giảm giá; đó là quyết định sai.
  • Giá trị tồn của các mã chậm (giá vốn nhân tồn): QM-MINI 8.680.000đ, HC-3N 10.560.000đ, KCN-50 5.700.000đ, TGN-01 3.690.000đ, DL-USB 1.575.000đ, BTT-200 1.260.000đ.
import csv, io, math
from datetime import date, timedelta
NGAY_KIEM = date(2026, 10, 3)
DU_LIEU = """[dán nguyên khối dữ liệu ở Bước 1, kể cả dòng tiêu đề]"""
for r in csv.DictReader(io.StringIO(DU_LIEU.strip())):
    ton = int(r["Ton"]); b30, b60, b90 = int(r["Ban30"]), int(r["Ban60"]), int(r["Ban90"])
    tuoi = (NGAY_KIEM - date.fromisoformat(r["Nhap_lo"])).days
    k1, k2, k3 = b30, b60 - b30, b90 - b60
    toc = k1 / min(30, tuoi)
    ngay_het = ton / toc if toc > 0 else math.inf
    loai, ghi = [], ""
    if ton < 0 or k2 < 0 or k3 < 0: loai.append("loi so lieu")
    if r["HSD"]:
        hsd, nsx = date.fromisoformat(r["HSD"]), date.fromisoformat(r["NSX"])
        han = hsd - timedelta(days=max(30, math.ceil(0.3 * (hsd - nsx).days)))
        con = (han - NGAY_KIEM).days; ghi = f"han giao cuoi {han:%d/%m/%Y}, con {con} ngay"
        if ton > 0 and ngay_het > con: loai.append("can han")
    if r["Gia_san"] != r["Gia_chuan"]: loai.append("sai gia")
    if r["Mua"] == "he" and k3 > 0 and k1 <= 0.4 * k3: loai.append("het mua")
    if r["Mua"] == "noel": loai.append("chua toi mua")
    if int(r["Xem30"]) >= 1000 and k1 / int(r["Xem30"]) < 0.01: loai.append("anh/noi dung kem")
    if not loai: loai.append("cham, chua ro" if ngay_het > 60 else "binh thuong")
    print(r["Ma"], ton, tuoi, f"{toc:.2f}", round(ngay_het) if ngay_het != math.inf else "-", loai, ghi)

Chương trình in mọi loại mà mã thỏa; loại đầu tiên theo thứ tự ưu tiên là loại chính. Với mã lỗi số liệu (KH-TRE, GS-CHU), bỏ qua các con số chương trình vẫn in ra.

Bước 5. Người giữ kho kiểm hàng thật

AI và công thức chỉ đọc số trong phần mềm. Trước khi chủ shop quyết, người giữ kho kiểm:

MãKiểm gì tại kho
KH-TRE, GS-CHUĐếm lại, xem phiếu nhập, đơn hủy, đơn trả gần nhất; sửa số liệu bằng phiếu kiểm kho (Sapo có ứng dụng kiểm kho) rồi mới phân loại lại
KCN-50, BTT-200Xem hạn in trên bao bì từng lô; hạn ghi kiểu "tháng/năm" thì theo cách hiểu trong quy định của Shopee
QM-MINI, DL-USB, HC-3NHộp còn nguyên không, hàng có lỗi không, có lô nào hỏng phải tách ra
Mọi mã chậmCó đơn đặt nhập đang chờ về không (Sapo gọi là "hàng đang về")

Thêm một lưu ý: nếu shop chạy chiến dịch quảng cáo tự chọn sản phẩm của Shopee, tài liệu Shopee Ads ghi hệ thống tự đưa mọi sản phẩm chưa có chiến dịch hiển thị nào vào chiến dịch. Mã đang lỗi số liệu hay sắp quá hạn giao có thể bị quảng cáo; rà danh sách sản phẩm trong chiến dịch.

Ca thử

CaThay đổiĐầu ra đúng
ĐúngBảng như trên12 mã đúng loại như bảng đáp án
Thiếu dữ kiệnXóa ô NSX của KCN-50AI ghi "thiếu NSX, không tính được hạn giao cuối", không tự đoán thời hạn 3 năm
Sai dữ kiệnGhi HSD của BTT-200 là 2026-08-15 (trước NSX 2026-08-25)Xếp lỗi số liệu, yêu cầu người giữ kho xem bao bì
Dấu hiệu saiCách kiểmCâu lệnh sửa
LG-NOEL bị đề xuất giảm giáXem cột Mua"Hàng mùa sắp tới xếp chưa tới mùa, không đề xuất giảm."
BTT-200 tính tốc độ 25 chia 30So số ngày từ ngày nhập"Hàng nhập chưa đủ 30 ngày, chia cho số ngày thật."
GS-CHU được phân loại bình thườngTính K2"Ban60 nhỏ hơn Ban30 là lỗi số liệu, dừng tính mã này."
AI viết "dự kiến bán hết trong 5 tháng"Đọc lý do"Số ngày bán hết là phép chia giả định tốc độ không đổi, ghi đúng như vậy."
Hạn giao cuối KCN-50 khác 24/10/2026Tính tay: thời hạn 729 ngày, 30% là 219 ngày"Dùng số lớn hơn giữa 30 ngày và 30% thời hạn."

Bàn giao

ViệcAi làmAi nhậnAi duyệt
Xuất báo cáo tồn, bán, lô từ phần mềmNgười giữ khoKế toán, đối soátKế toán, đối soát kiểm đủ cột, đúng kỳ
Chạy công thức, so với kết quả AIKế toán, đối soátChủ shopChủ shop
Kiểm hàng thật theo danh sáchNgười giữ khoChủ shopChủ shop
Sửa giá TGN-01 theo bảng chuẩnNgười nội dung, danh mụcKế toán, đối soátChủ shop
Xem lại ảnh, mô tả HC-3NNgười nội dung, danh mụcChủ shopNgười duyệt
Hỏi nhà cung cấp về đơn đang về, khả năng nhận trảChủ shopNhà cung cấpChủ shop
Quyết phương án cho mã chậmChủ shopMọi ngườiChủ shop

Kiểm trước khi quyết giảm giá

  • Mã đó không phải lỗi số liệu, đã đếm lại tại kho?
  • Giá đang bán đúng bảng giá chuẩn?
  • Hàng có hạn dùng: đã tính hạn giao cuối theo quy định của kênh bán?
  • Hàng mùa: đang hết mùa hay sắp vào mùa?
  • Nhiều lượt xem mà ít đơn: đã xem ảnh, mô tả, đánh giá trước khi đụng tới giá?
  • Đã biết còn đơn đặt nhập nào đang về chưa?

Áp dụng cho shop của bạn

  • Giữ: cột dữ liệu, công thức, thứ tự ưu tiên, bước kiểm kho.
  • Thay: ngưỡng 60 ngày, 1%, 40% theo nhịp bán của shop; thêm loại mùa của ngành hàng bạn (đồ Tết, đồ đi học).
  • Bỏ trước khi dán vào AI: tên nhà cung cấp, giá nhập theo hợp đồng nếu không muốn chia sẻ (có thể đổi giá vốn thành số tương đối), mọi dữ liệu khách.
  • Bảng tóm tắt tuần từ ba file bán hàng, chi phí, tồn kho có ở bài ba file bán hàng, chi phí, tồn kho.

Giới hạn của bài này

  • Bảng 12 mã và ngưỡng là giả lập, ví dụ biên tập; câu lệnh chưa chạy trên công cụ.
  • Số ngày bán hết không phải dự báo; tháng sau có thể khác hẳn.
  • Quy định hạn dùng dẫn theo Shopee; TikTok Shop và kênh khác cần kiểm riêng. Bài không tư vấn pháp lý.

Nguồn & lưu ý