Add membership fee system with disability discount and fix document permissions

Features:
- Implement two fee types: entrance fee and annual fee (both NT$1,000)
- Add 50% discount for disability certificate holders
- Add disability certificate upload in member profile
- Integrate disability verification into cashier approval workflow
- Add membership fee settings in system admin

Document permissions:
- Fix hard-coded role logic in Document model
- Use permission-based authorization instead of role checks

Additional features:
- Add announcements, general ledger, and trial balance modules
- Add income management and accounting entries
- Add comprehensive test suite with factories
- Update UI translations to Traditional Chinese

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-12-01 09:56:01 +08:00
parent 83ce1f7fc8
commit 642b879dd4
207 changed files with 19487 additions and 3048 deletions

331
會計科目比對分析.md Normal file
View File

@@ -0,0 +1,331 @@
# 會計科目比對分析
**分析日期:** 2025-11-30
---
## 一、系統現況
### ✅ 系統已具備會計科目功能
**Model** `App\Models\ChartOfAccount`
**資料表:** `chart_of_accounts` (已建立,但目前為空)
**Seeder** `ChartOfAccountSeeder` (已準備好 56 個科目)
#### 資料表結構:
| 欄位名稱 | 說明 |
|---------|------|
| `account_code` | 科目代碼1101, 4201 |
| `account_name_zh` | 中文科目名稱 |
| `account_name_en` | 英文科目名稱 |
| `account_type` | 科目類型asset/liability/net_asset/income/expense |
| `category` | 科目分類 |
| `parent_account_id` | 父科目ID支援階層結構 |
| `is_active` | 是否啟用 |
| `display_order` | 顯示順序 |
| `description` | 說明 |
#### 支援的科目類型:
1. **asset** - 資產
2. **liability** - 負債
3. **net_asset** - 淨資產/基金
4. **income** - 收入
5. **expense** - 支出
---
## 二、系統預設科目 vs Excel 科目
### 📊 數量對比
| 來源 | 科目數量 | 狀態 |
|------|---------|------|
| **系統 Seeder** | 56 個科目 | ✅ 已定義,待執行 |
| **Excel 檔案** | 44 個科目 | ✅ 已整理 |
### 🔍 詳細比對
#### A. 資產類科目 (1xxx)
**系統預設 (11個)**
- 1101 現金
- 1102 零用金
- 1201 銀行存款
- 1301 應收帳款
- 1302 其他應收款
- 1401 土地
- 1402 房屋及建築
- 1403 機器設備
- 1404 辦公設備
- 1405 電腦設備
- 1501 存出保證金
**Excel (1000系列)**
- 1000 現金及約當現金
- 1100 庫存現金
- 1101 銀行存款 ✅ 相符
- 1107 其他現金等價物
**差異:**
- ⚠️ Excel 使用更寬泛的「1000現金及約當現金」作為大類
- 系統有更細分的固定資產科目(土地、房屋等)
- 協會目前可能不需要那麼多固定資產科目
#### B. 收入類科目 (4xxx)
**系統預設 (10個)**
- 4101 會費收入 ✅
- 4102 入會費收入 ✅
- 4201 捐贈收入 ✅
- 4202 企業捐贈收入
- 4301 政府補助收入
- 4302 計畫補助收入
- 4401 利息收入
- 4402 活動報名費收入
- 4901 雜項收入
**Excel (4000系列)**
- 4100 一般捐款收入 ≈ 4201 捐贈收入
- 4310 入會費 ≈ 4102 入會費收入
**對應關係:**
| Excel | 系統 | 說明 |
|-------|------|------|
| 4100 | 4201 | 捐款收入(編號不同) |
| 4310 | 4102 | 入會費(編號不同) |
**差異:**
- ⚠️ 科目編號不完全相同
- 系統有更細分的收入來源分類
- Excel 較精簡
#### C. 支出類科目 (5xxx)
**系統預設 (35個非常詳細)**
**人事費 (5101-5105)**
- 5101 薪資支出
- 5102 勞健保費
- 5103 退休金提撥
- 5104 加班費
- 5105 員工福利
**業務費 (5201-5215)**
- 5201 租金支出
- 5202 水電費
- 5203 郵電費
- 5204 文具用品
- 5205 印刷費
- 5206 旅運費
- 5207 保險費
- 5208 修繕費
- 5209 會議費
- 5210 訓練費
- 5211 交際費
- 5212 廣告宣傳費
- 5213 專案活動費
- 5214 會員服務費
- 5215 志工費用
**管理費 (5301-5308)**
- 5301 折舊費用
- 5302 稅捐
- 5303 什項購置
- 5304 銀行手續費
- 5305 審計費
- 5306 法律諮詢費
- 5307 顧問費
- 5308 資訊系統費
**其他支出:**
- 5401 捐贈支出
- 5901 雜項支出
**Excel (5000系列)**
- 5100 業務費用(較籠統)
**差異:**
- ⭐ 系統科目非常詳細Excel 較精簡
- 系統適合大型組織Excel 適合小型協會
- 可能需要調整
---
## 三、建議處理方案
### 🎯 方案一:使用系統預設科目(推薦)
**優點:**
- ✅ 更完整、更專業
- ✅ 未來擴展性強
- ✅ 符合台灣非營利組織會計準則
- ✅ 已經寫好,直接執行 Seeder 即可
**需要做的:**
1. 執行 `php artisan db:seed --class=ChartOfAccountSeeder`
2. 匯入 Excel 資料時,建立科目對照表
3. Excel「4100一般捐款」→ 系統「4201捐贈收入」
4. Excel「4310入會費」→ 系統「4102入會費收入」
5. Excel「5100業務費用」→ 依實際用途對應到細項如5206旅運費、5205印刷費等
**科目對照表範例:**
```
Excel 4100 → 系統 4201 (捐贈收入)
Excel 4310 → 系統 4102 (入會費收入)
Excel 5100 → 系統 5201-5215 (依用途細分)
- 會場清潔費 → 5208 修繕費 或 5209 會議費
- 點心費 → 5209 會議費
- 交通費 → 5206 旅運費
- 郵寄費 → 5203 郵電費
- 影印費 → 5205 印刷費
```
---
### 🎯 方案二:使用 Excel 科目
**優點:**
- 簡單直接
- 與現有資料一致
**缺點:**
- ❌ 科目較少,未來可能不夠用
- ❌ 支出科目太籠統(全部都是「業務費用」)
- ❌ 不符合標準會計科目結構
**需要做的:**
1. 修改 Seeder使用 Excel 的 44 個科目
2. 或手動建立 Excel 科目
---
### 🎯 方案三:混合使用(折衷方案)
**做法:**
1. 使用系統預設科目作為基礎
2. 保留 Excel 中重要但系統沒有的科目
3. 匯入時建立對照關係
---
## 四、推薦執行步驟
### ✅ 建議採用「方案一:使用系統預設科目」
#### 步驟 1執行系統 Seeder
```bash
php artisan db:seed --class=ChartOfAccountSeeder
```
這會建立 56 個標準會計科目。
#### 步驟 2建立 Excel 科目對照表
創建一個對照表文件,記錄 Excel 科目如何對應到系統科目:
| Excel科目編號 | Excel科目名稱 | 系統科目編號 | 系統科目名稱 | 備註 |
|--------------|--------------|------------|------------|------|
| 4100 | 一般捐款收入 | 4201 | 捐贈收入 | |
| 4310 | 入會費 | 4102 | 入會費收入 | |
| 5100 | 業務費用 | (多個) | 依用途細分 | 需分析摘要 |
#### 步驟 3匯入 Excel 資料時進行轉換
在匯入程式中:
1. 讀取 Excel 的科目編號
2. 查詢對照表
3. 轉換為系統科目編號
4. 寫入資料庫
#### 步驟 4特別處理「5100業務費用」
Excel 中所有支出都記為「5100業務費用」需要根據「支出用途備註」欄位來判斷應該對應到哪個細項科目
```php
// 範例邏輯
if (str_contains($description, '交通') || str_contains($description, '車費')) {
$accountCode = '5206'; // 旅運費
} elseif (str_contains($description, '會場') || str_contains($description, '清潔')) {
$accountCode = '5209'; // 會議費
} elseif (str_contains($description, '點心') || str_contains($description, '餐')) {
$accountCode = '5209'; // 會議費
}
// ... 更多規則
```
---
## 五、執行檢查清單
### 匯入前
- [ ] 決定使用哪個方案
- [ ] 執行 ChartOfAccountSeeder如果用方案一
- [ ] 建立科目對照表
- [ ] 準備支出科目判斷邏輯
### 匯入中
- [ ] 驗證科目代碼存在
- [ ] 記錄無法對應的科目
- [ ] 保留原始 Excel 科目編號(在備註欄)
### 匯入後
- [ ] 檢查科目使用統計
- [ ] 確認借貸平衡
- [ ] 產生匯入報告
---
## 六、立即可做的事
### 現在就可以執行
```bash
# 1. 查看系統已有多少科目(應該是 0
php artisan tinker --execute="echo App\Models\ChartOfAccount::count();"
# 2. 執行 Seeder 建立 56 個預設科目
php artisan db:seed --class=ChartOfAccountSeeder
# 3. 再次確認科目數量(應該變成 56
php artisan tinker --execute="echo App\Models\ChartOfAccount::count();"
# 4. 列出所有收入類科目
php artisan tinker --execute="
\$accounts = App\Models\ChartOfAccount::where('account_type', 'income')->get();
foreach (\$accounts as \$a) {
echo \$a->account_code . ' - ' . \$a->account_name_zh . '\n';
}
"
```
---
## 七、結論
### ✅ 系統已經準備好會計科目功能
1. **Model 完整** - ChartOfAccount 已實作
2. **資料表已建立** - chart_of_accounts 存在
3. **預設科目齊全** - 56個專業科目已定義
4. **關聯完整** - 支援父子科目、交易關聯
### 🎯 下一步
**推薦做法:**
1. ✅ 執行 ChartOfAccountSeeder 建立系統科目
2. ✅ 建立 Excel → 系統科目對照表
3. ✅ 開發匯入程式,在匯入時自動轉換科目
**優勢:**
- 使用專業的會計科目結構
- 未來擴展性強
- 符合台灣非營利組織準則
- 財報產出更專業
需要我現在執行 Seeder 建立這 56 個會計科目嗎?