# Hướng Dẫn Sử Dụng và Quy Trình Làm Việc - Hệ Thống VPEG AM & O&M

## 📋 Mục Lục

1. [Tổng Quan Hệ Thống](#tổng-quan-hệ-thống)
2. [Cài Đặt và Cấu Hình](#cài-đặt-và-cấu-hình)
3. [Quy Trình Phát Triển](#quy-trình-phát-triển)
4. [Hướng Dẫn Sử Dụng](#hướng-dẫn-sử-dụng) - _**Xem file riêng: [HUONG_DAN_SU_DUNG_UI_TRAINING.md](./HUONG_DAN_SU_DUNG_UI_TRAINING.md)**_
5. [Kiến Trúc Hệ Thống](#kiến-trúc-hệ-thống)
6. [Quy Trình Triển Khai](#quy-trình-triển-khai)
7. [Best Practices](#best-practices)
8. [Troubleshooting](#troubleshooting)

---

## 📖 Tổng Quan Hệ Thống

### Giới Thiệu

**Hệ thống VPEG AM & O&M** là một hệ thống quản lý tài sản (Asset Management) và vận hành & bảo trì (Operations & Maintenance) cho các dự án năng lượng tái tạo của VPEG. Hệ thống được xây dựng với công nghệ hiện đại, hỗ trợ quản lý toàn diện từ tài sản, dự án, hợp đồng đến bảo trì, tuân thủ và báo cáo.

### Các Module Chính

1. **Asset Management (AM)**
   - Quản lý tài sản
   - Quản lý hợp đồng
   - Quản lý dự án

2. **Operations & Maintenance (O&M)**
   - Vận hành
   - Work Orders (Phiếu công việc)
   - Lịch bảo trì (Maintenance Schedule)
   - Quản lý kho (Inventory)
   - Tuân thủ (Compliance)

3. **Các Module Khác**
   - Governance (Quản trị)
   - Finance (Tài chính)
   - Reports (Báo cáo)
   - Settings (Cài đặt)

### Công Nghệ Sử Dụng

**Frontend:**
- React 19.2.3
- TypeScript
- Vite 6.2.0
- React Router DOM 7.12.0
- Zustand (State Management)
- Tailwind CSS
- Lucide React (Icons)
- Recharts (Charts)
- Leaflet (Maps)

**Backend:**
- Node.js
- Express.js
- TypeScript
- MongoDB với Mongoose
- JWT Authentication
- bcrypt (Password hashing)

---

## 🔧 Cài Đặt và Cấu Hình

### Yêu Cầu Hệ Thống

- **Node.js**: >= 18.x
- **npm**: >= 9.x
- **MongoDB**: >= 5.0 (hoặc MongoDB Atlas)
- **Git**: Để clone repository

### Bước 1: Clone Repository

```bash
git clone <repository-url>
cd <project-directory>
```

### Bước 2: Cài Đặt Dependencies

#### Frontend

```bash
# Cài đặt dependencies cho frontend
npm install
```

#### Backend

```bash
# Cài đặt dependencies cho backend
cd backend
npm install

# Hoặc từ root directory
npm run backend:install
```

### Bước 3: Cấu Hình Môi Trường

#### Frontend (.env.local)

Tạo file `.env.local` trong thư mục root:

```env
# API Configuration
VITE_API_URL=/api
VITE_DATA_MODE=demo  # hoặc "mongodb"

# MongoDB (nếu sử dụng trực tiếp từ frontend)
VITE_MONGODB_URI=mongodb://localhost:27017/vpeg-amom

# Gemini API (nếu có sử dụng)
GEMINI_API_KEY=your-gemini-api-key
```

#### Backend (.env)

Tạo file `.env` trong thư mục `backend/`:

```env
# Server Configuration
PORT=2123
NODE_ENV=development

# Database
MONGODB_URI=mongodb://localhost:27017/vpeg-amom

# JWT Configuration
JWT_SECRET=your-super-secret-jwt-key-change-in-production
JWT_EXPIRES_IN=7d

# CORS Configuration
CORS_ORIGIN=https://aom.vuphong.com,http://localhost:3123

# API Configuration
API_PREFIX=/api/v1
```

### Bước 4: Khởi Tạo Database

#### Option 1: Sử dụng MongoDB Local

1. Đảm bảo MongoDB đang chạy:
```bash
# Windows
mongod

# Linux/Mac
sudo systemctl start mongod
```

2. Chạy script migrate dữ liệu demo (nếu có):
```bash
npm run migrate:demo
```

#### Option 2: Sử dụng MongoDB Atlas

1. Tạo cluster trên MongoDB Atlas
2. Lấy connection string
3. Cập nhật `MONGODB_URI` trong `.env` của backend

### Bước 5: Setup Demo Passwords (Nếu cần)

```bash
cd backend
npm run setup:passwords
```

### Bước 6: Kiểm Tra Kết Nối Database

```bash
npm run test:mongodb
```

---

## 🚀 Quy Trình Phát Triển

### Chạy Development Server

#### Chạy Frontend

```bash
# Từ root directory
npm run dev
```

Frontend sẽ chạy tại: `http://localhost:3123`

**Lưu ý:**
- Trong development, frontend chạy tại `/dev/` path
- Vite proxy tự động forward `/api/*` requests đến backend

#### Chạy Backend

**Terminal 1 (Backend):**
```bash
# Từ thư mục backend
npm run dev

# Hoặc từ root directory
npm run backend:dev
```

Backend sẽ chạy tại: `http://localhost:2123`

**Terminal 2 (Frontend):**
```bash
# Từ root directory
npm run dev
```

### Cấu Trúc Thư Mục

```
project-root/
├── backend/                 # Backend API Server
│   ├── src/
│   │   ├── config/         # Configuration files
│   │   ├── models/         # Mongoose models
│   │   ├── controllers/    # Route controllers
│   │   ├── routes/         # API routes
│   │   ├── middleware/    # Express middleware
│   │   ├── services/       # Business logic services
│   │   ├── utils/          # Utility functions
│   │   └── server.ts       # Server entry point
│   ├── scripts/            # Utility scripts
│   ├── package.json
│   └── tsconfig.json
│
├── components/             # React components
│   ├── common/            # Common components
│   ├── compliance/        # Compliance components
│   ├── layout/            # Layout components
│   └── ...
│
├── pages/                 # Page components
│   ├── Dashboard.tsx
│   ├── Login.tsx
│   ├── AssetManagement.tsx
│   └── ...
│
├── hooks/                 # Custom React hooks
├── services/              # Frontend services
│   ├── apiClient.ts       # API client
│   ├── authService.ts     # Authentication service
│   └── dataService.ts     # Data service
├── store/                 # Zustand stores
│   ├── useAuthStore.ts
│   ├── useAssetStore.ts
│   └── useUIStore.ts
├── utils/                 # Utility functions
├── types.ts               # TypeScript types
├── vite.config.ts         # Vite configuration
└── package.json
```

### Quy Trình Làm Việc với Git

1. **Tạo branch mới:**
```bash
git checkout -b feature/ten-tinh-nang
```

2. **Commit changes:**
```bash
git add .
git commit -m "feat: mô tả thay đổi"
```

3. **Push và tạo Pull Request:**
```bash
git push origin feature/ten-tinh-nang
```

### Coding Standards

#### TypeScript

- Sử dụng TypeScript cho tất cả files
- Định nghĩa types/interfaces trong `types.ts` hoặc file riêng
- Tránh sử dụng `any`, sử dụng `unknown` nếu cần

#### React Components

- Sử dụng functional components với hooks
- Tách logic phức tạp vào custom hooks
- Sử dụng Zustand cho state management

#### API Calls

- Luôn sử dụng `apiClient` từ `services/apiClient.ts`
- Xử lý errors một cách graceful
- Hiển thị loading states

#### Styling

- Sử dụng Tailwind CSS classes
- Hỗ trợ dark mode với class `dark:`
- Responsive design với breakpoints

---

## 📱 Hướng Dẫn Sử Dụng

### Đăng Nhập

1. Truy cập: `http://localhost:3123` (development) hoặc `https://aom.vuphong.com` (production)
2. Nhập email và password vào form đăng nhập
3. Click nút **"Đăng nhập"** hoặc nhấn `Enter`
4. Hệ thống sẽ tự động lưu token và redirect đến Dashboard

**Lưu ý:**
- Nếu quên mật khẩu, liên hệ quản trị viên để reset
- Token được lưu trong localStorage và tự động gửi kèm mỗi request

### Giao Diện Tổng Quan

#### Sidebar Navigation

Sidebar nằm bên trái màn hình, chứa các module được nhóm theo chức năng:

- **Thu gọn/Mở rộng**: Click vào icon menu (☰) ở header để thu gọn/mở rộng sidebar
- **Mobile**: Trên mobile, sidebar sẽ hiển thị dạng overlay khi mở
- **Tooltip**: Khi sidebar thu gọn, di chuột vào icon để xem tên module

#### Header

Header nằm phía trên, chứa:
- **Logo/Tên hệ thống**: Click để về Dashboard
- **Search bar**: Tìm kiếm nhanh (nếu có)
- **Theme toggle**: Icon mặt trăng/mặt trời để chuyển đổi Dark/Light mode
- **Thông báo**: Icon chuông để xem thông báo
- **Profile**: Avatar người dùng ở góc phải

#### Keyboard Shortcuts

- `Esc`: Đóng modal/dialog đang mở
- `Ctrl/Cmd + /`: Hiển thị danh sách phím tắt (nếu có)

#### Dark Mode

- Click vào icon theme (mặt trăng/mặt trời) ở header để chuyển đổi
- Preference được lưu tự động trong localStorage
- Hệ thống sẽ nhớ lựa chọn của bạn cho lần đăng nhập sau

---

## 📊 Module 1: Dashboard (Tổng Quan)

### Mục Đích

Dashboard cung cấp cái nhìn tổng quan về hệ thống với các chỉ số KPI, biểu đồ, và thông tin quan trọng.

### Các Thành Phần Chính

#### 1. KPI Cards (Thẻ Chỉ Số)

**Vị trí**: Phía trên cùng của Dashboard

**Chức năng**:
- Hiển thị các chỉ số quan trọng: Tổng công suất, Sản lượng điện, Hiệu suất, Số lượng tài sản
- Mỗi card có icon, giá trị, đơn vị, và xu hướng (tăng/giảm)
- Click vào card để xem chi tiết (nếu có)

**Cách sử dụng**:
- Xem nhanh các chỉ số tổng quan
- So sánh với kỳ trước qua biểu tượng xu hướng

#### 2. Biểu Đồ (Charts)

**Các loại biểu đồ**:
- **Bar Chart**: So sánh sản lượng điện theo thời gian
- **Line Chart**: Xu hướng hiệu suất
- **Area Chart**: Tổng hợp dữ liệu theo khoảng thời gian
- **Pie Chart**: Phân bổ theo dự án/tài sản

**Cách sử dụng**:
- Chọn khoảng thời gian: `7 ngày`, `30 ngày`, `Năm`, hoặc `Tùy chọn`
- Hover vào điểm trên biểu đồ để xem giá trị chi tiết
- Click vào legend để ẩn/hiện dữ liệu

#### 3. Danh Sách Ticket/Phiếu Sự Cố

**Vị trí**: Phần giữa hoặc bên phải Dashboard

**Chức năng**:
- Hiển thị các ticket mới nhất hoặc đang xử lý
- Mỗi ticket hiển thị: ID, tiêu đề, trạng thái, mức độ ưu tiên, ngày tạo

**Cách sử dụng**:
- Click vào ticket để xem chi tiết
- Click "Xem tất cả" để chuyển đến trang Operations

#### 4. Thông Tin Thời Tiết

**Vị trí**: Thường ở góc trên bên phải

**Hiển thị**:
- Nhiệt độ, độ ẩm
- Tốc độ gió
- Bức xạ mặt trời

#### 5. Nút Refresh

**Vị trí**: Góc trên bên phải

**Chức năng**: Làm mới dữ liệu Dashboard

**Cách sử dụng**: Click icon refresh (🔄) để cập nhật dữ liệu mới nhất

### Quy Trình Làm Việc

1. **Xem tổng quan**: Sau khi đăng nhập, Dashboard tự động hiển thị
2. **Chọn dự án**: Nếu có nhiều dự án, chọn dự án từ dropdown ở header
3. **Chọn khoảng thời gian**: Chọn khoảng thời gian để xem dữ liệu tương ứng
4. **Xem chi tiết**: Click vào các card hoặc biểu đồ để xem chi tiết
5. **Làm mới**: Click refresh để cập nhật dữ liệu

---

## 🏗️ Module 2: Projects (Quản Lý Dự Án)

### Mục Đích

Quản lý thông tin các dự án năng lượng tái tạo trong hệ thống.

### Các Thành Phần Chính

#### 1. Danh Sách Dự Án

**Vị trí**: Phần chính của trang

**Hiển thị**:
- Tên dự án
- Mã dự án
- Địa điểm
- Công suất lắp đặt
- Trạng thái (Đang vận hành, Đang xây dựng, Tạm dừng)
- Ngày khởi công
- Ngày vận hành thương mại (COD)

**Cách sử dụng**:
- Scroll để xem tất cả dự án
- Click vào một dự án để xem chi tiết

#### 2. Thanh Tìm Kiếm và Lọc

**Vị trí**: Phía trên danh sách dự án

**Chức năng**:
- **Tìm kiếm**: Nhập tên, mã dự án để tìm
- **Lọc theo trạng thái**: Chọn trạng thái từ dropdown
- **Lọc theo địa điểm**: Chọn tỉnh/thành phố

**Cách sử dụng**:
1. Nhập từ khóa vào ô tìm kiếm
2. Chọn bộ lọc từ dropdown
3. Kết quả sẽ tự động cập nhật

#### 3. Nút Thêm Dự Án Mới

**Vị trí**: Góc trên bên phải, bên cạnh thanh tìm kiếm

**Chức năng**: Mở form thêm dự án mới

**Cách sử dụng**:
1. Click nút **"+ Thêm dự án"** hoặc icon **Plus (+)** 
2. Điền thông tin trong form:
   - Tên dự án (bắt buộc)
   - Mã dự án (bắt buộc, duy nhất)
   - Địa điểm (bắt buộc)
   - Công suất lắp đặt (MW)
   - Ngày khởi công
   - Ngày COD dự kiến
   - Mô tả
3. Click **"Lưu"** để tạo dự án mới

#### 4. Chỉnh Sửa Dự Án

**Cách sử dụng**:
1. Click vào dự án trong danh sách để mở chi tiết
2. Click nút **"Chỉnh sửa"** (icon bút chì ✏️)
3. Cập nhật thông tin cần thiết
4. Click **"Lưu"** để cập nhật

#### 5. Xóa Dự Án

**Cách sử dụng**:
1. Click vào dự án để mở chi tiết
2. Click nút **"Xóa"** (icon thùng rác 🗑️)
3. Xác nhận xóa trong dialog
4. **Lưu ý**: Chỉ xóa được dự án không có tài sản hoặc dữ liệu liên quan

### Quy Trình Làm Việc

1. **Xem danh sách**: Vào menu **"Dự án (Projects)"** từ sidebar
2. **Tìm kiếm**: Sử dụng thanh tìm kiếm để tìm dự án cụ thể
3. **Xem chi tiết**: Click vào dự án để xem thông tin đầy đủ
4. **Thêm mới**: Click nút "+" để thêm dự án mới
5. **Cập nhật**: Chỉnh sửa thông tin khi có thay đổi
6. **Chọn dự án**: Chọn dự án từ dropdown ở header để làm việc với dự án đó

---

## 🏭 Module 3: Asset Management - Assets (Hồ Sơ Tài Sản)

### Mục Đích

Quản lý hồ sơ chi tiết của tất cả tài sản trong hệ thống (nhà máy, khối, inverter, tủ combiner, string, panel, trạm thời tiết).

### Các Thành Phần Chính

#### 1. Cây Thư Mục Tài Sản (Asset Tree)

**Vị trí**: Bên trái màn hình

**Cấu trúc phân cấp**:
```
Dự án (Project)
  └── Nhà máy (Plant)
      └── Khối (Block)
          └── Inverter
              └── Tủ Combiner
                  └── String
                      └── Panel
```

**Chức năng**:
- Hiển thị cấu trúc phân cấp tài sản
- Expand/Collapse: Click vào icon mũi tên để mở/đóng node
- Chọn tài sản: Click vào tên tài sản để xem chi tiết

**Cách sử dụng**:
1. Chọn dự án từ dropdown ở trên cùng
2. Click vào các node để mở rộng cây
3. Click vào tên tài sản để xem thông tin chi tiết ở bên phải

#### 2. Form Chi Tiết Tài Sản

**Vị trí**: Bên phải màn hình (khi chọn tài sản)

**Thông tin hiển thị**:
- **Thông tin cơ bản**:
  - Tên tài sản
  - Mã tài sản (Asset Code)
  - Loại tài sản (Asset Type)
  - Serial Number
  - Nhà sản xuất (Manufacturer)
  - Model
  - Trạng thái (Operational, Maintenance, Decommissioned)
- **Thông tin vị trí**:
  - Tọa độ GPS (nếu có)
  - Địa chỉ
- **Thông tin kỹ thuật**:
  - Công suất định mức
  - Điện áp
  - Dòng điện
  - Các thông số kỹ thuật khác (tùy loại tài sản)
- **Thông tin bảo hành**:
  - Ngày lắp đặt
  - Ngày hết hạn bảo hành
  - Nhà cung cấp

**Cách sử dụng**:
- Xem thông tin: Tự động hiển thị khi chọn tài sản
- Chỉnh sửa: Click nút **"Chỉnh sửa"** để cập nhật thông tin

#### 3. Thanh Tìm Kiếm và Lọc

**Vị trí**: Phía trên cây tài sản

**Chức năng**:
- **Tìm kiếm**: Tìm theo tên, mã, serial number, nhà sản xuất
- **Lọc theo trạng thái**: Operational, Maintenance, Decommissioned
- **Lọc theo loại**: Plant, Block, Inverter, Combiner Box, String, Panel, Weather Station

**Cách sử dụng**:
1. Nhập từ khóa vào ô tìm kiếm
2. Chọn bộ lọc từ dropdown
3. Kết quả sẽ được highlight trong cây

#### 4. Thêm Tài Sản Mới

**Cách sử dụng**:
1. Chọn tài sản cha trong cây (nơi muốn thêm tài sản con)
2. Click nút **"+ Thêm tài sản"** ở góc trên bên phải
3. Điền form:
   - **Loại tài sản**: Chọn từ dropdown (bắt buộc)
   - **Tên tài sản**: Nhập tên (bắt buộc)
   - **Mã tài sản**: Nhập mã (bắt buộc, duy nhất)
   - **Serial Number**: Nhập số seri (nếu có)
   - **Nhà sản xuất**: Chọn hoặc nhập
   - **Model**: Nhập model
   - **Trạng thái**: Chọn từ dropdown
   - **Thông số kỹ thuật**: Điền các thông số theo loại tài sản
   - **Tọa độ GPS**: Nhập latitude, longitude (nếu có)
4. Click **"Lưu"** để tạo tài sản

**Lưu ý**:
- Phải chọn tài sản cha trước khi thêm tài sản con
- Mã tài sản phải duy nhất trong hệ thống

#### 5. Chỉnh Sửa Tài Sản

**Cách sử dụng**:
1. Chọn tài sản cần chỉnh sửa trong cây
2. Click nút **"Chỉnh sửa"** (icon bút chì) trong form chi tiết
3. Cập nhật thông tin cần thiết
4. Click **"Lưu"** để cập nhật

#### 6. Xóa Tài Sản

**Cách sử dụng**:
1. Chọn tài sản cần xóa
2. Click nút **"Xóa"** (icon thùng rác)
3. Xác nhận xóa trong dialog
4. **Lưu ý**: Chỉ xóa được tài sản không có tài sản con hoặc dữ liệu liên quan

### Quy Trình Làm Việc

1. **Chọn dự án**: Chọn dự án từ dropdown ở header
2. **Xem cấu trúc**: Mở rộng cây tài sản để xem cấu trúc
3. **Tìm kiếm**: Sử dụng thanh tìm kiếm để tìm tài sản cụ thể
4. **Xem chi tiết**: Click vào tài sản để xem thông tin đầy đủ
5. **Thêm mới**: Chọn tài sản cha, click "+" để thêm tài sản con
6. **Cập nhật**: Chỉnh sửa thông tin khi có thay đổi (lắp đặt, bảo trì, v.v.)
7. **Theo dõi**: Sử dụng trạng thái để theo dõi tình trạng tài sản

---

## 📄 Module 4: Asset Management - Contracts (Hợp Đồng & Pháp Lý)

### Mục Đích

Quản lý các hợp đồng liên quan đến dự án và tài sản (hợp đồng EPC, O&M, bảo hành, mua bán, v.v.).

### Các Thành Phần Chính

#### 1. Danh Sách Hợp Đồng

**Vị trí**: Phần chính của trang

**Hiển thị**:
- Số hợp đồng
- Tên hợp đồng
- Loại hợp đồng (EPC, O&M, Bảo hành, Mua bán, Cho thuê, Khác)
- Đối tác (Nhà thầu/Nhà cung cấp)
- Giá trị hợp đồng
- Ngày ký
- Ngày hết hạn
- Trạng thái (Đang hiệu lực, Sắp hết hạn, Đã hết hạn, Đã hủy)

**Cách sử dụng**:
- Scroll để xem tất cả hợp đồng
- Click vào hợp đồng để xem chi tiết
- Sắp xếp: Click vào header cột để sắp xếp

#### 2. Thanh Tìm Kiếm và Lọc

**Vị trí**: Phía trên danh sách

**Chức năng**:
- **Tìm kiếm**: Tìm theo số hợp đồng, tên, đối tác
- **Lọc theo loại**: Chọn loại hợp đồng
- **Lọc theo trạng thái**: Chọn trạng thái
- **Lọc theo dự án**: Chọn dự án cụ thể
- **Lọc theo khoảng thời gian**: Chọn ngày bắt đầu và kết thúc

**Cách sử dụng**:
1. Nhập từ khóa vào ô tìm kiếm
2. Chọn các bộ lọc từ dropdown
3. Kết quả sẽ tự động cập nhật

#### 3. Thêm Hợp Đồng Mới

**Cách sử dụng**:
1. Click nút **"+ Thêm hợp đồng"** ở góc trên bên phải
2. Điền form:
   - **Số hợp đồng**: Nhập số hợp đồng (bắt buộc, duy nhất)
   - **Tên hợp đồng**: Nhập tên (bắt buộc)
   - **Loại hợp đồng**: Chọn từ dropdown (bắt buộc)
   - **Dự án**: Chọn dự án liên quan
   - **Đối tác**: Nhập tên đối tác (bắt buộc)
   - **Giá trị hợp đồng**: Nhập số tiền và đơn vị (VND/USD)
   - **Ngày ký**: Chọn ngày ký hợp đồng
   - **Ngày bắt đầu**: Chọn ngày bắt đầu hiệu lực
   - **Ngày hết hạn**: Chọn ngày hết hạn
   - **Mô tả**: Nhập mô tả chi tiết
   - **File đính kèm**: Upload file PDF hợp đồng (nếu có)
3. Click **"Lưu"** để tạo hợp đồng

#### 4. Xem Chi Tiết Hợp Đồng

**Cách sử dụng**:
1. Click vào hợp đồng trong danh sách
2. Xem thông tin đầy đủ:
   - Thông tin cơ bản
   - Điều khoản chính
   - File đính kèm (download nếu có)
   - Lịch sử thay đổi
   - Cảnh báo hết hạn (nếu sắp hết hạn)

#### 5. Chỉnh Sửa Hợp Đồng

**Cách sử dụng**:
1. Click vào hợp đồng để mở chi tiết
2. Click nút **"Chỉnh sửa"**
3. Cập nhật thông tin (có thể gia hạn, cập nhật giá trị, v.v.)
4. Click **"Lưu"** để cập nhật

#### 6. Gia Hạn Hợp Đồng

**Cách sử dụng**:
1. Chọn hợp đồng sắp hết hạn
2. Click nút **"Gia hạn"**
3. Nhập ngày hết hạn mới
4. Cập nhật các điều khoản nếu có thay đổi
5. Click **"Lưu"** để gia hạn

### Quy Trình Làm Việc

1. **Xem danh sách**: Vào menu **"Hợp đồng & Pháp lý"** từ sidebar
2. **Lọc hợp đồng**: Sử dụng bộ lọc để xem hợp đồng theo loại, trạng thái, dự án
3. **Tìm kiếm**: Tìm hợp đồng cụ thể bằng số hợp đồng hoặc tên
4. **Thêm mới**: Thêm hợp đồng mới khi ký hợp đồng với đối tác
5. **Theo dõi**: Xem cảnh báo hợp đồng sắp hết hạn
6. **Gia hạn**: Gia hạn hợp đồng trước khi hết hạn
7. **Xem file**: Download và xem file hợp đồng đã upload

---

## 🔧 Module 5: Operations & Maintenance - Operations (Phiếu Sự Cố/Ticket)

### Mục Đích

Quản lý các phiếu sự cố (ticket) phát sinh trong quá trình vận hành nhà máy.

### Các Thành Phần Chính

#### 1. Danh Sách Phiếu Sự Cố

**Vị trí**: Phần chính của trang

**Hiển thị**:
- Mã ticket (Ticket ID)
- Tiêu đề
- Loại sự cố (Kỹ thuật, Môi trường, An toàn, Khác)
- Mức độ ưu tiên (Cao, Trung bình, Thấp)
- Trạng thái (Mới, Đang xử lý, Đã xử lý, Đã đóng)
- Tài sản liên quan
- Người tạo
- Ngày tạo
- Ngày cập nhật

**Cách sử dụng**:
- Click vào ticket để xem chi tiết
- Sắp xếp: Click header cột để sắp xếp
- Lọc: Sử dụng bộ lọc ở trên

#### 2. Thanh Tìm Kiếm và Lọc

**Vị trí**: Phía trên danh sách

**Chức năng**:
- **Tìm kiếm**: Tìm theo mã ticket, tiêu đề, mô tả
- **Lọc theo trạng thái**: Mới, Đang xử lý, Đã xử lý, Đã đóng
- **Lọc theo mức độ ưu tiên**: Cao, Trung bình, Thấp
- **Lọc theo loại**: Kỹ thuật, Môi trường, An toàn, Khác
- **Lọc theo dự án**: Chọn dự án
- **Lọc theo tài sản**: Chọn tài sản cụ thể
- **Lọc theo người xử lý**: Chọn người được giao

#### 3. Tạo Phiếu Sự Cố Mới

**Cách sử dụng**:
1. Click nút **"+ Tạo phiếu sự cố"** ở góc trên bên phải
2. Điền form:
   - **Tiêu đề**: Nhập tiêu đề ngắn gọn (bắt buộc)
   - **Loại sự cố**: Chọn từ dropdown (bắt buộc)
   - **Mức độ ưu tiên**: Chọn Cao/Trung bình/Thấp (bắt buộc)
   - **Dự án**: Chọn dự án (bắt buộc)
   - **Tài sản liên quan**: Chọn tài sản từ dropdown (nếu có)
   - **Mô tả chi tiết**: Nhập mô tả đầy đủ về sự cố (bắt buộc)
   - **Ảnh/Hình ảnh**: Upload ảnh minh họa (nếu có)
   - **Người được giao**: Chọn người xử lý (có thể để trống)
   - **Ngày hạn xử lý**: Chọn ngày (nếu có deadline)
3. Click **"Tạo phiếu"** để lưu

#### 4. Xem Chi Tiết Phiếu Sự Cố

**Thông tin hiển thị**:
- Thông tin cơ bản (như trên)
- Mô tả chi tiết
- Ảnh đính kèm
- Lịch sử xử lý (timeline)
- Bình luận/Ghi chú
- File đính kèm

**Các hành động**:
- **Giao việc**: Giao cho người xử lý
- **Cập nhật trạng thái**: Chuyển trạng thái (Mới → Đang xử lý → Đã xử lý → Đã đóng)
- **Thêm bình luận**: Thêm ghi chú hoặc cập nhật tiến độ
- **Upload file**: Thêm file liên quan
- **Đóng phiếu**: Đóng phiếu sau khi xử lý xong

#### 5. Cập Nhật Trạng Thái

**Cách sử dụng**:
1. Mở chi tiết phiếu sự cố
2. Click dropdown **"Trạng thái"** ở góc trên bên phải
3. Chọn trạng thái mới:
   - **Mới**: Phiếu vừa tạo
   - **Đang xử lý**: Đã giao và đang xử lý
   - **Đã xử lý**: Đã hoàn thành xử lý, chờ xác nhận
   - **Đã đóng**: Đã xác nhận và đóng phiếu
4. Thêm ghi chú (nếu cần)
5. Click **"Cập nhật"**

#### 6. Thêm Bình Luận/Ghi Chú

**Cách sử dụng**:
1. Mở chi tiết phiếu sự cố
2. Scroll xuống phần **"Bình luận"**
3. Nhập bình luận vào ô text
4. Click **"Gửi"** hoặc nhấn `Enter`

### Quy Trình Làm Việc

1. **Tạo phiếu**: Khi phát hiện sự cố, tạo phiếu sự cố mới
2. **Gán người xử lý**: Giao phiếu cho người có trách nhiệm
3. **Theo dõi**: Xem danh sách phiếu đang xử lý
4. **Cập nhật tiến độ**: Thêm bình luận và cập nhật trạng thái
5. **Xác nhận**: Sau khi xử lý xong, cập nhật trạng thái "Đã xử lý"
6. **Đóng phiếu**: Xác nhận và đóng phiếu sau khi hoàn tất

---

## 📋 Module 6: Operations & Maintenance - Work Orders (Công Việc)

### Mục Đích

Quản lý các công việc bảo trì, sửa chữa được lập kế hoạch hoặc phát sinh từ phiếu sự cố.

### Các Thành Phần Chính

#### 1. Danh Sách Work Order

**Vị trí**: Phần chính của trang

**Hiển thị**:
- Mã Work Order (WO ID)
- Tiêu đề công việc
- Loại công việc (Bảo trì định kỳ, Sửa chữa, Kiểm tra, Khác)
- Trạng thái (Lập kế hoạch, Đã giao, Đang thực hiện, Hoàn thành, Đã hủy)
- Mức độ ưu tiên
- Tài sản liên quan
- Người được giao
- Ngày bắt đầu dự kiến
- Ngày hoàn thành dự kiến
- Ngày hoàn thành thực tế

#### 2. Thanh Tìm Kiếm và Lọc

**Chức năng**:
- Tìm kiếm theo mã WO, tiêu đề
- Lọc theo trạng thái
- Lọc theo loại công việc
- Lọc theo người được giao
- Lọc theo tài sản
- Lọc theo khoảng thời gian

#### 3. Tạo Work Order Mới

**Cách sử dụng**:
1. Click nút **"+ Tạo Work Order"**
2. Điền form:
   - **Tiêu đề**: Nhập tiêu đề công việc (bắt buộc)
   - **Loại công việc**: Chọn từ dropdown
   - **Mức độ ưu tiên**: Chọn Cao/Trung bình/Thấp
   - **Dự án**: Chọn dự án
   - **Tài sản**: Chọn tài sản cần bảo trì/sửa chữa
   - **Mô tả**: Nhập mô tả chi tiết công việc
   - **Người được giao**: Chọn người thực hiện
   - **Ngày bắt đầu dự kiến**: Chọn ngày
   - **Ngày hoàn thành dự kiến**: Chọn ngày
   - **Vật tư cần thiết**: Chọn vật tư từ kho (nếu có)
   - **Liên kết với Ticket**: Chọn ticket liên quan (nếu có)
3. Click **"Tạo Work Order"**

#### 4. Xem Chi Tiết Work Order

**Thông tin hiển thị**:
- Thông tin cơ bản
- Mô tả công việc
- Danh sách vật tư sử dụng
- Timeline thực hiện
- Bình luận/Ghi chú
- File đính kèm (ảnh trước/sau, báo cáo)

#### 5. Cập Nhật Trạng Thái Work Order

**Các trạng thái**:
- **Lập kế hoạch**: Work Order mới tạo, chưa giao
- **Đã giao**: Đã giao cho người thực hiện
- **Đang thực hiện**: Đang trong quá trình thực hiện
- **Hoàn thành**: Đã hoàn thành công việc
- **Đã hủy**: Hủy bỏ Work Order

**Cách cập nhật**:
1. Mở chi tiết Work Order
2. Click dropdown trạng thái
3. Chọn trạng thái mới
4. Thêm ghi chú (nếu cần)
5. Click **"Cập nhật"**

#### 6. Ghi Nhận Vật Tư Sử Dụng

**Cách sử dụng**:
1. Mở Work Order đang thực hiện
2. Vào tab **"Vật tư"**
3. Click **"+ Thêm vật tư"**
4. Chọn vật tư từ kho
5. Nhập số lượng sử dụng
6. Click **"Lưu"**

**Lưu ý**: Số lượng sẽ tự động trừ vào kho khi Work Order hoàn thành

### Quy Trình Làm Việc

1. **Tạo Work Order**: Tạo từ lịch bảo trì hoặc từ ticket
2. **Giao việc**: Gán Work Order cho người thực hiện
3. **Chuẩn bị vật tư**: Kiểm tra và chuẩn bị vật tư cần thiết
4. **Thực hiện**: Cập nhật trạng thái "Đang thực hiện"
5. **Ghi nhận**: Ghi nhận vật tư sử dụng và tiến độ
6. **Hoàn thành**: Cập nhật trạng thái "Hoàn thành" và upload ảnh/báo cáo
7. **Xác nhận**: Người giám sát xác nhận và đóng Work Order

---

## 📅 Module 7: Operations & Maintenance - Schedule (Lịch Bảo Trì)

### Mục Đích

Quản lý lịch bảo trì định kỳ (Preventive Maintenance) cho các tài sản trong hệ thống.

### Các Thành Phần Chính

#### 1. Lịch Bảo Trì (Calendar View)

**Vị trí**: Phần chính của trang

**Hiển thị**:
- Lịch theo tháng/tuần/ngày
- Các công việc bảo trì được hiển thị trên lịch
- Màu sắc phân biệt theo loại bảo trì hoặc mức độ ưu tiên

**Cách sử dụng**:
- Chuyển đổi view: Chọn **Tháng**, **Tuần**, hoặc **Ngày** ở góc trên
- Xem chi tiết: Click vào công việc trên lịch để xem chi tiết
- Di chuyển: Click mũi tên để chuyển tháng/tuần

#### 2. Danh Sách Lịch Bảo Trì (List View)

**Vị trí**: Có thể chuyển đổi từ Calendar View

**Hiển thị**:
- Tên công việc bảo trì
- Tài sản
- Tần suất (Hàng ngày, Hàng tuần, Hàng tháng, Hàng quý, Hàng năm)
- Ngày thực hiện tiếp theo
- Trạng thái (Đã lên lịch, Đã hoàn thành, Đã bỏ qua)

#### 3. Tạo Lịch Bảo Trì Mới

**Cách sử dụng**:
1. Click nút **"+ Tạo lịch bảo trì"**
2. Điền form:
   - **Tên công việc**: Nhập tên (bắt buộc)
   - **Tài sản**: Chọn tài sản cần bảo trì (bắt buộc)
   - **Loại bảo trì**: Chọn từ dropdown
   - **Tần suất**: Chọn Hàng ngày/Tuần/Tháng/Quý/Năm
   - **Ngày bắt đầu**: Chọn ngày bắt đầu lịch
   - **Ngày kết thúc**: Chọn ngày kết thúc (hoặc để trống nếu không có)
   - **Thời gian thực hiện**: Chọn giờ (nếu cố định)
   - **Mô tả**: Nhập mô tả công việc cần làm
   - **Checklist**: Thêm checklist các bước cần thực hiện
   - **Vật tư cần thiết**: Chọn vật tư từ kho
   - **Người thực hiện**: Chọn người mặc định (có thể thay đổi khi tạo WO)
3. Click **"Lưu"** để tạo lịch

#### 4. Tạo Work Order Từ Lịch

**Cách sử dụng**:
1. Xem lịch bảo trì sắp tới
2. Click vào công việc trên lịch hoặc trong danh sách
3. Click nút **"Tạo Work Order"**
4. Hệ thống tự động điền thông tin từ lịch
5. Có thể chỉnh sửa ngày, người thực hiện, vật tư
6. Click **"Tạo Work Order"**

#### 5. Đánh Dấu Hoàn Thành

**Cách sử dụng**:
1. Sau khi hoàn thành công việc bảo trì
2. Mở lịch bảo trì đã thực hiện
3. Click nút **"Đánh dấu hoàn thành"**
4. Nhập ngày hoàn thành thực tế
5. Thêm ghi chú (nếu cần)
6. Click **"Xác nhận"**

**Lưu ý**: Hệ thống tự động tính toán ngày thực hiện tiếp theo dựa trên tần suất

#### 6. Bỏ Qua/Bãi Bỏ Lịch

**Cách sử dụng**:
1. Nếu không thể thực hiện đúng lịch
2. Click vào công việc trên lịch
3. Click **"Bỏ qua"** hoặc **"Hoãn lại"**
4. Nhập lý do
5. Chọn ngày thực hiện mới (nếu hoãn)
6. Click **"Xác nhận"**

### Quy Trình Làm Việc

1. **Lập lịch**: Tạo lịch bảo trì định kỳ cho các tài sản quan trọng
2. **Xem lịch**: Xem lịch bảo trì sắp tới theo tháng/tuần/ngày
3. **Tạo Work Order**: Tạo Work Order từ lịch khi đến hạn
4. **Thực hiện**: Thực hiện công việc bảo trì theo Work Order
5. **Ghi nhận**: Đánh dấu hoàn thành sau khi thực hiện xong
6. **Theo dõi**: Xem lịch sử bảo trì và lịch tiếp theo

---

## 📦 Module 8: Operations & Maintenance - Inventory (Kho & Vật Tư)

### Mục Đích

Quản lý kho vật tư, phụ tùng, thiết bị phục vụ cho công tác bảo trì và sửa chữa.

### Các Thành Phần Chính

#### 1. Danh Sách Vật Tư

**Vị trí**: Phần chính của trang

**Hiển thị**:
- Mã vật tư (Item Code)
- Tên vật tư
- Loại vật tư (Phụ tùng, Thiết bị, Vật liệu, Dụng cụ, Khác)
- Nhà sản xuất
- Model/Part Number
- Số lượng tồn kho
- Đơn vị tính (Cái, Bộ, Mét, Kg, v.v.)
- Đơn giá
- Vị trí kho
- Mức tồn kho tối thiểu
- Trạng thái (Đủ hàng, Sắp hết, Hết hàng)

#### 2. Thanh Tìm Kiếm và Lọc

**Chức năng**:
- Tìm kiếm theo mã, tên, part number
- Lọc theo loại vật tư
- Lọc theo trạng thái tồn kho
- Lọc theo vị trí kho
- Lọc theo nhà sản xuất

#### 3. Thêm Vật Tư Mới

**Cách sử dụng**:
1. Click nút **"+ Thêm vật tư"**
2. Điền form:
   - **Mã vật tư**: Nhập mã (bắt buộc, duy nhất)
   - **Tên vật tư**: Nhập tên (bắt buộc)
   - **Loại vật tư**: Chọn từ dropdown
   - **Nhà sản xuất**: Nhập tên nhà sản xuất
   - **Model/Part Number**: Nhập model hoặc part number
   - **Đơn vị tính**: Chọn từ dropdown
   - **Số lượng ban đầu**: Nhập số lượng khi nhập kho
   - **Đơn giá**: Nhập giá mua
   - **Vị trí kho**: Nhập vị trí lưu trữ trong kho
   - **Mức tồn kho tối thiểu**: Nhập số lượng cảnh báo
   - **Mô tả**: Nhập mô tả (nếu có)
   - **Ảnh**: Upload ảnh vật tư (nếu có)
3. Click **"Lưu"** để thêm vật tư

#### 4. Nhập Kho

**Cách sử dụng**:
1. Chọn vật tư từ danh sách
2. Click nút **"Nhập kho"**
3. Điền form:
   - **Số lượng**: Nhập số lượng nhập
   - **Đơn giá**: Nhập giá mua (có thể cập nhật)
   - **Nhà cung cấp**: Chọn hoặc nhập nhà cung cấp
   - **Số hóa đơn**: Nhập số hóa đơn (nếu có)
   - **Ngày nhập**: Chọn ngày nhập kho
   - **Ghi chú**: Nhập ghi chú (nếu có)
4. Click **"Xác nhận nhập kho"**

**Lưu ý**: Số lượng tồn kho sẽ tự động cộng thêm

#### 5. Xuất Kho

**Cách sử dụng**:
1. Chọn vật tư từ danh sách
2. Click nút **"Xuất kho"**
3. Điền form:
   - **Số lượng**: Nhập số lượng xuất
   - **Lý do xuất**: Chọn từ dropdown (Sử dụng cho WO, Bán, Hỏng, Khác)
   - **Work Order**: Chọn Work Order liên quan (nếu có)
   - **Người nhận**: Chọn người nhận
   - **Ngày xuất**: Chọn ngày xuất
   - **Ghi chú**: Nhập ghi chú
4. Click **"Xác nhận xuất kho"**

**Lưu ý**: 
- Số lượng tồn kho sẽ tự động trừ đi
- Nếu số lượng xuất > số lượng tồn, hệ thống sẽ cảnh báo

#### 6. Kiểm Kê Kho

**Cách sử dụng**:
1. Click nút **"Kiểm kê kho"** ở góc trên
2. Chọn vật tư cần kiểm kê
3. Nhập số lượng thực tế
4. Hệ thống tự động tính chênh lệch
5. Nhập lý do chênh lệch (nếu có)
6. Click **"Xác nhận kiểm kê"**

**Lưu ý**: Sau khi kiểm kê, số lượng tồn kho sẽ được cập nhật theo số lượng thực tế

#### 7. Cảnh Báo Tồn Kho

**Hiển thị**:
- Vật tư có số lượng tồn < mức tối thiểu sẽ được đánh dấu màu đỏ/cảnh báo
- Danh sách vật tư sắp hết hàng hiển thị ở đầu trang hoặc trong Dashboard

**Cách xử lý**:
1. Xem danh sách cảnh báo
2. Click vào vật tư để xem chi tiết
3. Tạo đơn đặt hàng hoặc nhập kho ngay

### Quy Trình Làm Việc

1. **Thiết lập kho**: Thêm các vật tư cần thiết vào hệ thống
2. **Nhập kho**: Ghi nhận khi nhập vật tư mới
3. **Theo dõi tồn kho**: Xem số lượng tồn kho và cảnh báo
4. **Xuất kho**: Xuất vật tư khi sử dụng cho Work Order hoặc mục đích khác
5. **Kiểm kê định kỳ**: Thực hiện kiểm kê kho định kỳ để đảm bảo số liệu chính xác
6. **Đặt hàng**: Đặt hàng khi vật tư sắp hết hoặc hết

---

## ✅ Module 9: Operations & Maintenance - Compliance (HSE & Tuân Thủ)

### Mục Đích

Quản lý các yêu cầu về an toàn, sức khỏe, môi trường (HSE) và tuân thủ các quy định pháp luật.

### Các Thành Phần Chính

#### 1. Danh Sách Yêu Cầu Tuân Thủ

**Vị trí**: Phần chính của trang

**Hiển thị**:
- Mã yêu cầu
- Tên yêu cầu
- Loại (An toàn lao động, Môi trường, Pháp lý, Chứng nhận, Khác)
- Cơ quan quản lý
- Ngày hiệu lực
- Ngày hết hạn
- Tần suất kiểm tra/Gia hạn
- Trạng thái (Đang hiệu lực, Sắp hết hạn, Đã hết hạn, Đã gia hạn)

#### 2. Thanh Tìm Kiếm và Lọc

**Chức năng**:
- Tìm kiếm theo mã, tên yêu cầu
- Lọc theo loại
- Lọc theo trạng thái
- Lọc theo cơ quan quản lý
- Lọc theo dự án

#### 3. Thêm Yêu Cầu Tuân Thủ Mới

**Cách sử dụng**:
1. Click nút **"+ Thêm yêu cầu tuân thủ"**
2. Điền form:
   - **Tên yêu cầu**: Nhập tên (bắt buộc)
   - **Loại**: Chọn từ dropdown (bắt buộc)
   - **Cơ quan quản lý**: Nhập tên cơ quan
   - **Số văn bản**: Nhập số văn bản/quyết định (nếu có)
   - **Dự án**: Chọn dự án áp dụng
   - **Ngày hiệu lực**: Chọn ngày bắt đầu hiệu lực
   - **Ngày hết hạn**: Chọn ngày hết hạn
   - **Tần suất kiểm tra**: Chọn Hàng tháng/Quý/Năm
   - **Mô tả**: Nhập mô tả chi tiết
   - **File đính kèm**: Upload file văn bản (nếu có)
3. Click **"Lưu"**

#### 4. Ghi Nhận Kiểm Tra/Gia Hạn

**Cách sử dụng**:
1. Chọn yêu cầu tuân thủ từ danh sách
2. Click nút **"Ghi nhận kiểm tra"** hoặc **"Gia hạn"**
3. Điền form:
   - **Ngày kiểm tra/Gia hạn**: Chọn ngày
   - **Kết quả**: Chọn Đạt/Không đạt (nếu kiểm tra)
   - **Ngày hết hạn mới**: Nhập ngày hết hạn mới (nếu gia hạn)
   - **Người thực hiện**: Chọn người thực hiện
   - **Ghi chú**: Nhập ghi chú
   - **File đính kèm**: Upload giấy tờ chứng nhận (nếu có)
4. Click **"Lưu"**

#### 5. Cảnh Báo Hết Hạn

**Hiển thị**:
- Danh sách yêu cầu sắp hết hạn (30 ngày, 60 ngày trước khi hết hạn)
- Cảnh báo trên Dashboard
- Email thông báo (nếu có cấu hình)

**Cách xử lý**:
1. Xem danh sách cảnh báo
2. Lập kế hoạch gia hạn hoặc kiểm tra
3. Thực hiện gia hạn trước khi hết hạn

#### 6. Báo Cáo Tuân Thủ

**Chức năng**:
- Xem báo cáo tổng hợp tình trạng tuân thủ
- Xuất báo cáo PDF/Excel
- Xem lịch sử kiểm tra và gia hạn

**Cách sử dụng**:
1. Click nút **"Báo cáo tuân thủ"**
2. Chọn khoảng thời gian
3. Chọn loại yêu cầu (nếu muốn lọc)
4. Click **"Xuất báo cáo"**

### Quy Trình Làm Việc

1. **Thiết lập**: Thêm các yêu cầu tuân thủ vào hệ thống
2. **Theo dõi**: Xem danh sách và cảnh báo hết hạn
3. **Lập kế hoạch**: Lập kế hoạch kiểm tra và gia hạn
4. **Thực hiện**: Thực hiện kiểm tra hoặc gia hạn
5. **Ghi nhận**: Ghi nhận kết quả và upload giấy tờ
6. **Báo cáo**: Xuất báo cáo tuân thủ định kỳ

---

## 💰 Module 10: Finance (Tài Chính & ROI)

### Mục Đích

Quản lý tài chính, tính toán ROI, và theo dõi chi phí vận hành của các dự án.

### Các Thành Phần Chính

#### 1. Dashboard Tài Chính

**Vị trí**: Phần đầu trang

**Hiển thị các chỉ số**:
- Tổng doanh thu
- Tổng chi phí
- Lợi nhuận
- ROI (%)
- Chi phí vận hành tháng này
- So sánh với kỳ trước

#### 2. Biểu Đồ Tài Chính

**Các loại biểu đồ**:
- **Doanh thu theo thời gian**: Line chart hoặc bar chart
- **Chi phí theo thời gian**: Area chart
- **Phân bổ chi phí**: Pie chart (theo loại chi phí)
- **ROI theo dự án**: Bar chart

**Cách sử dụng**:
- Chọn khoảng thời gian để xem dữ liệu
- Chọn dự án để xem chi tiết
- Hover để xem giá trị chi tiết

#### 3. Danh Sách Giao Dịch

**Hiển thị**:
- Ngày giao dịch
- Loại (Thu/Chi)
- Danh mục (Bán điện, Chi phí vận hành, Chi phí bảo trì, Khác)
- Số tiền
- Dự án liên quan
- Mô tả
- Người tạo

#### 4. Thêm Giao Dịch

**Cách sử dụng**:
1. Click nút **"+ Thêm giao dịch"**
2. Điền form:
   - **Loại**: Chọn Thu hoặc Chi (bắt buộc)
   - **Danh mục**: Chọn từ dropdown (bắt buộc)
   - **Số tiền**: Nhập số tiền (bắt buộc)
   - **Đơn vị**: Chọn VND hoặc USD
   - **Ngày giao dịch**: Chọn ngày (bắt buộc)
   - **Dự án**: Chọn dự án liên quan
   - **Mô tả**: Nhập mô tả chi tiết
   - **File đính kèm**: Upload hóa đơn/chứng từ (nếu có)
3. Click **"Lưu"**

#### 5. Tính Toán ROI

**Chức năng**:
- Tự động tính ROI dựa trên doanh thu và chi phí
- Hiển thị ROI theo dự án
- So sánh ROI giữa các dự án

**Cách xem**:
1. Chọn dự án từ dropdown
2. Xem ROI trên Dashboard hoặc trong báo cáo chi tiết
3. Xem biểu đồ ROI theo thời gian

#### 6. Báo Cáo Tài Chính

**Các loại báo cáo**:
- Báo cáo doanh thu
- Báo cáo chi phí
- Báo cáo lợi nhuận
- Báo cáo ROI

**Cách sử dụng**:
1. Click nút **"Báo cáo tài chính"**
2. Chọn loại báo cáo
3. Chọn khoảng thời gian
4. Chọn dự án (nếu muốn lọc)
5. Click **"Xuất báo cáo"** (PDF/Excel)

### Quy Trình Làm Việc

1. **Ghi nhận giao dịch**: Thêm các giao dịch thu/chi vào hệ thống
2. **Theo dõi**: Xem dashboard và biểu đồ để theo dõi tình hình tài chính
3. **Phân tích**: Phân tích chi phí và doanh thu theo dự án, theo thời gian
4. **Tính toán ROI**: Xem ROI của các dự án
5. **Báo cáo**: Xuất báo cáo tài chính định kỳ

---

## 📊 Module 11: Reports (Báo Cáo)

### Mục Đích

Tạo và xem các báo cáo tổng hợp về hoạt động của hệ thống.

### Các Thành Phần Chính

#### 1. Danh Sách Báo Cáo Có Sẵn

**Vị trí**: Phần chính của trang

**Các loại báo cáo**:
- **Báo cáo vận hành**: Sản lượng điện, hiệu suất, downtime
- **Báo cáo bảo trì**: Số lượng Work Order, chi phí bảo trì, vật tư sử dụng
- **Báo cáo tài sản**: Tình trạng tài sản, tuổi thọ, thay thế
- **Báo cáo tuân thủ**: Tình trạng tuân thủ, giấy tờ pháp lý
- **Báo cáo tài chính**: Doanh thu, chi phí, ROI
- **Báo cáo tổng hợp**: Báo cáo tổng hợp nhiều module

#### 2. Tạo Báo Cáo Mới

**Cách sử dụng**:
1. Click nút **"+ Tạo báo cáo"**
2. Chọn loại báo cáo từ dropdown
3. Điền thông tin:
   - **Tên báo cáo**: Nhập tên (bắt buộc)
   - **Loại báo cáo**: Chọn từ dropdown (bắt buộc)
   - **Khoảng thời gian**: Chọn từ ngày đến ngày
   - **Dự án**: Chọn dự án (có thể chọn "Tất cả")
   - **Các tham số khác**: Tùy theo loại báo cáo
4. Click **"Tạo báo cáo"**
5. Hệ thống sẽ tạo và hiển thị báo cáo

#### 3. Xem Báo Cáo

**Cách sử dụng**:
1. Click vào báo cáo trong danh sách
2. Xem nội dung báo cáo:
   - Tóm tắt (Summary)
   - Biểu đồ và biểu đồ
   - Bảng dữ liệu chi tiết
   - Phân tích và nhận xét

#### 4. Xuất Báo Cáo

**Các định dạng**:
- PDF
- Excel (.xlsx)
- CSV

**Cách sử dụng**:
1. Mở báo cáo cần xuất
2. Click nút **"Xuất báo cáo"**
3. Chọn định dạng (PDF/Excel/CSV)
4. Click **"Tải xuống"**

#### 5. Lưu Báo Cáo Mẫu

**Chức năng**: Lưu các tham số báo cáo để tạo lại nhanh

**Cách sử dụng**:
1. Sau khi tạo báo cáo với các tham số cụ thể
2. Click nút **"Lưu làm mẫu"**
3. Nhập tên mẫu
4. Click **"Lưu"**

**Sử dụng mẫu**:
1. Click nút **"Sử dụng mẫu"**
2. Chọn mẫu từ danh sách
3. Có thể chỉnh sửa tham số
4. Click **"Tạo báo cáo"**

#### 6. Lập Lịch Báo Cáo Tự Động

**Chức năng**: Tự động tạo và gửi báo cáo theo lịch định kỳ

**Cách sử dụng**:
1. Tạo báo cáo với các tham số mong muốn
2. Click nút **"Lập lịch"**
3. Điền form:
   - **Tần suất**: Chọn Hàng ngày/Tuần/Tháng/Quý/Năm
   - **Ngày gửi**: Chọn ngày trong tuần/tháng (tùy tần suất)
   - **Người nhận**: Chọn email người nhận
   - **Định dạng**: Chọn PDF/Excel
4. Click **"Lưu lịch"**

### Quy Trình Làm Việc

1. **Xem báo cáo có sẵn**: Xem các báo cáo đã được tạo trước đó
2. **Tạo báo cáo mới**: Tạo báo cáo với các tham số cụ thể
3. **Xem và phân tích**: Xem nội dung báo cáo và phân tích dữ liệu
4. **Xuất báo cáo**: Xuất báo cáo để chia sẻ hoặc lưu trữ
5. **Lưu mẫu**: Lưu các báo cáo thường dùng làm mẫu
6. **Lập lịch**: Thiết lập báo cáo tự động gửi định kỳ

---

## 👥 Module 12: Governance (Quản Trị & Người Dùng)

### Mục Đích

Quản lý người dùng, vai trò, quyền truy cập và các cài đặt quản trị hệ thống.

### Các Thành Phần Chính

#### 1. Danh Sách Người Dùng

**Vị trí**: Phần chính của trang

**Hiển thị**:
- Tên người dùng
- Email
- Vai trò (Role)
- Trạng thái (Hoạt động, Tạm khóa)
- Ngày tạo
- Lần đăng nhập cuối

#### 2. Thêm Người Dùng Mới

**Cách sử dụng**:
1. Click nút **"+ Thêm người dùng"**
2. Điền form:
   - **Tên**: Nhập tên đầy đủ (bắt buộc)
   - **Email**: Nhập email (bắt buộc, duy nhất)
   - **Mật khẩu**: Nhập mật khẩu (bắt buộc)
   - **Xác nhận mật khẩu**: Nhập lại mật khẩu
   - **Vai trò**: Chọn từ dropdown (Admin, Manager, Operator, Viewer)
   - **Dự án**: Chọn dự án được phép truy cập (có thể chọn nhiều)
   - **Trạng thái**: Chọn Hoạt động hoặc Tạm khóa
3. Click **"Tạo người dùng"**

#### 3. Chỉnh Sửa Người Dùng

**Cách sử dụng**:
1. Click vào người dùng trong danh sách
2. Click nút **"Chỉnh sửa"**
3. Cập nhật thông tin:
   - Thay đổi vai trò
   - Thay đổi dự án được phép truy cập
   - Thay đổi trạng thái
   - Reset mật khẩu (nếu cần)
4. Click **"Lưu"**

#### 4. Quản Lý Vai Trò và Quyền

**Các vai trò mặc định**:
- **Admin**: Toàn quyền truy cập tất cả module
- **Manager**: Quản lý dự án và tài sản, xem báo cáo
- **Operator**: Tạo và xử lý Work Order, Ticket
- **Viewer**: Chỉ xem, không được chỉnh sửa

**Cách quản lý**:
1. Vào tab **"Vai trò và Quyền"**
2. Xem danh sách vai trò và quyền tương ứng
3. Click **"Chỉnh sửa"** để thay đổi quyền của vai trò
4. Chọn/bỏ chọn các quyền cho từng module
5. Click **"Lưu"**

#### 5. Khóa/Mở Khóa Người Dùng

**Cách sử dụng**:
1. Chọn người dùng cần khóa/mở khóa
2. Click nút **"Khóa"** hoặc **"Mở khóa"**
3. Xác nhận trong dialog
4. **Lưu ý**: Người dùng bị khóa sẽ không thể đăng nhập

#### 6. Reset Mật Khẩu

**Cách sử dụng**:
1. Chọn người dùng cần reset mật khẩu
2. Click nút **"Reset mật khẩu"**
3. Nhập mật khẩu mới
4. Xác nhận mật khẩu
5. Click **"Reset"**

**Lưu ý**: Người dùng sẽ phải đổi mật khẩu khi đăng nhập lần đầu

#### 7. Xem Lịch Sử Hoạt Động (Audit Log)

**Chức năng**: Xem lịch sử các thao tác của người dùng trong hệ thống

**Cách sử dụng**:
1. Vào tab **"Lịch sử hoạt động"**
2. Xem danh sách các thao tác:
   - Người thực hiện
   - Hành động
   - Module/Trang
   - Thời gian
   - IP address
3. Lọc theo người dùng, thời gian, hành động
4. Xuất báo cáo (nếu cần)

### Quy Trình Làm Việc

1. **Thêm người dùng**: Thêm người dùng mới vào hệ thống
2. **Phân quyền**: Gán vai trò và quyền truy cập phù hợp
3. **Theo dõi**: Xem danh sách người dùng và trạng thái
4. **Quản lý**: Khóa/mở khóa, reset mật khẩu khi cần
5. **Kiểm tra**: Xem lịch sử hoạt động để kiểm tra
6. **Bảo mật**: Đảm bảo quyền truy cập phù hợp với từng người dùng

---

## ⚙️ Module 13: Settings (Cài Đặt)

### Mục Đích

Cấu hình các thiết lập hệ thống, thông báo, và tùy chọn khác.

### Các Thành Phần Chính

#### 1. Cài Đặt Chung (General Settings)

**Các thiết lập**:
- **Tên hệ thống**: Tên hiển thị trên giao diện
- **Logo**: Upload logo công ty
- **Ngôn ngữ**: Chọn ngôn ngữ (Tiếng Việt, English)
- **Múi giờ**: Chọn múi giờ
- **Định dạng ngày**: Chọn định dạng ngày/tháng/năm
- **Đơn vị tiền tệ**: Chọn VND hoặc USD
- **Đơn vị năng lượng**: Chọn kWh, MWh

**Cách sử dụng**:
1. Vào tab **"Cài đặt chung"**
2. Cập nhật các thiết lập
3. Click **"Lưu"**

#### 2. Cài Đặt Email

**Các thiết lập**:
- **SMTP Server**: Nhập địa chỉ SMTP server
- **Port**: Nhập port (thường 587 hoặc 465)
- **Username**: Nhập username email
- **Password**: Nhập password email
- **From Email**: Email người gửi
- **From Name**: Tên người gửi

**Cách sử dụng**:
1. Vào tab **"Cài đặt Email"**
2. Điền thông tin SMTP
3. Click **"Kiểm tra kết nối"** để test
4. Click **"Lưu"**

#### 3. Cài Đặt Thông Báo

**Các loại thông báo**:
- Thông báo hợp đồng sắp hết hạn
- Thông báo yêu cầu tuân thủ sắp hết hạn
- Thông báo Work Order mới
- Thông báo Ticket mới
- Thông báo vật tư sắp hết

**Cách cấu hình**:
1. Vào tab **"Cài đặt Thông báo"**
2. Chọn loại thông báo muốn bật/tắt
3. Chọn cách nhận thông báo (Email, In-app, SMS)
4. Thiết lập thời gian cảnh báo trước (ví dụ: 30 ngày trước khi hết hạn)
5. Chọn người nhận thông báo
6. Click **"Lưu"**

#### 4. Cài Đặt Quyền (Permissions)

**Chức năng**: Xem và chỉnh sửa quyền chi tiết cho từng vai trò

**Cách sử dụng**:
1. Vào tab **"Cài đặt Quyền"**
2. Chọn vai trò từ dropdown
3. Xem danh sách quyền theo module
4. Chọn/bỏ chọn quyền
5. Click **"Lưu"**

#### 5. Sao Lưu và Khôi Phục (Backup & Restore)

**Chức năng**: Sao lưu và khôi phục dữ liệu hệ thống

**Cách sao lưu**:
1. Vào tab **"Sao lưu"**
2. Click nút **"Tạo bản sao lưu"**
3. Chọn loại dữ liệu muốn sao lưu (Tất cả, Chỉ dữ liệu, Chỉ cấu hình)
4. Click **"Tạo bản sao lưu"**
5. Đợi hệ thống tạo file backup
6. Tải file backup về máy

**Cách khôi phục**:
1. Vào tab **"Khôi phục"**
2. Click **"Chọn file"** và chọn file backup
3. Xem thông tin file backup (ngày tạo, kích thước)
4. Xác nhận khôi phục
5. **Cảnh báo**: Khôi phục sẽ ghi đè dữ liệu hiện tại!

#### 6. Lịch Sử Thay Đổi (Audit Logs)

**Chức năng**: Xem lịch sử các thay đổi trong hệ thống

**Cách sử dụng**:
1. Vào tab **"Lịch sử thay đổi"**
2. Xem danh sách các thay đổi:
   - Người thực hiện
   - Hành động
   - Module
   - Thời gian
   - Chi tiết thay đổi
3. Lọc theo người dùng, thời gian, module
4. Xuất báo cáo (nếu cần)

### Quy Trình Làm Việc

1. **Thiết lập ban đầu**: Cấu hình các thiết lập chung khi mới triển khai
2. **Cấu hình email**: Thiết lập SMTP để gửi thông báo
3. **Thiết lập thông báo**: Cấu hình các loại thông báo và người nhận
4. **Phân quyền**: Điều chỉnh quyền truy cập cho các vai trò
5. **Sao lưu**: Thực hiện sao lưu định kỳ để bảo vệ dữ liệu
6. **Theo dõi**: Xem lịch sử thay đổi để kiểm tra và audit

---

## 🔄 Quy Trình Làm Việc Tổng Hợp

### Quy Trình Quản Lý Tài Sản Mới

1. **Tạo dự án**: Vào **Projects** → Thêm dự án mới
2. **Thêm tài sản**: Vào **Assets** → Chọn dự án → Thêm tài sản theo cấu trúc phân cấp
3. **Thêm hợp đồng**: Vào **Contracts** → Thêm hợp đồng liên quan đến tài sản
4. **Lập lịch bảo trì**: Vào **Schedule** → Tạo lịch bảo trì định kỳ cho tài sản

### Quy Trình Xử Lý Sự Cố

1. **Tạo ticket**: Vào **Operations** → Tạo phiếu sự cố mới
2. **Gán người xử lý**: Gán ticket cho người có trách nhiệm
3. **Tạo Work Order**: Tạo Work Order từ ticket hoặc tạo mới
4. **Chuẩn bị vật tư**: Kiểm tra và xuất vật tư từ **Inventory**
5. **Thực hiện**: Cập nhật tiến độ và trạng thái Work Order
6. **Hoàn thành**: Đánh dấu hoàn thành và đóng ticket

### Quy Trình Bảo Trì Định Kỳ

1. **Xem lịch**: Vào **Schedule** → Xem lịch bảo trì sắp tới
2. **Tạo Work Order**: Tạo Work Order từ lịch bảo trì
3. **Chuẩn bị**: Kiểm tra và chuẩn bị vật tư cần thiết
4. **Thực hiện**: Thực hiện công việc bảo trì
5. **Ghi nhận**: Ghi nhận vật tư sử dụng và kết quả
6. **Hoàn thành**: Đánh dấu hoàn thành và cập nhật lịch tiếp theo

### Quy Trình Báo Cáo Định Kỳ

1. **Thu thập dữ liệu**: Đảm bảo tất cả dữ liệu đã được nhập vào hệ thống
2. **Tạo báo cáo**: Vào **Reports** → Tạo báo cáo với các tham số phù hợp
3. **Xem và phân tích**: Xem nội dung báo cáo và phân tích dữ liệu
4. **Xuất báo cáo**: Xuất báo cáo PDF/Excel để chia sẻ
5. **Lưu mẫu**: Lưu báo cáo làm mẫu cho lần sau
6. **Lập lịch**: Thiết lập báo cáo tự động gửi định kỳ

---

## 💡 Mẹo và Thủ Thuật

### Tìm Kiếm Nhanh

- Sử dụng phím tắt `Ctrl/Cmd + F` để tìm kiếm trong trang hiện tại
- Sử dụng thanh tìm kiếm ở đầu mỗi module để tìm nhanh

### Lọc Dữ Liệu

- Kết hợp nhiều bộ lọc để tìm chính xác dữ liệu cần
- Lưu bộ lọc thường dùng (nếu có tính năng)

### Xuất Dữ Liệu

- Sử dụng nút xuất Excel để phân tích dữ liệu ngoài hệ thống
- Xuất PDF để in hoặc chia sẻ

### Keyboard Navigation

- Sử dụng `Tab` để di chuyển giữa các trường trong form
- Sử dụng `Enter` để submit form
- Sử dụng `Esc` để đóng modal/dialog

### Dark Mode

- Sử dụng Dark Mode để giảm mỏi mắt khi làm việc lâu
- Tự động chuyển theo hệ thống hoặc thiết lập thủ công

---

## ❓ Câu Hỏi Thường Gặp (FAQ)

### Làm thế nào để reset mật khẩu?

Liên hệ quản trị viên hệ thống để reset mật khẩu. Quản trị viên có thể reset mật khẩu trong module **Governance**.

### Làm thế nào để thêm nhiều tài sản cùng lúc?

Hiện tại hệ thống hỗ trợ thêm từng tài sản. Để thêm nhiều tài sản, có thể sử dụng tính năng import Excel (nếu có) hoặc liên hệ admin để hỗ trợ.

### Làm thế nào để xem lịch sử thay đổi của một tài sản?

Vào module **Settings** → Tab **"Lịch sử thay đổi"** → Lọc theo module **Assets** và tài sản cụ thể.

### Làm thế nào để nhận thông báo qua email?

Vào module **Settings** → Tab **"Cài đặt Email"** để cấu hình SMTP, sau đó vào **"Cài đặt Thông báo"** để chọn loại thông báo muốn nhận qua email.

### Làm thế nào để xuất báo cáo tự động?

Vào module **Reports** → Tạo báo cáo → Click **"Lập lịch"** → Thiết lập tần suất và người nhận.

---

**Lưu ý**: Tài liệu này sẽ được cập nhật thường xuyên khi có thay đổi về giao diện và chức năng. Vui lòng kiểm tra phiên bản mới nhất.

---

## 🏗️ Kiến Trúc Hệ Thống

### Frontend Architecture

```
┌─────────────────────────────────────┐
│         React Application          │
├─────────────────────────────────────┤
│  Pages (Routes)                     │
│  ├── Dashboard                      │
│  ├── AssetManagement                │
│  └── ...                            │
├─────────────────────────────────────┤
│  Components                         │
│  ├── Layout (Sidebar, Header)       │
│  ├── Common (Toast, Modal)          │
│  └── Feature Components             │
├─────────────────────────────────────┤
│  State Management (Zustand)         │
│  ├── useAuthStore                   │
│  ├── useAssetStore                  │
│  └── useUIStore                     │
├─────────────────────────────────────┤
│  Services                           │
│  ├── apiClient (HTTP Client)        │
│  ├── authService                    │
│  └── dataService                    │
└─────────────────────────────────────┘
           │
           │ HTTP/HTTPS
           ▼
┌─────────────────────────────────────┐
│      Backend API (Express)           │
└─────────────────────────────────────┘
```

### Backend Architecture

```
┌─────────────────────────────────────┐
│      Express Server                 │
├─────────────────────────────────────┤
│  Routes                             │
│  ├── /api/v1/auth                   │
│  ├── /api/v1/assets                  │
│  ├── /api/v1/projects                │
│  └── ...                             │
├─────────────────────────────────────┤
│  Middleware                         │
│  ├── auth.middleware (JWT)          │
│  └── error.middleware               │
├─────────────────────────────────────┤
│  Controllers                        │
│  ├── assets.controller              │
│  ├── projects.controller            │
│  └── ...                            │
├─────────────────────────────────────┤
│  Models (Mongoose)                   │
│  ├── Asset                          │
│  ├── Project                        │
│  └── ...                            │
└─────────────────────────────────────┘
           │
           │ Mongoose ODM
           ▼
┌─────────────────────────────────────┐
│         MongoDB Database            │
└─────────────────────────────────────┘
```

### Data Flow

1. **User Action** → React Component
2. **Component** → Service/Store
3. **Service** → API Client
4. **API Client** → Backend API (HTTP Request)
5. **Backend** → Middleware (Auth, Validation)
6. **Backend** → Controller
7. **Controller** → Model (Database Query)
8. **Database** → Response
9. **Response** → Frontend (via API Client)
10. **Frontend** → Update State → Re-render

### Authentication Flow

1. User nhập email/password
2. Frontend gửi POST `/api/v1/auth/login`
3. Backend verify credentials
4. Backend tạo JWT token
5. Frontend lưu token vào localStorage
6. Frontend gửi token trong header: `Authorization: Bearer <token>`
7. Backend middleware verify token cho mỗi protected route

---

## 🚢 Quy Trình Triển Khai

### Build Production

#### Frontend

```bash
# Build frontend
npm run build
```

Output sẽ được tạo trong thư mục `dist/`

#### Backend

```bash
# Build backend
npm run backend:build
```

Output sẽ được tạo trong thư mục `backend/dist/`

### Production Environment Variables

#### Frontend

Đảm bảo các biến môi trường được set đúng:
- `VITE_API_URL=/api` (relative path)
- `VITE_DATA_MODE=mongodb`

#### Backend

```env
NODE_ENV=production
PORT=2123
MONGODB_URI=mongodb://production-uri
JWT_SECRET=strong-production-secret
CORS_ORIGIN=https://aom.vuphong.com
```

### Deployment với Apache

Hệ thống được cấu hình để chạy với Apache reverse proxy:

#### Apache Configuration

```apache
# Frontend (Vite build output)
DocumentRoot /path/to/project/dist

# Backend API Proxy
ProxyPass /api http://127.0.0.1:2123/api
ProxyPassReverse /api http://127.0.0.1:2123/api

# WebSocket for HMR (development)
ProxyPass /dev ws://127.0.0.1:3123/dev
ProxyPassReverse /dev ws://127.0.0.1:3123/dev
```

### PM2 Process Manager (Backend)

```bash
# Install PM2
npm install -g pm2

# Start backend with PM2
cd backend
pm2 start dist/server.js --name vpeg-backend

# Save PM2 configuration
pm2 save

# Setup PM2 startup script
pm2 startup
```

### Health Check

- Backend: `http://localhost:2123/health`
- Frontend: Kiểm tra console không có errors

---

## 💡 Best Practices

### Development

1. **Luôn chạy linter trước khi commit:**
```bash
# Nếu có ESLint
npm run lint
```

2. **Test API endpoints:**
   - Sử dụng Postman hoặc curl
   - Kiểm tra response format
   - Verify error handling

3. **Code Review:**
   - Review code trước khi merge
   - Đảm bảo TypeScript types đúng
   - Kiểm tra error handling

4. **Database:**
   - Không commit sensitive data
   - Sử dụng migrations cho schema changes
   - Backup database thường xuyên

### Security

1. **JWT Secret:**
   - Sử dụng strong secret trong production
   - Không commit secret vào Git
   - Rotate secret định kỳ

2. **Password:**
   - Luôn hash passwords với bcrypt
   - Không log passwords
   - Enforce password policy

3. **CORS:**
   - Chỉ allow trusted origins
   - Không sử dụng `*` trong production

4. **Input Validation:**
   - Validate tất cả user inputs
   - Sanitize data trước khi lưu database
   - Sử dụng express-validator

### Performance

1. **Database:**
   - Tạo indexes cho các fields thường query
   - Sử dụng pagination cho large datasets
   - Optimize queries

2. **Frontend:**
   - Lazy load components
   - Optimize images
   - Minimize bundle size

3. **API:**
   - Implement caching nếu cần
   - Rate limiting cho API endpoints
   - Compress responses

### Error Handling

1. **Frontend:**
   - Sử dụng ErrorBoundary
   - Hiển thị user-friendly error messages
   - Log errors để debug

2. **Backend:**
   - Centralized error handling middleware
   - Consistent error response format
   - Log errors với context

---

## 🔍 Troubleshooting

### Common Issues

#### 1. Backend không kết nối được MongoDB

**Triệu chứng:**
```
MongooseError: connect ECONNREFUSED
```

**Giải pháp:**
- Kiểm tra MongoDB đang chạy: `mongod` hoặc `sudo systemctl status mongod`
- Kiểm tra `MONGODB_URI` trong `.env`
- Kiểm tra firewall/network

#### 2. Frontend không kết nối được Backend

**Triệu chứng:**
```
Failed to fetch /api/...
```

**Giải pháp:**
- Kiểm tra backend đang chạy: `http://localhost:2123/health`
- Kiểm tra CORS configuration
- Kiểm tra Vite proxy configuration
- Kiểm tra network tab trong browser DevTools

#### 3. JWT Token Invalid/Expired

**Triệu chứng:**
```
401 Unauthorized
```

**Giải pháp:**
- Clear localStorage: `localStorage.removeItem('auth_token')`
- Đăng nhập lại
- Kiểm tra `JWT_SECRET` và `JWT_EXPIRES_IN` trong backend `.env`

#### 4. Build Errors

**Triệu chứng:**
```
TypeScript errors
```

**Giải pháp:**
- Chạy `npm run build` để xem errors
- Fix TypeScript errors
- Kiểm tra `tsconfig.json`

#### 5. Port Already in Use

**Triệu chứng:**
```
Port 2123 is already in use
```

**Giải pháp:**
- Tìm process: `lsof -i :2123` (Mac/Linux) hoặc `netstat -ano | findstr :2123` (Windows)
- Kill process hoặc đổi port trong `.env`

### Debug Tips

1. **Backend Logging:**
   - Check console output
   - Add `console.log` statements
   - Use debugger trong IDE

2. **Frontend Debugging:**
   - Browser DevTools (F12)
   - React DevTools extension
   - Network tab để xem API calls
   - Console để xem errors

3. **Database Debugging:**
   - MongoDB Compass để xem data
   - Mongoose debug mode: `mongoose.set('debug', true)`

---

## 📚 Tài Liệu Tham Khảo

### Internal Documentation

- [Tài liệu tổng quan](docs/01-overview/)
- [Yêu cầu chức năng](docs/02-functional-requirements/)
- [Backend Architecture](docs/03-backend/)
- [Frontend Architecture](docs/04-frontend/)
- [API Documentation](docs/06-api/)

### External Resources

- [React Documentation](https://react.dev/)
- [TypeScript Documentation](https://www.typescriptlang.org/)
- [Express.js Guide](https://expressjs.com/)
- [MongoDB Documentation](https://docs.mongodb.com/)
- [Vite Documentation](https://vitejs.dev/)
- [Zustand Documentation](https://zustand-demo.pmnd.rs/)

---

## 📞 Liên Hệ và Hỗ Trợ

- **Email**: support@vuphong.vn
- **Domain**: https://aom.vuphong.com

---

## 📝 Changelog

### Version 1.2.0-beta
- Initial release
- Asset Management module
- Operations & Maintenance module
- Authentication & Authorization
- Dashboard với KPI tracking
- Reports & Analytics

---

**Lưu ý:** Tài liệu này sẽ được cập nhật thường xuyên. Vui lòng kiểm tra phiên bản mới nhất trước khi sử dụng.
