EcoStartupAI
Tài chính

Phân Loại Tồn Kho ABC – XYZ Bằng Excel, Python Và AI: Phát Hiện Hàng Chậm Luân Chuyển Đang "Chôn Vốn"


Mục lục (18 mục)

Giới thiệu

Cuối năm là lúc nhiều kế toán và chủ doanh nghiệp nhỏ giật mình khi nhìn bảng cân đối: hàng tồn kho chiếm một khoản tiền lớn, nhưng tiền mặt lại thiếu. Mở báo cáo nhập – xuất – tồn ra xem thì có hàng trăm mã hàng, mã nào cũng "có vẻ cần", không biết nên giảm nhập mã nào, xả hàng mã nào, và mã nào đang âm thầm "chôn vốn" cả năm trời.

Vấn đề không nằm ở việc thiếu dữ liệu — phần mềm kế toán nào cũng xuất được báo cáo tồn kho. Vấn đề là thiếu một cách phân loại để biết mã nào quan trọng, mã nào ổn định, mã nào đáng lo. Bài viết này hướng dẫn bạn dùng hai kỹ thuật kinh điển trong quản trị kho là phân loại ABC và phân loại XYZ, kết hợp với phân tích tuổi tồn kho, rồi tự động hóa bằng Excel, Python và AI (ChatGPT, Claude, Gemini...) để có kết quả chỉ trong vài phút.

Bài viết dành cho kế toán kho, kế toán tổng hợp, kế toán quản trị và chủ doanh nghiệp SME — không cần biết lập trình sâu, chỉ cần biết dùng Excel cơ bản.

Phân loại ABC – XYZ là gì? Giải thích dễ hiểu

Phân loại ABC: mã nào "nặng ký" về giá trị?

Phân loại ABC dựa trên nguyên lý Pareto: một số ít mã hàng thường chiếm phần lớn giá trị. Cách làm là xếp các mã hàng theo giá trị xuất kho trong năm (số lượng xuất × đơn giá vốn) từ cao xuống thấp, rồi tính tỷ lệ cộng dồn:

NhómTỷ lệ giá trị cộng dồn (gợi ý)Ý nghĩa
AĐến khoảng 80%Ít mã nhưng "nặng tiền" – cần theo dõi sát
BTừ 80% đến 95%Mức trung bình – kiểm soát định kỳ
C5% còn lạiRất nhiều mã nhưng giá trị nhỏ – quản lý đơn giản

Phân loại XYZ: nhu cầu có ổn định không?

ABC chỉ cho biết "bao nhiêu tiền", chưa cho biết "dễ đoán hay khó đoán". Phân loại XYZ đo độ biến động của lượng xuất hàng tháng bằng hệ số biến thiên (CV):

CV = Độ lệch chuẩn lượng xuất hàng tháng ÷ Lượng xuất bình quân tháng

NhómCV (ngưỡng gợi ý, có thể điều chỉnh)Ý nghĩa
XDưới 0,25Nhu cầu ổn định, dễ dự báo
YTừ 0,25 đến 0,5Có dao động (mùa vụ, khuyến mãi)
ZTrên 0,5Thất thường, khó dự báo

Lưu ý: các ngưỡng 80%/95% và 0,25/0,5 là mốc tham khảo phổ biến, không phải chuẩn bắt buộc. Mỗi ngành hàng có thể chọn ngưỡng khác cho phù hợp.

Ghép lại thành ma trận 9 ô

Khi ghép ABC với XYZ, bạn có 9 nhóm như AX, AY, BZ, CZ... Mỗi nhóm gợi ý một cách quản lý khác nhau:

X (ổn định)Y (dao động)Z (thất thường)
ANhập đều theo kế hoạch, tồn an toàn thấpTheo dõi mùa vụ, dự báo kỹĐặt hàng theo đơn, đàm phán giao nhanh
BĐặt hàng định kỳ tự độngRà soát hàng thángGiảm tồn, cân nhắc đặt theo đơn
CĐặt số lượng lớn, ít lầnQuản lý đơn giảnỨng viên hàng chậm luân chuyển – xem xét xả hàng/ngừng kinh doanh

Tuổi tồn kho: hàng nằm kho bao lâu rồi?

Bổ sung cho ABC – XYZ là hai chỉ số đơn giản:

  • Tuổi tồn kho theo lô: số ngày từ ngày nhập lô đến ngày khóa sổ (chia các khoảng 0–90, 91–180, trên 180 ngày).
  • Số tháng đủ bán (months of cover) = Tồn kho cuối kỳ (số lượng) ÷ Lượng xuất bình quân tháng. Chỉ số này cho biết với tốc độ bán hiện tại, lượng hàng đang có bán được bao lâu.

Hướng dẫn từng bước bằng Excel

Bước 1: Chuẩn bị dữ liệu

Xuất từ phần mềm kế toán (MISA, Fast, Bravo...) hai báo cáo:

  1. Sổ chi tiết vật tư hàng hóa hoặc báo cáo xuất kho theo tháng, 12 tháng gần nhất.
  2. Báo cáo tồn kho cuối kỳ theo mã hàng (nếu có chi tiết theo lô/ngày nhập thì càng tốt).

Dựng một bảng với các cột: Mã hàng | Tên hàng | T1 ... T12 (số lượng xuất) | Đơn giá vốn | Tồn cuối kỳ (SL).

Bước 2: Các công thức chính

Giả sử dữ liệu từ dòng 2, cột C đến N là lượng xuất 12 tháng, cột O là đơn giá vốn, cột P là tồn cuối kỳ:

Q2 (Tổng SL xuất năm):     =SUM(C2:N2)
R2 (Giá trị xuất năm):     =Q2*O2
S2 (Tỷ trọng giá trị):     =R2/SUM($R$2:$R$500)

Sắp xếp bảng theo cột R giảm dần, rồi tính:

T2 (Tỷ lệ cộng dồn):       =SUM($S$2:S2)
U2 (Nhóm ABC):             =IF(T2<=0.8,"A",IF(T2<=0.95,"B","C"))
V2 (CV):                   =IFERROR(STDEV.P(C2:N2)/AVERAGE(C2:N2),99)
W2 (Nhóm XYZ):             =IF(V2<0.25,"X",IF(V2<=0.5,"Y","Z"))
X2 (Ma trận):              =U2&W2
Y2 (Số tháng đủ bán):      =IFERROR(P2/AVERAGE(C2:N2),"Không xuất")

Mẹo: dùng Conditional Formatting tô đỏ các ô ở cột X có giá trị "CZ" hoặc "BZ", và cột Y lớn hơn 6 tháng.

Bước 3: Dùng Pivot Table tổng hợp

Tạo Pivot với hàng là nhóm ABC, cột là nhóm XYZ, giá trị là tổng tiền tồn kho cuối kỳ (P × O). Bạn sẽ thấy ngay vốn đang nằm nhiều nhất ở ô nào của ma trận.

Tự động hóa bằng Python (cho file hàng nghìn mã)

Khi số mã hàng lên đến hàng nghìn, hoặc cần chạy lại mỗi tháng, đoạn Python dưới đây xử lý trong vài giây. Bạn có thể nhờ AI giải thích hoặc chỉnh sửa từng dòng.

import pandas as pd # File Excel có cột: ma_hang, ten_hang, T1..T12, don_gia, ton_cuoi df = pd.read_excel("xuat_kho_12_thang.xlsx") thang = [f"T{i}" for i in range(1, 13)] df["sl_xuat_nam"] = df[thang].sum(axis=1) df["gt_xuat_nam"] = df["sl_xuat_nam"] * df["don_gia"] df["bq_thang"] = df[thang].mean(axis=1) df["cv"] = (df[thang].std(axis=1, ddof=0) / df["bq_thang"]).fillna(99) # Phân loại ABC df = df.sort_values("gt_xuat_nam", ascending=False) df["ty_le_cong_don"] = df["gt_xuat_nam"].cumsum() / df["gt_xuat_nam"].sum() df["abc"] = pd.cut(df["ty_le_cong_don"], [0, 0.8, 0.95, 1.0001], labels=["A", "B", "C"]) # Phân loại XYZ df["xyz"] = pd.cut(df["cv"], [-1, 0.25, 0.5, float("inf")], labels=["X", "Y", "Z"], right=False) df["nhom"] = df["abc"].astype(str) + df["xyz"].astype(str) # Số tháng đủ bán và giá trị tồn df["thang_du_ban"] = (df["ton_cuoi"] / df["bq_thang"]).round(1) df["gt_ton"] = df["ton_cuoi"] * df["don_gia"] # Danh sách cảnh báo: nhóm CZ/BZ hoặc đủ bán trên 6 tháng canh_bao = df[(df["nhom"].isin(["CZ", "BZ"])) | (df["thang_du_ban"] > 6)] with pd.ExcelWriter("ket_qua_abc_xyz.xlsx") as w: df.to_excel(w, sheet_name="Chi tiet", index=False) df.pivot_table(index="abc", columns="xyz", values="gt_ton", aggfunc="sum", fill_value=0).to_excel(w, sheet_name="Ma tran") canh_bao.to_excel(w, sheet_name="Canh bao", index=False) print("Đã xuất ket_qua_abc_xyz.xlsx")

Lưu ý: mã hàng mới nhập trong năm (chưa đủ 12 tháng) sẽ có CV bị méo — nên lọc riêng hoặc chỉ tính trên số tháng thực tế có kinh doanh.

Bộ prompt mẫu dùng AI phân tích

Sau khi có bảng kết quả (đã xóa tên khách hàng, nhà cung cấp và thông tin nhạy cảm), bạn có thể dùng các prompt sau.

Prompt 1 – Nhờ AI phân loại và giải thích:

Bạn là kế toán quản trị có kinh nghiệm về quản lý hàng tồn kho.
Tôi gửi bảng dữ liệu gồm: mã hàng, lượng xuất 12 tháng, đơn giá vốn, tồn cuối kỳ.
Hãy:
1. Phân loại ABC theo giá trị xuất năm (A ≤ 80%, B ≤ 95%, C còn lại).
2. Phân loại XYZ theo hệ số biến thiên lượng xuất tháng (X < 0,25; Y 0,25–0,5; Z > 0,5).
3. Tính số tháng đủ bán = tồn cuối kỳ / lượng xuất bình quân tháng.
4. Trình bày kết quả dạng bảng, kèm công thức Excel tương ứng để tôi tự kiểm tra lại.
Không tự suy diễn số liệu không có trong bảng.

Prompt 2 – Đề xuất hành động cho từng nhóm:

Dựa trên bảng ABC-XYZ ở trên, hãy đề xuất chính sách đặt hàng và mức tồn kho an toàn
cho từng nhóm trong ma trận 9 ô. Với các mã nhóm CZ, BZ hoặc số tháng đủ bán trên 6 tháng,
liệt kê các phương án xử lý (giảm nhập, bán combo, chiết khấu xả hàng, trả lại nhà cung cấp,
ngừng kinh doanh) và ưu nhược điểm của từng phương án về dòng tiền.

Prompt 3 – Viết báo cáo ngắn cho Giám đốc:

Viết báo cáo 1 trang gửi Giám đốc tóm tắt tình hình tồn kho theo ma trận ABC-XYZ:
tổng giá trị tồn mỗi nhóm, 5 mã có rủi ro chậm luân chuyển lớn nhất, số tiền vốn có thể
giải phóng nếu đưa tồn kho về mức 3 tháng đủ bán. Văn phong ngắn gọn, có bảng số liệu.

Ví dụ minh họa với số liệu giả định

⚠️ Toàn bộ số liệu dưới đây là giả định để minh họa, không phải số liệu của doanh nghiệp thực tế. Đơn vị giá trị: triệu đồng.

Một doanh nghiệp thương mại có 8 mã hàng, dữ liệu xuất kho 12 tháng và kết quả tính như sau:

MãSL xuất nămĐơn giá vốnGiá trị xuất nămTỷ trọngCộng dồnCVNhóm
SP011.2143,54.249,036,6%36,6%0,04AX
SP027454,02.980,025,7%62,3%0,29AY
SP036023,01.806,015,6%77,8%0,03AX
SP042505,01.250,010,8%88,6%0,91BZ
SP053602,0720,06,2%94,8%0,03BX
SP061283,0384,03,3%98,1%0,51CZ
SP07168,0128,01,1%99,2%2,49CZ
SP08611,591,50,8%100,0%0,13CX
Cộng11.608,5100%

Bổ sung số liệu tồn cuối kỳ của một số mã cần chú ý:

MãTồn cuối (SL)Xuất BQ thángSố tháng đủ bánGiá trị tồn
SP01150101,21,5525,0
SP049020,84,3450,0
SP064010,73,8120,0
SP07351,326,3280,0

Đọc kết quả:

  • SP01, SP03 (AX): chiếm hơn một nửa giá trị xuất, nhu cầu rất ổn định. Có thể nhập đều theo kế hoạch, giữ tồn an toàn thấp — SP01 chỉ đủ bán 1,5 tháng là hợp lý.
  • SP04 (BZ): giá trị đáng kể nhưng nhu cầu thất thường (có tháng không xuất), tồn đủ bán hơn 4 tháng. Nên chuyển sang đặt hàng theo đơn hoặc đàm phán nhà cung cấp giao nhanh hơn.
  • SP07 (CZ): chỉ chiếm 1,1% giá trị xuất nhưng đang giữ 280 triệu tiền tồn, đủ bán hơn 2 năm. Đây là ứng viên hàng chậm luân chuyển điển hình. Nếu giảm tồn SP07 về mức 3 tháng đủ bán (khoảng 4 cái), doanh nghiệp có thể giải phóng khoảng (35 − 4) × 8 = 248 triệu đồng vốn lưu động — tất nhiên còn tùy giá bán thanh lý thực tế.

Chỉ với một bảng tính, bạn đã có danh sách ưu tiên rõ ràng thay vì "cảm giác" hàng nào bán chậm.

Lợi ích và lưu ý khi áp dụng

Lợi ích

  • Giải phóng vốn lưu động: nhận diện sớm hàng chậm luân chuyển để xả hàng, giảm nhập, cải thiện dòng tiền.
  • Đặt hàng thông minh hơn: mỗi nhóm có chính sách riêng, không áp dụng "một công thức cho tất cả".
  • Hỗ trợ công tác cuối năm: danh sách hàng tồn lâu là đầu vào hữu ích khi kiểm kê và đánh giá giá trị thuần có thể thực hiện được của hàng tồn kho.
  • Tiết kiệm thời gian: báo cáo chạy lại hàng tháng chỉ mất vài phút với Excel mẫu hoặc script Python.

Lưu ý quan trọng

  1. AI không thay thế phán đoán chuyên môn. Một mã hàng nhóm CZ có thể là linh kiện bảo hành bắt buộc phải giữ, hoặc hàng mùa vụ sắp vào mùa. Quyết định xả hàng, ngừng kinh doanh hay trích lập dự phòng phải do kế toán và quản lý xem xét dựa trên hồ sơ thực tế và quy định hiện hành.
  2. Luôn kiểm tra lại phép tính của AI. Mô hình ngôn ngữ có thể tính sai khi bảng dài. Hãy yêu cầu AI đưa công thức Excel để bạn đối chiếu, hoặc dùng Python/Excel để tính và chỉ nhờ AI diễn giải.
  3. Bảo mật dữ liệu. Trước khi đưa dữ liệu lên công cụ AI công cộng, hãy mã hóa tên hàng, bỏ tên khách hàng/nhà cung cấp, giá mua đàm phán riêng. Ưu tiên các gói AI doanh nghiệp có cam kết không dùng dữ liệu để huấn luyện.
  4. Chất lượng dữ liệu quyết định kết quả. Mã hàng trùng lặp, đơn vị tính không thống nhất, phiếu xuất điều chuyển nội bộ bị tính như xuất bán... đều làm sai lệch phân loại. Hãy làm sạch dữ liệu trước.
  5. Ngưỡng phân loại cần điều chỉnh theo đặc thù ngành: hàng thời trang, thực phẩm hạn ngắn, linh kiện kỹ thuật có thể cần ngưỡng khác nhau.

Câu hỏi thường gặp

1. Doanh nghiệp nhỏ chỉ có vài chục mã hàng có cần làm ABC – XYZ không? Vẫn nên làm, vì chỉ mất khoảng 15–30 phút với Excel. Ngay cả vài chục mã cũng thường có vài mã "chôn vốn" mà chủ doanh nghiệp không để ý.

2. Nên tính ABC theo giá trị xuất kho, doanh thu hay lợi nhuận gộp? Phổ biến nhất là giá trị xuất kho theo giá vốn, vì phản ánh vốn luân chuyển qua kho. Bạn có thể làm thêm một bản theo lợi nhuận gộp để biết mã nào mang lại lãi nhiều nhất.

3. Bao lâu nên chạy lại phân loại? Gợi ý: chạy lại hàng quý, hoặc hàng tháng nếu ngành hàng biến động nhanh. Phân loại cũ có thể không còn đúng khi thị trường thay đổi.

4. Hàng nhóm CZ có phải trích lập dự phòng giảm giá hàng tồn kho ngay không? Không tự động. ABC – XYZ là công cụ quản trị, giúp khoanh vùng mã cần xem xét. Việc trích lập dự phòng phải căn cứ vào giá trị thuần có thể thực hiện được và hồ sơ chứng minh theo quy định hiện hành — nên tham khảo ý kiến kế toán trưởng hoặc chuyên gia thuế.

5. Có thể dùng AI đọc thẳng file xuất từ MISA/Fast không? Có thể với các công cụ AI hỗ trợ tải file Excel/CSV. Tuy nhiên nên ẩn thông tin nhạy cảm trước, và kiểm tra lại kết quả bằng công thức Excel hoặc script Python như hướng dẫn ở trên.

Kết luận

Hàng tồn kho không chỉ là con số trên bảng cân đối — đó là tiền mặt đang "ngủ" trong kho. Kết hợp phân loại ABC (giá trị), phân loại XYZ (độ ổn định nhu cầu) và tuổi tồn kho / số tháng đủ bán, bạn có một bức tranh rõ ràng để biết mã nào cần ưu tiên, mã nào cần xả, mã nào nên đặt hàng theo đơn. Excel giúp bạn bắt đầu ngay, Python giúp tự động hóa khi dữ liệu lớn, còn AI giúp diễn giải và viết báo cáo nhanh hơn — nhưng quyết định cuối cùng vẫn thuộc về người làm nghề.

Bạn muốn có sẵn file Excel mẫu ABC – XYZ, bộ prompt AI cho kế toán và các bài thực hành tự động hóa báo cáo quản trị? Hãy khám phá các khóa học và công cụ ứng dụng AI trong kế toán – tài chính trên ecostartupai.com để rút ngắn thời gian làm báo cáo và ra quyết định tốt hơn cho doanh nghiệp.


Tài liệu tham khảo về phương pháp: Cleverence – Inventory classification types: ABC/XYZ, FSN, HML, VED; Red Stag Fulfillment – How to identify slow-moving inventory.

Bài viết liên quan

Dự Báo Dòng Tiền 13 Tuần Là Gì? Cách Lập Cho SME Từng Bước
Tài chính19/10/2026

Dự Báo Dòng Tiền 13 Tuần Là Gì? Cách Lập Cho SME Từng Bước

Dự báo dòng tiền 13 tuần giúp SME biết trước tiền vào, tiền ra trong một quý để chủ động xoay vốn. Bài hướng dẫn cấu trúc bảng và ví dụ số nhỏ dễ làm.

NPV Và IRR Bằng Excel Và AI: SME Có Nên Mua Máy Mới Không?
Tài chính17/10/2026

NPV Và IRR Bằng Excel Và AI: SME Có Nên Mua Máy Mới Không?

Cách tính NPV và IRR bằng Excel để quyết định mua máy mới: dựng dòng tiền dự án, chọn tỷ lệ chiết khấu, kiểm tra bằng AI và tránh 4 lỗi hay gặp ở SME.

Báo Cáo Lưu Chuyển Tiền Tệ Bằng Excel Và AI: Lãi Mà Hết Tiền?
Tài chính15/10/2026

Báo Cáo Lưu Chuyển Tiền Tệ Bằng Excel Và AI: Lãi Mà Hết Tiền?

Lãi trên sổ nhưng két trống? Học cách lập báo cáo lưu chuyển tiền tệ gián tiếp bằng Excel, nhờ AI soát lỗi và chỉ ra chính xác tiền đang kẹt ở đâu. Kèm ví dụ.