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>
8.1 KiB
8.1 KiB
會計科目比對分析
分析日期: 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 |
說明 |
支援的科目類型:
- asset - 資產
- liability - 負債
- net_asset - 淨資產/基金
- income - 收入
- 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 即可
需要做的:
- 執行
php artisan db:seed --class=ChartOfAccountSeeder - 匯入 Excel 資料時,建立科目對照表
- Excel「4100一般捐款」→ 系統「4201捐贈收入」
- Excel「4310入會費」→ 系統「4102入會費收入」
- Excel「5100業務費用」→ 依實際用途對應到細項(如5206旅運費、5205印刷費等)
科目對照表範例:
Excel 4100 → 系統 4201 (捐贈收入)
Excel 4310 → 系統 4102 (入會費收入)
Excel 5100 → 系統 5201-5215 (依用途細分)
- 會場清潔費 → 5208 修繕費 或 5209 會議費
- 點心費 → 5209 會議費
- 交通費 → 5206 旅運費
- 郵寄費 → 5203 郵電費
- 影印費 → 5205 印刷費
🎯 方案二:使用 Excel 科目
優點:
- 簡單直接
- 與現有資料一致
缺點:
- ❌ 科目較少,未來可能不夠用
- ❌ 支出科目太籠統(全部都是「業務費用」)
- ❌ 不符合標準會計科目結構
需要做的:
- 修改 Seeder,使用 Excel 的 44 個科目
- 或手動建立 Excel 科目
🎯 方案三:混合使用(折衷方案)
做法:
- 使用系統預設科目作為基礎
- 保留 Excel 中重要但系統沒有的科目
- 匯入時建立對照關係
四、推薦執行步驟
✅ 建議採用「方案一:使用系統預設科目」
步驟 1:執行系統 Seeder
php artisan db:seed --class=ChartOfAccountSeeder
這會建立 56 個標準會計科目。
步驟 2:建立 Excel 科目對照表
創建一個對照表文件,記錄 Excel 科目如何對應到系統科目:
| Excel科目編號 | Excel科目名稱 | 系統科目編號 | 系統科目名稱 | 備註 |
|---|---|---|---|---|
| 4100 | 一般捐款收入 | 4201 | 捐贈收入 | |
| 4310 | 入會費 | 4102 | 入會費收入 | |
| 5100 | 業務費用 | (多個) | 依用途細分 | 需分析摘要 |
步驟 3:匯入 Excel 資料時進行轉換
在匯入程式中:
- 讀取 Excel 的科目編號
- 查詢對照表
- 轉換為系統科目編號
- 寫入資料庫
步驟 4:特別處理「5100業務費用」
Excel 中所有支出都記為「5100業務費用」,需要根據「支出用途備註」欄位來判斷應該對應到哪個細項科目:
// 範例邏輯
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 科目編號(在備註欄)
匯入後
- 檢查科目使用統計
- 確認借貸平衡
- 產生匯入報告
六、立即可做的事
現在就可以執行
# 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';
}
"
七、結論
✅ 系統已經準備好會計科目功能
- Model 完整 - ChartOfAccount 已實作
- 資料表已建立 - chart_of_accounts 存在
- 預設科目齊全 - 56個專業科目已定義
- 關聯完整 - 支援父子科目、交易關聯
🎯 下一步
推薦做法:
- ✅ 執行 ChartOfAccountSeeder 建立系統科目
- ✅ 建立 Excel → 系統科目對照表
- ✅ 開發匯入程式,在匯入時自動轉換科目
優勢:
- 使用專業的會計科目結構
- 未來擴展性強
- 符合台灣非營利組織準則
- 財報產出更專業
需要我現在執行 Seeder 建立這 56 個會計科目嗎?