ARCHIFY v3.2.0 · MASTER EXPLAINER (7 PANELS · 4 DIAGRAMS · 16 SOURCES) HKD VŨ ĐỨC ĐĂNG KHÔI (`tangvu@freshdangkhoi.com`) Git Pin: `4417a6a` · 9/9 Checks PASS

Tổng hợp Toàn diện Hệ thống Đăng Khôi Fresh ERP: Kiến trúc 3 Tầng, Báo cáo Xuất Nhập Tồn (01-VT/02-VT), HRM V2 Camera AI & Kiểm toán Bảo mật Cloudflare

← Mở Phần mềm ERP 🛡️ Báo cáo Bảo mật Chi tiết

Kết luận Tổng hợp Kiến trúc, Nghiệp vụ & Bảo mật (Conclusion-First)

Hệ thống Đăng Khôi Fresh ERP (HKD Vũ Đức Đăng Khôi) vận hành theo kiến trúc Sổ cái Kho – Tài chính – Nhân sự – Bảo mật hợp nhất (Single Source of Truth): lấy Lô hàng thực tế từ Hóa đơn mua vào làm gốc dữ liệu duy nhất để tự động phân bổ xuất kho FEFO/FIFO, cân bằng phương trình Xuất – Nhập – Tồn (Đầu kỳ + Nhập − Xuất = Cuối kỳ), in chứng từ Mẫu 01-VT / 02-VT, tự động hóa chấm công Camera AI & Bảng lương HRM V2 và bảo vệ bằng hàng rào Zero-Trust (8/8 chốt chặn PASS theo chuẩn Cloudflare Security Audit).

  1. Quản lý Kho & Báo cáo Xuất Nhập Tồn (01-VT / 02-VT): Đồng bộ 903 mặt hàng & 283 lô nhập kho từ chứng từ hóa đơn thật (data/embedded_data.js, data/invoices_data.js), kiểm chứng đẳng thức 4 + 479.144 − 4 = 479.144 đơn vị (467.814.718 ₫), cảnh báo tồn tối thiểu và in Phiếu Nhập/Xuất 01-VT, 02-VT kèm đọc số tiền bằng chữ.[1][3][5][6][7]
  2. Định giá vốn Lô hàng FEFO / FIFO & Đối soát Đa sàn: Mọi đơn xuất bán đa kênh (POS, Menu Online, Shopee, TikTok, Lazada, GrabFood) đều chạy qua sellOrDeductProductQuantity() ưu tiên lô hết hạn trước (FEFO) hoặc nhập trước (FIFO), giữ nguyên đơn giá vốn gốc của từng lô.[2][8]
  3. Quản trị Nhân sự HRM V2 & Camera AI Rảnh tay: Tích hợp 9 tab con chuyên sâu (Tổng quan Quỹ lương SVG, Bảng chấm công ma trận 31 ngày tự động đồng bộ từ Camera AI 1 ca = N, ≥2 ca = X, Bảng lương Gross/Net, Tăng ca 150%, trừ phạt tự động và In Phiếu lương A4).[9]
  4. Kiểm toán Bảo mật 6 Giai đoạn Cloudflare & Cổng API Hệ thống: Xác nhận 8/8 chốt chặn cốt lõi Đạt Chuẩn An Toàn (ký JWT HMAC-SHA256 tại _worker.js, khử leo quyền sanitizeClientPermissions, ẩn Giá vốn gốc trước nhân viên Sales, cô lập khóa MISA meInvoice / Zalo OA trong sessionStorage) và ghi nhận minh bạch 2 điểm khuyến nghị gia cố nhẹ (CF-SEC-01, CF-SEC-02).[10][13][14][15][16]

Phạm vi xác thực HKD Vũ Đức Đăng Khôi 903 Sản phẩm & 283 Lô hàng thật Mẫu 01-VT & 02-VT (TT 133/200) HRM V2 Camera AI (9 Sub-tabs) Cloudflare Security Audit (6 Phases) Archify v3.2.0 (4 Diagrams · 16 Pinned Sources)

1

Sơ đồ Kiến trúc Tổng thể 3 Tầng của Đăng Khôi Fresh ERP kết nối các phân hệ như thế nào?

Kiến trúc Tổng thể Hệ sinh thái Đăng Khôi Fresh ERP (Nhấp vào ô hoặc rê chuột để xem Code gốc)
Cấu trúc Sơ đồ
  • Hóa đơn Mua vào PDF/XML inv_source
  • Đa kênh Bán hàng omni_channels
  • Camera AI Quầy/Kho cam_webrtc
  • Bảo mật Session-Only auth_session
  • Đồng bộ Lô & HSD batch_sync
  • Xuất kho FEFO / FIFO fefo_engine
  • Bộ máy Chấm công HRM V2 hrm_engine
  • Cổng API Hệ thống api_gateway
  • Báo cáo Xuất Nhập Tồn xnt_report
  • In Phiếu 01-VT & 02-VT voucher_print
  • Đối soát Lãi/Lỗ & Thuế pnl_recon
  • Bảng Lương & Phiếu Lương payroll_sheet
  1. 1. Đồng bộ Hóa đơn Mua hàng sang Lô & HSD

    Hóa đơn đầu vào PDF/XML (data/invoices_data.js) được syncBatchesFromInvoices() bóc tách thành 283 lô nhập kho kèm đơn giá vốn và hạn sử dụng.[1]

  2. 2. Phân bổ Xuất kho Đa kênh theo FEFO / FIFO

    Đơn hàng từ POS, Menu Online, Shopee, TikTok, GrabFood gọi sellOrDeductProductQuantity() để trừ tồn kho ưu tiên lô sắp hết hạn (FEFO).[2]

  3. 3. Cân bằng Xuất Nhập Tồn & In Phiếu 01-VT / 02-VT

    Động cơ computeXntReportData() tổng hợp Tồn đầu, Nhập, Xuất, Tồn cuối trên 903 mặt hàng và xuất Phiếu Nhập (01-VT) / Phiếu Xuất (02-VT).[3][5][6]

  4. 4. Chấm công Camera AI & Bảng lương HRM V2

    Camera WebRTC/RTSP nhận diện khuôn mặt nhân viên theo cơ sở (CS1/CS2/Kho), tự động đồng bộ vào bảng công 31 ngày, tính OT 150% và lương thực lĩnh.[9]

  5. 5. Bảo mật Session-Only & Cổng API MISA / Zalo OA

    Phiên làm việc Super Admin và khóa API MISA meInvoice / Zalo OA được bảo vệ trong sessionStorage, tự xóa sạch khi đóng tab.[10]

2

Chu trình Báo cáo Xuất Nhập Tồn & Chứng từ 01-VT / 02-VT vận hành như thế nào?

Chu trình 6 bước từ Hóa đơn Mua vào đến Báo cáo XNT & Phiếu 01-VT / 02-VT (Nhấp ▶ Chạy theo luồng)
Cấu trúc Sơ đồ
  • 1. Nhập Hóa đơn Mua wf_invoice
  • 2. Đồng bộ Lô & HSD wf_batch
  • 3. Xuất kho FEFO/FIFO wf_fefo
  • 4. Cân bằng Xuất Nhập Tồn wf_xnt
  • 5. Cảnh báo Tồn tối thiểu wf_alert
  • 6. In Phiếu 01-VT / 02-VT wf_voucher
3

Số liệu Kiểm thử Thực tế trên Kho Dữ liệu Thật

Tổng số Mặt hàng (SKU) được đối soát XNT

903mặt hàng / 283 lô thực tế

903 / 903

Kiểm chứng bằng WebKit JavaScriptCore (jsc) trên data/embedded_data.js & data/invoices_data.js.[3]

Tồn đầu kỳ
4 đơn vị (288.000 ₫)
Nhập trong kỳ
479.144 đơn vị (467.814.718 ₫)
Xuất trong kỳ
4 đơn vị (288.000 ₫)
Tồn cuối kỳ
479.144 đơn vị (467.814.718 ₫)
Chứng từ Kế toán
Mẫu 01-VT & 02-VT (TT 133/200)
Chốt chặn Bảo mật
8/8 Verified Safe (PASS)[13]
4

Trình tự Chấm công Khuôn mặt Camera AI & Tự động Tính lương HRM V2 diễn ra như thế nào?

Biểu đồ Tuần tự (Sequence) Chấm công Camera AI -> Bảng lương HRM V2 (Nhấp ▶ Chạy tuần tự)
Cấu trúc Sơ đồ
  • Camera AI Quầy/Kho act_cam
  • Bộ máy HRM V2 act_hrm
  • Cấu hình Hệ thống act_cfg
  • Bảng Công & Lương act_pay
5

So sánh Năng lực Quản trị Kho, Nhân sự & Bảo mật sau nâng cấp

Tiêu chí Nghiệp vụ Mẫu Rời rạc Đăng Khôi Fresh ERP (T10/2026)
Nguồn dữ liệu Nhập kho Thủ côngGõ tay từng dòng phiếu nhập Tự động 100%Đồng bộ từ Hóa đơn PDF/XML thật[1]
Định giá vốn Xuất kho Đơn giá tĩnhKhông tách theo lô và hạn sử dụng Chuẩn FEFO / FIFOTrừ đúng lô sắp hết hạn & giữ giá vốn lô[2]
Báo cáo XNT & Chứng từ 4 nhóm cột XNT, phiếu cơ bản Chuẩn TT 133/200XNT + Cảnh báo tồn + In 01-VT & 02-VT[3][5]
Chấm công & Tính lương Tick bảng công tay, tính OT 150% Camera AI + HRM V2Quét FaceID đa cơ sở + Ma trận 31 ngày + Gross/Net[9]
Kiểm toán Bảo mật Không cóLưu toàn bộ trên trình duyệt Cloudflare 6 PhasesJWT HMAC-SHA256 + Ẩn Giá vốn + Session-Only[13][16]
6

Sơ đồ Ranh giới Tin cậy & Kết quả Kiểm toán Bảo mật 6 Giai đoạn (Cloudflare Security Audit)

Hàng rào Bảo mật Zero-Trust: Lark OAuth -> Cloudflare Edge (_worker.js) -> Khử leo quyền RBAC -> Bảo vệ Giá vốn Gốc
Cấu trúc Sơ đồ
  • Larksuite OAuth Callback tb_lark_oauth
  • Cloudflare Edge (_worker.js) tb_edge_worker
  • Chủ Hộ Super Admin tb_owner_admin
  • Khóa MISA / Zalo / Cam AI tb_api_inputs
  • Bộ lọc Phân quyền RBAC tb_rbac_guard
  • Bảo vệ Giá vốn Gốc (COGS) tb_cogs_shield
7

Bằng chứng Mã nguồn Thực tế (Pinned Code) & Danh mục Kiểm định Hệ thống

Thuật toán Xuất kho tự động FEFO / FIFO theo Lô[2] src/js/catalog_manager.js:2042–2066
      if (policy === 'FEFO') {
        // FEFO (First-Expired, First-Out): Hết hạn trước xuất trước
        activeBatches.sort((a, b) => {
          const hasExpA = !!a.expiry_date;
          const hasExpB = !!b.expiry_date;
          if (hasExpA && hasExpB) {
            if (a.expiry_date !== b.expiry_date) return a.expiry_date.localeCompare(b.expiry_date);
            return new Date(a.import_date || '1970-01-01') - new Date(b.import_date || '1970-01-01');
          }
          if (hasExpA && !hasExpB) return -1; // Có HSD ưu tiên xuất trước
          if (!hasExpA && hasExpB) return 1;
          return new Date(a.import_date || '1970-01-01') - new Date(b.import_date || '1970-01-01');
        });
      } else {
        // FIFO (First-In, First-Out): Nhập trước xuất trước
        activeBatches.sort((a, b) => new Date(a.import_date || '1970-01-01') - new Date(b.import_date || '1970-01-01'));
      }

      for (const b of activeBatches) {
        if (remainingToDeduct <= 0) break;
        const currentBatchQty = Number(b.quantity) || 0;
        const deductFromThis = Math.min(currentBatchQty, remainingToDeduct);

        b.quantity = currentBatchQty - deductFromThis;
        b.sold_quantity = (Number(b.sold_quantity) || 0) + deductFromThis;
Động cơ tính Báo cáo Xuất Nhập Tồn & Lọc Kỳ kế toán[3] src/js/app.js:6046–6072
 const computeXntReportData = (overrideOpts = {}) => {
   window.catalogManager?.syncBatchesFromInvoices?.();
   const allProducts = window.catalogManager?.getAllProducts?.() || [];
   const allVouchers = getSavedDispatchVouchers() || [];
   const minStockMap = getXntMinStockMap();
   const defaultMinStock = overrideOpts.defaultMinStock !== undefined
     ? Math.max(0, Math.round(Number(overrideOpts.defaultMinStock) || 0))
     : getXntDefaultMinStock();

   const fromDate = overrideOpts.fromDate !== undefined
     ? String(overrideOpts.fromDate || '').trim()
     : (document.getElementById('xnt-from-date')?.value || '').trim();
   const toDate = overrideOpts.toDate !== undefined
     ? String(overrideOpts.toDate || '').trim()
     : (document.getElementById('xnt-to-date')?.value || '').trim();
   const catFilter = overrideOpts.catFilter !== undefined
     ? String(overrideOpts.catFilter || '').trim()
     : (document.getElementById('xnt-category-filter')?.value || '').trim();
   const statusFilter = overrideOpts.statusFilter !== undefined
     ? String(overrideOpts.statusFilter || 'active_or_moved').trim()
     : (document.getElementById('xnt-status-filter')?.value || 'active_or_moved').trim();
   const searchVal = (overrideOpts.search !== undefined
     ? String(overrideOpts.search || '')
     : (document.getElementById('xnt-search-input')?.value || '')).trim().toLowerCase();
   const sortBy = overrideOpts.sortBy !== undefined
     ? String(overrideOpts.sortBy || 'moved_first')
     : (document.getElementById('xnt-sort-select')?.value || 'moved_first');

Danh mục Kiểm định Vận hành Thực tế dành cho Chủ Hộ (Tick lưu trạng thái tự động):

Đang mở sơ đồ tương tác…