URD: Chi phí
| Module | CORE-12 | Phiên bản | v0.4 |
|---|---|---|---|
| Trạng thái | In-progress | Ngày | 2026-05-30 |
1. Mục đích
Định nghĩa các yêu cầu hướng người dùng cho Chi phí — sổ sách của merchant. Module phải theo dõi tiền trên các tài khoản (tiền mặt, ngân hàng, QR, mobile-POS), ghi nhận mọi di chuyển dưới dạng một phiếu ghi-kép cân bằng, phân loại thu và chi theo danh mục, và tạo phần lớn hạch toán tự động phản ứng với bán hàng, mua hàng, và di chuyển kho để chủ không phải ghi các dòng tiền thường nhật bằng tay.
2. Phạm vi
| Bao gồm | Loại trừ |
|---|---|
| Tài khoản tiền / ví (Tiền mặt, Ngân hàng, QR, Mobile-POS) | Xử lý cổng-thanh-toán (module Payment) |
| Tài khoản kiểm soát nội bộ (Tồn kho, Giá vốn hàng bán) | Phát hành hóa đơn thuế (module Invoice) |
| Phiếu: thu, chi, chuyển khoản, điều chỉnh | Tính số lượng & định giá kho (module Tồn kho) |
| Dòng sổ cái (nợ / có) cho mỗi phiếu | Theo dõi ngân sách, P&L, dự báo dòng tiền (tương lai) |
| Danh mục thu / chi (được seed + tùy chỉnh) | Chi phí định kỳ / theo lịch (tương lai) |
| Tự hạch toán từ thanh toán bán hàng, nhận PO, di chuyển kho | Chụp ảnh biên lai / OCR (tương lai) |
| Hủy phiếu bằng đảo cân bằng | Quy đổi đa tiền tệ (một tiền tệ cho mỗi phiếu) |
3. Định nghĩa
| Thuật ngữ | Định nghĩa |
|---|---|
| Tài khoản (ví) | Một nơi tiền nằm — một ngăn kéo tiền mặt, tài khoản ngân hàng, tài khoản chấp nhận QR, hoặc thiết bị mobile-POS. Giữ một số dư lũy kế. |
| Tài khoản kiểm soát nội bộ | Một tài khoản kế toán phi-tiền-mặt (Tồn kho, Giá vốn hàng bán) hệ thống duy trì tự động; không phải tiền người dùng. |
| Phiếu | Một chứng từ kế toán ghi nhận một sự kiện tiền: một phiếu thu (tiền vào), phiếu chi (tiền ra), chuyển khoản (giữa tài khoản), hoặc điều chỉnh. |
| Dòng sổ cái | Một hàng nợ hoặc có bên trong một phiếu. Một phiếu luôn cân bằng: tổng nợ bằng tổng có nơi cả hai bên áp dụng. |
| Danh mục | Phân loại thu/chi trên một di chuyển (ví dụ Sale, Purchase, Rent). |
| Tài khoản mặc định | Tài khoản mà một loại hạch toán tự động định tuyến tới theo mặc định — một cho mỗi loại cho mỗi merchant. |
| Hủy | Hủy bỏ một phiếu đã phát hành bằng cách hạch toán một bản đảo bằng-và-ngược, giữ bản gốc để kiểm toán. |
4. Mô hình khái niệm
Chỉ mang tính khái niệm — schema đầy đủ, enum, và bất biến nằm trong mô hình miền nhà phát triển finance.
5. Yêu cầu chức năng
Một bảng cho mỗi khu vực chức năng. Ưu tiên = MoSCoW (Must / Should / Could / Won't). Mã khu vực khớp với ID của test case.
5.1 Tài khoản (WAL)
| ID | P | Yêu cầu |
|---|---|---|
| URD-WAL-001 | M | Giữ tài khoản loại Tiền mặt, Ngân hàng, QR, và Mobile-POS, mỗi cái thuộc một merchant |
| URD-WAL-002 | M | Duy trì một tài khoản mặc định mỗi loại mỗi merchant để định tuyến hạch toán tự động |
| URD-WAL-003 | M | Tự tạo tài khoản mặc định và tài khoản kiểm soát nội bộ của mỗi merchant khi merchant được tạo |
| URD-WAL-004 | M | Theo dõi số dư hiện tại lũy kế của mỗi tài khoản khi phiếu hạch toán |
| URD-WAL-005 | S | Cho phép tiền tệ tài khoản (mặc định VND) |
| URD-WAL-006 | S | Giới hạn khả năng thấy tài khoản theo các merchant người dùng được cấp (admin thấy tất cả) |
5.2 Phiếu & hạch toán (VCH)
| ID | P | Yêu cầu |
|---|---|---|
| URD-VCH-001 | M | Ghi nhận sự kiện tiền dưới dạng phiếu loại thu, chi, chuyển khoản, hoặc điều chỉnh |
| URD-VCH-002 | M | Mọi phiếu đều cân bằng — nợ bằng có nơi cả hai bên áp dụng |
| URD-VCH-003 | M | Tự phát hành một phiếu thu khi một thanh toán bán hàng thành công, phân loại là Sale |
| URD-VCH-004 | M | Tự phát hành một phiếu chi cho nhà cung cấp khi một đơn mua hàng được nhận |
| URD-VCH-005 | M | Tự hạch toán giá vốn hàng bán và điều chỉnh kho vào tài khoản kiểm soát nội bộ khi di chuyển kho |
| URD-VCH-006 | M | Hạch toán tự động là idempotent — một sự kiện lặp lại không bao giờ hạch toán kép |
| URD-VCH-007 | M | Liên kết mỗi phiếu tới chứng từ nguồn của nó (đơn bán, đơn mua hàng, di chuyển kho, thủ công) |
| URD-VCH-008 | S | Đánh số mỗi phiếu đã phát hành theo merchant, theo loại, theo tháng |
| URD-VCH-009 | S | Hỗ trợ vòng đời thủ công: nháp → phát hành, và xóa một bản nháp trước khi phát hành |
| URD-VCH-010 | S | Chuyển tiền giữa hai tài khoản dưới dạng một phiếu chuyển khoản cân bằng duy nhất |
| URD-VCH-011 | S | Hủy một phiếu đã phát hành qua một đảo cân bằng; bản gốc được giữ lại |
| URD-VCH-012 | C | Gán một phiếu vào một phiên ca POS cho di chuyển tiền mặt theo ca |
5.3 Dòng sổ cái (TXN)
| ID | P | Yêu cầu |
|---|---|---|
| URD-TXN-001 | M | Mỗi phiếu hạch toán các dòng sổ cái nợ/có với các tài khoản |
| URD-TXN-002 | M | Một dòng mang tài khoản nó tác động, một danh mục tùy chọn, một số tiền, và bản chụp số-dư-trước/sau |
| URD-TXN-003 | M | Các dòng chia sẻ tiền tệ của phiếu |
| URD-TXN-004 | S | Một dòng có thể tham chiếu chứng từ nguồn của nó để truy vết |
5.4 Danh mục (CAT)
| ID | P | Yêu cầu |
|---|---|---|
| URD-CAT-001 | M | Cung cấp 14 danh mục hệ thống được seed trải thu và chi |
| URD-CAT-002 | M | Danh mục được gán loại thu hoặc chi |
| URD-CAT-003 | M | Áp một danh mục hệ thống tự động cho phiếu tự-sinh (ví dụ Sale, Purchase) |
| URD-CAT-004 | S | Merchant có thể thêm danh mục tùy chỉnh, lồng dưới một danh mục cha |
6. Tiêu chí chấp nhận
AC-VCH-01: Tự thu khi đơn được trả
| Cho | Khi | Thì |
|---|---|---|
| Một đơn bán được trả | Sự kiện thanh-toán-thành-công đến | Một phiếu thu được phát hành, phân loại là Sale, liên kết tới đơn bán |
| Số dư tài khoản nhận tăng lên đúng số tiền | ||
| Cùng sự kiện đến lại | Xử lý lần thứ hai | Không phiếu thứ hai nào được tạo (idempotent) |
AC-VCH-02: Tự chi khi nhận đơn mua hàng
| Cho | Khi | Thì |
|---|---|---|
| Một đơn mua hàng được nhận | Sự kiện PO-được-nhận đến | Một phiếu chi được phát hành cho nhà cung cấp, liên kết tới đơn mua hàng |
| Giá trị tồn kho dương | Phiếu cân bằng một vế tài sản kho với (các) vế tiền mặt |
AC-WAL-01: Tài khoản mặc định & kiểm soát khi có merchant mới
| Cho | Khi | Thì |
|---|---|---|
| Một merchant được tạo | Sự kiện merchant được điều hòa | Các tài khoản mặc định của merchant được seed |
| Tài khoản kiểm soát nội bộ Tồn kho và Giá-vốn-hàng-bán tồn tại |
AC-VCH-03: Chuyển khoản giữa tài khoản
| Cho | Khi | Thì |
|---|---|---|
| Hai tài khoản của merchant | Chủ chuyển một số tiền A → B | Một phiếu chuyển khoản hạch toán một nợ và một có giá trị bằng nhau |
| Tài khoản A giảm và Tài khoản B tăng cùng một lượng |
AC-VCH-04: Hủy bằng đảo
| Cho | Khi | Thì |
|---|---|---|
| Một phiếu đã phát hành | Chủ hủy nó | Một phiếu đảo cân bằng được hạch toán; bản gốc được giữ lại |
| Số dư tài khoản bị ảnh hưởng trở về trạng thái trước-phiếu |
7. Ràng buộc & Phi mục tiêu
Ràng buộc
| ID | Ràng buộc |
|---|---|
| C-01 | Mọi phiếu phải cân bằng (nợ bằng có nơi cả hai bên áp dụng) |
| C-02 | Đúng một tài khoản mặc định mỗi loại mỗi merchant |
| C-03 | Hạch toán tự động phải idempotent dưới các sự kiện lặp lại |
| C-04 | Mọi dòng sổ cái trong một phiếu chia sẻ tiền tệ của phiếu (một-tiền-tệ; mặc định VND) |
| C-05 | 14 danh mục hệ thống được seed không thuộc merchant |
| C-06 | Bản ghi dùng xóa-mềm; phiếu đã phát hành không bao giờ bị xóa-cứng — chúng được hủy |
| C-07 | Tài khoản kiểm soát nội bộ phải tồn tại trước khi hạch toán giá-vốn-hàng-bán |
Phi mục tiêu
- Theo dõi ngân sách và chênh lệch
- Tự động hóa chi phí định kỳ / theo lịch
- Báo cáo lãi & lỗ và dự báo dòng tiền
- Chụp ảnh biên lai / OCR
- Quy đổi đa tiền tệ trong một phiếu
8. Lịch sử phiên bản
| Ngày | Tác giả | Mô tả | Ver |
|---|---|---|---|
| 2026-02-26 | P. Do — Product Owner | User story ban đầu | v0.1 |
| 2026-04-16 | P. Do — Product Owner | Phạm vi ví, giao dịch, danh mục | v0.3 |
| 2026-05-30 | Di trú tài liệu | Tái cấu trúc theo mô hình phiếu ghi-kép đã xác minh (tài khoản / phiếu / dòng sổ cái / danh mục); sửa loại tài khoản và mô hình giao dịch | v0.4 |