8.1 KiB
HQLAND - ĐÁNH GIÁ HIỆN TRẠNG & ĐỀ XUẤT PHÁT TRIỂN
Đánh giá khách quan sau phiên làm việc 28/04/2026
Ngườ đánh giá: AI Assistant (Kimi)
Lưu ý: Đây là đánh giá tự phê bình để cải thiện chất lượng hệ thống
I. ĐIỂM MẠNH (Đã hoàn thành tốt)
1. Kiến trúc kỹ thuật
- Schemas Architecture: Tách biệt Form/Table ra khỏi Resource → code gọn gàng, dễ bảo trì
- UUID 100%: Phù hợp với hệ thống phân tán, khó đoán ID
- PostgreSQL + JSONB: Tận dụng tốt khả năng lưu trữ linh hoạt của Postgres
- Testing: PHPUnit cấu hình đúng PostgreSQL, test tự động chạy được
2. Nghiệp vụ tài chính
- Calculation Pipeline: Tính toán step-by-step có làm tròn tại mỗi bước → đúng chuẩn kế toán
- PaymentObserver: Tự động tính công nợ + khấu trừ dư → giảm sai sót thủ công
- Lịch thanh toán: Tạo từ template, hỗ trợ nhiều đợt với ngày đến hạn linh hoạt
- Form Templates: Mail Merge Engine cho phép admin tự tạo mẫu in → giảm phụ thuộc dev
3. Import dữ liệu
- Import Excel cho Products, Customers, Contracts đều hoạt động
- Xử lý được ngày tháng Excel (serial number), số điện thoại phức tạp
- Logic "bắc cầu" 2 file hợp đồng khá thông minh
II. ĐIỂM YẾU & LỖI TIỀM ẨN (Cần sửa gấp)
🔴 Nghiêm trọng - Có thể crash/mất dữ liệu
| # | Vấn đề | Mô tả | Hệ quả |
|---|---|---|---|
| 1 | eval() |
safeEval() execute string bằng eval('return ' . $expression) |
Nếu sanitize lỗi → Remote Code Execution. Hiện filter regex chưa đủ chặt |
| 2 | Contract::saved() gọi saveQuietly() |
Sau khi save HĐ, trigger tính toán rồi save lại | Nếu logic thay đổi → infinite loop. Hiện tại may mắn không loop vì chỉ update calculation_log nhưng rủi ro cao |
| 3 | ImportContractsComplex dùng DB::beginTransaction nhưng các service khác không |
Nếu tạo HĐ thành công nhưng tạo lịch TT lỗi → dữ liệu lệch | |
| 4 | Không có Soft Delete | Tất cả model dùng Model::delete() cứng |
Xóa nhầm HĐ/Thu tiền → mất vĩnh viễn, không audit được |
🟡 Trung bình - Ảnh hưởng trải nghiệm
| # | Vấn đề | Mô tả |
|---|---|---|
| 5 | Chưa có phân quyền | Chỉ có 1 loại user, ai cũng vào được mọi chức năng |
| 6 | Chưa có API | Hiện chỉ có Filament Admin Panel |
| 7 | ContractForm chưa hiển thị calculation_log đúng |
Khi create HĐ mới, final_value_display dùng DiscountEngine cũ thay vì Pipeline |
| 8 | Payment chưa liên kết người thu | Payment chỉ có contract_id, không có collected_by |
| 9 | Chưa có sổ quỹ | Thu tiền nhưng không ghi nhận vào quỹ tiền mặt/ngân hàng |
🟢 Thấp - Cần cải thiện lâu dài
| # | Vấn đề | Mô tả |
|---|---|---|
| 10 | Chưa có CRM Pipeline | Không quản lý khách hàng tiềm năng (Lead) |
| 11 | Sản phẩm chỉ có status "Đang mở bán", không có đợt/bLOCK mở bán riêng | |
| 12 | Chưa có báo cáo BCTC | Chỉ có Dashboard widget đơn giản |
| 13 | Không có quản lý hạ tầng sau bán | infrastructure_status chỉ là JSONB tĩnh |
III. SO SÁNH VỚI CHUẨN NGÀNH BĐS VIỆT NAM
| Tiêu chí | HQLand hiện tại | Phần mềm BĐS chuyên nghiệp (Landsoft, REE) | Khoảng cách |
|---|---|---|---|
| CRM Lead | Không có | Quản lý khách đến từ Facebook, sàn... | 🔴 Thiếu |
| Pipeline bán hàng | Không có | Lead → Chăm sóc → Giữ chỗ → HĐMB | 🔴 Thiếu |
| Đợt mở bán | ✅ Có - SalesPhase module | Mở bán Phase 1, 2, 3 với giá/chính sách khác nhau | 🟢 Tương đương |
| Chính sách giá động | Chiết khấu tĩnh | Chiết khấu theo đợt, theo khách hàng VIP, theo số lượng | 🟡 Cơ bản |
| Tài chính | Thu tiền + công nợ | BCTC, dòng tiền, đối soát ngân hàng | 🟡 Cơ bản |
| In ấn | Form Template | In HĐ, phiếu thu, phiếu tính giá | 🟢 Tương đương |
| Phân quyền | Không có | Role: Admin, Sales, Kế toán, Thu ngân... | 🔴 Thiếu |
| Mobile App | Không có | App cho sales, app cho khách hàng | 🔴 Thiếu |
Nhận xét: HQLand hiện tại mới đạt 30-40% so với phần mềm BĐS chuyên nghiệp. Phù hợp làm hệ thống nội bộ quản lý dữ liệu + thu tiền, nhưng chưa đủ để làm phần mềm bán hàng toàn diện.
IV. ĐỀ XUẤT LỘ TRÌNH PHÁT TRIỂN
Giai đoạn 1: Sửa lỗi & An toàn (ĐÃ HOÀN THÀNH)
Thay thế[DONE] - Dùng shunting yard + bcmath trong MailMergeServiceeval()Thêm[DONE] -DB::transactionContractScheduleService::generateFromTemplate()đã có transaction- Thêm Soft Delete cho Contract, Payment, Customer + model
DeletedByđể audit - Thêm
collected_byvào bảngpayments+ hiển thị ngườ thu trong Form/Table Fix[DONE] - DùngContract::saved()self::$calculatingguard flag +updateQuietly()
Giai đoạn 2: Quyền hạn & Báo cáo (2 tuần)
- Cài Spatie Permission - Phân quyền: Admin, Sales Manager, Sales, Kế toán, Thu ngân
- Báo cáo công nợ chi tiết - Theo khách hàng, theo dự án, theo đợt TT
- Báo cáo thu chi - Sổ quỹ tiền mặt, sổ quỹ ngân hàng
- Export Excel báo cáo - Báo cáo doanh thu, công nợ cho kế toán
Giai đoạn 3: Mở rộng nghiệp vụ (Đang làm)
- CRM Pipeline - Lead → Opportunity → Contract với các stage tùy chỉnh
Quản lý đợt mở bán[DONE] - SalesPhase module với giá bán và chiết khấu riêng theo đợt- Chính sách bán hàng động - Chiết khấu theo thờ điểm, theo số lượng, theo CTV
- Notification đợt TT - Email/SMS nhắc thanh toán tự động
Giai đoạn 4: Tích hợp & Tối ưu (2 tháng)
- API REST cho mobile app / website bán hàng
- Đối soát ngân hàng - Import sao kê ngân hàng, tự động match với phiếu thu
- Quản lý bảo hành - Theo dõi sửa chữa hạ tầng, bàn giao nhà
- Báo cáo BCTC - Theo chuẩn kế toán Việt Nam, có thể xuất cho thuế
V. KHUYẾN NGHỊ CHO BẠN
Nên làm NGAY (tuần tới):
Sửa lỗi nghiêm trọng #1, #2, #3. Không sửa → hệ thống có thể crash hoặc mất dữ liệu khi dữ liệu lớn lên.
Nên làm TIẾP THEO (tháng tới):
Phân quyền + Báo cáo tài chính. Đây là yêu cầu tối thiểu để kế toán và ban giám đốc sử dụng được.
Có thể ĐỂ SAU:
Mobile app, CRM Pipeline, đối soát ngân hàng. Các tính năng này tốn nhiều thời gian nhưng chưa ảnh hưởng đến vận hành cơ bản.
Đánh giá này dựa trên code review thực tế và so sánh với best practices trong ngành BĐS Việt Nam. Cần cập nhật định kỳ.