# Ladaer BackEnd - Domain Entities Map

This document tracks the main entity relationships and domains observed in the `Lada.Framework.Data.Domains.*` structure to assist with system extensions that interact closely with existing domains.

## 1. Identity
* **User**: Trái tim của hệ thống. Tích hợp ASP.NET Core Identity. Chứa các property như `ManagerId`, `AgencyId`, `PermissionId`, `UserType` (`Staff` = 10, `Customer` = 20, `Franchisee` = 30).
* **UserRole**, **Role**, **Permission**: Quản lý quyền hệ thống.

## 2. Orders & OrderFin
* **Order**: Bảng đơn hàng chung.
* **OrderFin**: Tracking tài chính của đơn hàng.
  * Các loại phí: `Fee`, `CodFee`, `InsuranceFee`, `ReturnFee`,...
  * **Thu hộ (COD)**: `CodStage`, `CodCashierId`
  * **Thu cước**: `SourceFeeStage`, `SourceFeeCashierId` (Người gửi), `DestFeeStage`, `DestFeeCashierId` (Người nhận).
  * Ghi nhận dòng tiền thực tế được giữ bởi ai (User nào là Cashier). Các Stage này thường chuyển từ `NotCollected` -> `DriverHolding` -> `CashierHolding`.

## 3. Finance & Wallets
* **Wallet**: Ví điện tử của một `User` (Staff, Customer, Franchisee) để theo dõi số dư (Balance) tiền.
* **Transaction**: Chi tiết dòng tiền thu vào/chi ra của Wallet (chuyển tiền, thu cước, thu COD, từ Driver Nộp tiền về, vv).
* **TransactionOrder**: Link trung gian kết nối Transaction với Order tương ứng. Thể hiện bao nhiêu COD, SourceFee, DestFee được thanh toán trong 1 transaction cụ thể.
* **Expense**, **Income**, **TransferPaymentBill**: Các chứng từ tài chính khác liên quan đến quản lý chi phí, thu nhập và đối soát ngân hàng.

-> **Nhận xét**: Hệ thống đã có cơ chế quản lý ví (`Wallet`, `Transaction`) và việc giữ tiền (`OrderFin.CodCashierId`, `OrderFin.SourceFeeCashierId`). Việc 1 Staff/Franchisee "nộp tiền trễ" có thể hiểu là họ đang giữ tiền trong vai trò Cashier, hoặc Wallet của họ đang ghi nhận số nợ với công ty.

## 4. Hr & Attendance
* **Attendance**, **Candidate**: Liên quan đến nhân sự, check-in, check-out và tuyển dụng.

## 5. Medias
* **Media**: Quản lý ảnh/video (ví dụ chụp ảnh khi nộp tiền, khi giao hàng, check-in).

## Hướng thiết kế cho nghiệp vụ Rewards/Penalties:
* Feature "nộp tiền chậm" có thể sẽ cần hook vào bảng `Transaction` (khi Staff/Franchisee submit tiền mặt) hoặc đọc số nợ cước từ `OrderFin`/`Wallet` để phát hiện dư nợ của ngày BusinessDate đang xét.