Demo sổ cái tồn kho

Bốn mươi mặt hàng ở mười hai vị trí, với tối đa 50.000 bút toán được sinh ra ngay trước mắt bạn. Số tồn không được ghi ở đâu cả. Nó là tổng gộp trên cuốn sổ, và một nút bấm cộng lại toàn bộ rồi báo chênh lệch.

Mở bản demo

Mở warehouse.taiphamsolutions.com trong tab mới. Không cần tài khoản, không cần đăng ký, và mọi thao tác của bạn đều không rời khỏi trình duyệt. Ứng dụng demo chỉ có bản tiếng Anh.

Bản demo này làm gì

Một con số tồn kho mở ra được thành những bút toán đứng sau nó, với cột số dư lũy kế mà dòng cuối cùng chính là con số ở màn hình trước. Cuốn sổ không có nút sửa và không có nút xóa ở bất cứ đâu, vì cách sửa sai duy nhất là một bút toán đảo trỏ ngược về thứ nó đảo. Mỗi dòng đều mang người thực hiện, vai trò, thời điểm và lý do, và đó là thứ khiến trang kiểm toán chỉ là một truy vấn chứ không phải một tính năng.

Cộng gộp 50.000 dòng mỗi lần vẽ lại màn hình là không khả thi, nên có một bảng số dư lưu sẵn, và nó được xử lý công khai chứ không giấu đi. Nó được ghi trong cùng giao dịch với bút toán sinh ra nó, nó ghi lại số thứ tự mà nó còn hiệu lực tới, và nút dựng lại rồi đối chiếu sẽ cộng lại toàn bộ cuốn sổ từ kho bút toán chứ không từ bất kỳ bộ nhớ đệm nào, rồi báo số dòng, số mili giây và mọi chênh lệch. Chênh lệch là không, và bộ kiểm thử khẳng định đúng điều đó với các luồng bút toán ngẫu nhiên ghi thành từng đợt bị ngắt quãng.

Bốn vai trò được thực thi ở tầng lệnh chứ không phải trong các điều kiện của template. Một nhân viên xuất nhiều hơn số hàng đang có trong ô kệ sẽ bị chặn và được cho biết số dư khi đó sẽ là bao nhiêu. Một giám sát có thể vượt qua chặn đó kèm một lý do viết ra, và lần vượt quyền đó nằm lại trong dấu vết kiểm toán. Người đếm mù không bao giờ nhận được số lượng kỳ vọng, vì nó bị lược đi trước khi dữ liệu tới màn hình chứ không phải bị che sau khi đã tới.

Vào phần quản trị, sửa trộm một dòng sau lưng ứng dụng, rồi bấm kiểm tra chuỗi sổ cái. Nó đỏ lên và chỉ đúng số thứ tự nơi chuỗi bị đứt.

Tính năng

40 mặt hàng ở 12 vị trí, 8 người thuộc bốn vai trò, và một năm hoạt động ở mức 1.000, 10.000 hoặc 50.000 bút toán, sinh ra ngay lần mở đầu tiên.

Suy ra được, và mở ra xem được

Mọi con số tồn kho đều mở ra thành các bút toán đã tạo ra nó, với cột số dư lũy kế kết thúc đúng ở con số đó.

Bất biến, và kiểm tra được

Không sửa và không xóa. Mỗi dòng lưu một dấu vân của dòng liền trước, nên một bản ghi bị đổi từ bên ngoài ứng dụng vừa phát hiện được vừa định vị được.

Kiểm kê mù

Đếm mà không thấy số kỳ vọng, nộp lên, giám sát duyệt, chấp nhận hoặc trả về đếm lại, và chỉ những dòng được chấp nhận mới ghi thành bút toán điều chỉnh.

Chênh lệch và kiểm toán

Độ chính xác, giá trị và những mặt hàng lệch nhiều nhất, với chênh lệch ròng và chênh lệch tuyệt đối báo riêng, vì cộng bốn mươi ở ô này và trừ bốn mươi ở ô kia bù nhau thành không mà vẫn là một vấn đề.

Quy trình khép kín, từ đầu đến cuối

Mọi bước dưới đây đều diễn ra bên trong bản demo. Không có điểm nào mà công việc rời khỏi trình duyệt rồi quay lại.

  1. Sinh một năm lịch sử

    1.000, 10.000 hoặc 50.000 bút toán, dựng trong một worker nên trang vẫn thao tác được trong lúc thanh tiến trình chạy.

  2. Ghi một bút toán

    Nhập kho, xuất kho hoặc chuyển kho. Một lần chuyển kho là hai vế cộng lại bằng không, và một lần bị từ chối không để lại vế nào.

  3. Bảng số dư đi cùng nó

    Bút toán và số dư mà nó làm thay đổi nằm trong một giao dịch, nên cuốn sổ và bộ nhớ đệm không thể lệch nhau khi có sự cố.

  4. Chặn, và vượt chặn

    Xuất nhiều hơn số hàng đang có trong ô kệ sẽ bị từ chối. Chỉ giám sát mới đi tiếp được, chỉ khi có lý do, và lý do đó là một phần của bản ghi.

  5. Đếm, duyệt, ghi sổ

    Một phiếu đếm mù được nộp, duyệt từng dòng, rồi ghi thành các bút toán điều chỉnh có tham chiếu tới phiên kiểm kê. Dòng nào không ai chấp nhận vẫn hiện ra như một chênh lệch chưa xử lý.

  6. Dựng lại và đối chiếu

    Toàn bộ cuốn sổ được cộng lại từ kho bút toán rồi so với bảng số dư, kèm số dòng, thời gian chạy và mọi chỗ không khớp hiện ngay trên màn hình.

Cái gì là thật, cái gì thì không

Không có máy chủ nào phía sau, và chính điều đó quyết định cả hai cột. Cột trái là những phần mà ràng buộc ấy khiến chúng đáng được làm cho tử tế. Cột phải là những phần nó loại trừ.

Được xử lý thật

  • Số dư cập nhật dần khớp với một lần dựng lại toàn bộ, trên các luồng ngẫu nhiên ghi thành từng đợt bị ngắt quãng
  • Một dòng bị sửa làm đứt chuỗi đúng ở số thứ tự dự kiến, và một dòng bị xóa được báo là một chỗ hổng
  • Một lần chuyển kho bị từ chối không để lại vế nào, và một bút toán đảo triệt tiêu đúng bằng, không đụng vào bản gốc
  • 50.000 dòng cuộn mượt, dựng lại trong khoảng 325 ms và kiểm tra chuỗi trong khoảng một giây

Cố ý không làm thật

  • Nút đổi vai là danh tính khai báo. Việc thực thi quyền là thật, còn việc đăng nhập thì không
  • Dấu vân của chuỗi là FNV-1a chứ không phải SHA-256, đủ bắt hỏng dữ liệu vô tình và can thiệp nghiệp dư, không hơn
  • Không có vòng đời đơn mua hay đơn bán, không có phần cứng quét mã, và không có giá vốn nào ngoài một đơn giá cho mỗi bút toán
  • Không có gì rời khỏi trình duyệt, nên đưa dữ liệu sang máy khác nghĩa là xuất ra rồi nhập vào

Được xây dựng thế nào

Phần mô tả này thuyết phục hơn cả bản thân ứng dụng, nên nó nằm ngay trên trang thay vì trong một kho mã không ai mở được.

Công nghệ
Svelte 5 và SvelteKit dựng tĩnh, TypeScript và Vite, với đúng hai thư viện chạy thật: Svelte và idb. Biểu đồ, danh sách ảo và lớp dịch mỗi thứ chỉ vài chục dòng, thay vì mỗi thứ một gói thư viện.
Ranh giới
Đúng một hàm là nơi duy nhất ghi vào kho bút toán. Các route không bao giờ chạm vào cơ sở dữ liệu, lệnh đi qua một tầng nghiệp vụ thuần, và các bảng chiếu đọc ngược lại từ cuốn sổ.
Ngân sách
42,9 KB gzip cho tuyến đầu tiên so với hạn mức 45 KB, 98,1 KB JavaScript phía trình duyệt so với 110 KB, và 7,0 KB CSS so với 8 KB. Tiếng Việt là một mảnh 4,5 KB mà người đọc tiếng Anh không bao giờ tải.
Kiểm thử
25 bài kiểm thử chạy trên một IndexedDB thật chứ không phải bản giả lập: bảng chiếu so với dựng lại toàn bộ, tính toàn vẹn của chuỗi, các lần từ chối quyền, chặn âm kho và lần vượt chặn, đếm mù, và một vòng xuất ra rồi nhập lại.

Các bản demo khác

Mỗi bản là một loại bài toán khác nhau, và tất cả đều nằm trong menu Bản demo ở đầu trang.

Muốn một bản như thế này nhưng chạy theo quy tắc của bạn?

Bản này được làm dưới một ràng buộc mà không ai tự chọn. Bản của bạn sẽ có máy chủ, tài khoản thật, và cả những phần thực sự khó trong nghiệp vụ. Hãy cho chúng tôi biết phần mềm cần làm được gì, chúng tôi sẽ nói cần những gì để làm ra nó.

Cứ mang tới bài toán còn ngổn ngang. Đó là kiểu trao đổi chúng tôi thích nhất.