SonKhang ERP
Kế hoạch tổng thể hệ thống
v4.2 · 2026

SonKhang ERP
Master Plan

Hệ thống quản trị doanh nghiệp toàn diện — 7 phân hệ — 40+ module — trên nền Google Apps Script & Blogger SPA

128 API Routes
20+ GAS Files
19 JS Modules
25+ Google Sheets
7 Phân hệ
~8000 dòng code
📊 Tổng quan tiến độ
Trạng thái hiện tại tất cả phân hệ — nhấn vào card để xem chi tiết
🛒
75%
Bán hàng
Bảng giá · Đơn hàng · Giao hàng · Sapo
✓ Bảng giá ✓ Chiết khấu ✓ Đơn hàng 9TT ✓ Giao hàng ✓ HD VAT ✓ Sapo sync ~ Trả hàng ○ Báo cáo BH
📦
0%
Mua hàng
NCC · Hợp đồng · Đặt hàng · Nhập kho
○ Nhà cung cấp ○ Báo giá ○ Đơn đặt hàng ○ Đơn mua ○ Nhập kho ○ Hợp đồng NCC
🏷️
35%
Sản phẩm
Danh mục · Thương hiệu · Thuộc tính
✓ Bảng giá SP ✓ Sync Sapo ○ Danh mục cây ○ Thương hiệu ○ Biến thể
👥
40%
Khách hàng CRM
Thông tin · Hợp đồng · Loyalty · Marketing
✓ Thông tin KH ✓ Nhóm KH ✓ Lịch sử mua ○ Hợp đồng KH ○ Loyalty / XH ○ Marketing
🏭
55%
Kho vận
Phương tiện · Tồn kho · Xuất nhập · Đa kho
✓ Phương tiện ✓ Điều xe ✓ Chi phí GH ~ Tồn kho ○ Xuất kho ○ Chuyển kho ○ Đa chi nhánh
👔
90%
Nhân sự (HRM)
Hồ sơ · Chấm công · KPI · Lương · Tuyển dụng
✓ Hồ sơ NV ✓ Chấm công ✓ Nghỉ phép ✓ KPI ✓ Bảng lương ✓ Tuyển dụng ✓ Portal NB ✓ Workflow ~ Báo cáo NS
💰
10%
Tài chính – Kế toán
Sổ cái · Thu chi · Công nợ · Tài sản
✓ Hạch toán BH ✓ Phiếu lương ○ Sổ quỹ ○ Sổ thu/chi ○ Công nợ ○ Tài sản ○ Sổ cái ○ Ngân sách
🏗️ Kiến trúc hệ thống
Stack & Data Flow
Frontend
Blogger SPA
→
sk-*.js (CDN GitHub)
→
Be Vietnam Pro + Lucide
API Layer
Auth.gs doPost()
→
Session Token
→
Role-based RBAC
Backend
HRM_*.gs
Sales_*.gs
Vehicle.gs
Payroll.gs
Database
Google Sheets (25+ sheets)
↔
Sapo API
↔
Gmail (notify)
URL
erp.sonkhang.vn/#module
→
Hash routing (no reload)
🛒 Phân hệ Bán hàng — 75% hoàn thành
Quản lý toàn bộ quy trình bán hàng từ báo giá đến thu tiền và xuất hóa đơn
Đã xong ✅ DONE
Core Sales Engine
  • ✓Bảng giá sản phẩm (BangGia sheet)
  • ✓Tính giá bán tự động (margin/VAT/CK)
  • ✓Chiết khấu theo %, tiền, nhóm KH, thời gian
  • ✓Đơn hàng 9 trạng thái đầy đủ
  • ✓Tạo đơn với giỏ hàng inline
  • ✓Ghi nhận thanh toán từng phần
  • ✓Lịch sử thay đổi từng đơn
  • ✓Lệnh giao hàng → tài xế/xe tự động
  • ✓Hóa đơn VAT + hạch toán kép
  • ✓Sapo 2 chiều (sync sản phẩm + đơn hàng)
  • ✓Dashboard KPI doanh thu tháng
Việc tiếp theo 🔜 NEXT
Trả hàng & Báo cáo
  • →Quy trình trả hàng (RMA: yêu cầu → kiểm hàng → hoàn tiền)
  • →Đơn trả tự động điều chỉnh tồn kho
  • →Báo cáo doanh thu theo ngày/tháng/NV sale
  • →Phân tích sản phẩm bán chạy
  • →Hoa hồng sale tự động từ đơn hoàn thành
  • →Dashboard bản đồ giao hàng
  • →Push notification đơn mới (email/GChat)
Tương lai 📋 LATER
Nâng cao
  • ○Combo / bundle sản phẩm
  • ○Flash sale / deal hẹn giờ
  • ○Đơn hàng định kỳ (subscription)
  • ○Phân tích lợi nhuận theo đơn hàng
  • ○Tích hợp Shopee/Lazada
  • ○Portal khách hàng tự đặt
📋 Files liên quan
FileLoạiNội dungDòng
Sales_Core.gsGAS BackendBangGia, ChietKhau, KhachHang_CRM, tính giá424
Sales_Orders.gsGAS BackendDonHang 9 trạng thái, thanh toán, log497
Sales_Delivery.gsGAS BackendYC_GiaoHang, HoaDon_VAT, HachToan kế toán397
Sales_Sapo.gsGAS BackendSapo VN API, sync 2 chiều, map fields406
sk-sales-ui.jsJS FrontendCSS, modal, kpiCard, shared helpers210
sk-sales-orders.jsJS FrontendUI đơn hàng, giỏ hàng, tabs, Sapo config690
sk-sales-price.jsJS FrontendBảng giá, chiết khấu, CRM, tính giá523
📦 Phân hệ Mua hàng — 0% — Cần xây mới
Quản lý nhà cung cấp, hỏi giá, đặt hàng, nhập kho và hoàn trả
Sprint 1🔜 NEXT
Nhà cung cấp & Danh mục giá
  • →NhaCungCap sheet: ID, tên, SĐT, email, địa chỉ, MST, nhóm, hạn mức, nợ
  • →BangGia_NCC sheet: NCC_ID, SP_ID, giá_mua, MOQ, lead_time
  • →CRUD nhà cung cấp + liên kết với sản phẩm
  • →So sánh giá nhiều NCC cho cùng sản phẩm
  • →API: pur_get_suppliers, pur_save_supplier, pur_get_price_list
Sprint 2📋 LATER
Hỏi giá & Đặt hàng
  • ○YeuCau_MuaHang sheet: yêu cầu nội bộ → phê duyệt → PO
  • ○DonDatHang (PO) sheet: PO_ID, NCC, ngày, hạn giao, items
  • ○Email tự động gửi PO cho NCC
  • ○Theo dõi tiến độ giao hàng của NCC
  • ○API: pur_create_request, pur_create_po, pur_send_po
Sprint 3📋 LATER
Nhập kho & Hợp đồng
  • ○PhieuNhapKho sheet: PO → nhập từng phần, kiểm tra số lô
  • ○Cập nhật tồn kho tự động khi nhập
  • ○Trả hàng NCC: lý do, số lượng, giảm công nợ
  • ○HopDong_NCC sheet: số HĐ, giá trị, điều khoản, nhắc hết hạn
  • ○Hạch toán tự động: 156/331 (nhập kho), 331/112 (thanh toán NCC)
🏷️ Sản phẩm — 35% — Cần hoàn thiện
Danh mục sản phẩm, thương hiệu, thuộc tính, biến thể
Đã có✅ DONE
Bảng giá cơ bản
  • ✓BangGia sheet: SP_ID, tên, giá lẻ/sỉ/gốc, tồn kho
  • ✓CRUD sản phẩm từ UI
  • ✓Sync từ Sapo (SAPO-{id})
  • ✓Danh mục đơn giản (chuỗi text)
Tiếp theo🔜 NEXT
Cây danh mục & Thương hiệu
  • →DanhMuc_SP sheet: ID, tên, cha_id (cây), icon, thứ tự
  • →ThuongHieu sheet: ID, tên, logo_url, quốc gia, mô tả
  • →UI cây danh mục accordion + drag-drop thứ tự
  • →Filter sản phẩm theo danh mục cây
  • →API: prod_get_categories, prod_save_category, prod_get_brands
Tương lai📋 LATER
Biến thể & Thuộc tính
  • ○Thuộc tính: màu, size, chất liệu
  • ○Biến thể: SP cha → nhiều SKU con
  • ○Ảnh sản phẩm (link Google Drive/Imgur)
  • ○Mã vạch / QR code
  • ○Giá theo số lượng (price tier)
👥 Khách hàng CRM — 40%
360° customer view: thông tin, hợp đồng, tương tác, loyalty, marketing
Đã có✅ DONE
CRM cơ bản
  • ✓KhachHang_CRM sheet đầy đủ
  • ✓Nhóm: lẻ/sỉ/đại lý/VIP
  • ✓Tổng mua tích lũy + công nợ
  • ✓Lịch sử 10 đơn gần nhất
  • ✓Tạo đơn trực tiếp từ card KH
Tiếp theo🔜 NEXT
Loyalty & Xếp hạng
  • →Hệ thống điểm tích lũy (điểm = x% tổng mua)
  • →Xếp hạng: Bronze/Silver/Gold/Diamond
  • →Quyền lợi theo hạng: chiết khấu cố định, ưu tiên giao hàng
  • →Tự động nâng hạng khi đạt ngưỡng
  • →API: crm_get_loyalty, crm_add_points, crm_upgrade_tier
Tương lai📋 LATER
Hợp đồng & Marketing
  • ○HopDong_KH: số HĐ, giá trị, thời hạn, SLA
  • ○Nhắc hết hạn hợp đồng (email tự động)
  • ○Campaign email theo phân khúc KH
  • ○Phân tích RFM (Recency/Frequency/Monetary)
  • ○Tích hợp Zalo OA / SMS
🏭 Kho vận — 55%
Tồn kho, xuất nhập, chuyển kho đa chi nhánh, phương tiện vận chuyển
Đã có✅ DONE
Phương tiện (hoàn chỉnh)
  • ✓Registry: biển số, loại xe, tài xế
  • ✓Điều phối xe giao đơn
  • ✓Tính chi phí nhiên liệu theo km
  • ✓Báo cáo chi phí vận chuyển tháng
  • ✓Hoàn thành chuyến → ghi nhận OT tài xế
Tiếp theo🔜 NEXT
Tồn kho & Xuất kho
  • →TonKho sheet: SP_ID, kho_id, so_luong, gia_von, lo_hang
  • →PhieuXuatKho sheet: liên kết DonHang → trừ tồn
  • →Cảnh báo tồn kho thấp (threshold)
  • →Lịch sử xuất nhập từng sản phẩm
  • →API: inv_get_stock, inv_export, inv_get_history
Tương lai📋 LATER
Đa kho & Chuyển kho
  • ○DanhSach_Kho: ID, tên, địa chỉ, chi nhánh
  • ○PhieuChuyenKho: kho gửi → kho nhận → số lượng
  • ○Quy trình duyệt chuyển kho (workflow)
  • ○Báo cáo tồn kho theo từng kho
  • ○Kiểm kê định kỳ (inventory count)
👔 Nhân sự HRM — 90% — Gần hoàn thiện
8/8 module HRM hoàn chỉnh — chỉ còn cải thiện báo cáo và liên kết sâu hơn
Hoàn chỉnh✅ 8/8
Tất cả module HRM
  • ✓HRM-01: Hồ sơ nhân viên + tài liệu
  • ✓HRM-02: Chấm công ca/ngày + nghỉ phép
  • ✓HRM-03: Bảng lương (STD=28, condMet≥15)
  • ✓HRM-04: Cổng nội bộ (thông báo, hỏi đáp)
  • ✓HRM-05: Workflow đề xuất + phê duyệt
  • ✓HRM-06: KPI dashboard + targets
  • ✓HRM-07: Tuyển dụng pipeline kanban
  • ✓HRM-08: Báo cáo nhân sự
  • ✓Auto-sync User ↔ NV khi tạo mới
  • ✓Trang cá nhân: hồ sơ/CC/lương/KPI
Cải thiện🔜 IMPROVE
Liên kết sâu
  • →Hoa hồng sale tự động → bảng lương
  • →OT giao hàng tài xế → chấm công
  • →KPI nhân viên sales = doanh thu tháng
  • →Báo cáo so sánh nhiều tháng
  • →Thư khen thưởng tự động qua email
Nâng cao📋 LATER
HR Analytics
  • ○Biểu đồ turnover rate theo quý
  • ○Dự báo nhu cầu tuyển dụng
  • ○Đào tạo & đánh giá năng lực
  • ○Phúc lợi: BHXH, bảo hiểm, thưởng lễ
💰 Tài chính – Kế toán — 10% — Cần xây dựng
Sổ cái kép, thu chi, công nợ, tài sản, ngân sách
Đã có✅ DONE
Hạch toán cơ bản
  • ✓HachToan sheet (bút toán tự động từ BH)
  • ✓131/511 khi xuất hóa đơn VAT
  • ✓131/3331 thuế VAT đầu ra
  • ✓Phiếu lương tự động
  • ✓Chi phí vận chuyển (Vehicle.gs)
Sprint 1🔜 NEXT
Sổ quỹ & Thu Chi
  • →SoQuy sheet: tiền mặt, số dư đầu/cuối ngày
  • →PhieuThu sheet: số, ngày, người nộp, lý do, số tiền
  • →PhieuChi sheet: số, ngày, người nhận, lý do, số tiền
  • →Tự động tạo phiếu thu khi nhận tiền đơn hàng
  • →Báo cáo thu chi theo ngày/tháng
  • →API: fin_get_cashbook, fin_create_receipt, fin_create_payment
Sprint 2📋 LATER
Công nợ & Sổ cái
  • ○CongNo_KH sheet: tổng nợ, hạn nợ, nhắc hạn
  • ○CongNo_NCC sheet: nợ phải trả NCC
  • ○SoCai sheet: tổng hợp tất cả bút toán
  • ○Bảng cân đối kế toán đơn giản
  • ○Báo cáo P&L (lãi/lỗ) tháng
Sprint 3📋 LATER
Tài sản & Ngân sách
  • ○TaiSan sheet: TSCĐ, giá trị, khấu hao tháng
  • ○CongCu_DungCu sheet: CC-DC, phân bổ, xuất dùng
  • ○NganSach sheet: budget theo phòng/tháng
  • ○So sánh thực tế vs ngân sách
  • ○Cảnh báo vượt ngân sách
🎨 Giao diện & UX — Mega Menu + Modern
Thiết kế mega menu, mobile-first, dark mode, animation
Preview: Mega Menu Design
↑ Mega menu sẽ thay thế sidebar khi màn hình ≥ 1024px
Tiếp theo🎨 DESIGN
Mega Menu & Navigation
  • →Mega menu ngang thay sidebar (desktop ≥1024px)
  • →Hover → dropdown 2 cột với icon + mô tả
  • →Badge số lượng thông báo trên từng module
  • →Quick search Ctrl+K: tìm module, đơn hàng, NV
  • →Breadcrumb URL: /ban-hang/don-hang/SO0012
  • →Command palette (↑↓ enter) cho power user
UI System🎨 DESIGN
Design System
  • →sk-design-system.js: tokens, components
  • →DataTable component: sort, filter, export CSV
  • →Chart component: bar/line/donut (Chart.js)
  • →Form builder: validation, auto-save draft
  • →Notification center: toast + bell dropdown
  • →Print/PDF: xuất báo cáo, hóa đơn
Mobile📋 LATER
Mobile & PWA
  • ○Bottom nav bar trên mobile
  • ○Swipe gestures cho danh sách
  • ○PWA: Add to homescreen
  • ○Offline mode (Service Worker)
  • ○Camera: scan barcode sản phẩm
🐛 Lỗi đã gặp & Cách khắc phục
Ghi nhớ để không lặp lại — áp dụng cho mọi file GAS và JS
🔴 GAS BACKEND ERRORS
LỗiNguyên nhânFix
getSheetByName null
getActiveSpreadsheet() = null khi Web App URL
Dùng _getSS() — có fallback openById()
Maximum call stack
sed replace getActiveSpreadsheet → _getSS() làm _getSS() gọi chính nó
Thêm guard: nếu function đang gọi chính nó thì dùng openById trực tiếp
Action không tồn tại
GAS đang chạy phiên bản cũ chưa deploy
Test api('hrm_ping',{},cb) → phải thấy version mới; Deploy → Edit → New version
SyntaxError L945
2 file Auth tồn tại song song trong GAS project
Xóa file Auth cũ, chỉ giữ 1 file
_findEmpIdByEmail undefined
Hàm được gọi nhưng không được định nghĩa trong file
Đảm bảo function definition có trong cùng project GAS
SyntaxError regex
/pattern/i trong Python heredoc bị vỡ dòng (dấu ' trong [^'...])
Thay regex bằng indexOf() + split() — không dùng regex trong GAS code viết từ Python
ES6 \u{1F4BC}
GAS chỉ dùng ES5 — không hỗ trợ \u{XXXXX}
Dùng \uXXXX (4 ký số) hoặc Unicode char trực tiếp trong string
🟡 JS FRONTEND ERRORS
Unexpected identifier ᅯ
Tên hàm có tiếng Việt có dấu: loadKeToán, loadChấmCông
Chỉ dùng ASCII cho tên hàm/biến: loadKeToan, loadChamCong
Unexpected token ';'
Ternary trong HTML string: 'var(--yellow))+ thiếu dấu '
Đếm cẩn thận cặp ' trong ternary string: 'val1' : 'val2')+
Popup không mở
window.showSalesModal phụ thuộc file khác chưa load
Mỗi module tự build modal inline, không phụ thuộc file khác
new Date() inline
new Date().toISOString() trong HTML string concat → SyntaxError
Tách ra biến: var todayStr = new Date().toISOString().split('T')[0];
Sapo 0 orders
Sapo VN dùng order.code (không phải .name như Shopify), customer.name (ko first/last)
Map đúng: order.code, customer.name, address.ward/district/city
Bare quote line
Python heredoc giữ newline thật bên trong JS string
Scan file sau khi tạo, tìm dòng chỉ có dấu nháy đơn
📝 Nhật ký cập nhật Tự động cập nhật sau mỗi thay đổi
Toàn bộ lịch sử phát triển — lỗi, fix, tính năng mới
Thời gianVersionPhân hệThay đổiTrạng thái
21/03/2026 v4.2.1 🎨 UI Tạo Master Plan HTML · URL alias hash routing · Auth check ẩn · Dashboard default sau login ✅
21/03/2026 v4.1.0 🛒 Bán hàng Fix Sapo VN API fields (code/customer.name/ward/district/city) · Thêm UI cấu hình Sapo ✅
21/03/2026 v4.0.0 🛒 Bán hàng Phân hệ bán hàng đầy đủ: BangGia · ChietKhau · DonHang 9TT · GiaoHang · HoaDonVAT · Sapo · CRM ✅
21/03/2026 v3.9.1 👔 Nhân sự Fix Payroll.gs: SK_Utils.getOrCreateSheet() · SK_calcSaleCommission/DeliveryBonus dùng _getSS() ✅
21/03/2026 v3.9.0 👔 Nhân sự Viết lại sk-hrm-daily-att.js: port đúng prCalcSummary() · local state cache · prSaveBonus oninput ✅
21/03/2026 v3.8.0 👔 Nhân sự Fix gender/bank dropdown · Địa chỉ 2 cấp 63 tỉnh/TP · Workflow auto-link khi duyệt · Font Be Vietnam Pro ✅
21/03/2026 v3.7.3 👔 Nhân sự Fix Auth.gs: _findEmpIdByEmail bị thiếu định nghĩa · Fix sk-hrm-payroll.js: loadKeToán → ASCII · bare quote ✅
20/03/2026 v3.7.0 👔 Nhân sự HRM hoàn chỉnh 8/8 module · Menu sắp xếp · Liên kết User↔NV · Trang cá nhân · sk-hrm-myprofile.js ✅
20/03/2026 v3.6.x 👔 Nhân sự HRM Sprint 1-4: Personnel · Attendance · Payroll · Portal · Workflow · KPI · Recruitment · Reports ✅
20/03/2026 v3.5.x 🏭 Kho vận Vehicle module hoàn chỉnh: registry · dispatch · trip cost · fuel · monthly report · finance sync ✅
📋 Cách cập nhật Nhật ký
Trên Blogger: Thiết kế → Chỉnh sửa HTML → Tìm id="changelog-body" → Thêm ... mới lên đầu.

Cập nhật % tiến độ: Tìm class="mc-pct" và sửa số %.

Thêm lỗi mới: Tìm id="changelog-table" trong Error Log section.

Phím tắt: Nhấn 1 – 9 để chuyển tab nhanh (không dùng trong input).
14
Lỗi đã gặp & fix
128
API routes hoạt động
19
JS modules CDN
48
Ngày phát triển