logoMột hệ thống khó hiểu thì cũng khó thay đổi
Nghiệp vụ Marketplace

Để viết phần mềm, ta cần căn cứ nghiệp vụ. Khi vận dụng DDD, ta còn đề cao yếu tố này hơn nữa. Hãy cùng đi qua sơ lược các nghiệp vụ cơ bản của nền tảng chợ Marketplace.

Trung tâm của ứng dụng là sản phẩm Product. Nếu không có Product, nền tảng sẽ không thể tồn tại được. Một ứng dụng lớn như Shopee có thể chứa hàng chục triệu sản phẩm khác nhau. Product đóng vai trò là… sản phẩm để mua bán, vậy cần có các use case thể hiện giao dịch này, gọi là Order. Người mua Customer thực hiện duyệt qua “chợ” để tìm kiếm sản phẩm. Khi thấy một sản phẩm vừa ý, họ đưa nó vào trong giỏ hàng Cart. Order ở đây là tên gọi rút gọn, đúng hơn, nó là Sales Order: bên trong có thể chứa nhiều sản phẩm OrderLine, và được chốt với người bán Merchant.

Nghiệp vụ chỉ đơn giản vậy thôi, và những mô tả như vậy thường tới từ những người sở hữu sản phẩm phần mềm Product Owner. Nhiệm vụ của chúng ta – đội phát triển – là biến những mô tả đó đó thành những thông tin rõ ràng hơn để sẵn sàng đưa vào lập trình.

Cách tổ chức Product

Thông thường, trên các sản thương mại điện tử, Product không được tổ chức đơn giản như việc chỉ cần tạo ra và sử dụng luôn. Hãy tưởng tượng, ai (Merchant nào) cũng có quyền tạo “iPhone 17 Pro” thì lúc đó ta có thể bắt gặp các sản phẩm khác nhau như:

  • Iphone 17 pro
  • iPhone 17 Pro
  • iPHONE 17 PRO
  • IPHONE 17 Pdzo

Các sàn thường không cho phép trùng Product. Như Amazon, Shopee, Lazada quản lý một catalog chung với chính sách tránh trùng, yêu cầu các mã GTIN/UPC/EAN, hoặc có đội duyệt catalog chuyên trách.

GTIN (Global Trade Item Number): Gọi là “Mã số thương mại toàn cầu”, một thuật ngữ bao trùm tất cả các loại mã số nhận dạng sản phẩm được quản lý bởi tổ chức toàn cầu GS1. GTIN có các thành viên cụ thể là UPC và EAN.
UPC (Universal Product Code): Gọi là “Mã sản phẩm chung”, là mã GTIN được sử dụng chủ yếu ở Bắc Mỹ. UPC-A, là dạng phổ biến nhất, có cấu trúc bao gồm 12 chữ số. UPC không chứa mã quốc gia như EAN.
EAN (European Article Number): Gọi là “Mã số sản phẩm Châu Âu”, là mã GTIN được sử dụng rộng rãi ở Châu Âu và các nơi khác trên thế giới, trong đó có Việt Nam. EAN có hai dạng chính: EAN-13 bao gồm 13 chữ số, là dạng tiêu chuẩn cho phần lớn các sản phẩm bán lẻ; EAN-8 bao gồm 8 chữ số, dùng cho các sản phẩm có kích thước nhỏ, không đủ diện tích để in mã 13 số. EAN-13 có 3 chữ số đầu tiên là mã quốc gia (Việt Nam là 893).

Chính sách  này của Amazon cho thấy như sau: ASIN là mã định danh duy nhất của Amazon cho một sản phẩm, quy tắc đưa ra là cấm tạo ASIN mới nếu sản phẩm đó đã có ASIN trong hệ thống danh mục của Amazon. Mục đích là để đảm bảo một trải nghiệm độc nhất, giúp khách hàng dễ dàng tìm kiếm, so sánh, và mua hàng, từ đó duy trì trải nghiệm khách hàng tốt.

Với Marketplace đang xây dựng, chúng ta sẽ chỉ cho phép admin tạo mới sản phẩm. Sau này, ta có thể mở cho Merchant tự tạo nhưng có thể duy trì một đội phê duyệt.

iPhone 17 Pro có những màu khác nhau như cam vũ trụ (cosmic orange), xanh đậm (deep blue), và bạc (silver). Ta không tạo ba sản phẩm riêng biệt như vậy mà tạo ra ba biến thể Variant cho nó: iPhone 17 Pro – Cosmic Orage, iPhone 17 Pro – Deep Blue, và iPhone 17 Pro – Silver. Tương tự như thế, còn có những biến thể về dung lượng bộ nhớ.
Vậy cấu trúc sản phẩm được quản lý như sau: Một Product bao gồm nhiều Variant.

Figure 1: Một Product bao gồm nhiều Variant

Nói thêm về quy trình đăng ký GTIN, ví dụ, cho iPhone của Apple, như sau:

Về cơ bản, Apple cũng giống như mọi công ty khác, phải tuân theo một quy trình chuẩn do tổ chức GS1 quy định. Quy trình đó rất có thể là như sau:

  • Đầu tiên, Apple đăng ký làm thành viên của GS1 để sau đó được cấp một mã tiền tố duy nhất đại diện cho họ. Đây là những con số đầu tiên trong chuỗi GTIN của tất cả các sản phẩm do Apple sản xuất.
  • Tiếp theo, Apple sẽ tự tạo ra các số tiếp theo trong chuỗi GTIN để định danh cho từng sản phẩm cụ thể.
  • Cuối cùng, thuật toán cụ thể thực hiện tính toán tự động từ các con số thuộc hai nhóm trên để ra một chữ số cuối cùng của mã GTIN, gọi là “Số kiểm tra” – Digital check.

Apple không tạo GTIN cho mọi chiếc iPhone vật lý mà họ tạo ra, thay vào đó, họ tạo GTIN cho từng phiên bản khác nhau của iPhone mà họ sản xuất, đó là: iPhone 17 Pro – Silver – 256GB, iPhone 16 Pro Max – Black Titan – 512GB, v.v.

Figure 2: Một Product bao gồm nhiều Variant, mỗi Variant có một GTIN duy nhất

SKU là gì?

SKU (Stock Keeping Unit), đơn vị lưu kho, là một mã nội bộ do chính doanh nghiệp tự tạo ra để nhận diện và quản lý hàng tồn kho của mình. Mục đích chính của SKU là để phân biệt từng Variant khác nhau. Một số đặc điểm nổi bật của SKU:

  • Là mã nội bộ. Mỗi công ty có một hệ thống SKU riêng. SKU của FPT Shop sẽ khác SKU của Thegioididong cho cùng một Variant.
  • Có tính duy nhất. Trong cùng một công ty, không có hai Variant nào có chung SKU.
  • Cấu trúc thường chứa cả chữ và số. SKU được đặt theo quy tắc riêng sao cho nhân viên có thể dễ dàng đọc và nhận biết sản phẩm mà không cần máy quét.
Figure 3: SKU ở phạm vi Merchant (local), trong khi Variant ở phạm vi Marketplace (global)

Ý nghĩa của bức tranh trên là như sau:

  • Product và Variant là những sản phẩm trừu tượng, ở cấp quản lý của Marketplace. Trên Marketplace của chúng ta có những Variant như iPhone 17 Pro – Silver – 256 GB, v.v.
  • Marketplace lại có nhiều người thuê, là các Merchant, ví dụ như FPT Shop, Thegioididong. Các Merchant này có thể kinh doanh những sản phẩm giống nhau, tức là cùng Variant. FPT Shop và Thegioididong cùng kinh doanh iPhone 17 Pro – Silver – 256 GB.
  • Ở phạm vi Merchant, các sản phẩm của họ là SKU và chúng nằm trong kho riêng của từng Merchant: Có mã riêng để quản lý, tham chiếu tới Variant chung, và có số dư tồn kho. Variant iPhone 17 Pro – Silver – 256 GB tại FPT Shop có mã là FPT-IP17-S-256, trong khi ở Thegioididong là TGDĐ-IP17P-SLV256.

Merchant bán gì?

FPT Shop không bán iPhone 17 Pro vì như ta đã thấy, đó là một sản phẩm trừu tượng để phân loại, thay vào đó, họ bán iPhone 17 Pro bản màu xám có dung lượng 1TB. Đó mới đúng là thứ mà Customer muốn lựa chọn. Trong một giao dịch, thứ được bán vẫn chưa đủ, nó cần phải bao gồm các thông tin như ai bán? Giá bao nhiêu? Thông tin về sản phẩm (mới, đã dùng)? Chính sách bảo hành, đổi trả ra sao? v.v. Những thông tin này cùng với Variant tạo thành Offer (hay Listings) mà người bán đưa ra cho người mua.

Offer được Merchant tạo ra từ Variant:

Figure 4: Merchant tạo ra Offer từ Variant với tham khảo SKU

Nhưng phần nghiệp vụ đã mô tả, Variant ở phạm vi toàn Marketplace còn với Merchant, họ sẽ quan tâm SKU với mã, tồn kho, và tham chiếu tới Variant. Vậy sao không phải là Merchant tạo ra Offer cho SKU?

Offer là thứ mà Merchant tạo ra cho một Variant nhưng được dựa trên SKU của riêng họ. Marketplace quy định danh mục sản phẩm mà Merchant có thể kinh doanh, vậy Offer cần phải dựa vào danh mục này, tức họ sẽ kinh doanh các sản phẩm trong danh mục đó. FPT Shop: Chúng tôi muốn bán sản phẩm iPhone 17 Pro – Silver – 256 GB trên sàn. Đây là Variant chung mà cả sản và khách hàng đều biết. Để thực hiện ý định đó, Merchant cần kiểm tra xem trong kho của họ còn dư bao nhiêu hàng, giá nhập sản phẩm đó là bao nhiêu. Đây là những thông tin mà SKU cung cấp. Từ đó, Merchant đưa ra các chính sách như giá bán, chế độ bảo hành, v.v.

Tóm lại, Merchant dựa trên SKU của mình để tạo ra một Offer cho một Variant cụ thể.

Từ Variant { iPhone 17 Pro – Silver – 1TB }, Merchant đưa ra một Offer:

Offer: M123-IPH17PRO-SIL-1
Price: 35000000
Status: Active
Stock Available: 17
Availability Status: IN STOCK
Ship Lead Time: 2 days
Return Policy: 7 days

Merchant M123 đưa ra một Offer đối với Variant iPhone 17 Pro màu Silver dung lượng 1TB (IPH17PRO-SIL-1) như sau: Giá 35 triệu VNĐ, chính sách đổi trả trong 7 ngày, chuyển hàng trong 2 ngày, trạng thái của Offer là sẵn sàng và trong kho còn 17 sản phẩm. Khách hàng có thể mua số lượng lớn nên trong Offer bao gồm ngoài thông tin sẵn sàng có (Availabilibty Status) thì còn hiển thị số lượng cụ thể (Stock Available).

Merchant là người tạo ra Offer. Đây là điều khá dễ hiểu. Hãy hình dung trong một khu chợ truyền thống, cùng một chiếc vòng đeo tay nhưng mỗi cửa hàng bán ra có thể có giá khác nhau, kèm chính sách bảo hành khác nhau.

Figure 5: Merchant rao bán sản phẩm qua Offer tới Customer

Customer thấy gì?

Customer “đi chợ” bằng cách duyệt qua các sản phẩm tại trang danh mục sản phẩm (Product Listing Page). Khi thấy một sản phẩm thú vị, họ nhấp chuột vào xem chi tiết và có thể đưa sản phẩm đó vào giỏ hàng. Mô tả này khá phù hợp với những sàn thương mại hiện nay. Sản phẩm xuất hiện ở hai trang chính: Trang danh mục tìm kiếm sản phẩm và trang xem chi tiết sản phẩm.

Tại trang tìm kiếm:

Figure 6: Trang tìm kiếm sản phẩm trên Shopee

Các thông tin quan trọng:

  • Từ khóa tìm kiếm “Iphone 17 pro” trả về kết quả là danh sách các sản phẩm tương ứng. Theo phân tích trước ta đoán rằng chúng nên là các Offer. Đi tiếp xem nhận định này có đúng không nhé.
  • Ảnh của sản phẩm. Đây là ảnh đại diện của Variant, là iPhone 17 Pro – Cosmic Orange.
  • Tiếp theo là thứ quan trọng nhất đối với Customer: Apple iPhone 17 Pro 1T. Đây là Variant.
  • Giá sản phẩm. Đây dễ hiểu là thông tin của Offer, 47.999.000đ.
  • Số sao đánh giá. Đây là số sao của Product, Variant, hay Offer? Tôi đã thử click chuột vào một Offer khác cũng có sao và thấy thông tin như hình Figure 7 dưới đây. Tiếp tục, tôi tìm một kết quả tìm kiếm khác cho cùng Variant và có số sao khác thì thấy đánh giá cũng khác so với Offer trước. Vậy có thể thấy rằng số sao đánh giá là của Offer.
Figure 7: Trang đánh giá sản phẩm - là đánh giá Offer

Vào xem chi tiết một sản phẩm:

Figure 8: Trang xem chi tiết một sản phẩm

Tiếp tục đi vào trang chi tiết sản phẩm ở Figure 8, ngoài các thông tin đã khá rõ ràng được khoanh vùng, ta bàn chi tiết hơn tới “Voucher của Shop”, “Vận chuyển”, và “An tâm mua sắm cùng Shopee” xem chúng thuộc về thành phần nào.

  • Voucher có hai loại: của Merchant và của Marketplace. Voucher của Merchant tạo ra nhằm đẩy mạnh doanh số cho cửa hàng. Về bản chất, đây là một phần trong điều khoản bán hàng để tăng tính cạnh tranh cho Offer của họ. Họ có toàn quyền quyết định mức giảm giá, điều kiện áp dụng, và ngân sách cho Voucher này. Voucher này chỉ có phạm vi áp dụng cho các sản phẩm trong gian hàng của Merchant đã tạo ra. Vì thế, Voucher của Merchant nằm trong Offer.
    Ngược lại, Voucher do Marketplace tạo ra và quản lý mang tính chất rộng hơn, như một phần của các chiến dịch marketing lớn. Cơ bản đây là một chính sách hoặc chương trình khuyến mại của toàn nền tảng, sàn là người chi trả phần lớn chi phí trợ giá. Vì thế, nó có tính áp dụng rộng rãi hơn, có thể cho nhiều Offer từ các Merchant khác nhau miễn là Offer đó có đủ điều kiện (ví dụ: Thuộc ngành hàng nhất định, có giá trị tối thiểu đạt ngưỡng, v.v.). Do đó, Voucher dạng này không phải là thuộc tính cố hữu bên trong Offer.
  • Thông tin vận chuyển cũng thuộc phạm vi Marketplace. Shopee là người xây dựng mạng lưới vận chuyển bằng cách tự quản lý đội vận chuyển riêng (Shopee Express) hoặc hợp tác với đối tác ngoài (GHTK, v.v.). Shopee cung cấp công cụ tính phí ship hàng tự động dựa trên địa chỉ người mua, kho của người bán, và cân nặng cũng như đặc điểm của sản phẩm. Merchant chỉ có vai trò bật/tắt các đơn vị vận chuyển mà họ muốn sử dụng. Vì thế, “Vận chuyển” nằm ngoài Offer. Nhóm này được gọi là Transportation.
  • “An tâm mua sắm cùng Shopee”: Đây là chương trình và chính sách do Shopee tạo ra để xây dựng lòng tin cho người mua:
    • “Xử lý đơn hàng bởi Shopee”: Đây là một dịch vụ logistics mà Merchant trả phí để Shopee lưu kho và đóng gói hàng hộ, tức dịch vụ fulfillment. Nhãn hiển thị mà một sự đảm bảo của sàn.
    • “Trả hàng miễn phí 15 ngày”: Đây là chính sách chung của sản (đặc biệt là Shopee Mall) mà tất cả các Merchant tham gia đều phải tuân thủ.
    • “Chính hãng 100%”: Đây là chương trình của Shopee Mall mà Merchant phải đáp ứng rất nhiều tiêu chí để được tham gia.

Tóm lại, mục này cho thấy các chính sách hay tiêu chí của sàn mà Merchant tham gia cần đồng ý theo điều khoản. Như vậy, nó nằm ngoài Offer. Nhóm này được gọi là Assurance Policy.

Từ những quan sát cơ bản bên trên ta thấy rằng thông tin Customer thấy về sản phẩm định mua bao gồm:

  • Product, Variant, Offer, Rating,
  • Merchant, Voucher, Transportation, Assurance Policy.

Nhưng đơn vị dữ liệu (cấp độ chi tiết của dữ liệu - granularity) là Offer, biến nó trở thành trung tâm, những thông tin khác bổ sung giúp khách hàng có thông tin đầy đủ trước khi quyết định mua.

Figure 9: Thông tin xoay quanh Offer

Đến đây, chúng ta đã có được cơ bản thông tin để đưa vào thiết kế.

 

 

Bình luận
Gửi bình luận
Bình luận