8 phút

Cách xây dựng ứng dụng web cho quy trình phê duyệt mua sắm

Hướng dẫn từng bước để lên kế hoạch, thiết kế và xây dựng ứng dụng web mua sắm với yêu cầu mua, định tuyến phê duyệt, bản ghi kiểm toán, tích hợp và bảo mật.

Cách xây dựng ứng dụng web cho quy trình phê duyệt mua sắm

Xác định mục tiêu, phạm vi và các bên liên quan

Trước khi viết spec hay chọn công cụ, hãy làm rõ tại sao bạn xây ứng dụng web mua sắm. Nếu bỏ qua bước này, bạn có thể tạo ra một hệ thống yêu cầu mua hàng tuy hoạt động về mặt kỹ thuật nhưng không giảm được ma sát thực sự—phê duyệt chậm, trách nhiệm không rõ ràng, hoặc “mua sắm bóng tối” diễn ra qua email và chat.

Làm rõ những vấn đề bạn đang giải quyết

Bắt đầu bằng cách nêu rõ vấn đề bằng ngôn ngữ dễ hiểu và gắn với kết quả có thể đo được:

  • Thời gian xử lý: yêu cầu nằm im chờ approver, phải đuổi người phê duyệt, hoặc leo thang vào phút chót.
  • Tính minh bạch: không có một nơi duy nhất để xem gì đang chờ, ai chịu trách nhiệm, và chỗ nào bị tắc.
  • Tuân thủ và chính sách: thiếu báo giá, sai loại chi tiêu, phê duyệt theo thứ tự sai.
  • Kiểm soát ngân sách: phê duyệt diễn ra mà không xác nhận ngân sách, hoặc bộ phận tài chính biết quá muộn.

Một câu hỏi hữu ích: Chúng ta sẽ dừng làm gì nếu ứng dụng hoạt động hoàn hảo? Ví dụ: “dừng phê duyệt qua chuỗi email” hoặc “dừng nhập cùng dữ liệu vào ERP nhiều lần”.

Liệt kê các bên liên quan (và họ cần gì)

Một quy trình phê duyệt mua sắm chạm đến nhiều người hơn bạn nghĩ. Xác định các bên sớm và ghi lại những yêu cầu không thể bỏ qua:

  • Người yêu cầu (Requester): gửi nhanh, trạng thái rõ ràng, ít trao đổi lặp lại.
  • Người phê duyệt (quản lý, chủ ngân sách): xem xét dễ dàng, đủ ngữ cảnh (ngân sách, nhà cung cấp, lịch sử), thao tác thân thiện trên di động.
  • Tài chính: phê duyệt ngân sách, mã hạch chính xác, bản ghi kiểm toán, báo cáo.
  • Mua sắm (Procurement): kiểm tra chính sách, onboard nhà cung cấp, đấu thầu cạnh tranh, đồng bộ quy trình tạo PO.
  • CNTT/Bảo mật: SSO, kiểm soát truy cập theo vai trò, lưu trữ dữ liệu, tích hợp.

Mời ít nhất một người từ mỗi nhóm vào một buổi làm việc ngắn để thống nhất cách định tuyến phê duyệt nên hoạt động.

Định nghĩa tiêu chí thành công có thể theo dõi được

Ghi ra “tốt hơn” nghĩa là gì bằng các chỉ số bạn có thể đo sau khi ra mắt:

  • Thời gian phê duyệt trung vị (end‑to‑end và theo bước)
  • % yêu cầu tuân theo chính sách (trường bắt buộc, phê duyệt bắt buộc)
  • Tỷ lệ áp dụng (yêu cầu được tạo trong ứng dụng so với bên ngoài)
  • Tỷ lệ làm lại (yêu cầu bị trả về vì thiếu thông tin)

Chúng sẽ là sao Bắc Đẩu khi bạn tranh luận về tính năng sau này.

Quyết định phạm vi (để không ôm đồm)

Các lựa chọn phạm vi sẽ quyết định mô hình dữ liệu, quy tắc nghiệp vụ và tích hợp. Xác nhận:

  • Những phòng banvùng nào nằm trong pha 1
  • Tiền tệ, thuế và kỳ vọng tỷ giá được hỗ trợ
  • Có cần nhiều pháp nhân và trung tâm chi phí không
  • Chính sách ngưỡng (ví dụ: phê duyệt ngân sách trên X, rà soát procurement trên Y)

Giữ pha 1 chặt chẽ, nhưng ghi lại những gì bạn cố tình chưa làm. Điều đó giúp mở rộng sau này dễ dàng hơn mà không chặn bản phát hành đầu tiên.

Lập bản đồ quy trình mua sắm và phê duyệt hiện tại

Trước khi thiết kế màn hình hay cơ sở dữ liệu, hãy có bức tranh rõ ràng về mọi việc diễn ra từ “Tôi cần mua cái này” tới “đã được phê duyệt và đặt hàng.” Điều này ngăn bạn tự động hóa một quy trình chỉ hoạt động trên giấy—hoặc chỉ tồn tại trong đầu một người.

Bắt đầu với cách tạo yêu cầu hôm nay

Liệt kê mọi điểm nhập mà người dùng dùng: email gửi procurement, mẫu bảng tính, tin nhắn chat, biểu mẫu giấy, hoặc yêu cầu tạo trực tiếp trong ERP.

Với mỗi điểm nhập, ghi những thông tin thường được cung cấp (hàng hóa, nhà cung cấp, giá, cost center, lý do kinh doanh, tệp đính kèm) và những gì thường thiếu. Trường thiếu là lý do lớn khiến yêu cầu bị trả về và tắc.

Vẽ đường phê duyệt (và các nhánh)

Map “happy path” trước: requester → quản lý → chủ ngân sách → procurement → tài chính (nếu cần). Sau đó ghi các biến thể:

  • Các bước khác nhau theo danh mục (CNTT, marketing, cơ sở vật chất)
  • Ngưỡng khác nhau theo số tiền (ví dụ dưới $1k vs trên $10k)
  • Tuyến khác nhau theo cost center, vùng, hoặc pháp nhân

Một sơ đồ đơn giản là đủ. Quan trọng là nắm được điểm nào quyết định rẽ nhánh.

Ghi lại ngoại lệ phá vỡ luồng

Ghi các trường hợp mọi người xử lý thủ công:

  • Mua gấp bỏ qua bước (hoặc cần phê duyệt sau khi đã mua)
  • Mua độc quyền và cách ghi nhận lý do
  • Chia đơn nhằm giữ dưới ngưỡng phê duyệt

Đừng vội phán xét ngoại lệ—chỉ ghi lại để quy tắc workflow có thể xử lý chúng một cách có chủ ý.

Xác định điểm đau và khoảng trống trách nhiệm

Thu thập ví dụ cụ thể về chậm trễ: approver không rõ, thiếu xác nhận ngân sách, nhập dữ liệu trùng lặp, và không có bản ghi kiểm toán đáng tin cậy. Ghi rõ ai sở hữu từng chuyển giao (requester, manager, procurement, finance). Nếu “mọi người” chịu trách nhiệm một bước, thì thực tế là không ai cả—và ứng dụng của bạn nên làm rõ điều đó.

Biến quy trình thành yêu cầu rõ ràng

Sơ đồ workflow hữu ích, nhưng đội vẫn cần thứ có thể xây dựng: một tập yêu cầu rõ ràng mô tả app phải làm gì, dữ liệu cần thu thập, và “xong” nghĩa là gì.

Viết ra “happy path”

Bắt đầu với kịch bản phổ biến nhất và giữ đơn giản:

Yêu cầu tạo → quản lý phê duyệt → procurement rà soát → PO phát hành → hàng nhận → đóng yêu cầu.

Với mỗi bước, nêu ai làm, họ cần thấy gì, và quyết định họ đưa ra. Đây là hành trình cơ bản và giúp ngăn v1 trở thành nơi chứa mọi ngoại lệ.

Chỉ rõ dữ liệu phải thu thập

Phê duyệt mua thường thất bại vì yêu cầu đến mà thiếu thông tin. Định nghĩa các trường bắt buộc từ đầu (và trường tùy chọn), ví dụ:

  • Nhà cung cấp (nhà cung cấp đã biết hay “nhà cung cấp mới”)
  • Hàng/hạ tầng dịch vụ (mô tả, danh mục)
  • Số lượng và giá đơn vị (hoặc tổng ước tính)
  • Tiền tệ, ngày cần hàng, địa điểm giao hàng
  • Lý do kinh doanh
  • Cost center / mã dự án / chủ ngân sách
  • Tệp đính kèm (báo giá, scope of work, dự thảo hợp đồng)

Cũng định nghĩa quy tắc xác thực: tệp đính kèm bắt buộc vượt ngưỡng, trường số, và liệu giá có được chỉnh sau khi gửi không.

Quyết định thứ gì ngoài phạm vi cho v1

Ghi rõ các ngoại lệ để đội có thể giao nhanh. Những thứ thường loại trừ v1: sự kiện sourcing đầy đủ (RFP), chấm điểm nhà cung cấp phức tạp, quản lý vòng đời hợp đồng, và tự động đối chiếu 3 bên.

Biến thành backlog nhỏ

Tạo backlog đơn giản với tiêu chí chấp nhận rõ ràng:

  • Phải có: tạo yêu cầu, đính kèm tài liệu, phê duyệt/từ chối, lịch sử trạng thái cơ bản
  • Nên có: nhắc nhở, ủy quyền, yêu cầu onboard nhà cung cấp
  • Muốn có: dashboard phân tích, bộ đếm SLA, form nâng cao

Điều này giữ kỳ vọng thực tế và cho bạn kế hoạch xây dựng khả thi.

Thiết kế mô hình dữ liệu (Yêu cầu, Nhà cung cấp, Ngân sách)

Quy trình mua thành công hay thất bại phụ thuộc vào tính rõ ràng của dữ liệu. Nếu các đối tượng và mối quan hệ sạch sẽ, phê duyệt, báo cáo và tích hợp sẽ đơn giản hơn nhiều.

Bắt đầu với các đối tượng lõi

Ít nhất, mô hình hoá các thực thể sau:

  • Purchase Request (PR): requester, bộ phận, ngày cần, lý do, tiền tệ, tổng, trạng thái.
  • Line Item: mô tả, số lượng, giá đơn vị, danh mục, nhà cung cấp dự kiến (tùy chọn), thông tin thuế, chi tiết giao hàng.
  • Vendor: tên pháp lý, địa chỉ, điều khoản thanh toán, mã số thuế (nếu áp dụng), liên hệ, trạng thái (active/blocked).
  • Budget: số tiền khả dụng, kỳ, và “bucket” áp dụng (cost center, project, GL code).
  • Purchase Order (PO): liên kết tới các dòng PR đã được duyệt, nhà cung cấp, tổng sau đàm phán, và ID tham chiếu ERP.

Giữ tổng PR được tính từ line item (và thuế/vận chuyển), thay vì chỉnh tay, để tránh sai lệch.

Yêu cầu đa dòng và phê duyệt một phần

Yêu cầu thực tế thường gom các mục cần approver khác nhau hoặc ngân sách khác nhau. Thiết kế cho:

  • Phê duyệt theo dòng (approve/deny/edit ở mức dòng)
  • Quyết định tách (một số dòng được duyệt, số khác trả về)
  • Lịch sử sửa đổi (thay đổi giá nên kích hoạt quy tắc phê duyệt lại sau này)

Cách thực tế là có trạng thái header cho PR cộng trạng thái độc lập cho từng dòng, rồi rollup trạng thái để requester nhìn thấy.

Ngân sách: cost center, project, GL code, trường thuế

Nếu cần độ chính xác kế toán, lưu cost center, project, và GL code ở mức dòng (không chỉ trên PR), vì chi tiêu thường được ghi nhận theo dòng.

Thêm trường thuế chỉ khi bạn có thể định nghĩa quy tắc rõ ràng (ví dụ: thuế suất, loại thuế, cờ tính thuế đã bao gồm hay chưa).

Tệp đính kèm, lưu trữ và lưu giữ

Báo giá và hợp đồng là phần của câu chuyện kiểm toán. Lưu tệp như đối tượng liên kết tới PR và/hoặc dòng với metadata (loại, người tải lên, timestamp).

Xác định quy tắc lưu giữ sớm (ví dụ: giữ 7 năm; xóa theo yêu cầu nhà cung cấp chỉ khi pháp lý cho phép) và nơi lưu file (cơ sở dữ liệu, object storage, hay hệ thống quản lý tài liệu).

Định nghĩa vai trò, quyền và quyền sở hữu

Vai trò và quyền rõ ràng ngăn việc đẩy qua lại phê duyệt và làm cho bản ghi kiểm toán có ý nghĩa. Bắt đầu bằng cách đặt tên những người tham gia, sau đó chuyển đổi thành những gì họ có thể làm trong app.

Vai trò cốt lõi cần hỗ trợ

Phần lớn đội procurement có thể bao phủ 90% trường hợp với năm vai trò:

  • Requester: tạo và chỉnh sửa yêu cầu, đính kèm báo giá, trả lời câu hỏi.
  • Manager approver: phê duyệt/trả về cho đội của họ và xác nhận nhu cầu kinh doanh.
  • Finance approver: kiểm tra ngân sách, mã hạch, tuân thủ chính sách (và có thể yêu cầu thay đổi).
  • Buyer (procurement): quản lý lựa chọn nhà cung cấp, chuyển yêu cầu đã duyệt thành PO, và giao tiếp với nhà cung cấp.
  • Admin: quản trị cài đặt, ngưỡng, danh mục và truy cập người dùng.

Quyền: quyết định “ai làm gì”

Định nghĩa quyền như hành động, không phải chức danh, để bạn có thể phối hợp sau này:

  • Tạo: bắt đầu yêu cầu, thêm mục, tải lên file.
  • Chỉnh sửa: thay đổi trường (thường giới hạn sau khi gửi).
  • Phê duyệt/Từ chối/Trả về: ghi nhận quyết định kèm bình luận.
  • Hủy: ai được phép hủy và cho đến giai đoạn nào.
  • Xuất: xuất CSV/PDF, truy cập API, và quyền xem báo cáo.

Cũng quyết định quy tắc ở mức trường (ví dụ requester chỉnh mô tả/đính kèm nhưng không được chỉnh GL; tài chính chỉnh mã nhưng không chỉnh số lượng/giá).

Quyền sở hữu và trách nhiệm

Mỗi yêu cầu nên có:

  • một owner (thường là requester),
  • một approver hiện tại (hoặc nhóm approver), và
  • một buyer được giao sau khi duyệt.

Điều này tránh yêu cầu bị bỏ mặc và làm rõ ai cần hành động tiếp.

Ủy quyền, “acting as”, và hộp thư chung

Mọi người đi nghỉ. Xây ủy quyền với ngày bắt đầu/kết thúc, và ghi hành động là “Đã phê duyệt bởi Alex (ủy quyền từ Priya)” để giữ trách nhiệm.

Với phê duyệt, ưu tiên phê duyệt theo tên (dễ truy ra). Dùng hộp thư chung chỉ cho các bước hàng đợi đội (ví dụ “Procurement Team”), và vẫn yêu cầu một cá nhân nhận và phê duyệt để một người chịu trách nhiệm được ghi lại.

Tạo trải nghiệm người dùng đơn giản, nhanh

Lặp mà không mất việc
Ghi lại snapshot trước thay đổi lớn để có thể quay lại an toàn trong quá trình thử nghiệm.

Ứng dụng mua sắm thành công hay thất bại dựa vào tốc độ người dùng gửi yêu cầu và khả năng approver nói “đồng ý” hoặc “không” một cách chắc chắn. Hướng tới ít màn hình, ít trường, ít thao tác—nhưng vẫn thu thập đủ thông tin Finance và Procurement cần.

Giúp tạo yêu cầu khó bị làm sai

Dùng form hướng dẫn, thích ứng dựa trên lựa chọn của requester (danh mục, loại nhà cung cấp, hợp đồng vs mua một lần). Điều này giữ form ngắn và giảm trao đổi lại.

Thêm mẫu cho các mua phổ biến (gói phần mềm, laptop, dịch vụ contractor) để tự điền gợi ý GL/cost center, tệp bắt buộc, và chuỗi approver dự kiến. Mẫu cũng chuẩn hóa mô tả, cải thiện báo cáo sau này.

Dùng xác thực nội tuyến và kiểm tra hoàn thành (ví dụ thiếu báo giá, mã ngân sách, hoặc ngày giao) trước khi gửi. Hiện yêu cầu sớm, không chỉ báo lỗi sau khi gửi.

Cho approver giao diện ưu tiên quyết định

Approver nên vào một hàng đợi sạch với những thông tin cốt lõi: số tiền, nhà cung cấp, cost center, requester và ngày hạn. Sau đó cung cấp ngữ cảnh khi cần:

  • Tóm tắt trên một màn hình với tệp đính kèm, lý do và ảnh hưởng tới ngân sách
  • Lịch sử rõ ràng (ai đã phê duyệt, ai bình luận, gì đã thay đổi)
  • Hành động một chạm: Approve, Reject, Request changes

Giữ bình luận có cấu trúc: cho phép lý do nhanh khi từ chối (ví dụ, “thiếu báo giá”) kèm text tự do tùy chọn.

Thêm tìm kiếm và bộ lọc phù hợp công việc

Người dùng tìm được yêu cầu theo trạng thái, cost center, nhà cung cấp, requester, khoảng ngày và số tiền. Lưu bộ lọc thường dùng như “Chờ tôi” hoặc “Đang chờ > $5,000”.

Lên kế hoạch cho phê duyệt thân thiện với di động

Nếu phê duyệt xảy ra ở hành lang hoặc giữa các cuộc họp, thiết kế cho màn hình nhỏ: vùng bấm lớn, tóm tắt tải nhanh, xem trước tệp. Tránh workflows yêu cầu chỉnh sửa kiểu bảng tính trên mobile—chuyển các tác vụ đó về desktop.

Xây định tuyến phê duyệt và quy tắc nghiệp vụ

Định tuyến phê duyệt là hệ thống điều phối giao thông của ứng dụng. Làm tốt thì quyết định nhất quán và nhanh; làm kém thì tạo nghẽn và thủ thuật.

Bắt đầu với các loại quy tắc tổ chức bạn thực sự dùng

Hầu hết quy tắc phê duyệt có thể biểu diễn bằng vài chiều: những đầu vào phổ biến gồm:

  • Ngưỡng chi tiêu (ví dụ dưới $1,000 vs trên $25,000)
  • Danh mục (CNTT, marketing, cơ sở vật chất)
  • Cost center / phòng ban
  • Mã dự án hoặc khách hàng
  • Vùng/pháp nhân
  • Nguồn quỹ hoặc loại ngân sách

Giữ phiên bản đầu đơn giản: dùng tập quy tắc nhỏ nhất che được phần lớn yêu cầu, rồi thêm các trường hợp cạnh khi có dữ liệu thực.

Hỗ trợ phê duyệt tuần tự và song song (và hiển thị rõ)

Một số phê duyệt phải theo thứ tự (manager → chủ ngân sách → procurement), trong khi số khác có thể song song (bảo mật + pháp lý). Hệ thống của bạn nên hỗ trợ cả hai mẫu và hiển thị cho requester biết ai đang chặn yêu cầu.

Phân biệt giữa:

  • Approver bắt buộc (phải phê duyệt để tiến)
  • Approver tùy chọn (FYI, tư vấn, hoặc chỉ cần trong điều kiện nhất định)

Thiết kế cho ngoại lệ: leo thang, từ chối, hết thời gian

Quy trình thực tế cần cơ chế an toàn:

  • Leo thang khi approver nghỉ hoặc trễ SLA
  • Từ chối với lý do có cấu trúc (ngân sách, rủi ro nhà cung cấp, thông số không đầy đủ)
  • Vòng làm lại trả yêu cầu về để sửa mà không mất ngữ cảnh
  • Quy tắc timeout (ví dụ tự động leo thang sau 48 giờ)

Định nghĩa gì sẽ đặt lại phê duyệt (và khi nào giữ lại)

Không gì làm mất tinh thần bằng phải phê duyệt lại bất ngờ—hoặc phê duyệt vẫn còn hiệu lực nhưng lẽ ra phải chạy lại.

Các kích hoạt đặt lại phê duyệt phổ biến gồm thay đổi giá, số lượng, nhà cung cấp, danh mục, cost center, hoặc địa điểm giao hàng. Quyết định thay đổi nào cần reset toàn bộ, thay đổi nào chỉ cần một số approver xác nhận lại, và thay đổi nào chỉ cần ghi nhận mà không khởi động lại chuỗi phê duyệt.

Thêm thông báo, theo dõi trạng thái và bản ghi kiểm toán

Hiện thực hóa bản ghi kiểm toán
Xây dựng theo dõi trạng thái và lịch sử quyết định để các phê duyệt dễ giải thích về sau.

Ứng dụng mua sắm tạo cảm giác nhanh khi mọi người luôn biết bước tiếp theo. Thông báo và theo dõi trạng thái giảm việc đuổi hỏi, trong khi bản ghi kiểm toán bảo vệ bạn trong tranh chấp, kiểm toán tài chính và kiểm tra tuân thủ.

Định nghĩa trạng thái rõ ràng (và nghĩa của chúng)

Dùng một tập trạng thái nhỏ, dễ hiểu và đồng nhất trên PR, phê duyệt, và đơn hàng. Một bộ trạng thái điển hình:

  • Draft: requester đang chỉnh; chưa hiện với approver.
  • Submitted: sẵn sàng xem xét; bắt đầu định tuyến.
  • In Review: đang chờ một hoặc nhiều approver.
  • Approved: phê duyệt hoàn tất; sẵn sàng đặt hàng / tạo PO.
  • Ordered: PO đã phát hành hoặc lệnh đã đặt.

Cụ thể về chuyển trạng thái. Ví dụ, một yêu cầu không nên nhảy từ Draft sang Ordered mà không qua SubmittedApproved.

Chọn kênh thông báo mà người ta thực sự đọc

Bắt đầu với email + in‑app và chỉ thêm chat nếu đó là công cụ họ dùng hàng ngày.

  • Email cho thông báo “cần hành động” chính thức và tóm tắt.
  • In‑app cho cập nhật thời gian thực, badge và hàng đợi “Phê duyệt của tôi”.
  • Slack/Teams (tùy chọn) cho nhắc nhẹ và liên kết nhanh về yêu cầu.

Tránh spam bằng cách gộp nhắc (ví dụ bản tóm tắt hàng ngày) và chỉ leo thang khi phê duyệt quá hạn.

Xây bản ghi kiểm toán đáng tin cậy

Ghi lại lịch sử chống giả mạo của các hành động chính:

  • Ai đã gửi, phê duyệt, từ chối, chỉnh sửa, hoặc bình luận
  • Dấu thời gian và (tùy chọn) nguồn (web/mobile)
  • Những gì thay đổi (nhà cung cấp, số tiền, mã GL, tệp đính kèm)

Nhật ký này nên dễ đọc cho kiểm toán nhưng cũng hữu ích cho nhân viên. Một tab “History” trên mỗi yêu cầu thường ngăn được chuỗi email dài.

Bắt buộc lý do quyết định khi cần

Bắt buộc bình luận cho một số hành động, như Reject hoặc Request changes, và cho các ngoại lệ (ví dụ phê duyệt vượt ngân sách). Lưu lý do cùng hành động trong bản ghi kiểm toán để không bị mất trong tin nhắn riêng tư.

Lên kế hoạch tích hợp (ERP, Kế toán, SSO, dữ liệu nhà cung cấp)

Tích hợp là thứ khiến ứng dụng mua sắm trở nên thực sự hữu dụng cho doanh nghiệp. Nếu mọi người vẫn phải gõ lại chi tiết nhà cung cấp, ngân sách và số PO, tỷ lệ áp dụng sẽ giảm nhanh.

Bắt đầu bằng việc quyết định công cụ nào là hệ thống lưu trữ sự thật, và coi app của bạn như lớp workflow đọc/ghi với chúng.

Xác định hệ thống lưu trữ sự thật

Rõ ràng nơi “sự thật” nằm:

  • ERP/kế toán: chart of accounts, cost centers, ngân sách, PO, khớp hóa hóa đơn.
  • Vendor master: ID nhà cung cấp, điều khoản thanh toán, thông tin thuế, thông tin ngân hàng (thường bị khóa).
  • Danh bạ HR: định danh nhân viên, bộ phận, quản lý, vị trí (dùng cho định tuyến phê duyệt).

Tài liệu hóa app cần gì từ mỗi nguồn (chỉ đọc hay có ghi trở lại), và ai chịu trách nhiệm chất lượng dữ liệu.

Single Sign‑On và provisioning người dùng

Lên kế hoạch SSO sớm để quyền và bản ghi kiểm toán ánh xạ tới danh tính thực.

  • Ưu tiên OIDC (phổ biến với IdP hiện đại) hoặc SAML (hỗ trợ rộng trong doanh nghiệp).
  • Nếu có, dùng SCIM để provision người dùng tự động (joiners/movers/leavers được xử lý, và quyền bị thu hồi nhanh).

Chọn phương pháp tích hợp

Khớp phương pháp với khả năng hệ thống đối tác:

  • API cho tra cứu thời gian thực (nhà cung cấp, mã GL) và tạo PO.
  • Webhooks cho cập nhật theo sự kiện (PO được duyệt, nhà cung cấp cập nhật).
  • CSV import/export như giải pháp thực dụng khi API hạn chế hoặc tốn kém.

Đồng bộ thời gian, lỗi và đối chiếu

Quyết định thứ gì cần thời gian thực (SSO login, xác thực nhà cung cấp) vs lên lịch (làm mới ngân sách vào ban đêm).

Thiết kế cho lỗi: retry có backoff, cảnh báo admin rõ ràng, và báo cáo đối chiếu để tài chính xác nhận tổng giữa các hệ thống. Một timestamp “last synced at” trên bản ghi chính tránh nhầm lẫn và ticket hỗ trợ.

Bảo mật, tuân thủ và quản trị dữ liệu

Bảo mật không phải tính năng “sau này” cho ứng dụng mua sắm. Bạn xử lý chi tiết nhà cung cấp, điều khoản hợp đồng, ngân sách và phê duyệt có thể ảnh hưởng đến dòng tiền và rủi ro. Một số quyết định nền tảng sớm sẽ tránh viết lại đau đớn khi tài chính hay kiểm toán tham gia.

Bảo vệ dữ liệu nhạy cảm

Bắt đầu bằng phân loại dữ liệu nhạy cảm và kiểm soát nó rõ ràng. Đặt quyền cho các trường như thông tin ngân hàng nhà cung cấp, mức giá đã đàm phán, tệp hợp đồng và dòng ngân sách nội bộ.

Trong nhiều đội, requester chỉ thấy những gì họ cần để gửi và theo dõi yêu cầu, trong khi procurement và finance thấy được giá và dữ liệu master. Dùng kiểm soát truy cập theo vai trò với chính sách deny‑by‑default cho trường rủi ro cao, và cân nhắc che bớt (ví dụ hiển thị 4 chữ số cuối tài khoản) thay vì lộ toàn bộ.

Mã hóa và quản lý bí mật an toàn

Mã hóa dữ liệu khi truyền (TLS mọi nơi) và khi lưu (cơ sở dữ liệu và lưu trữ file). Nếu lưu tệp đính kèm (hợp đồng, báo giá), đảm bảo object storage được mã hóa và quyền truy cập có thời hạn.

Xử lý bí mật như dữ liệu production: không hardcode API key; lưu trong secrets manager, xoay vòng, và giới hạn ai có thể đọc. Nếu tích hợp ERP/kế toán, khoá token ở phạm vi nhỏ nhất cần thiết.

Bản ghi kiểm toán đủ vững trước thắc mắc

Phê duyệt chỉ đáng tin khi có bằng chứng. Ghi lại cả hành động admin và thay đổi quyền, không chỉ sự kiện nghiệp vụ như “đã phê duyệt” hay “bị từ chối.” Ghi ai thay đổi quy tắc phê duyệt, ai gán vai trò, và khi trường ngân hàng nhà cung cấp bị chỉnh sửa.

Làm nhật ký append‑only và có thể tìm theo yêu cầu, nhà cung cấp và người dùng, với timestamp rõ ràng.

Tuân thủ, lưu giữ và quản trị

Lên kế hoạch tuân thủ sớm (hướng tới SOC 2/ISO, quy tắc lưu giữ dữ liệu, và nguyên tắc ít quyền nhất).

Xác định thời hạn lưu trữ yêu cầu, phê duyệt và tệp đính kèm, và cách xử lý xóa (thường “soft delete” với chính sách giữ). Ghi rõ ai là chủ sở hữu dữ liệu: ai phê duyệt truy cập, ai xử lý sự cố, và ai rà soát quyền định kỳ.

Chọn xây hay mua và một ngăn xếp kỹ thuật thực tế

Làm cho trông như bản production
Đưa bản thử nghiệm lên domain tùy chỉnh để trông như một công cụ nội bộ thực thụ.

Quyết định build vs buy không phải “tốt nhất”—mà là phù hợp. Procurement chạm tới phê duyệt, ngân sách, bản ghi kiểm toán và tích hợp, nên lựa chọn phụ thuộc vào quy trình phức tạp thế nào và cần kết quả nhanh ra sao.

So sánh thực tế: mua vs xây

Mua (hoặc cấu hình hệ thống có sẵn) khi:

  • Bạn cần quy trình phê duyệt hoạt động trong vài tuần, không phải vài tháng.
  • Quy trình của bạn khá tiêu chuẩn (request → phê duyệt ngân sách → phê duyệt quản lý → PO).
  • Tích hợp bạn cần (ERP, SSO) có sẵn off‑the‑shelf.
  • Bạn muốn bảo trì và cập nhật bảo mật có thể do nhà cung cấp đảm nhiệm.

Xây khi:

  • Định tuyến phức tạp (ngoại lệ, ngân sách đa pháp nhân, quy tắc có điều kiện) và công cụ không mô hình hoá gọn.
  • Bạn cần UX tùy chỉnh cao để tăng áp dụng.
  • Bạn có quy tắc quản trị dữ liệu nghiêm ngặt (nơi dữ liệu lưu, trường audit tùy chỉnh).
  • Bạn dự kiến thay đổi liên tục và muốn kiểm soát roadmap.

Một quy tắc hữu ích: nếu 80–90% nhu cầu khớp với một sản phẩm và tích hợp được chứng minh, hãy mua. Nếu tích hợp khó hoặc quy tắc là cốt lõi hoạt động, xây có thể rẻ về dài hạn.

Ngăn xếp kỹ thuật phù hợp với đa số đội

Giữ ngăn xếp đơn giản và dễ bảo trì:

  • Frontend: React (hoặc Vue) với thư viện component (Material UI, Chakra) cho form nhanh và nhất quán.
  • Backend: Node.js (NestJS/Express) hoặc Python (Django/FastAPI). Chọn công nghệ đội bạn đã quen.
  • Database: PostgreSQL (tốt cho ngân sách, phê duyệt và báo cáo).
  • Auth: SSO qua SAML/OIDC (ví dụ Okta/Azure AD) với kiểm soát truy cập theo vai trò.

Nếu muốn tăng tốc đường “xây” mà không cam kết nhiều tháng phát triển tùy chỉnh, nền tảng tạo prototype như Koder.ai có thể giúp bạn tạo mẫu và lặp app tự động qua giao diện chat. Teams thường dùng để nhanh xác thực định tuyến, vai trò và màn hình cốt lõi, rồi xuất mã nguồn khi sẵn sàng chạy trong pipeline của riêng họ. (Cấu hình chuẩn của Koder.ai — React frontend, Go + PostgreSQL backend — cũng phù hợp với yêu cầu độ tin cậy và kiểm toán mà hệ thống procurement thường cần.)

Độ tin cậy: đừng bỏ qua phần “phần nhìn không thấy”

Tự động hóa mua sắm thất bại khi hành động bị chạy đôi lần hoặc trạng thái mơ hồ. Thiết kế cho:

  • Background jobs cho email, đồng bộ ERP và tạo PDF.
  • Idempotency để click “Approve” hai lần không sinh hai hành động downstream.
  • Kiểm soát đồng thời để hai approver không ghi đè quyết định của nhau.

Môi trường, CI/CD và giám sát

Lên kế hoạch từ ngày đầu cho dev/staging/prod, test tự động trong CI, và deploy đơn giản (container phổ biến).

Thêm giám sát cho:

  • Lỗi API và yêu cầu chậm
  • Lỗi queue/job
  • Các tín hiệu nghiệp vụ chính (phê duyệt kẹt, push ERP thất bại)

Nền tảng này giữ luồng đơn hàng hoạt động khi lượng dùng tăng.

Thử nghiệm, triển khai và cải tiến theo thời gian

Phát hành phiên bản đầu chỉ là một nửa công việc. Nửa còn lại là đảm bảo các đội thực sự chạy quy trình phê duyệt nhanh, chính xác và tự tin—rồi tối ưu dựa trên thực tế.

Thử với kịch bản thực (không chỉ happy path)

Hệ thống thường “ổn” trong demo nhưng vỡ trong thực tế. Trước khi triển khai, kiểm thử workflow bằng kịch bản lấy từ yêu cầu và lịch sử PO gần đây.

Bao gồm các trường hợp cạnh như:

  • Requester thay đổi số tiền sau khi có phê duyệt đầu tiên
  • Phê duyệt ngân sách khi cost center thiếu hoặc không hoạt động
  • Approver nghỉ và quy tắc ủy quyền
  • Chia đơn qua dự án hoặc cost center
  • Kiểm tra quyền truy cập theo vai trò (ai xem được thông tin nhà cung cấp, tệp đính kèm, giá)
  • Yêu cầu bị từ chối, sửa rồi nộp lại (liên tục lịch sử audit)

Đừng chỉ test định tuyến—test quyền, thông báo và bản ghi kiểm toán end‑to‑end.

Triển khai thử với một đội, rồi mở rộng

Bắt đầu với nhóm nhỏ đại diện cho việc sử dụng điển hình (ví dụ một phòng ban và một chuỗi approver tài chính). Chạy pilot vài tuần, giữ rollout nhẹ nhàng:

  • Buổi đào tạo ngắn tập trung các bước trong app
  • Giờ hành chính nơi người dùng mang yêu cầu thực đến
  • Kênh phản hồi đơn giản (“Gì khó hiểu? Ghi ở đây.”)

Điều này tránh nhầm lẫn toàn tổ chức trong khi bạn tinh chỉnh định tuyến và quy tắc tự động.

Tạo sổ tay admin

Xem quản trị như tính năng sản phẩm. Viết sổ tay ngắn nội bộ bao gồm:

  • Cách cập nhật quy tắc nghiệp vụ và định tuyến phê duyệt
  • Cách thêm/chỉnh approver, delegate và owner
  • Cách quản lý cost center, ngân sách và ngưỡng chính sách
  • Cần làm gì khi tích hợp lỗi (ERP, đồng bộ dữ liệu nhà cung cấp, v.v.)

Điều này giữ hoạt động hàng ngày không biến thành công việc kỹ thuật tùy tiện.

Theo dõi chỉ số và lặp

Định vài chỉ số và xem xét đều đặn:

  • Thời gian chu kỳ (tạo yêu cầu → phê duyệt cuối)
  • Tỷ lệ làm lại (bị trả về, chỉnh sửa, nộp lại)
  • Hiển thị chi tiêu (bao nhiêu đang chờ vs đã duyệt)

Dùng những gì học được để đơn giản hoá form, điều chỉnh quy tắc và cải thiện theo dõi trạng thái.

Bước tiếp theo

Nếu bạn đang đánh giá tùy chọn để triển khai ứng dụng mua sắm nhanh, xem /pricing hoặc liên hệ qua /contact.

Nếu bạn muốn xác thực workflow và màn hình trước khi đầu tư xây dựng tùy chỉnh, bạn cũng có thể tạo nguyên mẫu hệ thống yêu cầu mua trong Koder.ai, lặp trong “chế độ lập kế hoạch”, và xuất mã nguồn khi các bên liên quan đồng ý về quy trình.

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

Trước khi xây dựng ứng dụng web phê duyệt mua sắm, tôi nên xác định gì?

Bắt đầu bằng cách ghi lại những điểm tắc nghẽn bạn muốn loại bỏ (ví dụ: phê duyệt kẹt trong email, thiếu báo giá, không rõ người chịu trách nhiệm) và gắn mỗi vấn đề với một chỉ số đo được:

  • Thời gian trung vị phê duyệt (tổng thể và theo từng bước)
  • Tỷ lệ làm lại (bị trả về vì thiếu thông tin)
  • Tỷ lệ tuân thủ chính sách (trường/phê duyệt bắt buộc)
  • Tỷ lệ áp dụng (số yêu cầu tạo trong app so với bên ngoài)

Những chỉ số này sẽ là “ngôi sao phương Bắc” khi tranh luận về tính năng.

Làm sao để chọn phạm vi thực tế cho v1?

Giữ giai đoạn 1 hẹp và rõ ràng. Quyết định:

  • Những phòng ban/khu vực nào được bao gồm
  • Tiền tệ và kỳ vọng về thuế được hỗ trợ
  • Có cần nhiều pháp nhân và trung tâm chi phí không
  • Ngưỡng phê duyệt (ví dụ: quản lý trên X, procurement review trên Y)

Cũng hãy ghi rõ những gì nằm ngoài phạm vi v1 (ví dụ RFP hoặc quản lý vòng đời hợp đồng) để bạn có thể phát hành mà không chặn mở rộng sau này.

Làm sao để lập bản đồ quy trình mua sắm hiện tại một cách hiệu quả?

Vẽ sơ đồ những gì thực sự diễn ra hôm nay, không phải chỉ chính sách. Làm ba việc:

  1. Liệt kê mọi điểm nhập yêu cầu (email, bảng tính, chat, ERP).
  2. Vẽ chuỗi phê duyệt “đường tắt” (happy path), sau đó ghi các nhánh theo số tiền/danh mục/pháp nhân.
  3. Ghi lại ngoại lệ (mua gấp, mua độc quyền, chia đơn) và ai hiện đang chịu trách nhiệm cho từng chuyển giao.

Điều này cung cấp đầu vào để bạn xây quy tắc định tuyến khớp với hành vi thực tế.

Làm sao biến sơ đồ quy trình thành yêu cầu có thể xây dựng?

Biến sơ đồ thành một bộ yêu cầu có thể xây dựng:

  • Xác định hành trình "happy path" từng bước (ai hành động, họ thấy gì, quyết định ra sao).
  • Chỉ rõ trường bắt buộc và tùy chọn (và quy tắc xác thực).
  • Tạo backlog với tiêu chí chấp nhận (must-have/should-have/nice-to-have).

Điều này giúp ngăn v1 trở thành nơi chứa mọi trường hợp ngoại lệ.

Những thực thể cốt lõi nào nên có trong mô hình dữ liệu?

Tối thiểu, mô hình hoá:

  • Yêu cầu mua (PR) ở đầu (requester, trạng thái, tiền tệ, tổng)
  • Line item (số lượng, giá đơn vị, danh mục, chi tiết giao hàng)
  • Nhà cung cấp (định danh, điều khoản, trạng thái)
  • "Bucket" ngân sách (cost center/project/GL, kỳ, số tiền khả dụng)
  • Đơn đặt hàng (PO) liên kết trở lại các dòng PR đã được duyệt

Giữ tổng số dẫn xuất từ line item (cộng thuế/phí vận chuyển) để tránh sai lệch và dễ tích hợp/báo cáo hơn.

Nên xử lý yêu cầu đa dòng và phê duyệt một phần thế nào?

Thiết kế để phản ánh thực tế nhiều mặt:

  • Cho phép trạng thái ở mức dòng (approved/denied/returned) cùng với trạng thái tổng trên header.
  • Ghi lịch sử sửa đổi cho thay đổi giá/nhà cung cấp/danh mục.
  • Quyết định thay đổi nào kích hoạt phải phê duyệt lại (thường là giá, số lượng, nhà cung cấp, cost center, địa điểm giao hàng).

Điều này tránh buộc người dùng phải làm giải pháp tạm khi chỉ một phần yêu cầu cần thay đổi.

Làm sao thiết kế vai trò và quyền mà không gây hỗn loạn?

Bắt đầu với một tập vai trò nhỏ và mô tả quyền theo hành động:

  • Vai trò: requester, manager approver, finance approver, buyer/procurement, admin.
  • Hành động: tạo, chỉnh sửa, phê duyệt/từ chối/trả về, huỷ, xuất.

Thêm quy tắc ở mức trường (ví dụ requester có thể chỉnh mô tả/đính kèm; finance chỉnh GL/cost center) và đảm bảo mỗi yêu cầu luôn có owner và approver hiện tại để tránh mục “mồ côi”.

Làm sao hỗ trợ ủy quyền và phê duyệt từ hộp thư chia sẻ?

Xây tính năng ủy quyền có trách nhiệm:

  • Hỗ trợ khoảng thời gian bắt đầu/kết thúc cho người được ủy quyền.
  • Ghi hành động như “Đã phê duyệt bởi Alex (được ủy quyền từ Priya)” trong bản ghi.
  • Ưu tiên approver cụ thể để dễ kiểm tra; dùng hộp thư chung chỉ cho các bước hàng đợi đội và yêu cầu một cá nhân nhận trước khi hành động.

Điều này tránh phê duyệt trở nên khó truy nguyên.

Làm sao làm giao diện nhanh cho người yêu cầu và người phê duyệt?

Hướng đến UX ưu tiên quyết định:

  • Mẫu hướng dẫn thay đổi theo danh mục/loại nhà cung cấp, hiển thị yêu cầu ngay từ đầu.
  • Mẫu cho các khoản mua phổ biến (đăng ký phần mềm, laptop, dịch vụ freelancer) để tự điền GL/cost center, tệp đính kèm bắt buộc, và chuỗi approver dự kiến.
  • Danh sách phê duyệt cho approver hiển thị số tiền, nhà cung cấp, cost center, requester, hạn, cùng các hành động một chạm.

Thêm tìm kiếm/lọc mạnh (trạng thái, cost center, nhà cung cấp, requester, số tiền) và thiết kế thuận tiện cho mobile (tóm tắt nhanh, vùng bấm lớn, xem trước tệp).

Những bản ghi kiểm toán và tích hợp nào là cần thiết?

Đối xử với khả năng kiểm toán như tính năng cốt lõi:

  • Dùng các trạng thái rõ ràng (Draft → Submitted → In Review → Approved → Ordered) với chuyển trạng thái nghiêm ngặt.
  • Ghi ai làm gì, khi nào, và thay đổi gì (số tiền, nhà cung cấp, mã kế toán, tệp đính kèm).
  • Bắt buộc bình luận khi từ chối/đòi sửa và các ngoại lệ then chốt.

Về tích hợp, xác định hệ thống lưu trữ sự thật (ERP/accounting, vendor master, HR directory), rồi chọn API/webhook/CSV dựa trên khả năng. Thêm cơ chế retry, cảnh báo admin, báo cáo đối chiếu và timestamp “last synced at” để giảm nhầm lẫn.

Related posts