8 phút

Độ chính xác tồn kho cho đội nhỏ: Available, Reserved, Sold

Độ chính xác tồn kho cho đội nhỏ bắt đầu bằng các trạng thái tồn kho rõ ràng. Tìm hiểu available vs reserved vs sold, cùng cách xử lý timeout thanh toán để tránh bán vượt.

Độ chính xác tồn kho cho đội nhỏ: Available, Reserved, Sold

Tại sao các đội nhỏ gặp khó về độ chính xác tồn kho

Nếu bạn điều hành một cửa hàng nhỏ hoặc chỉ gửi vài sản phẩm, có cảm giác tồn kho sẽ đơn giản: đếm những gì có trên kệ và đó là những gì bạn có thể bán. Tuy nhiên oversell vẫn xảy ra, ngay cả khi con số của bạn đúng.

Lý do chính là thời điểm. "Con số" của bạn có thể đúng lúc 10:00:00, nhưng sai vào 10:00:05, vì hai người đều cố mua cùng một đơn vị cuối cùng, thanh toán chậm, hoặc nhân viên điều chỉnh tồn kho khi khách đang thanh toán. Với đội nhỏ, những khoảnh khắc này dễ bị bỏ sót vì bạn không có người vận hành chuyên trách theo dõi các trường hợp biên cả ngày.

Khi tồn kho sai, khách hàng cảm nhận rất nhanh:

  • Họ đặt hàng, sau đó nhận email hủy.
  • Họ đã thanh toán, rồi phải đợi hoàn tiền khi bạn nhận ra không thể giao.
  • Họ liên hệ hỗ trợ hỏi chuyện gì đã xảy ra và khi nào tiền được trả lại.
  • Họ mất niềm tin và có thể không quay lại.

Với bạn, nó tạo ra công việc tốn thời gian: xin lỗi, hoàn tiền, kiểm đếm lại và trả lời ticket. Đó là lý do độ chính xác tồn kho cho đội nhỏ không phải là đếm hoàn hảo, mà là quy tắc rõ ràng cho ý nghĩa của "còn hàng" trong quá trình thanh toán.

Ý tưởng cốt lõi là coi tồn kho như vài trạng thái rõ ràng thay vì một con số duy nhất. "Available" là những gì bạn có thể hứa ngay bây giờ. "Reserved" là những món đang được ai đó cố gắng mua nhưng chưa thanh toán xong. "Sold" là những món đã được thanh toán và cần được hoàn thành giao hàng.

Hướng dẫn này giữ ở mức đơn giản, thực tế: cách hàng di chuyển giữa các trạng thái đó, khi nào nên đặt giữ, và cách xử lý timeout thanh toán để không để hàng bị kẹt hoặc bán vượt. Nó không đề cập dự báo phức tạp, bố trí kho hay lập kế hoạch đa địa điểm nâng cao.

Available vs reserved vs sold: định nghĩa đơn giản

Ba từ này trông như nhãn đơn giản, nhưng là ba lời cam kết khác nhau bạn đưa ra với khách. Nếu bạn lẫn lộn, bạn hoặc bán vượt (hai người trả tiền cho cùng một món) hoặc bán thiếu (giấu hàng bạn có thể bán).

Available nghĩa là “khách vẫn có thể bắt đầu thanh toán cho món này ngay bây giờ.” Là phần trong tồn kho thực tế mà chưa bị cam kết cho ai khác. Hãy coi đó là con số công khai của bạn.

Reserved nghĩa là “chúng tôi đang giữ món này cho một khách hàng cụ thể trong thời gian ngắn.” Đặt giữ thường được tạo khi người mua thể hiện rõ ý định (ví dụ, họ bắt đầu thanh toán). Hàng đã được đặt giữ chưa được bán, nhưng bạn coi nó tạm thời không có cho người khác để tránh đặt đúp.

Sold nghĩa là “giao dịch được xác nhận.” Đây là lúc bạn có thể an toàn coi món hàng không còn để bán. Ở nhiều cửa hàng, “sold” bắt đầu khi thanh toán thành công (hoặc khi đơn hàng pay-later bạn tin cậy được đặt) và kết thúc khi hàng được gửi.

Một điểm quan trọng: available không giống với on hand. On hand là những gì bạn có về mặt vật lý. Available là những gì bạn sẵn lòng hứa với người mua mới.

Ví dụ nhỏ với 5 đơn vị on hand:

  • On hand: 5
  • Reserved: 2 (hai khách đang trong quá trình thanh toán)
  • Sold: 1 (một đơn đã thanh toán)
  • Available: 2 (5 trừ 2 trừ 1)

Lưu ý rằng cả ba con số đều có thể đúng cùng lúc. Nếu bạn chỉ theo dõi “on hand,” trang của bạn có thể vẫn hiển thị 5 và cho năm người cùng thử mua, dù bạn chỉ có thể chắc chắn giao hai cái nữa ngay lúc đó.

Cách hàng di chuyển: vòng đời cơ bản

Tồn kho rối khi “con số” bị xử lý như một giá trị đơn lẻ. Để đạt độ chính xác tồn kho cho đội nhỏ, hãy nghĩ theo trạng thái và một lộ trình đơn giản. Mỗi trạng thái trả lời một câu hỏi khác nhau: còn ai mua được không, có bị giữ cho checkout nào không, hay giao dịch đã hoàn tất.

Lộ trình điển hình như sau:

  • Available -> Reserved: tạo khi khách bắt đầu thanh toán (hoặc nhấn “Pay”) và bạn quyết định giữ món cho họ.
  • Reserved -> Sold: xảy ra chỉ sau khi thanh toán được xác nhận (hoặc bạn chấp nhận thanh toán ngoại tuyến).
  • Reserved -> Available: xảy ra khi checkout bị bỏ dở, thanh toán timeout, hoặc khách hủy trước khi trả tiền.

"Sold" nên là thời điểm bạn cam kết thực sự. Ở nhiều cấu hình, đó cũng là lúc bạn giảm số lượng vật lý, vì món hàng không còn là của bạn để bán. Nếu bạn gửi hàng sau (phổ biến với đội nhỏ), bạn vẫn có thể coi “sold” là cuối cùng và theo dõi việc giao hàng riêng. Chìa khóa: đừng gán là sold chỉ vì ai đó mới mở trang thanh toán.

Hãy nghiêm ngặt về ai được phép thay đổi mỗi trạng thái:

  • Hệ thống checkout có thể tạo và gia hạn đặt giữ (trong giới hạn).
  • Xác nhận thanh toán có thể chuyển reserved thành sold.
  • Admin có thể hủy đặt giữ, hoàn tiền (có thể dẫn tới việc restock: sold -> available nếu bạn thực sự nhập hàng trở lại), hoặc sửa tồn kho khi nhận thêm.

Cuối cùng, các thay đổi trạng thái phải giống nhau ở mọi nơi. Storefront, bảng quản trị và mọi view hỗ trợ khách hàng nên đọc cùng một quy tắc trạng thái tồn kho, nếu không bạn sẽ “sửa” một oversell ở chỗ này và tái tạo nó ở chỗ khác.

Khi nào tạo đặt giữ trong quá trình thanh toán

Thời điểm bạn tạo đặt giữ quyết định tần suất xảy ra oversell và mức độ gây khó chịu cho người mua. Quá sớm, bạn giữ hàng cho người chỉ đang xem. Quá muộn, bạn bán cùng một món cuối cho hai người.

Một quy tắc đơn giản phù hợp với hầu hết đội nhỏ: đặt giữ khi người mua cam kết bắt đầu thanh toán, không phải khi họ mở trang sản phẩm.

Các lựa chọn thường gặp, từ sớm đến muộn:

  • Khi bắt đầu checkout (khi họ nhấn “Checkout”): tốt cho món bán nhanh, nhưng cần thời gian hết hạn ngắn.
  • Sau bước địa chỉ: giảm giữ ảo và vẫn bảo vệ bạn trước khi thanh toán.
  • Khi bắt đầu thanh toán (khi bạn tạo payment intent hoặc chuyển hướng sang nhà cung cấp): thường là điểm sạch nhất vì “đang thanh toán” là cam kết thực sự.
  • Sau khi thanh toán thành công: an toàn nhất cho trải nghiệm khách, nhưng rủi ro oversell cao nhất.

Dù chọn gì, mỗi đặt giữ nên lưu đúng những gì cần để thực thi: SKU, số lượng, ID giỏ/đơn, ai đặt (session/user) và thời điểm hết hạn. Cũng lưu lý do hoặc giai đoạn (checkout, payment) để hỗ trợ dễ hiểu sau này.

Giỏ đa mặt hàng cần một quyết định thêm: bạn đặt giữ toàn bộ cùng lúc hay theo từng món? Đặt giữ theo từng món thường an toàn hơn. Nếu một món hết hàng, bạn chỉ thả giữ cho món đó thay vì khóa cả giỏ.

Hiển thị thông báo rõ ràng bằng ngôn ngữ đơn giản. Một dòng nhỏ như “Chúng tôi đang giữ những món này trong 10 phút cho bạn trong khi bạn hoàn tất thanh toán” là đủ. Trong trường hợp chỉ còn 1 món, hãy trực tiếp: “Chỉ còn 1. Đã giữ cho bạn đến 15:42.” Đồng hồ đếm ngược có thể hữu ích, nhưng tùy chọn nếu thông báo rõ ràng.

Nếu bạn xây luồng trong Koder.ai, coi “reserve” như bước quan trọng (gọi API + bản ghi DB) để UI và backend luôn nhất quán về những gì đang được giữ.

Từng bước: đặt giữ hàng và ngăn oversell

Xây dựng checkout có đặt giữ hàng
Tạo luồng thanh toán dự trữ hàng khi bắt đầu thanh toán và thả hàng khi hết thời gian chờ.

Nếu muốn độ chính xác tồn kho cho đội nhỏ, hãy làm hệ thống nhàm chán và dễ đoán. Chìa khóa là quy định rõ từng con số nghĩa gì, và chỉ thay đổi nó ở một chỗ.

Bắt đầu bằng việc chọn nguồn dữ liệu duy nhất cho tồn kho. Có thể là một bảng cơ sở dữ liệu, hoặc một dịch vụ mà mọi checkout đều phải gọi. Bảng tính, chỉnh sửa admin và "sửa nhanh" ở hai hệ thống là nơi oversell nảy sinh.

Đây là luồng đơn giản phù hợp với hầu hết cửa hàng:

  1. Chọn sự thật cho số đếm. Theo dõi “on hand” như tồn kho vật lý thực tế. Sau đó định nghĩa “available” là một số lưu trữ bạn cập nhật hoặc một phép tính: on hand trừ reserved.
  2. Tạo đặt giữ khi người mua cam kết. Làm điều đó khi họ nhấn “Pay” (hoặc khi bạn tạo payment intent), không phải khi họ xem giỏ. Đặt giữ quá sớm sẽ khóa hàng cho người không mua.
  3. Khi tạo đặt giữ, giảm availability ngay. Nếu bạn lưu “available,” giảm nó cùng lúc tạo đặt giữ. Nếu bạn tính toán “available,” thêm bản ghi reserved và để phép toán xử lý.
  4. Khi thanh toán xác nhận, chuyển reserved thành sold. Đánh dấu đặt giữ là “sold” (hoặc tạo dòng đơn) và giảm on hand. Đây là khoảnh khắc bạn coi món không thể đảo ngược.
  5. Khi thất bại hoặc timeout, giải phóng đặt giữ. Nếu thanh toán thất bại, hết hạn, hoặc khách đóng trang, đặt giữ chuyển thành “released” và số lượng trở lại available.

Cuối cùng, ghi log mọi thay đổi trạng thái với thời gian, lý do và các ID (cart, payment, order). Khi khách hỏi “tại sao hết hàng?” hỗ trợ cần timeline rõ ràng, không phải phỏng đoán. Nếu xây luồng trong app (ví dụ với Koder.ai), coi các trạng thái và log như dữ liệu quan trọng chứ không chỉ nhãn UI.

Xử lý timeout thanh toán gọn gàng

Timeout thanh toán là thời điểm bạn ngưng chờ checkout hoàn tất và trả lại hàng đặt giữ về “available.” Bạn cần nó vì một số khách không hoàn thành thanh toán, và nếu không có timeout, đống reserved sẽ lớn dần cho đến khi người mua thực sự bị chặn hoặc bạn phải sửa tay.

Chọn thời gian chờ phù hợp với cách nhà cung cấp thanh toán hoạt động. Thanh toán thẻ thường xác nhận nhanh, nhưng 3D Secure, chuyển hướng ngân hàng và ví điện tử có thể lâu hơn. Nếu timeout quá ngắn, bạn sẽ thả hàng khi khách vẫn đang thanh toán. Nếu quá dài, bạn giữ hàng cho người đã rời đi. Với nhiều cửa hàng nhỏ, 10–20 phút là điểm bắt đầu hợp lý, rồi điều chỉnh theo log.

Khi khách đóng tab hoặc mất kết nối, đừng giả định gì. Thanh toán có thể vẫn thành công nền, hoặc chưa bắt đầu. Đó là lý do hệ thống tồn kho không nên phụ thuộc vào trình duyệt để “báo” điều gì đã xảy ra.

Tự động dọn dẹp để bạn không phải canh đơn. Cách đơn giản là quét định kỳ để hết hạn đặt giữ và ghi lý do.

  • Lưu đặt giữ với trường expires_at rõ ràng
  • Chạy job theo lịch mỗi 1–5 phút để tìm đặt giữ đã hết hạn
  • Thả hàng bằng cách chuyển số lượng từ “reserved” về “available”
  • Đánh dấu checkout/đơn là “expired” để hỗ trợ tra cứu sau
  • Ghi số lượng expiration để tinh chỉnh thời gian chờ

Quyết định trước bạn sẽ làm gì nếu thanh toán đến muộn, sau khi đặt giữ đã hết hạn. Không có câu trả lời hoàn hảo, nhưng bạn cần một quy tắc nhất quán. Các lựa chọn phổ biến: chấp nhận thanh toán chỉ khi còn hàng (nếu không tự động hoàn tiền), hoặc gia hạn đặt giữ khi nhà cung cấp chứng minh giao dịch đang tiến hành.

Với độ chính xác tồn kho cho đội nhỏ, chìa khóa là làm cho timeout dễ đoán, tự động và hiển thị, để “reserved” không trở thành hố đen.

Đồng bộ thanh toán và tồn kho

Hệ thống thanh toán không luôn gửi một thông điệp "paid" rõ ràng duy nhất. Bạn có thể nhận cùng một xác nhận hai lần, thấy webhook trễ, hoặc nhận capture vài phút sau khi khách nghĩ đã xong. Nếu cập nhật tồn kho không sẵn sàng cho điều đó, bạn có thể bán cùng một đơn vị hai lần.

Mỏ neo đơn giản là một order id theo suốt câu chuyện: đặt giữ, từng lần thử thanh toán, và bán cuối cùng. Khi có sự kiện, bạn tra order id trước, rồi quyết định bước tiếp.

Một vài quy tắc giữ đồng bộ tồn kho mà không làm phức tạp:

  • Làm cập nhật tồn kho idempotent: nếu cùng một sự kiện “payment confirmed” được xử lý hai lần, lần thứ hai không làm thay đổi gì.
  • Đánh dấu đặt giữ là “chuyển thành bán” một lần, và chỉ một lần, cho mỗi order id.
  • Ghi mỗi lần thử thanh toán dưới cùng order id, ngay cả khi khách thử lại bằng thẻ khác.
  • Chỉ chuyển stock từ reserved sang sold sau khi có kết quả thanh toán cuối cùng rõ ràng (authorized và captured, hoặc cái gì đó “cuối” với mô hình bạn dùng).

Idempotent chỉ là từ chuyên môn cho "an toàn khi lặp lại." Hãy nghĩ như đóng dấu vé: lần đóng dấu đầu tiên quan trọng, lần thứ hai không thay đổi gì.

Hoàn tiền và chargeback không nên tự động đưa hàng trở lại available. Nếu món đã được gửi, tồn kho vẫn là sold, trong khi kế toán phản ánh hoàn tiền. Chỉ restock khi món được trả về và kiểm tra.

Capture một phần và thanh toán split cần chính sách đơn giản. Ví dụ: giữ hàng cho đến khi tổng tiền được capture đạt tổng đơn, sau đó đánh dấu sold. Nếu khách chỉ trả một phần rồi timeout, thả đặt giữ như mọi checkout thất bại khác.

Sai lầm phổ biến gây oversell

Mô hình trạng thái tồn kho nhanh
Biến available, reserved và sold thành các trạng thái cơ sở dữ liệu thực sự với một nguồn dữ liệu duy nhất.

Hầu hết oversell không phải do toán học sai. Chúng xảy ra khi đội dùng cùng từ để chỉ những thứ khác nhau, hoặc khi một phần của flow cập nhật tồn kho khác với phần khác. Nếu bạn quan tâm độ chính xác tồn kho cho đội nhỏ, các sửa thường đơn giản nhưng phải nhất quán.

Sai lầm phổ biến là đặt giữ quá sớm. Nếu giữ ngay khi ai đó mở trang sản phẩm hoặc thêm vào giỏ, bạn khóa hàng cho người chỉ đang duyệt, so sánh giá hoặc bị gián đoạn. Đặt giữ nên gắn với ý định rõ ràng, như bắt đầu checkout hoặc tạo session thanh toán.

Một rò rỉ chậm khác là đặt giữ không bao giờ hết hạn. Một vài checkout bỏ dở mỗi ngày có thể âm thầm ăn hết số hàng có thể bán. Bạn cần giới hạn thời gian và tự động thả khi đến hạn, dù không có hành động khác.

Các lỗi thường gặp nhất:

  • Đặt giữ trước khi checkout, khiến tồn kho bị khóa bởi trình duyệt chứ không phải người mua.
  • Thiếu expiry, khiến các đặt giữ cũ tích tụ và available ngày càng nhỏ.
  • Để nhiều hệ thống thay đổi số đếm (chỉnh sửa admin, import hàng loạt, trả hàng) mà không có một quy tắc duy nhất cho chuyển trạng thái.
  • Lẫn lộn nghĩa: coi “sold” là “đã thanh toán” ở chỗ này và “đã gửi” ở chỗ khác.
  • Thả đặt giữ mà không ghi lý do, khiến hỗ trợ khó truy vết nguyên nhân.

Điểm cuối cùng quan trọng hơn vẻ bề ngoài. Khi khách nói “tôi đã thanh toán nhưng lại báo hết hàng,” đội bạn cần audit trail trả lời: khi nào được đặt giữ, khi nào thả, và vì lý do gì (timeout thanh toán, hủy tay, hay hoàn tiền).

Thói quen đơn giản: khi tồn kho thay đổi, luôn ghi lý do và nguồn (checkout, admin, import, support). Nếu bạn xây luồng trong Koder.ai, nhúng những lý do đó vào mô hình dữ liệu và bắt buộc dùng ở một chỗ để mọi tính năng tuân theo cùng quy tắc.

Checklist nhanh trước khi triển khai thay đổi

Trước khi đẩy logic checkout hoặc tồn kho mới, đảm bảo mọi người trong đội có thể nói rõ mỗi trạng thái nghĩa gì mà không thêm quy tắc phụ. “Available” là cái vẫn có thể được đặt giữ, “reserved” là đã được hứa cho một checkout cụ thể đến khi hết hạn, và “sold” là đã thanh toán và final.

Một hệ thống đặt giữ đơn giản sống hay chết nhờ thời gian và dọn dẹp. Đặt giữ phải có expiry rõ ràng (ví dụ 10–15 phút), và bạn cần job hoặc trigger thả các hold đã hết hạn để hàng trở lại available.

Chạy qua checklist trước khi ra mắt:

  • Xác nhận checkout chỉ hứa những món đã được đặt giữ, không phải chỉ ngồi trong giỏ.
  • Đảm bảo tạo đặt giữ là nguyên tử (không ai có thể đặt giữ đồng thời món cuối cùng cùng lúc).
  • Xác minh xác nhận thanh toán chuyển reserved thành sold đúng một lần (xử lý idempotent cho retry và webhook).
  • Định nghĩa hành xử khi thanh toán đến muộn sau khi đặt giữ hết hạn: chấp nhận, hủy hay đánh dấu backorder. Chọn một quy tắc và áp dụng mọi lúc.
  • Kiểm thử đường dẫn timeout end-to-end: đặt giữ hết hạn, tồn kho trở lại available, và khách thấy thông báo rõ ràng.

Hỗ trợ cần khả năng hiển thị, không phải phỏng đoán. Với bất kỳ đơn nào, bạn nên thấy timeline các thay đổi trạng thái có timestamp để xử lý tranh chấp dễ dàng.

Timeline hỗ trợ phải trả lời ba câu hỏi

  • Khi nào đặt giữ được tạo và khi nào hết hạn?
  • Khi nào thanh toán thành công hay thất bại, và là trước hay sau khi hết hạn?
  • Khi nào hàng được thả hoặc chuyển thành sold, và bởi sự kiện hệ thống nào?

Nếu bạn viết logic này bằng công cụ tạo code hoặc nền tảng như Koder.ai, hãy viết ra các quy tắc trước, rồi hiện thực chúng như trạng thái và sự kiện rõ ràng. Nó ngăn các trường hợp biên lọt vào sau.

Ví dụ: hai khách, một món cuối

Ra mắt bản sửa an toàn
Triển khai dịch vụ tồn kho của bạn và lặp nhanh khi các trường hợp biên xuất hiện.

Bạn còn 1 đơn vị của một món hot. Hai khách gần như đồng thời vào checkout.

12:00:00 - Store hiển thị Available: 1, Reserved: 0, Sold: 0.

12:00:05 - Khách A nhấn “Pay”. Hệ thống tạo đặt giữ 1 đơn vị kéo dài 10 phút. Trang sản phẩm giờ hiệu quả hiển thị Available: 0 (vì món cuối bị giữ), trong khi back office hiển thị Reserved: 1.

12:00:20 - Khách B thêm cùng món vào giỏ và vào checkout.

  • Khách B thấy: “Hết hàng” hoặc “Hiện không khả dụng.”
  • Hỗ trợ/admin thấy: Available 0, Reserved 1 (đang giữ cho Khách A), Sold 0.

12:03:10 - Thanh toán của Khách A thành công.

Bạn chuyển đặt giữ thành bán:

  • Sold tăng lên 1.
  • Reserved giảm về 0.
  • Available vẫn 0 vì không còn hàng vật lý.

Bây giờ số là Available: 0, Reserved: 0, Sold: 1. Khách A nhận xác nhận đơn. Khách B vẫn không mua được.

Kết thúc thay thế: timeout thanh toán

Cùng bắt đầu, nhưng Khách A không hoàn tất thanh toán.

12:10:05 - Đặt giữ hết hạn. Bạn thả hàng.

  • Số trở thành Available: 1, Reserved: 0, Sold: 0.
  • Khách B giờ có thể checkout và bạn tạo đặt giữ mới cho B.

Biến thể: thanh toán thành công sau khi hết hạn

Đôi khi nhà cung cấp báo thành công muộn (độ trễ mạng, xác nhận chậm).

Quy tắc của bạn nên đơn giản: một khi đặt giữ hết hạn, nó không được hồi sinh. Khi một "success" muộn đến cho Khách A, bạn làm một trong các việc sau:

  • Nếu đặt giữ đã hết hạn, không đánh dấu món bán. Đặt đơn vào “cần xem xét” và hoàn tiền hoặc yêu cầu khách đặt lại.
  • Nếu một đặt giữ mới đã có cho Khách B, B giữ quyền ưu tiên vì B có hold đang hoạt động.

Quy tắc đơn này ngăn oversell và làm kết quả hỗ trợ dễ đoán.

Bước tiếp theo: biến quy tắc thành hệ thống đơn giản

Độ chính xác tồn kho cho đội nhỏ trở nên dễ khi mọi người dùng cùng một ngôn ngữ. Ghi lại định nghĩa available, reserved và sold ở một chỗ, và đảm bảo chúng khớp với giao diện khách, thông tin hỗ trợ và view admin.

Giữ chính sách ngắn: quyết định chính xác khi nào tạo đặt giữ (ví dụ, khi bắt đầu checkout hoặc khi bắt đầu thanh toán) và nó có thể giữ hàng bao lâu trước khi hết hạn. Viết rõ quy tắc timeout, bao gồm xử lý khi khách quay lại sau khi hết hạn.

Trước khi thay đổi checkout, phác thảo trạng thái và chuyển đổi trước. Bạn phải chỉ được từng sự kiện và nói nó làm gì với tồn kho.

Một nền tảng thực tế, đơn giản

Hầu hết đội ổn với năm hành động làm xương sống:

  • Reserve: tạo hold cho giỏ hoặc đơn cụ thể
  • Release: gỡ hold khi khách hủy hoặc timeout
  • Convert to sold: hoàn tất đặt giữ khi thanh toán xác nhận
  • Fail safely: nếu không chắc, đừng đánh dấu sold
  • Reconcile: sửa những khác biệt hiếm bằng kiểm tra tay hoặc định kỳ

Thêm khả năng quan sát cơ bản để debug các trường hợp biên mà không phải đoán. Ghi mọi reserve, release và convert-to-sold với order ID, lý do (timeout, cancel, payment success), timestamp, và số lượng trước & sau.

Xây nhanh, rồi củng cố

Nếu cần prototype hoặc điều chỉnh luồng nhanh, Koder.ai có thể giúp bạn vẽ trạng thái trong chat, sinh logic đặt giữ và timeout, rồi xuất mã nguồn khi sẵn sàng triển khai. Chìa khóa không phải công cụ cầu kỳ, mà là làm cho quy tắc rõ ràng và nhất quán, sau đó áp dụng ở mọi nơi checkout chạm tới tồn kho.

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

Tồn kho khả dụng nghĩa là gì?

Tồn kho khả dụng là số lượng bạn có thể cam kết bán ngay cho khách hàng mới. Nó bằng số hàng thực tế sau khi tính đến các đơn vị đã được giữ chỗ hoặc bán.

Hàng tồn kho được giữ chỗ là gì?

Hàng tồn kho được giữ chỗ dành cho một khách hàng trong khi họ hoàn tất thanh toán. Số hàng này tạm thời không khả dụng với người khác trong một khoảng thời gian xác định, nhưng chưa phải là giao dịch bán hoàn tất.

Khi nào một mặt hàng nên chuyển sang trạng thái đã bán?

Đánh dấu hàng là đã bán khi khoản thanh toán đạt trạng thái cuối cùng mà bạn chấp nhận để thực hiện đơn hàng. Đừng đánh dấu là đã bán chỉ vì khách hàng đã bắt đầu thanh toán hoặc đến trang thanh toán.

Khi nào tôi nên giữ chỗ hàng trong quá trình thanh toán?

Tạo giữ chỗ khi khách hàng bắt đầu một bước thanh toán đáng kể, thường là khi họ nhấp vào Pay hoặc khi bạn tạo một phiên thanh toán. Giữ hàng ngay từ trang sản phẩm hoặc giỏ hàng thường khóa tồn kho quá sớm.

Một lượt giữ chỗ hàng nên kéo dài bao lâu?

Đặt thời điểm hết hạn cho mọi lượt giữ chỗ và tự động giải phóng khi đến thời điểm đó. Nhiều cửa hàng nhỏ bắt đầu với 10 đến 20 phút, rồi điều chỉnh giới hạn dựa trên dữ liệu thanh toán thực tế.

Làm sao ngăn hai khách hàng mua cùng một mặt hàng cuối cùng?

Dùng một nguồn dữ liệu tồn kho duy nhất và thực hiện thao tác giữ chỗ theo kiểu nguyên tử. Khi hai người cùng cố giữ đơn vị cuối cùng, hệ thống chỉ được phép để một lượt giữ chỗ thành công.

Điều gì sẽ xảy ra khi khách hàng bỏ dở quá trình thanh toán?

Đừng dựa vào trình duyệt của khách hàng để giải phóng hàng. Hãy chạy một tác vụ dọn dẹp theo lịch để tìm các lượt giữ chỗ đã hết hạn, chuyển chúng sang trạng thái đã giải phóng và trả số lượng về tồn kho khả dụng.

Nếu thanh toán thành công sau khi lượt giữ chỗ hết hạn thì sao?

Giữ lượt giữ chỗ đã hết hạn ở trạng thái đóng. Nếu hàng vẫn còn, bạn có thể chấp nhận thanh toán theo một quy tắc rõ ràng; nếu khách hàng khác đã giữ hàng, hãy chuyển khoản thanh toán đến muộn sang bước xem xét và hoàn tiền nếu bạn không thể thực hiện đơn hàng.

Làm sao để đồng bộ thanh toán và tồn kho?

Dùng mã đơn hàng để liên kết các lượt giữ chỗ, lần thử thanh toán và giao dịch bán. Thiết kế việc xử lý thanh toán để có thể lặp lại an toàn, nhằm tránh webhook trùng lặp làm giảm tồn kho hai lần.

Nhật ký kiểm toán tồn kho nên bao gồm những gì?

Ghi lại thời gian, lý do, mã đơn hàng hoặc giỏ hàng, cùng số lượng trước và sau mỗi lần giữ chỗ, giải phóng và bán hàng. Lịch sử đó giúp bộ phận hỗ trợ giải thích các trường hợp hủy đơn và giúp đội ngũ của bạn nhanh chóng tìm ra chênh lệch.

Related posts