# Bank Account Management Module

## Tổng quan

Module quản lý tài khoản ngân hàng và sao kê ngân hàng cho hệ thống LADA Express Management Portal.

## Tính năng chính

### 1. Quản lý tài khoản ngân hàng
- ✅ Danh sách tài khoản ngân hàng với tìm kiếm và phân trang
- ✅ Tạo mới tài khoản ngân hàng
- ✅ Chỉnh sửa thông tin tài khoản
- ✅ Xem chi tiết tài khoản với thống kê
- ✅ Xóa tài khoản ngân hàng
- ✅ Cập nhật số dư tài khoản

### 2. Import sao kê ngân hàng
- ✅ Upload file Excel sao kê
- ✅ Hỗ trợ định dạng VPBank và Techcombank
- ✅ Xử lý và hiển thị kết quả import
- ✅ Tự động phân loại giao dịch
- ✅ Cập nhật số dư tài khoản tự động

### 3. Quản lý giao dịch ngân hàng
- ✅ Danh sách giao dịch với tìm kiếm nâng cao
- ✅ Lọc theo tài khoản, thời gian, loại giao dịch
- ✅ Hiển thị thống kê thu chi
- ✅ Xuất dữ liệu Excel

### 4. Lịch sử import
- ✅ Theo dõi các lần import sao kê
- ✅ Hiển thị thống kê kết quả import
- ✅ Xem chi tiết từng lần import

## Cấu trúc thư mục

```
src/views/finances/bank-accounts/
├── index.vue                    # Danh sách tài khoản ngân hàng
├── detail.vue                   # Chi tiết tài khoản
├── create-or-update.vue         # Form tạo/sửa tài khoản
├── import-statement.vue         # Import sao kê
├── transactions.vue             # Danh sách giao dịch
├── import-history.vue           # Lịch sử import
├── components/
│   ├── BankCodeSelect.vue       # Component chọn ngân hàng
│   ├── StatusBadge.vue          # Component hiển thị trạng thái
│   ├── CurrencyDisplay.vue      # Component hiển thị tiền tệ
│   └── index.js                 # Export components
└── README.md                    # Tài liệu này
```

## API Endpoints

### Tài khoản ngân hàng
- `POST /api/BankAccount/Search` - Tìm kiếm tài khoản
- `GET /api/BankAccount/{id}` - Chi tiết tài khoản
- `POST /api/BankAccount/CreateOrUpdate` - Tạo/sửa tài khoản
- `DELETE /api/BankAccount/{id}` - Xóa tài khoản
- `GET /api/BankAccount/GetActiveAccounts` - Tài khoản hoạt động
- `PUT /api/BankAccount/UpdateBalance` - Cập nhật số dư

### Sao kê và giao dịch
- `POST /api/BankAccount/ImportStatement` - Import sao kê
- `POST /api/BankAccount/SearchTransactions` - Tìm giao dịch
- `POST /api/BankAccount/SearchImportHistory` - Lịch sử import

## Routing

```javascript
/quan-ly-tai-khoan-ngan-hang                    # Danh sách tài khoản
/quan-ly-tai-khoan-ngan-hang/tao-moi            # Tạo tài khoản mới
/quan-ly-tai-khoan-ngan-hang/chi-tiet/:id       # Chi tiết tài khoản
/quan-ly-tai-khoan-ngan-hang/chinh-sua/:id      # Chỉnh sửa tài khoản
/quan-ly-tai-khoan-ngan-hang/import-sao-ke      # Import sao kê
/quan-ly-tai-khoan-ngan-hang/giao-dich          # Danh sách giao dịch
/quan-ly-tai-khoan-ngan-hang/lich-su-import     # Lịch sử import
```

## Định dạng file Excel

### VPBank
| Cột | Tên trường | Định dạng | Mô tả |
|-----|------------|-----------|-------|
| A | Số hóa đơn | Text | Mã giao dịch |
| B | Ngày ghi nợ | dd/MM/yyyy | Ngày giao dịch |
| C | Số tiền ghi có | 1.000.000 | Số tiền thu (dấu chấm phân cách nghìn) |
| D | Số tiền ghi nợ | 1.000.000 | Số tiền chi (dấu chấm phân cách nghìn) |
| E | Nội dung | Text | Mô tả giao dịch |
| F | Số dư tham chiếu | 1.000.000 | Số dư tài khoản |
| G | Thời gian giao dịch | dd/MM/yyyy HH:mm | Thời gian chi tiết |

### Techcombank
| Cột | Tên trường | Định dạng | Mô tả |
|-----|------------|-----------|-------|
| A | Ngày GD | dd/MM/yyyy | Ngày giao dịch |
| B | Mã GD | Text | Mã giao dịch |
| C | Số tiền | -1,000,000 | Số tiền (âm = chi, dương = thu) |
| D | Số dư | 1,000,000 | Số dư tài khoản |
| E | Nội dung | Text | Mô tả giao dịch |

## Enums và Constants

### BankCode
- VPBank = 1
- Techcombank = 2
- Vietcombank = 3
- BIDV = 4
- Agribank = 5
- ... (xem đầy đủ trong `bankAccountConstants.js`)

### BankAccountStatus
- Active = 1 (Hoạt động)
- Suspended = 2 (Tạm khóa)
- Closed = 3 (Đóng)
- PendingActivation = 4 (Chờ kích hoạt)

### TransactionProcessStatus
- Pending = 1 (Chưa xử lý)
- Processed = 2 (Đã xử lý)
- Error = 3 (Lỗi)
- Skipped = 4 (Bỏ qua)
- Duplicate = 5 (Trùng lặp)

## Sử dụng

### 1. Tạo tài khoản ngân hàng mới
1. Vào trang "Quản lý tài khoản ngân hàng"
2. Click "Tạo tài khoản"
3. Điền thông tin: tên tài khoản, số tài khoản, ngân hàng, số dư...
4. Click "Lưu"

### 2. Import sao kê
1. Vào trang "Import sao kê ngân hàng"
2. Chọn tài khoản ngân hàng
3. Chọn ngân hàng tương ứng
4. Upload file Excel theo đúng định dạng
5. Cấu hình các tùy chọn import
6. Click "Import"

### 3. Xem giao dịch
1. Vào trang "Giao dịch ngân hàng"
2. Sử dụng bộ lọc để tìm kiếm
3. Xem thống kê thu chi
4. Xuất Excel nếu cần

### 4. Theo dõi lịch sử import
1. Vào trang "Lịch sử import sao kê"
2. Xem danh sách các lần import
3. Click "Xem chi tiết" để xem thông tin import
4. Click "Xem giao dịch" để xem dữ liệu đã import

## Lưu ý kỹ thuật

### Dependencies
- Vue 3 Composition API
- Vue Router 4
- Pinia (state management)
- Vue-select (dropdown component)
- VueDatePicker (date picker)
- VueNumberFormat (number formatting)
- Vue-toastification (notifications)

### Components tái sử dụng
- `BankCodeSelect`: Component chọn ngân hàng
- `StatusBadge`: Hiển thị trạng thái với màu sắc
- `CurrencyDisplay`: Hiển thị số tiền định dạng

### Utility Functions
- `BankAccountUtils.formatCurrency()`: Format số tiền
- `BankAccountUtils.getBankName()`: Lấy tên ngân hàng
- `BankAccountUtils.getStatusName()`: Lấy tên trạng thái
- `BankAccountUtils.getStatusColor()`: Lấy màu trạng thái

## Troubleshooting

### Lỗi thường gặp
1. **File Excel không đúng định dạng**: Kiểm tra lại cấu trúc cột theo hướng dẫn
2. **Không tìm thấy tài khoản**: Kiểm tra quyền truy cập và trạng thái tài khoản
3. **Import thất bại**: Kiểm tra kích thước file (max 10MB) và định dạng dữ liệu

### Performance
- Sử dụng phân trang cho danh sách lớn
- Lazy loading cho các component không cần thiết
- Debounce cho tìm kiếm real-time

## Phát triển tiếp

### Tính năng có thể mở rộng
- [ ] Hỗ trợ thêm định dạng ngân hàng khác
- [ ] Tự động đồng bộ sao kê qua API ngân hàng
- [ ] Báo cáo tài chính nâng cao
- [ ] Cảnh báo giao dịch bất thường
- [ ] Tích hợp với module kế toán
