Nhảy tới nội dung
Phiên bản: 2.3.0

Tạo lô chứng từ

Ngày cập nhật: 07 tháng 07, 2026
Người cập nhật: VNPT eContract's team


Cho phép tạo lô chứng từ theo mẫu với dữ liệu đục lỗ. Quá trình tạo lô chứng từ gồm các bước sau:

  • Bước 1: Chuẩn bị file mẫu gồm các tham số cần đục lỗ
  • Bước 2: Tải file mẫu và cấu hình
  • Bước 3: Chuẩn bị dữ liệu để tạo lô chứng từ theo mẫu
  • Bước 4: Gọi API để tạo lô chứng từ theo mẫu
  • Bước 5: Gửi quy trình ký

Sử dụng hướng dẫn này khi hệ thống khách hàng cần tạo nhiều chứng từ có cùng cấu trúc mẫu, nhưng mỗi chứng từ có dữ liệu khác nhau như mã chứng từ, tiêu đề, người nhận, thứ tự ký và các giá trị đục lỗ trên mẫu.

Chuẩn bị trước khi tích hợp​

Chuẩn bị các thông tin sau trước khi dựng request tạo lô chứng từ:

Thông tinMô tả
Tài khoản và tokenTài khoản API dùng để gọi hàm đăng nhập và lấy Bearer token cho các request tiếp theo.
Mẫu chứng từMẫu .docx đã được upload và cấu hình trên VNPT eContract. Cần lưu documentTemplateId.
Biến trong mẫuTên biến trong mẫu, ví dụ {{ben_a}}, {{ben_b}}, hoặc {{#items}}. Các tên này phải khớp với giá trị truyền trong parameters.
Dữ liệu danh mụcdepartmentId và documentTypeId, lấy từ API danh sách bộ phận và danh sách loại chứng từ.
Người nhận xử lýMã người dùng truyền trong {{P.Code}}. Cần kiểm tra người dùng tồn tại và đã cấu hình phương thức ký/phê duyệt phù hợp.
Nguồn dữ liệu tạo lôHệ thống khách hàng chuẩn bị một dòng dữ liệu cho mỗi chứng từ. Mỗi dòng phải có số lượng giá trị bằng đúng số lượng phần tử trong parameters.
Chiến lược gửi quy trìnhXác định tạo lô để kiểm tra trước, hay tạo xong sẽ gọi API gửi quy trình ngay.

Thứ tự API dành cho dev​

BướcAPI / thao tácDữ liệu cần chuẩn bịKết quả cần lưu / bước tiếp theo
1Đăng nhậpUsername/password của tài khoản API.Lưu access token và gửi dưới dạng Bearer token.
2Upload/cấu hình mẫu chứng từMẫu .docx, vị trí ký và cấu hình biến.Lưu documentTemplateId.
3Lấy chi tiết mẫu chứng từdocumentTemplateId.Kiểm tra fillableFields để xác nhận tên biến.
4Lấy bộ phận và loại chứng từTham số tìm kiếm/lọc dữ liệu danh mục nếu cần.Lưu departmentId và documentTypeId.
5Dựng request tạo lôname, các ID, parameters, và rows.Kiểm tra độ dài từng dòng và các giá trị bắt buộc trước khi gọi API.
6Import lô chứng từ nâng caoJSON request body.Lưu data.id làm ID lô và lưu ID chứng từ đã tạo nếu cần.
7Kiểm tra lô đã tạoID lô hoặc màn hình web /App/BatchImport.Kiểm tra chứng từ, dữ liệu và khung ký trước khi gửi.
8Gửi quy trình lô chứng từ đã importID lô.Chứng từ được gửi đến người nhận. Nếu nhận code 202, cần chờ và gọi lại.
9Theo dõi trạng tháiDanh sách lô, danh sách chứng từ hoặc webhook tùy thiết kế tích hợp.Đồng bộ trạng thái và lỗi về hệ thống khách hàng nếu cần.

Chuẩn bị file mẫu gồm các tham số cần đục lỗ​

Chuẩn bị file mẫu (định dạng .docx), gồm các tham số đục lỗ, quy tắc khai báo tên biến có dạng {{ten_bien}}. Ví dụ mẫu hợp đồng thuê nhà với các tham số:

img1

Tải file mẫu và cấu hình​

Đăng nhập vào hệ thống VNPT eContract Web và truy cập vào màn hình quản lý chứng từ /App/DocumentTemplate sau đó chọn “Tạo mới” để upload mẫu chứng từ

img2

Sau khi thêm mới thành công, tiến hành chọn “Chỉnh sửa” để cấu hình vị trí ký và tham số

img3

Chọn thêm vị trí ký để tiến hành thêm khung chữ ký cho người ký.

img4

Thêm và đặt khung chữ ký vào đúng vị trí cần ký, có thể thêm nhiều khung chữ ký. Ví dụ sau thêm 2 khung chữ ký đặt ở cuối trang, với khung 1 là {{ben_a}} ký, khung 2 là {{ben_b}} ký.

img5

Chuẩn bị dữ liệu để tạo chứng từ theo mẫu​

Chuẩn bị dữ liệu request để gọi api tạo lô chứng từ theo mẫu, các thông tin cần có để tạo lô chứng từ gồm:

  • Tên lô chứng từ name: tên gọi dùng để phân biệt các lô chứng từ đã tạo.
  • Phòng ban departmentId: dùng để xác định chứng từ thuộc về phòng ban nào, phục vụ việc thống kê báo cáo.
  • Loại chứng từ documentTypeId: dùng để xác định loại chứng từ sẽ tạo, phục vụ việc thống kê báo cáo.
  • Mẫu chứng từ documentTemplateId: dùng để xác định thông tin mẫu chứng từ dùng để tạo lô.
  • Tham số parameters: dùng để xác định danh sách tên các tham số cần thiết phục phụ cho việc tạo chứng từ đục lỗ.
  • Dữ liệu từ hàng rows: dữ liệu từng hàng ứng với tham số bên trên đã khai báo, số lượng rows chính là số chứng từ tạo được.

Mỗi phần tử trong parameters được ánh xạ với giá trị cùng vị trí trong từng dòng của rows. Ví dụ, nếu parameters[1] là {{D.No}}, thì rows[n][1] là mã chứng từ của dòng n. Nếu có dòng có số lượng giá trị khác số lượng phần tử trong parameters, API sẽ không thể ánh xạ dữ liệu chính xác.

Sau đây là dữ liệu mẫu request tạo lô gồm 2 chứng từ với 2 người ký

{
"name": "Lô chứng từ trình GĐ ký ngày 23/12/2022",
"departmentId": 33,
"documentTypeId": 47,
"documentTemplateId": 1140,
"parameters": [
"{{D.FileName}}",
"{{D.No}}",
"{{D.Subject}}",
"{{D.ExpiryDate}}",
"{{D.Description}}",
"{{D.IsOrder}}",
"{{P.Code}}",
"{{P.AccessPermission}}",
"{{P.Code}}",
"{{P.AccessPermission}}",
"{{ben_a}}",
"{{ben_b}}"
],
"rows": [
[
"DOCUMENT_2",
"CNCL_2",
"Đơn đặt hàng 2",
"",
"Mô tả abc xyz",
"Y",
"baoth",
"DR",
"baoth",
"D",
"Nguyễn Văn A1",
"Nguyễn Văn B1"
],
[
"DOCUMENT_3",
"CNCL_3",
"Đơn đặt hàng 3",
"",
"Mô tả abc xyz",
"Y",
"baoth",
"DR",
"baoth",
"D",
"Nguyễn Văn A2",
"Nguyễn Văn B2"
]
]
}

Tham số parameters nên bắt đầu bằng nhóm thông tin chứng từ bên dưới. Cần truyền đúng tên và giữ thứ tự khớp với dữ liệu trong rows:

  • {{D.FileName}} : Tên tệp tin, chứng từ được tạo sẽ có tên theo file name đã khai báo.
  • {{D.No}} : Mã chứng từ, không được phép trùng, dùng cho việc tra cứu thông tin chứng từ.
  • {{D.Subject}} : Tiêu đề chứng từ, hiện thị ở màn hình danh sách chứng từ
  • {{D.ExpiryDate}} : Ngày hết hạn (định dạng dd/MM/yyyy), chứng từ sẽ tự động hủy bỏ nếu hết hạn xử lý
  • {{D.Description}} : Thông tin mô tả thêm, hiển thị khi xem chứng từ
  • {{D.IsOrder}} : Xử lý tuần tự (Y/N), dùng để xác định quy trình ký có theo thứ tự hay không. (bắt buộc)

Cặp tham số tiếp theo là thông tin về quy trình ký {{P.Code}} và {{P.AccessPermission}}. Thêm bao nhiêu cặp là sẽ tạo ra lô chứng từ với bấy nhiêu người xử lý.

  • {{P.Code}} : Mã người nhận, mỗi người dùng trong công ty có mã duy nhất.
  • {{P.AccessPermission}} : Quyền truy cập. Các giá trị thường dùng gồm V là chỉ xem, D là ký số, E là ký điện tử, EKYC là ký eKYC, DR là ký nháy, A là phê duyệt, F là điền dữ liệu, C là điều phối.

Cuối cùng là các tham số cần đục lỗ trên chứng từ, tên các tham số phải đúng với quy tắt đặt tên biến ban đầu và trùng tên với tên các tham số đã điền ở file mẫu bên trên. Ví dụ trên mẫu chứng từ có tham số với tên {{ben_a}} thì tên tham số truyền lên phải đúng là {{ben_a}}.

Quy tắc ánh xạ tham số​

Quy tắcMô tả
Thông tin chứng từ hệ thốngTham số bắt đầu bằng {{D. dùng để khai báo metadata chứng từ như tên file, mã chứng từ, tiêu đề, ngày hết hạn, mô tả và thứ tự xử lý.
Thông tin quy trìnhCác cặp {{P.Code}} và {{P.AccessPermission}} lặp lại dùng để khai báo người nhận và quyền xử lý. Thêm một cặp mới để thêm một người xử lý.
Biến trong mẫuCác tham số như {{ben_a}}, {{ben_b}} phải khớp với biến đã cấu hình trong mẫu chứng từ.
Biến dạng mảngDùng {{#items}} khi mẫu cần dữ liệu lặp. Giá trị trong row nên truyền dưới dạng chuỗi JSON khớp với cấu trúc mẫu.
Số dòngMỗi dòng trong rows tạo ra một chứng từ trong lô.
Số cộtMỗi dòng phải có số lượng giá trị bằng đúng số lượng phần tử trong parameters.
Định dạng ngàyCác giá trị ngày như {{D.ExpiryDate}} nên dùng định dạng dd/MM/yyyy. Chỉ để trống khi nghiệp vụ cho phép.
Mã chứng từ{{D.No}} nên là duy nhất để hệ thống khách hàng đối soát từng chứng từ đã tạo.
cẩn thận
  • Danh sách tham số parameters không được phép thay đổi phải truyền đúng thứ tự và quy tắc bên trên: Thông tin cơ bản -> Thông tin quy trình ký -> Thông tin đục lỗ.
  • Danh sách các dữ liệu rows: dữ liệu phải truyền đúng với thứ tự tham số bên trên.
  • Trong quy trình tuần tự, nên đặt quyền F trước D, E, EKYC và DR nếu người ký cần dữ liệu đã được điền trước khi ký.
  • Dùng ký tự \n trong giá trị của row khi chứng từ sinh ra cần xuống dòng.

Gọi Api để tạo lô chứng từ theo mẫu​

Sử dụng API (/api/batch-imports/create-advanced) để tạo lô chứng từ theo dữ liệu mẫu chuẩn bị. Chi tiết tham khảo tại mục Hàm import lô chứng từ nâng cao.

Sau khi API trả về thành công, cần lưu các giá trị sau cho các bước tiếp theo:

Giá trị responseMục đích sử dụng
data.idID lô dùng để gửi quy trình ký và tra cứu lô về sau.
data.numberOfRecordsSố chứng từ được yêu cầu tạo trong lô. Dùng để đối soát dữ liệu.
data.documents[].idID từng chứng từ được tạo. Lưu lại nếu hệ thống khách hàng cần theo dõi ở cấp chứng từ.
data.documents[].noMã chứng từ được tạo. Dùng để map ngược về dòng dữ liệu nguồn.
data.documents[].statusTrạng thái ban đầu của chứng từ trước khi gửi quy trình.
data.errorsLỗi theo từng dòng nếu import lỗi hoặc API trả về chi tiết kiểm tra dữ liệu.

Sau khi tạo lô chứng từ thành công, có thể kiểm tra kết quả trên web thông qua địa chỉ ở /App/BatchImport.

img6

Chọn button “Gửi quy trình” để xem thông tin chi tiết lô chứng từ đã tạo.

img7

Bấm vào chi tiết để xem thông tin chứng từ đã tạo.

img8

Kiểm tra thông tin chứng từ đã tạo đúng thông tin chưa, các khung chữ ký (nếu có). Chứng từ khi chưa gửi quy trình sẽ ở trạng thái “Chứng từ mới”, ở trạng thái này có thể cập nhật và chỉnh sửa thông tin nếu có sai soát (cập nhật thông qua các api hoặc cập nhật trên web).

img9

Gửi quy trình ký​

Sau khi tạo lô chứng từ thành công hệ thống sẽ trả về Id lô chứng từ đã tạo, dùng thông tin Id này để gửi quy trình ký. Chi tiết tham khảo tại Hàm gửi quy trình lô chứng từ đã import.

Lô chứng từ sau khi gửi đi thì chứng từ sẽ không thể chỉnh sửa. Nên cần kiểm tra thông tin kỹ trước khi gửi đi.

Khi lô có nhiều chứng từ, API gửi quy trình có thể trả về code 202 do hệ thống vẫn đang xử lý hoặc chuyển đổi file. Trường hợp này cần chờ một khoảng thời gian rồi gọi lại API gửi quy trình với cùng ID lô. Thời gian chờ nên phụ thuộc vào số lượng chứng từ trong lô và SLA tích hợp của khách hàng.

Checklist triển khai khuyến nghị​

  • Kiểm tra biến trong mẫu trước khi gửi dữ liệu thật. Có thể dùng API chi tiết mẫu chứng từ hoặc màn hình cấu hình mẫu để đối chiếu parameters.
  • Kiểm tra mọi dòng trong rows có số lượng giá trị bằng đúng số lượng phần tử trong parameters trước khi gọi API tạo lô.
  • Kiểm tra các trường bắt buộc: name, departmentId, documentTypeId, documentTemplateId, {{D.No}}, {{D.Subject}}, {{D.IsOrder}}, và từng cặp người nhận.
  • Đảm bảo {{D.No}} là duy nhất giữa các chứng từ để tránh trùng mã chứng từ.
  • Lưu mapping giữa ID dòng dữ liệu nguồn, {{D.No}}, ID lô và ID chứng từ được tạo.
  • Kiểm tra chứng từ đã tạo trước khi gửi quy trình, đặc biệt là dữ liệu đục lỗ và khung chữ ký.
  • Xử lý retry khi API gửi quy trình trả về code 202.
  • Đồng bộ trạng thái bằng danh sách lô, danh sách chứng từ hoặc webhook tùy nhu cầu tích hợp.
  • Ghi log ID lô, mã chứng từ, số thứ tự dòng và thông báo lỗi API để hỗ trợ vận hành và đối soát.

Kiểm tra màn hình danh sách chứng từ sẽ thấy trạng thái toàn bộ chứng từ đã được gửi đi. Chọn button tìm kiếm để tìm kiếm danh sách lô chứng từ đã gửi

img10

Chứng từ đã được gửi đến người nhận thành công, người nhận có thể xử lý các chứng từ đã nhận theo lô (xử lý hàng loạt).

img11