0 lỗi ở 50 kết nối đồng thời, 15/15 hạng mục pháp lý đã kiểm chứng trên hệ thống đang chạy: hệ thống quản lý hoá đơn và hợp đồng chạy hoàn toàn on-premise

Web Internal System CMS Bảo mật On-Premise 2026
0 lỗi ở 50 kết nối đồng thời, 15/15 hạng mục pháp lý đã kiểm chứng trên hệ thống đang chạy: hệ thống quản lý hoá đơn và hợp đồng chạy hoàn toàn on-premise

Bối cảnh dự án

Nhiều doanh nghiệp có phát sinh hoá đơn định kỳ đang "tạm đủ" với Luật Hoá đơn (Invoice System) và Luật Lưu trữ Sổ sách Điện tử của Nhật bằng Excel và quy trình thủ công. VAON tự phát triển một hệ thống quản lý hoá đơn và hợp đồng chạy on-premise: một sổ cái duy nhất quản lý từ hợp đồng đến hoá đơn, đối soát thanh toán và nhắc nợ, chạy hoàn toàn trong server của khách hàng, chỉ kết nối ra ngoài qua email. Toàn bộ 15 hạng mục pháp lý được xác nhận bằng cách đo trên hệ thống đang chạy thật, không phải kiểm tra trên giấy xem đã cài đặt hay chưa.

Thách thức

1

Khoá sửa hoá đơn sau khi chốt vẫn phải song song với yêu cầu lưu lại lịch sử chỉnh sửa của luật

Luật Lưu trữ Sổ sách Điện tử Nhật yêu cầu lưu vết mọi lần sửa/xoá dữ liệu giao dịch. Nếu chỉ đơn giản cấm sửa sau khi chốt, quy trình thực tế sẽ bị bế tắc khi nhân viên phát hiện sai sót. Hoá đơn đã chốt phải không thể chỉnh sửa, nhưng vẫn cần một đường hợp lệ để đưa về trạng thái đúng.

2

Ghi log chỉ ở tầng ứng dụng sẽ bỏ sót thao tác SQL trực tiếp

Nếu chỉ ghi lịch sử sửa/xoá bằng code ứng dụng, các thao tác trực tiếp vào database sẽ không được ghi lại. Khi bị kiểm toán hoặc thanh tra thuế hỏi "thao tác không qua ứng dụng có được ghi log không", chỉ dựa vào tầng ứng dụng sẽ không trả lời được.

3

Đáp ứng yêu cầu tìm kiếm trong 3 giây mà không có tài nguyên dồi dào như cloud

Luật yêu cầu tìm theo ngày giao dịch, số tiền, đối tác, có tìm theo khoảng và kết hợp nhiều điều kiện, trong vòng 3 giây. Chạy trên một server duy nhất mà khách hàng tự chuẩn bị (mô hình on-premise) nghĩa là không thể mặc định có thể mở rộng tài nguyên linh hoạt như cloud.

4

Giao mã nguồn tạo rủi ro khách hàng sửa code làm hỏng yêu cầu pháp lý

Mô hình mua đứt kèm giao toàn bộ mã nguồn giúp tránh phụ thuộc một nhà cung cấp, nhưng cũng có nghĩa là phần tính thuế, log kiểm toán, xử lý chốt hoá đơn có thể bị phá vỡ ngoài ý muốn khi khách hàng hoặc một vendor khác chỉnh sửa code.

Giải pháp của VAON

Thiết kế toàn bộ hệ thống quanh một sổ cái duy nhất, đi từ đối tác đến hợp đồng đến hoá đơn đến đối soát thanh toán đến nhắc nợ, thay vì một công cụ phát hành hoá đơn đơn lẻ.

Làm cho hoá đơn đã chốt không thể xoá vật lý hoặc sửa nội dung. Sai sót được xử lý bằng "huỷ có lý do" (bút toán đỏ) rồi tạo lại; bản PDF gốc không bị đụng vào, còn bản hiển thị trạng thái đã huỷ được xuất ra file riêng nên hash của bản gốc không đổi.

Ghi lịch sử sửa/xoá bằng database trigger trên 6 bảng dữ liệu chứng từ. Vì trigger nằm dưới tầng ứng dụng, thao tác SQL trực tiếp cũng được ghi vào cùng lịch sử, không chỉ các lệnh gọi qua ứng dụng.

Đáp ứng yêu cầu tìm kiếm bằng thiết kế index thay vì thêm một search engine riêng, giữ trong khả năng tiêu chuẩn của PostgreSQL — đã xác nhận bằng EXPLAIN rằng bộ dữ liệu 10.000 dòng cho cả hợp đồng và hoá đơn đều dùng index scan — đồng thời giữ kiến trúc ở 6 thành phần (Web, API, Worker, PostgreSQL, object storage, Nginx), không thêm middleware phụ như Redis, để đội IT của khách càng ít gánh nặng và ít điểm có thể hỏng.

Giới hạn toàn bộ kết nối ra ngoài chỉ còn gửi email (SMTP). Đã quét toàn bộ mã nguồn tìm credential của dịch vụ bên ngoài và xác nhận chỉ có 6 biến môi trường liên quan SMTP, không phụ thuộc cloud storage, thanh toán ngoài, hệ xác thực ngoài hay API AI tạo sinh nào.

Bảo vệ các đoạn code liên quan yêu cầu pháp lý (tính thuế, log kiểm toán, chốt hoá đơn) bằng test tự động, để nếu khách sửa code làm hỏng một trong số đó, bộ test sẽ báo lỗi.

Giá trị mang lại

Màn hình danh sách và chi tiết phản hồi dưới 100ms ở p95, thấp hơn nhiều so với yêu cầu 3 giây

Màn hình danh sách (100 dòng) đo được p50 3ms / p95 87ms; màn hình chi tiết đo được p50 2ms / p95 83ms. So với yêu cầu 3 giây, p95 đo được chỉ chiếm khoảng 1-3% thời gian cho phép.

Tìm kiếm trên 10.000 bản ghi hoàn tất trong 0,075-0,371ms

Tìm theo ngày giao dịch, số tiền, đối tác trên bộ dữ liệu 10.000 dòng cho cả hợp đồng và hoá đơn hoàn tất trong 0,075-0,371ms. EXPLAIN xác nhận dùng index scan, nên biên độ này nhiều khả năng vẫn giữ được khi số bản ghi tăng lên.

50 người dùng đồng thời, 1.645 request trong 30 giây, 0 lỗi

Bài kiểm tra tải với 50 phiên đăng nhập cùng lúc, lặp lại chuỗi thao tác danh sách hoá đơn → chi tiết → tìm theo khoảng số tiền → danh sách hợp đồng (đúng nhịp thao tác thực tế của kế toán), xử lý được 1.645 request trong 30 giây, không có lỗi nào.

15/15 hạng mục pháp lý được xác nhận bằng đo lường, không phải rà soát đã cài đặt hay chưa

7 hạng mục ghi chú bắt buộc của Luật Hoá đơn và 8 hạng mục lưu trữ dữ liệu giao dịch điện tử của Luật Lưu trữ Sổ sách Điện tử được kiểm tra từng mục dựa trên hành vi thực tế của hệ thống. Kết quả và phương pháp xác nhận được giao dưới dạng checklist tuân thủ.

Kết nối ra ngoài duy nhất là email, chỉ cần SMTP nội bộ là chạy được không cần internet

Quét toàn bộ mã nguồn tìm credential dịch vụ bên ngoài chỉ phát hiện 6 biến môi trường liên quan SMTP. Không có phụ thuộc vào cloud storage, thanh toán bên ngoài, hệ xác thực bên ngoài hay API AI tạo sinh nào.

Công nghệ

TypeScript
TypeScript
Node.js
Node.js
React
React
PostgreSQL
PostgreSQL
Nginx
Nginx
Docker
Docker