📋 W4S - Software Requirements Specification
Phiên bản: 1.0.0 | Ngày cập nhật: 19/12/2025 | Tác giả: AnhBen
1. Giới Thiệu (Introduction)
1.1 Mục Đích (Purpose)
Tài liệu này mô tả chi tiết các yêu cầu phần mềm cho hệ thống W4S (Wallet For Self) - một ứng dụng quản lý tài chính cá nhân toàn diện. W4S được thiết kế để giúp người dùng theo dõi thu chi, quản lý ngân sách và đạt được các mục tiêu tài chính cá nhân.
Đối tượng sử dụng tài liệu:
- Product Owner & Business Analysts
- Development Team (Frontend, Backend, Mobile)
- QA/QC Team
- DevOps & Infrastructure Team
- Stakeholders & Investors
1.2 Phạm Vi (Scope)
W4S là một hệ thống quản lý tài chính cá nhân bao gồm:
| Thành phần | Mô tả |
|---|---|
| 📱 Mobile App | Ứng dụng iOS & Android (React Native/Flutter) |
| 🌐 Web Portal | Giao diện web quản lý (Optional) |
| ⚙️ Backend API | RESTful API services |
| 🗄️ Database | PostgreSQL + Redis Cache |
| 📊 Analytics | Hệ thống báo cáo & phân tích |
Phạm vi chức năng chính:
- Quản lý nhiều ví (wallets) với đa loại tiền tệ
- Ghi nhận giao dịch thu/chi/chuyển khoản
- Quản lý ngân sách theo danh mục
- Theo dõi công nợ (cho vay/đi vay)
- Mục tiêu tiết kiệm
- Báo cáo & phân tích chi tiêu
- Giao dịch định kỳ & nhắc nhở
1.3 Định Nghĩa & Viết Tắt
| Thuật ngữ | Định nghĩa |
|---|---|
| W4S | Wallet For Self - Tên sản phẩm |
| Wallet | Ví tiền - đơn vị chứa tiền (tiền mặt, tài khoản ngân hàng, ví điện tử…) |
| Transaction | Giao dịch tài chính (thu/chi/chuyển khoản) |
| Category | Danh mục phân loại giao dịch |
| Budget | Ngân sách - giới hạn chi tiêu theo danh mục/thời gian |
| Recurring | Giao dịch định kỳ (lặp lại theo chu kỳ) |
| Debt/Loan | Công nợ - khoản cho vay hoặc đi vay |
| Saving Goal | Mục tiêu tiết kiệm |
| Ledger | Sổ cái - ghi nhận tất cả giao dịch |
| FR | Functional Requirement |
| NFR | Non-Functional Requirement |
| API | Application Programming Interface |
| JWT | JSON Web Token |
| OTP | One-Time Password |
2. Mô Tả Tổng Quan (Overall Description)
2.1 Góc Nhìn Sản Phẩm (Product Perspective)
┌─────────────────────────────────────────────────────────────────┐
│ W4S ECOSYSTEM │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Mobile │ │ Web │ │ Admin │ │
│ │ App │ │ Portal │ │ Portal │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ └───────────────┼───────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ API Gateway │ │
│ │ (O24) │ │
│ └────────┬────────┘ │
│ │ │
│ ┌──────────────┼──────────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Auth │ │ Core │ │ Report │ │
│ │ Service │ │ Service │ │ Service │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │
│ └─────────────┼─────────────┘ │
│ ▼ │
│ ┌─────────────────────────┐ │
│ │ SQLServer DB │ │
│ │ + Redis Cache │ │
│ └─────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘Tính năng:
| Tính năng | W4S |
|---|---|
| Quản lý ví | ✅ |
| Đa tiền tệ | ✅ |
| Ngân sách | ✅ |
| Công nợ | ✅ |
| Mục tiêu tiết kiệm | ✅ |
| Báo cáo | ✅ |
| API Public | ✅ |
| Self-hosted | ✅ |
| Audit Trail | ✅ |
2.2 Phân Loại Người Dùng
| Loại Người Dùng | Mô Tả |
|---|---|
| Người Dùng Cuối (End Users) | Cá nhân quản lý tài chính cá nhân, theo dõi thu chi, lập ngân sách. |
2.3 Môi Trường Vận Hành
| Thành phần | Yêu cầu |
|---|---|
| Mobile App | iOS 13+ / Android 8+ |
| Web Browser | Chrome 80+, Firefox 75+, Safari 13+, Edge 80+ |
| Backend | Node.js 18+ / Go 1.20+ |
| Database | SQLServer 2019+ |
| Cache | Redis 7+ |
| Container | Docker 20+, Kubernetes 1.25+ |
| Cloud | AWS / GCP / Azure compatible |
2.4 Ràng Buộc Thiết Kế & Triển Khai
Các ràng buộc quan trọng:
- Bảo mật: Tuân thủ OWASP Top 10, mã hóa dữ liệu nhạy cảm
- Hiệu năng: Response time < 200ms cho 95% requests
- Khả dụng: Uptime 99.9%
- Đa ngôn ngữ: Hỗ trợ tiếng Việt và tiếng Anh
- Offline-first: Mobile app phải hoạt động offline
- GDPR Compliance: Quyền xóa dữ liệu, export data
3. Kiến Trúc Hệ Thống (System Architecture)
3.1 Kiến Trúc Tổng Quan
┌────────────────────────────────────────────────────────────────────────┐
│ CLIENT LAYER │
├────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ iOS App │ │ Android App │ │ Web App │ │ Admin Panel │ │
│ │(ReactNative)│ │(ReactNative)│ │ (Next.js) │ │ (Next.js) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │ │
│ └────────────────┴────────────────┴────────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────┐ │
│ │ CDN / WAF │ │
│ └───────┬───────┘ │
└──────────────────────────────────┼─────────────────────────────────────┘
│
┌──────────────────────────────────┼─────────────────────────────────────┐
│ API GATEWAY LAYER │
├──────────────────────────────────┼─────────────────────────────────────┤
│ ┌───────▼───────┐ │
│ │ API Gateway │ │
│ │ Rate Limiting │ │
│ │ Auth/JWT │ │
│ └───────┬───────┘ │
└──────────────────────────────────┼─────────────────────────────────────┘
│
┌──────────────────────────────────┼─────────────────────────────────────┐
│ SERVICE LAYER (Microservices) │
├──────────────────────────────────┼─────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌─▼─────────┐ ┌──────────┐ │
│ │ Auth │ │ Wallet │ │Transaction│ │ Budget │ │
│ │ Service │ │ Service │ │ Service │ │ Service │ │
│ └────┬─────┘ └────┬─────┘ └─────┬─────┘ └────┬─────┘ │
│ │ │ │ │ │
│ ┌────┴────┐ ┌─────┴────┐ ┌──────┴─────┐ ┌────┴─────┐ │
│ │ Debt │ │ Saving │ │ Report │ │ Notify │ │
│ │ Service │ │ Service │ │ Service │ │ Service │ │
│ └────┬────┘ └────┬─────┘ └──────┬─────┘ └────┬─────┘ │
│ │ │ │ │ │
│ └────────────┴───────────────┴────────────┘ │
│ │ │
└──────────────────────────────┼─────────────────────────────────────────┘
│
┌──────────────────────────────┼────────────────────────────────────────┐
│ DATA LAYER │
├──────────────────────────────┼────────────────────────────────────────┤
│ ┌─────────────┐ ┌──────▼──────┐ ┌─────────────┐ │
│ │ Redis │◄───│ SQLServer │───►│ S3/MinIO │ │
│ │ (Cache) │ │ (Master) │ │ (Storage) │ │
│ └─────────────┘ └──────┬──────┘ └─────────────┘ │
│ │ │
│ ┌──────▼──────┐ │
│ │ SQLServer │ │
│ │ (Replica) │ │
│ └─────────────┘ │
└───────────────────────────────────────────────────────────────────────┘3.2 Giả Định Triển Khai
| Môi trường | Cấu hình |
|---|---|
| Development | Docker Compose, SQLite/PostgreSQL local |
| Staging | Kubernetes cluster (3 nodes), PostgreSQL managed |
| Production | Kubernetes cluster (5+ nodes), PostgreSQL HA, Redis Cluster |
4. Yêu Cầu Chức Năng (Functional Requirements)
4.1 Quản Lý Người Dùng & Bảo Mật (User & Security Management)
Module quản lý xác thực, phân quyền và bảo mật tài khoản người dùng.
FR-01.01: Đăng ký tài khoản
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Người dùng có thể đăng ký tài khoản mới bằng email hoặc số điện thoại |
| Input | Email/Phone, Password, Full Name |
| Validation | - Email: format hợp lệ, chưa tồn tại - Phone: 10-11 số, bắt đầu bằng 0 - Password: min 8 ký tự, có chữ hoa, chữ thường, số |
| Output | Tài khoản được tạo, gửi OTP xác thực |
| Edge cases | - Email đã tồn tại → Báo lỗi “Email đã được sử dụng” - Rate limit: max 5 lần đăng ký/IP/giờ |
FR-01.02: Đăng nhập
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Người dùng đăng nhập bằng email/phone + password |
| Input | Email/Phone, Password, Device Info |
| Validation | - Tài khoản phải đã xác thực - Password đúng |
| Output | Access Token (JWT), Refresh Token |
| Edge cases | - Sai password 5 lần → Lock 15 phút - Đăng nhập từ thiết bị mới → Gửi notification |
FR-01.03: Xác thực 2 yếu tố (2FA)
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Bật/tắt xác thực 2 yếu tố qua OTP hoặc Authenticator App |
| Options | SMS OTP, Email OTP, Google Authenticator, Biometric |
| Flow | Login → Nhập OTP/Biometric → Access granted |
FR-01.04: Quản lý phiên đăng nhập
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Xem và quản lý các thiết bị đang đăng nhập |
| Features | - Xem danh sách devices - Đăng xuất từ xa - Đăng xuất tất cả thiết bị |
FR-01.05: Quên mật khẩu
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Reset password qua email/SMS |
| Flow | Nhập email → Nhận OTP → Verify → Đặt password mới |
| Validation | OTP expire sau 5 phút, max 3 lần nhập sai |
FR-01.06: Đổi mật khẩu
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Thay đổi mật khẩu khi đã đăng nhập |
| Input | Current password, New password, Confirm password |
| Validation | - Password hiện tại đúng - Password mới khác password cũ |
4.2 Quản Lý Ví (Wallet Management)
Module quản lý các ví tiền của người dùng.
FR-02.01: Tạo ví mới
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Tạo ví mới với thông tin cơ bản |
| Input | Tên ví, Loại ví, Tiền tệ, Số dư ban đầu, Icon, Màu sắc |
| Loại ví | Cash, Bank Account, Credit Card, E-Wallet, Investment, Other |
| Validation | - Tên ví: 1-50 ký tự, unique trong account - Số dư: >= 0 (trừ Credit Card) |
| Output | Ví được tạo với balance = initial amount |
FR-02.02: Chỉnh sửa ví
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Cập nhật thông tin ví |
| Editable | Tên, Icon, Màu sắc, Ghi chú |
| Non-editable | Tiền tệ (sau khi có transaction) |
FR-02.03: Xóa ví / Lưu trữ ví
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Xóa mềm (archive) hoặc xóa cứng ví |
| Archive | Ví không hiển thị trong danh sách, có thể restore |
| Delete | Chỉ xóa được nếu balance = 0 và không có transaction |
| Edge cases | Ví có transaction → Chỉ được archive |
FR-02.04: Chuyển tiền giữa các ví
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Chuyển tiền từ ví A sang ví B |
| Input | Ví nguồn, Ví đích, Số tiền, Phí (optional), Ghi chú |
| Validation | - Số dư ví nguồn >= số tiền + phí - Ví nguồn != Ví đích |
| Output | Tạo 2 transactions (OUT từ A, IN vào B) linked với nhau |
| Multi-currency | Nếu khác tiền tệ → Yêu cầu nhập tỷ giá |
FR-02.05: Điều chỉnh số dư
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Điều chỉnh số dư thực tế khi có sai lệch |
| Input | Ví, Số dư thực tế, Lý do |
| Output | Tạo transaction adjustment với số tiền chênh lệch |
| Audit | Ghi log đầy đủ cho mục đích kiểm tra |
4.3 Quản Lý Giao Dịch (Transaction Management)
Core module - ghi nhận và quản lý tất cả giao dịch tài chính.
FR-03.01: Tạo giao dịch thu
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Ghi nhận khoản thu nhập |
| Input | Ví, Số tiền, Danh mục, Ngày, Ghi chú, Tags, Ảnh đính kèm |
| Validation | - Số tiền > 0 - Danh mục thuộc type INCOME |
| Output | Transaction created, Wallet balance += amount |
FR-03.02: Tạo giao dịch chi
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Ghi nhận khoản chi tiêu |
| Input | Ví, Số tiền, Danh mục, Ngày, Ghi chú, Tags, Ảnh đính kèm, Vendor |
| Validation | - Số tiền > 0 - Danh mục thuộc type EXPENSE - Optional: Check budget warning |
| Output | Transaction created, Wallet balance -= amount |
| Budget Check | Nếu vượt ngân sách → Hiển thị warning (không block) |
FR-03.03: Chỉnh sửa giao dịch
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Sửa thông tin giao dịch đã tạo |
| Editable | Số tiền, Danh mục, Ngày, Ghi chú, Tags, Ảnh |
| Non-editable | Ví (nếu muốn đổi ví → Xóa và tạo mới) |
| Output | Cập nhật wallet balance tương ứng |
FR-03.04: Xóa giao dịch
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Xóa giao dịch và hoàn lại số dư |
| Soft delete | Đánh dấu deleted, có thể restore trong 30 ngày |
| Hard delete | Xóa vĩnh viễn sau 30 ngày |
| Output | Wallet balance được hoàn lại |
FR-03.05: Tìm kiếm & Lọc giao dịch
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Tìm kiếm giao dịch theo nhiều tiêu chí |
| Filters | - Khoảng thời gian - Loại (thu/chi/chuyển) - Danh mục - Ví - Số tiền (min-max) - Tags - Keyword trong ghi chú |
| Sort | Ngày, Số tiền, Danh mục |
| Output | Danh sách giao dịch + tổng thu/chi |
FR-03.06: Duplicate giao dịch
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Tạo giao dịch mới dựa trên giao dịch cũ |
| Flow | Chọn transaction → Duplicate → Sửa ngày/số tiền → Save |
4.4 Quản Lý Danh Mục & Tags (Category & Tag Management)
Phân loại giao dịch theo danh mục và tags.
FR-04.01: Danh mục mặc định
| Thuộc tính | Chi tiết |
|---|---|
| INCOME | Lương, Thưởng, Đầu tư, Cho thuê, Quà tặng, Khác |
| EXPENSE | Ăn uống, Di chuyển, Mua sắm, Giải trí, Y tế, Giáo dục, Hoá đơn, Nhà ở, Gia đình, Khác |
FR-04.02: Tạo danh mục tùy chỉnh
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Tạo danh mục mới hoặc danh mục con |
| Input | Tên, Loại (Income/Expense), Icon, Màu, Parent category |
| Validation | - Tên unique trong cùng level - Max 2 cấp (parent → child) |
FR-04.03: Quản lý Tags
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Tạo và gán nhiều tags cho một giao dịch |
| Use case | #du_lich_da_nang, #project_abc, #thue_hang_thang |
| Features | Auto-suggest, thống kê theo tag |
4.5 Quản Lý Ngân Sách (Budget Management)
Thiết lập và theo dõi ngân sách chi tiêu.
FR-05.01: Tạo ngân sách
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Đặt giới hạn chi tiêu cho danh mục trong khoảng thời gian |
| Input | Danh mục, Số tiền giới hạn, Chu kỳ (tuần/tháng/quý/năm), Ngày bắt đầu |
| Types | - Overall budget (tổng chi tiêu) - Category budget (theo danh mục) |
FR-05.02: Theo dõi ngân sách
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Hiển thị tiến độ sử dụng ngân sách |
| Display | Progress bar, % đã dùng, số tiền còn lại, dự báo |
| Alerts | - 80% → Warning notification - 100% → Alert notification |
FR-05.03: Rollover ngân sách
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Chuyển số dư chưa dùng sang kỳ tiếp theo |
| Option | Enable/Disable per budget |
| Example | Budget 5M, dùng 4M → Kỳ sau có 6M |
4.6 Giao Dịch Định Kỳ & Nhắc Nhở (Recurring Transactions & Reminders)
Tự động hóa giao dịch lặp lại và nhắc nhở thanh toán.
FR-06.01: Tạo giao dịch định kỳ
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Thiết lập giao dịch tự động lặp lại |
| Input | Template giao dịch, Tần suất, Ngày bắt đầu, Ngày kết thúc (optional) |
| Frequency | Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly, Custom |
| Custom | Mỗi X ngày/tuần/tháng, Ngày cụ thể trong tháng |
FR-06.02: Xử lý giao dịch định kỳ
| Thuộc tính | Chi tiết |
|---|---|
| Auto-create | Tự động tạo transaction vào ngày đến hạn |
| Confirmation | Option yêu cầu xác nhận trước khi tạo |
| Skip | Bỏ qua 1 lần mà không hủy recurring |
FR-06.03: Nhắc nhở thanh toán
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Nhắc nhở trước ngày đến hạn |
| Options | 1 ngày, 3 ngày, 1 tuần trước |
| Channels | Push notification, Email, SMS (optional) |
4.7 Theo Dõi khoản vay (Debt & Loan Tracking)
Quản lý các khoản cho vay và đi vay.
FR-07.01: Tạo khoản cho vay (Lend)
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Ghi nhận khoản tiền cho người khác vay |
| Input | Người vay, Số tiền, Ngày cho vay, Ngày đến hạn, Lãi suất (optional), Ghi chú |
| Output | - Tạo debt record - Trừ wallet balance - Tạo transaction type = LEND |
FR-07.02: Tạo khoản đi vay (Borrow)
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Ghi nhận khoản tiền đi vay |
| Input | Người cho vay, Số tiền, Ngày vay, Ngày đến hạn, Lãi suất (optional), Ghi chú |
| Output | - Tạo loan record - Cộng wallet balance - Tạo transaction type = BORROW |
FR-07.03: Ghi nhận trả nợ
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Ghi nhận thanh toán một phần hoặc toàn bộ |
| Input | Khoản nợ, Số tiền trả, Ngày trả |
| Partial | Cập nhật remaining balance |
| Full | Đánh dấu khoản nợ = SETTLED |
FR-07.04: Theo dõi & Nhắc nhở công nợ
| Thuộc tính | Chi tiết |
|---|---|
| Dashboard | Tổng cho vay, Tổng đi vay, Net position |
| Alerts | Nhắc nhở trước ngày đến hạn |
| Overdue | Highlight các khoản quá hạn |
4.8 Mục Tiêu Tiết Kiệm (Saving Goals)
Đặt và theo dõi mục tiêu tiết kiệm.
FR-08.01: Tạo mục tiêu
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Đặt mục tiêu tiết kiệm với thời hạn |
| Input | Tên mục tiêu, Số tiền mục tiêu, Ngày mục tiêu, Icon, Màu sắc |
| Example | ”Mua iPhone 16” - 30,000,000 VND - 30/06/2026 |
FR-08.02: Gửi tiền vào mục tiêu
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Chuyển tiền từ ví vào mục tiêu |
| Flow | Chọn ví nguồn → Nhập số tiền → Confirm |
| Output | Wallet balance -= amount, Goal balance += amount |
FR-08.03: Rút tiền từ mục tiêu
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Rút tiền từ mục tiêu về ví |
| Validation | Không rút quá số dư mục tiêu |
FR-08.04: Theo dõi tiến độ
| Thuộc tính | Chi tiết |
|---|---|
| Display | Progress bar, % hoàn thành, còn thiếu, dự báo ngày hoàn thành |
| Suggestion | Gợi ý số tiền cần gửi mỗi tháng để đạt mục tiêu |
4.9 Báo Cáo & Phân Tích (Reports & Analytics)
Báo cáo chi tiết và insights về tài chính cá nhân.
FR-09.01: Báo cáo tổng quan
| Thuộc tính | Chi tiết |
|---|---|
| Mô tả | Dashboard tổng quan tình hình tài chính |
| Metrics | - Tổng tài sản - Thu/Chi trong kỳ - Net cash flow - Top categories |
| Period | Ngày, Tuần, Tháng, Quý, Năm, Custom |
FR-09.02: Báo cáo thu chi theo thời gian
| Thuộc tính | Chi tiết |
|---|---|
| Charts | Line chart thu/chi theo thời gian |
| Comparison | So sánh với kỳ trước |
| Trend | Xu hướng tăng/giảm |
FR-09.03: Báo cáo theo danh mục
| Thuộc tính | Chi tiết |
|---|---|
| Charts | Pie chart, Bar chart theo category |
| Drill-down | Click vào category → Xem chi tiết transactions |
FR-09.04: Báo cáo theo ví
| Thuộc tính | Chi tiết |
|---|---|
| Content | Balance history, In/Out flow per wallet |
| Charts | Stacked bar chart các ví |
FR-09.05: Báo cáo ngân sách
| Thuộc tính | Chi tiết |
|---|---|
| Content | Tiến độ từng budget, Over/Under budget |
| Alerts | List các budget sắp/đã vượt |
FR-09.06: Báo cáo công nợ
| Thuộc tính | Chi tiết |
|---|---|
| Content | Receivables vs Payables, Aging report |
| Alerts | Overdue debts/loans |
4.10 Xuất Dữ Liệu & Kiểm Toán (Export & Audit)
Xuất dữ liệu và theo dõi lịch sử thay đổi.
FR-10.01: Xuất dữ liệu
| Thuộc tính | Chi tiết |
|---|---|
| Formats | CSV, Excel (XLSX), PDF |
| Scope | Transactions, Wallets, Reports |
| Filters | Date range, Categories, Wallets |
FR-10.02: Import dữ liệu
| Thuộc tính | Chi tiết |
|---|---|
| Formats | CSV, Excel |
| Mapping | UI để map columns với fields |
| Validation | Preview trước khi import, rollback nếu lỗi |
FR-10.03: Audit Trail
| Thuộc tính | Chi tiết |
|---|---|
| Tracked | Mọi thay đổi: Create, Update, Delete |
| Fields | Who, When, What changed, Old value, New value |
| Retention | Lưu trữ tối thiểu 2 năm |
FR-10.04: Backup & Restore
| Thuộc tính | Chi tiết |
|---|---|
| Auto backup | Daily encrypted backup to cloud |
| Manual backup | Export full data anytime |
| Restore | Khôi phục từ backup file |
5. Yêu Cầu Phi Chức Năng (Non-Functional Requirements)
5.1 Hiệu Năng (Performance)
| Metric | Requirement |
|---|---|
| Response Time | 95th percentile < 200ms |
| Throughput | Min 1000 requests/second |
| Database Query | 99% queries < 100ms |
| App Launch | Cold start < 3 seconds |
| Offline Sync | Sync < 10 seconds for 1000 transactions |
5.2 Bảo Mật (Security)
| Requirement | Implementation |
|---|---|
| Authentication | JWT với refresh token, 2FA support |
| Authorization | Role-based access control (RBAC) |
| Data Encryption | TLS 1.3 in transit, AES-256 at rest |
| Password | bcrypt với cost factor 12 |
| Sensitive Data | Mask account numbers, encrypt PII |
| API Security | Rate limiting, CORS, CSRF protection |
| OWASP | Compliance với OWASP Top 10 |
| Penetration Test | Quarterly security assessment |
5.3 Khả Dụng (Availability)
| Metric | Requirement |
|---|---|
| Uptime | 99.9% (max 8.76 hours downtime/year) |
| RTO | Recovery Time Objective < 1 hour |
| RPO | Recovery Point Objective < 15 minutes |
| Maintenance Window | Max 4 hours/month, off-peak hours |
5.4 Khả Năng Mở Rộng (Scalability)
| Aspect | Requirement |
|---|---|
| Horizontal Scaling | Auto-scale based on load |
| User Capacity | Support 100K+ concurrent users |
| Data Volume | Handle 10M+ transactions per user |
| Multi-region | Ready for multi-region deployment |
5.5 Kiểm Toán & Tuân Thủ (Audit & Compliance)
| Requirement | Details |
|---|---|
| Audit Logging | Comprehensive audit trail |
| Data Retention | Configurable, min 7 years for financial data |
| GDPR | Right to erasure, data portability |
| PCI-DSS | Ready nếu tích hợp payment |
6. Yêu Cầu Dữ Liệu (Data Requirements)
6.1 Entity Relationship Diagram
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ USER │ │ WALLET │ │ TRANSACTION │
├─────────────┤ ├─────────────┤ ├─────────────┤
│ id (PK) │──┐ │ id (PK) │──┐ │ id (PK) │
│ email │ │ │ user_id (FK)│◄─┘ │ wallet_id │◄┐
│ phone │ │ │ name │ ┌───►│ category_id │ │
│ password │ │ │ type │ │ │ amount │ │
│ full_name │ │ │ currency │ │ │ type │ │
│ avatar │ │ │ balance │ │ │ date │ │
│ settings │ │ │ icon │ │ │ note │ │
│ created_at │ │ │ color │ │ │ created_at │ │
│ updated_at │ │ │ is_archived │ │ │ updated_at │ │
└─────────────┘ │ │ created_at │ │ │ deleted_at │ │
│ └─────────────┘ │ └─────────────┘ │
│ │ │
│ ┌─────────────┐ │ ┌─────────────┐ │
│ │ CATEGORY │ │ │ DEBT │ │
│ ├─────────────┤ │ ├─────────────┤ │
│ │ id (PK) │──┘ │ id (PK) │ │
│ │ user_id (FK)│◄──┐ │ user_id(FK) │◄┘
│ │ parent_id │ │ │ wallet_id │
│ │ name │ │ │ contact │
│ │ type │ │ │ amount │
│ │ icon │ │ │ remaining │
│ │ color │ │ │ type │
│ │ is_system │ │ │ due_date │
│ └─────────────┘ │ │ status │
│ │ └─────────────┘
│ ┌─────────────┐ │
│ │ BUDGET │ │ ┌─────────────┐
│ ├─────────────┤ │ │ SAVING_GOAL │
│ │ id (PK) │ │ ├─────────────┤
└───►│ user_id(FK) │ │ │ id (PK) │
│ category_id │◄──┘ │ user_id(FK) │◄┐
│ amount │ │ name │ │
│ period │ │ target │ │
│ start_date │ │ current │ │
│ rollover │ │ target_date │ │
└─────────────┘ │ status │ │
└─────────────┘ │
┌─────────────┐ │
│ RECURRING │ │
├─────────────┤ │
│ id (PK) │ │
│ user_id(FK) │◄──────────────────────┘
│ template │
│ frequency │
│ next_run │
│ end_date │
│ is_active │
└─────────────┘6.2 Xử Lý Đa Tiền Tệ
| Aspect | Implementation |
|---|---|
| Base Currency | Mỗi user chọn 1 base currency |
| Wallet Currency | Mỗi wallet có 1 currency cố định |
| Exchange Rate | - Tự động lấy từ API (daily) - Cho phép nhập manual |
| Conversion | Chuyển đổi khi báo cáo tổng hợp |
| Storage | Lưu amount gốc + converted amount |
6.3 Khái Niệm Ledger (Sổ Cái)
┌────────────────────────────────────────────────────────────────┐
│ LEDGER ENTRIES │
├────────────────────────────────────────────────────────────────┤
│ Mỗi transaction tạo ra các ledger entries theo nguyên tắc: │
│ │
│ EXPENSE (Chi tiêu): │
│ Debit: Expense Category │
│ Credit: Wallet (Cash/Bank) │
│ │
│ INCOME (Thu nhập): │
│ Debit: Wallet (Cash/Bank) │
│ Credit: Income Category │
│ │
│ TRANSFER (Chuyển khoản): │
│ Debit: Wallet B (destination) │
│ Credit: Wallet A (source) │
│ │
│ → Đảm bảo cân bằng: Total Debit = Total Credit │
└────────────────────────────────────────────────────────────────┘7. Yêu Cầu API (API Requirements)
7.1 Tổng Quan API
| Aspect | Specification |
|---|---|
| Protocol | HTTPS (TLS 1.3) |
| Format | RESTful JSON |
| Versioning | URL path (/api/v1/) |
| Authentication | Bearer JWT Token |
| Rate Limit | 100 requests/minute per user |
7.2 Danh Sách API Chính
Authentication APIs
| Endpoint | Method | Purpose |
|---|---|---|
/auth/register | POST | Đăng ký tài khoản mới |
/auth/login | POST | Đăng nhập |
/auth/logout | POST | Đăng xuất |
/auth/refresh | POST | Refresh access token |
/auth/verify-otp | POST | Xác thực OTP |
/auth/forgot-password | POST | Yêu cầu reset password |
/auth/reset-password | POST | Đặt password mới |
/auth/2fa/enable | POST | Bật 2FA |
/auth/2fa/verify | POST | Xác thực 2FA |
User APIs
| Endpoint | Method | Purpose |
|---|---|---|
/users/me | GET | Lấy thông tin user hiện tại |
/users/me | PUT | Cập nhật thông tin user |
/users/me/password | PUT | Đổi mật khẩu |
/users/me/sessions | GET | Danh sách phiên đăng nhập |
/users/me/sessions/:id | DELETE | Đăng xuất 1 phiên |
Wallet APIs
| Endpoint | Method | Purpose |
|---|---|---|
/wallets | GET | Danh sách ví |
/wallets | POST | Tạo ví mới |
/wallets/:id | GET | Chi tiết ví |
/wallets/:id | PUT | Cập nhật ví |
/wallets/:id | DELETE | Xóa/Archive ví |
/wallets/:id/adjust | POST | Điều chỉnh số dư |
/wallets/transfer | POST | Chuyển tiền giữa ví |
Transaction APIs
| Endpoint | Method | Purpose |
|---|---|---|
/transactions | GET | Danh sách giao dịch (với filter) |
/transactions | POST | Tạo giao dịch mới |
/transactions/:id | GET | Chi tiết giao dịch |
/transactions/:id | PUT | Cập nhật giao dịch |
/transactions/:id | DELETE | Xóa giao dịch |
/transactions/:id/duplicate | POST | Duplicate giao dịch |
Category APIs
| Endpoint | Method | Purpose |
|---|---|---|
/categories | GET | Danh sách danh mục |
/categories | POST | Tạo danh mục mới |
/categories/:id | PUT | Cập nhật danh mục |
/categories/:id | DELETE | Xóa danh mục |
Budget APIs
| Endpoint | Method | Purpose |
|---|---|---|
/budgets | GET | Danh sách ngân sách |
/budgets | POST | Tạo ngân sách |
/budgets/:id | GET | Chi tiết & tiến độ |
/budgets/:id | PUT | Cập nhật ngân sách |
/budgets/:id | DELETE | Xóa ngân sách |
Recurring APIs
| Endpoint | Method | Purpose |
|---|---|---|
/recurring | GET | Danh sách giao dịch định kỳ |
/recurring | POST | Tạo mới |
/recurring/:id | PUT | Cập nhật |
/recurring/:id | DELETE | Xóa |
/recurring/:id/skip | POST | Bỏ qua lần tiếp theo |
Debt APIs
| Endpoint | Method | Purpose |
|---|---|---|
/debts | GET | Danh sách công nợ |
/debts | POST | Tạo khoản cho vay/đi vay |
/debts/:id | GET | Chi tiết công nợ |
/debts/:id/payment | POST | Ghi nhận trả nợ |
/debts/:id/settle | POST | Đánh dấu đã thanh toán |
Saving Goal APIs
| Endpoint | Method | Purpose |
|---|---|---|
/goals | GET | Danh sách mục tiêu |
/goals | POST | Tạo mục tiêu mới |
/goals/:id | GET | Chi tiết mục tiêu |
/goals/:id | PUT | Cập nhật mục tiêu |
/goals/:id/deposit | POST | Gửi tiền vào |
/goals/:id/withdraw | POST | Rút tiền ra |
Report APIs
| Endpoint | Method | Purpose |
|---|---|---|
/reports/overview | GET | Báo cáo tổng quan |
/reports/cash-flow | GET | Dòng tiền theo thời gian |
/reports/by-category | GET | Thống kê theo danh mục |
/reports/by-wallet | GET | Thống kê theo ví |
/reports/budget | GET | Báo cáo ngân sách |
/reports/debt | GET | Báo cáo công nợ |
Export APIs
| Endpoint | Method | Purpose |
|---|---|---|
/export/transactions | GET | Xuất giao dịch (CSV/Excel/PDF) |
/export/reports | GET | Xuất báo cáo |
/import/transactions | POST | Import giao dịch |
/backup | GET | Backup toàn bộ dữ liệu |
/restore | POST | Khôi phục từ backup |
8. Giả Định, Rủi Ro & Phụ Thuộc
8.1 Giả Định (Assumptions)
| # | Giả định |
|---|---|
| A1 | Người dùng có smartphone với kết nối internet |
| A2 | Exchange rate API khả dụng và đáng tin cậy |
| A3 | User có kiến thức cơ bản về quản lý tài chính |
| A4 | Cloud infrastructure đáp ứng yêu cầu SLA |
| A5 | Team có đủ năng lực technical để implement |
8.2 Rủi Ro (Risks)
| # | Rủi ro | Mức độ | Giảm thiểu |
|---|---|---|---|
| R1 | Data breach | High | Encryption, Security audit, Penetration test |
| R2 | System downtime | Medium | HA architecture, Auto-failover |
| R3 | Data loss | High | Regular backup, Multi-region replication |
| R4 | Performance degradation | Medium | Load testing, Auto-scaling |
| R5 | Third-party API failure | Low | Fallback mechanism, Caching |
8.3 Phụ Thuộc (Dependencies)
| # | Phụ thuộc | Loại |
|---|---|---|
| D1 | Cloud Provider (AWS/GCP/Azure) | Infrastructure |
| D2 | Exchange Rate API | External Service |
| D3 | Push Notification Service (FCM/APNS) | External Service |
| D4 | Email Service (SendGrid/SES) | External Service |
| D5 | SMS Gateway | External Service |
9. Hướng Phát Triển Tương Lai (Future Enhancements)
Phase 2 (Q2 2026)
- 🏦 Liên kết ngân hàng - Đồng bộ giao dịch tự động từ bank
- 🤖 AI Insights - Phân tích chi tiêu bằng AI, gợi ý tiết kiệm
- 📸 OCR Receipt - Scan hóa đơn tự động nhập giao dịch
Phase 3 (Q4 2026)
- 👨👩👧👦 Family Sharing - Quản lý tài chính gia đình
- 📊 Investment Tracking - Theo dõi danh mục đầu tư
- 💹 Crypto Wallet - Hỗ trợ cryptocurrency
Phase 4 (2027)
- 🌐 Open Banking API - Tích hợp Open Banking
- 🎯 Financial Planning - Lập kế hoạch tài chính dài hạn
- 🏪 Marketplace - Tích hợp khuyến mãi, cashback
Tài liệu này được cập nhật định kỳ. Phiên bản mới nhất luôn được lưu tại repository chính thức.
© 2025 O24 Team | Developed by O24