This commit is contained in:
Chris Chen
2026-06-24 21:37:41 -07:00
parent 9f91683633
commit 46a4298a71
4 changed files with 314 additions and 5 deletions
@@ -77,4 +77,59 @@ public class DbSeederForm990Tests
.FirstAsync(s => s.Name_en == "Accounting & Audit"); .FirstAsync(s => s.Name_en == "Accounting & Audit");
Assert.Equal("11c", audit.Form990Line!.LineCode); Assert.Equal("11c", audit.Form990Line!.LineCode);
} }
[Fact]
public async Task SeedForm990Lines_MapsAuditCorrectedSubcategories_OffTheLine24CatchAll()
{
using var db = BuildDb();
await DbSeeder.SeedExpenseCategoriesAsync(db);
await DbSeeder.SeedForm990ExpenseLinesAsync(db);
async Task<string> CodeOf(string subEn) =>
(await db.ExpenseSubCategories.Include(s => s.Form990Line)
.FirstAsync(s => s.Name_en == subEn)).Form990Line!.LineCode;
// Newly mapped subcategories that previously fell through to line 24.
Assert.Equal("13", await CodeOf("Bank & Processing Fees"));
Assert.Equal("13", await CodeOf("Rental"));
Assert.Equal("13", await CodeOf("Maintenance & Repair"));
Assert.Equal("13", await CodeOf("Cleaning Supplies"));
Assert.Equal("13", await CodeOf("Craft Supplies"));
// Building repairs & maintenance are part of Occupancy (line 16), not equipment (line 13).
Assert.Equal("16", await CodeOf("Repairs & Maintenance"));
// Appreciation/outreach gifts are deliberately mapped to Other (line 24), not left unmapped.
Assert.Equal("24", await CodeOf("Gifts"));
// Visitation is a travel/program cost, not a grant to an individual.
Assert.Equal("17", await CodeOf("Visit Expenses"));
// Missions support paid to individual missionaries → line 2, not line 1 (organizations).
Assert.Equal("2", await CodeOf("Missionary Support"));
}
[Fact]
public async Task SeedForm990Lines_RemapsExistingBadMapping_ButNotAdminOverride()
{
using var db = BuildDb();
await DbSeeder.SeedExpenseCategoriesAsync(db);
await DbSeeder.SeedForm990ExpenseLinesAsync(db);
// Simulate a database seeded by the OLD code: Visit Expenses on line 2, Missionary
// Support on line 1. Also simulate an admin who deliberately moved one elsewhere.
var lineByCode = await db.Form990ExpenseLines.ToDictionaryAsync(l => l.LineCode, l => l.Id);
var visit = await db.ExpenseSubCategories.FirstAsync(s => s.Name_en == "Visit Expenses");
var missionary = await db.ExpenseSubCategories.FirstAsync(s => s.Name_en == "Missionary Support");
var transfer = await db.ExpenseSubCategories.FirstAsync(s => s.Name_en == "Offering Transfer");
visit.Form990LineId = lineByCode["2"]; // old (wrong) value → should be corrected
missionary.Form990LineId = lineByCode["1"]; // old (wrong) value → should be corrected
transfer.Form990LineId = lineByCode["24"]; // admin override → must be left alone
await db.SaveChangesAsync();
await DbSeeder.SeedForm990ExpenseLinesAsync(db);
await db.Entry(visit).ReloadAsync();
await db.Entry(missionary).ReloadAsync();
await db.Entry(transfer).ReloadAsync();
Assert.Equal(lineByCode["17"], visit.Form990LineId); // corrected 2 → 17
Assert.Equal(lineByCode["2"], missionary.Form990LineId); // corrected 1 → 2
Assert.Equal(lineByCode["24"], transfer.Form990LineId); // admin edit preserved
}
} }
+46 -5
View File
@@ -38,11 +38,11 @@ public static class DbSeeder
("Food & Beverage", "餐飲", 3, [("Catering","出餐費用"),("Food Ingredients","食材採購"),("Utensils","器具"),("Disposable Tableware","一次性餐具")]), ("Food & Beverage", "餐飲", 3, [("Catering","出餐費用"),("Food Ingredients","食材採購"),("Utensils","器具"),("Disposable Tableware","一次性餐具")]),
("Training", "培訓", 4, [("Course Fees","課程費用"),("Books","書籍"),("Conference","研討會"),("Travel","差旅")]), ("Training", "培訓", 4, [("Course Fees","課程費用"),("Books","書籍"),("Conference","研討會"),("Travel","差旅")]),
("Materials", "教材", 5, [("Curriculum Printing","教材印刷"),("Craft Supplies","手工材料"),("Copyright & Licensing","版權購買")]), ("Materials", "教材", 5, [("Curriculum Printing","教材印刷"),("Craft Supplies","手工材料"),("Copyright & Licensing","版權購買")]),
("Facility", "場地", 6, [("Rent","場地租金"),("Utilities","水電"),("Property Insurance","財產保險"),("Decoration","裝飾")]), ("Facility", "場地", 6, [("Rent","場地租金"),("Utilities","水電"),("Property Insurance","財產保險"),("Decoration","裝飾"),("Repairs & Maintenance","修繕維護")]),
("Printing", "印刷", 7, [("Bulletins","週報"),("Order of Service","程序單"),("Posters","海報"),("Advertising & Promotion","廣告推廣")]), ("Printing", "印刷", 7, [("Bulletins","週報"),("Order of Service","程序單"),("Posters","海報"),("Advertising & Promotion","廣告推廣")]),
("Missions", "宣教", 8, [("Offering Transfer","奉獻轉帳"),("Missionary Support","宣教士支援"),("Foreign Missions Support","國外宣教支援"),("Travel","差旅")]), ("Missions", "宣教", 8, [("Offering Transfer","奉獻轉帳"),("Missionary Support","宣教士支援"),("Foreign Missions Support","國外宣教支援"),("Travel","差旅")]),
("Benevolence", "關懷救助", 9, [("Emergency Aid","急難救助"),("Condolence Gifts","慰問禮品"),("Visit Expenses","探訪費用")]), ("Benevolence", "關懷救助", 9, [("Emergency Aid","急難救助"),("Condolence Gifts","慰問禮品"),("Visit Expenses","探訪費用")]),
("Other", "其他", 10, [("Miscellaneous","雜支")]), ("Other", "其他", 10, [("Miscellaneous","雜支"),("Gifts","禮品")]),
("Personnel", "人事", 11, [("Officer / Key Employee Compensation","主要職員薪酬"),("Salary & Wages","薪資"),("Payroll Taxes","薪資稅費"),("Employee Benefits","員工福利"),("Retirement / Pension","退休金"),("Workers Compensation","勞工保險"),("Honorarium","酬庸"),("Staff Training","同工進修"),("Contract Labor","外包勞務")]), ("Personnel", "人事", 11, [("Officer / Key Employee Compensation","主要職員薪酬"),("Salary & Wages","薪資"),("Payroll Taxes","薪資稅費"),("Employee Benefits","員工福利"),("Retirement / Pension","退休金"),("Workers Compensation","勞工保險"),("Honorarium","酬庸"),("Staff Training","同工進修"),("Contract Labor","外包勞務")]),
("Professional Services", "專業服務", 12, [("Legal","法律服務"),("Accounting & Audit","會計與審計"),("Other Professional","其他專業服務")]), ("Professional Services", "專業服務", 12, [("Legal","法律服務"),("Accounting & Audit","會計與審計"),("Other Professional","其他專業服務")]),
("Information Technology", "資訊科技", 13, [("Software & Subscriptions","軟體與訂閱"),("Website & Hosting","網站與主機"),("Internet & Telecom","網路與電信")]), ("Information Technology", "資訊科技", 13, [("Software & Subscriptions","軟體與訂閱"),("Website & Hosting","網站與主機"),("Internet & Telecom","網路與電信")]),
@@ -91,23 +91,36 @@ public static class DbSeeder
("Facility", "Utilities", "16"), ("Facility", "Utilities", "16"),
("Facility", "Property Insurance", "23"), ("Facility", "Property Insurance", "23"),
("Facility", "Decoration", "24"), ("Facility", "Decoration", "24"),
// Building repairs & maintenance (plumbing, electrical, painting) are part of Occupancy.
("Facility", "Repairs & Maintenance", "16"),
("Training", "Course Fees", "19"), ("Training", "Course Fees", "19"),
("Training", "Conference", "19"), ("Training", "Conference", "19"),
("Training", "Books", "24"), ("Training", "Books", "24"),
("Training", "Travel", "17"), ("Training", "Travel", "17"),
("Missions", "Travel", "17"), ("Missions", "Travel", "17"),
("Missions", "Offering Transfer", "1"), // Domestic missions support is paid to individual missionaries/families → line 2 (grants to individuals).
("Missions", "Missionary Support", "1"), ("Missions", "Offering Transfer", "2"),
("Missions", "Missionary Support", "2"),
("Missions", "Foreign Missions Support", "3"), ("Missions", "Foreign Missions Support", "3"),
("Benevolence", "Emergency Aid", "2"), ("Benevolence", "Emergency Aid", "2"),
("Benevolence", "Condolence Gifts", "2"), ("Benevolence", "Condolence Gifts", "2"),
("Benevolence", "Visit Expenses", "2"), // Visitation is the church's own travel/program cost, not a grant to an individual.
("Benevolence", "Visit Expenses", "17"),
("Consumables", "Office Supplies", "13"), ("Consumables", "Office Supplies", "13"),
// General supplies belong with office expenses (line 13), not the "Other" catch-all.
("Consumables", "Batteries", "13"),
("Consumables", "Accessories", "13"),
("Consumables", "Cleaning Supplies", "13"),
// IRS line 13 covers equipment rental and maintenance.
("Equipment", "Rental", "13"),
("Equipment", "Maintenance & Repair", "13"),
("Printing", "Bulletins", "13"), ("Printing", "Bulletins", "13"),
("Printing", "Order of Service", "13"), ("Printing", "Order of Service", "13"),
("Printing", "Posters", "12"), ("Printing", "Posters", "12"),
("Printing", "Advertising & Promotion", "12"), ("Printing", "Advertising & Promotion", "12"),
("Materials", "Curriculum Printing", "13"), ("Materials", "Curriculum Printing", "13"),
// Classroom/craft supplies fall under IRS line 13 office expenses ("supplies… classroom…").
("Materials", "Craft Supplies", "13"),
("Professional Services", "Legal", "11b"), ("Professional Services", "Legal", "11b"),
("Professional Services", "Accounting & Audit", "11c"), ("Professional Services", "Accounting & Audit", "11c"),
("Professional Services", "Other Professional", "11g"), ("Professional Services", "Other Professional", "11g"),
@@ -115,6 +128,22 @@ public static class DbSeeder
("Information Technology", "Website & Hosting", "14"), ("Information Technology", "Website & Hosting", "14"),
("Information Technology", "Internet & Telecom", "14"), ("Information Technology", "Internet & Telecom", "14"),
("Finance & Banking", "Interest", "20"), ("Finance & Banking", "Interest", "20"),
// Bank/processing fees are office expenses per IRS line 13 (consistent with Interest → 20).
("Finance & Banking", "Bank & Processing Fees", "13"),
// Appreciation/outreach gifts have no natural 990 line; mapped to 24 explicitly so this
// deliberate "Other" choice doesn't inflate UnmappedExpenseCount. (Benevolence gifts → line 2.)
("Other", "Gifts", "24"),
];
// One-time corrections for subcategories that were mapped to the WRONG line in an earlier
// seed. The normal mapping loop below only fills NULLs, so it cannot fix an existing bad
// value — this block does. Idempotent: each row fires only while the subcategory still holds
// the OLD line, so it never clobbers a deliberate admin re-mapping. (GroupEn, SubEn, Old, New)
private static readonly (string GroupEn, string SubEn, string OldCode, string NewCode)[] Form990RemapSeed =
[
("Benevolence", "Visit Expenses", "2", "17"),
("Missions", "Missionary Support", "1", "2"),
("Missions", "Offering Transfer", "1", "2"),
]; ];
private static readonly (string Name, string Description)[] Roles = private static readonly (string Name, string Description)[] Roles =
@@ -329,6 +358,18 @@ public static class DbSeeder
if (sub is not null && sub.Form990LineId is null && linesByCode.TryGetValue(code, out var lineId)) if (sub is not null && sub.Form990LineId is null && linesByCode.TryGetValue(code, out var lineId))
sub.Form990LineId = lineId; sub.Form990LineId = lineId;
} }
// Correct earlier mis-mappings on existing databases (see Form990RemapSeed). Only fires
// while the subcategory still holds the OLD line, so a later admin edit is never clobbered.
foreach (var (groupEn, subEn, oldCode, newCode) in Form990RemapSeed)
{
var sub = subsByKey.FirstOrDefault(s => s.Group!.Name_en == groupEn && s.Name_en == subEn);
if (sub is null) continue;
if (linesByCode.TryGetValue(oldCode, out var oldId)
&& linesByCode.TryGetValue(newCode, out var newId)
&& sub.Form990LineId == oldId)
sub.Form990LineId = newId;
}
await db.SaveChangesAsync(); await db.SaveChangesAsync();
} }
+3
View File
@@ -595,6 +595,7 @@ Table: ExpenseSubCategories
| 6 Facility | Utilities | 水電 | | 6 Facility | Utilities | 水電 |
| 6 Facility | Property Insurance | 財產保險 | | 6 Facility | Property Insurance | 財產保險 |
| 6 Facility | Decoration | 裝飾 | | 6 Facility | Decoration | 裝飾 |
| 6 Facility | Repairs & Maintenance | 修繕維護 |
| 7 Printing | Bulletins | 週報 | | 7 Printing | Bulletins | 週報 |
| 7 Printing | Order of Service | 程序單 | | 7 Printing | Order of Service | 程序單 |
| 7 Printing | Posters | 海報 | | 7 Printing | Posters | 海報 |
@@ -607,6 +608,7 @@ Table: ExpenseSubCategories
| 9 Benevolence | Condolence Gifts | 慰問禮品 | | 9 Benevolence | Condolence Gifts | 慰問禮品 |
| 9 Benevolence | Visit Expenses | 探訪費用 | | 9 Benevolence | Visit Expenses | 探訪費用 |
| 10 Other | Miscellaneous | 雜支 | | 10 Other | Miscellaneous | 雜支 |
| 10 Other | Gifts | 禮品 |
| 11 Personnel | Salary & Wages | 薪資 | | 11 Personnel | Salary & Wages | 薪資 |
| 11 Personnel | Officer / Key Employee Compensation | 主任/關鍵員工薪酬 | | 11 Personnel | Officer / Key Employee Compensation | 主任/關鍵員工薪酬 |
| 11 Personnel | Payroll Taxes | 薪資稅費 | | 11 Personnel | Payroll Taxes | 薪資稅費 |
@@ -618,6 +620,7 @@ Table: ExpenseSubCategories
| 11 Personnel | Contract Labor | 外包勞務 | | 11 Personnel | Contract Labor | 外包勞務 |
> **備注:** `Facility > 財產保險` 指建築物/場地責任險;員工健保、團體保險等歸 `Personnel > 員工福利`。同工代墊報銷依**實際購買物**選大類,不歸人事。 > **備注:** `Facility > 財產保險` 指建築物/場地責任險;員工健保、團體保險等歸 `Personnel > 員工福利`。同工代墊報銷依**實際購買物**選大類,不歸人事。
> **修繕歸類:** 建物日常修繕(水電、油漆等)歸 `Facility > 修繕維護`990 第16行 Occupancy);**設備**維修歸 `Equipment > Maintenance & Repair`990 第13行)。重大資本改良(整修屋頂、大規模裝修)應資本化、走折舊(第22行,目前未實作)。
> **子項目更名說明:** `Food & Beverage > Consumables`(消耗品)更名為 `Disposable Tableware`(一次性餐具)以消除與大類同名的歧義;`Materials > Printing`(印刷費用)更名為 `Curriculum Printing`(教材印刷)以與 Printing 大類區分。 > **子項目更名說明:** `Food & Beverage > Consumables`(消耗品)更名為 `Disposable Tableware`(一次性餐具)以消除與大類同名的歧義;`Materials > Printing`(印刷費用)更名為 `Curriculum Printing`(教材印刷)以與 Printing 大類區分。
### Expense(支出記錄) ### Expense(支出記錄)
+210
View File
@@ -0,0 +1,210 @@
# 教會支出分類速查指南(財務同工版)
> 目的:幫助財務同工在登錄每一筆支出時,快速、正確地選對 **大類別** 與 **子類別**。
> 分類正確 = 報表正確 = 隨時能應付 IRS Form 990 級查帳。
>
> 看不懂某個欄位時,先讀「§1 三個關鍵觀念」,八成的疑問都在那裡。
---
## §1 三個關鍵觀念(務必先讀)
### 觀念 1️⃣ 類別 = 你買了「**什麼**」,不是「為了哪個活動」
大類別/子類別描述的是**費用的性質**(買食物、付薪水、修水電),**不是活動名稱**。
- ❌ 沒有「父親節」「福音周」「周年慶」這種類別。
- ✅ 「活動/場合」請寫在 **事工(組別)** 欄 + **說明(Description)** 欄。
> 例:父親節買的 Pizza → 大類別選「餐飲」,**不是**去找「父親節」類別;
> 在說明欄寫「父親節活動加菜」,在事工欄選負責的組別(如招待)。
### 觀念 2️⃣ 一個活動 = 常常拆成「多筆、不同類別」
大型活動的花費橫跨好幾種性質,**請分開登錄**,不要硬塞進同一類。
> 例:**教會周年慶**可能拆成 ——
> - 餐點 → `餐飲 > 出餐費用`
> - 會場布置鮮花 → `場地 > 裝飾`
> - 海報/邀請卡 → `印刷 > 海報`
> - 給來賓的小禮 → `其他 > 雜支`
>
> 全部在事工欄選同一組別、說明欄都寫「周年慶」,但**類別各自照性質選**。
### 觀念 3️⃣ 不確定時:看「實際買的東西」,真的找不到才用「其他 > 雜支」
- 先問自己:「這筆錢**實際買到的是什麼**?」依那個東西選類別。
- 真的沒有對應 → `其他 > 雜支`,並**在說明欄寫清楚**(查帳時看得懂就好)。
---
## §2 你給的範例,這樣分
| 費用範例 | 事工(選組別) | 大類別 | 子類別 | (990行) |
|---|---|---|---|:--:|
| 父親節 — 給父親的小禮物(每份 < $20) | 招待 | 其他 | **禮品** | 24 |
| 父親節 — 加菜金(Pizza/水果/炸雞) | 招待/餐飲 | 餐飲 | 出餐費用 | 24 |
| 福音周 — 買福音小組食物(現成) | (主辦組別) | 餐飲 | 出餐費用 | 24 |
| 福音周 — 買食材自己煮 | (主辦組別) | 餐飲 | 食材採購 | 24 |
| 福音周 — 福音小組小禮物 | (主辦組別) | 其他 | **禮品** | 24 |
| 特別講員的講員費(一次性) | 講道 | 人事 | **酬庸** | 11g |
| 小組餐具費 — 可重複用的碗盤 | (小組組別) | 餐飲 | 器具 | 24 |
| 小組餐具費 — 用完即丟的紙盤紙杯 | (小組組別) | 餐飲 | 一次性餐具 | 24 |
| 小組生日聚餐 — 買蛋糕幫弟兄姊妹慶生 | (小組組別) | 餐飲 | 出餐費用 | 24 |
| 同工退修會 — 兩天一夜住宿 | 行政/相關組 | 人事 | **同工進修**(住宿差旅同筆登即可) | 19 |
| 教會周年慶 — 整體預算 | (主辦組別) | **拆多筆**(見觀念 2) | 各依性質 | 多 |
| 主日愛宴 | 餐飲/招待 | 餐飲 | 出餐費用 或 食材採購 | 24 |
| Part-time 同工薪水 | 行政 | 人事 | **薪資** | 7 |
> 講員費 vs 薪水:**一次性的外部講員 → 酬庸**;**固定領薪的同工(含兼職) → 薪資**。
---
## §3 常見費用速查表(依場景)
> 990 行欄位是系統**自動帶出**的,同工**不需要選**,僅供對帳參考。
### 🙏 主日崇拜/敬拜
| 買了什麼 | 大類別 | 子類別 | 990 |
|---|---|---|:--:|
| 司琴/敬拜團車馬費、特約樂手 | 人事 | 酬庸 | 11g |
| 詩歌版權(CCLI 等)、影片授權 | 教材 | 版權購買 | 24 |
| 主日週報印刷 | 印刷 | 週報 | 13 |
| 程序單印刷 | 印刷 | 程序單 | 13 |
| 講台鮮花、會場布置 | 場地 | 裝飾 | 24 |
| 聖餐餅/杯(消耗食材) | 餐飲 | 食材採購 | 24 |
| 麥克風電池 | 消耗品 | 電池 | 13 |
### 🍱 餐飲/愛宴/團契
| 買了什麼 | 大類別 | 子類別 | 990 |
|---|---|---|:--:|
| 外訂便當/Pizza/現成餐點 | 餐飲 | 出餐費用 | 24 |
| 自己煮 — 買食材 | 餐飲 | 食材採購 | 24 |
| 可重複用的鍋具、碗盤、保溫桶 | 餐飲 | 器具 | 24 |
| 紙盤、紙杯、免洗餐具 | 餐飲 | 一次性餐具 | 24 |
| 慶生蛋糕(屬聚餐的一部分) | 餐飲 | 出餐費用 | 24 |
### 👥 人事/薪酬
| 買了什麼 | 大類別 | 子類別 | 990 |
|---|---|---|:--:|
| 牧師/主要負責同工薪酬 | 人事 | 主要職員薪酬 | 5 |
| 一般同工、兼職薪水 | 人事 | 薪資 | 7 |
| 代扣/雇主薪資稅 | 人事 | 薪資稅費 | 10 |
| 健保、團保等員工福利 | 人事 | 員工福利 | 9 |
| 退休金提撥 | 人事 | 退休金 | 8 |
| 勞工保險 | 人事 | 勞工保險 | 9 |
| 一次性講員費、外部酬勞 | 人事 | 酬庸 | 11g |
| 外包勞務(設計、清潔承包) | 人事 | 外包勞務 | 11g |
| 同工進修、退修會、報名研習 | 人事 | 同工進修 | 19 |
### 🏠 場地/行政
| 買了什麼 | 大類別 | 子類別 | 990 |
|---|---|---|:--:|
| 場地租金 | 場地 | 場地租金 | 16 |
| 水費、電費、瓦斯費 | 場地 | 水電 | 16 |
| **建物修繕**(修水電、油漆、換燈管) | 場地 | **修繕維護** | 16 |
| 財產/場地保險 | 場地 | 財產保險 | 23 |
| 影印紙、碳粉、文具 | 消耗品 | 文具 | 13 |
| 清潔用品(洗手乳、垃圾袋、清潔劑) | 消耗品 | 清潔用品 | 13 |
| 電池、雜項配件 | 消耗品 | 電池/配件 | 13 |
### 🖥️ 資訊科技
| 買了什麼 | 大類別 | 子類別 | 990 |
|---|---|---|:--:|
| 軟體訂閱(Zoom、Planning Center、Office) | 資訊科技 | 軟體與訂閱 | 14 |
| 教會網站、網域、主機代管 | 資訊科技 | 網站與主機 | 14 |
| 網路費、市話/手機通訊 | 資訊科技 | 網路與電信 | 14 |
### 🛠️ 設備
| 買了什麼 | 大類別 | 子類別 | 990 |
|---|---|---|:--:|
| **租**投影機、音響、桌椅 | 設備 | 租借 | 13 |
| **修**設備(音響、樂器、冷氣保養) | 設備 | 維修 | 13 |
| **買**設備(見下方 ⚠️ 大額提醒) | 設備 | 購置 | 24 |
> ⚠️ **大額設備購置請先問財務負責人**:單項 **≥ $2,500** 的設備(整套音響、車輛、冷氣主機等)在會計上要列「固定資產」分年折舊,**不是當年度費用**。低於 $2,500 的小設備(手機、麥克風、單張椅子)才直接走「設備 > 購置」。詳見 §5。
### 📚 培訓/裝備
| 買了什麼 | 大類別 | 子類別 | 990 |
|---|---|---|:--:|
| 報名特會、課程、研習費 | 培訓 | 課程費用/研討會 | 19 |
| 購買書籍、參考教材書 | 培訓 | 書籍 | 24 |
| 培訓的交通、住宿差旅 | 培訓 | 差旅 | 17 |
### 🧒 兒童/教材
| 買了什麼 | 大類別 | 子類別 | 990 |
|---|---|---|:--:|
| 主日學教材印刷 | 教材 | 教材印刷 | 13 |
| 美勞、手工材料 | 教材 | 手工材料 | 13 |
| 詩歌/影片/教材版權授權 | 教材 | 版權購買 | 24 |
### 🌏 宣教/關懷
| 買了什麼 | 大類別 | 子類別 | 990 |
|---|---|---|:--:|
| 支持個人宣教士/家庭 | 宣教 | 宣教士支援 | 2 |
| 國外宣教奉獻 | 宣教 | 國外宣教支援 | 3 |
| 短宣隊機票、交通 | 宣教 | 差旅 | 17 |
| 急難救助金(給有需要的人) | 關懷救助 | 急難救助 | 2 |
| 喪家慰問、白包、探病禮金 | 關懷救助 | 慰問禮品 | 2 |
| 探訪的交通、伴手禮 | 關懷救助 | 探訪費用 | 17 |
### 📢 福音/外展/推廣
| 買了什麼 | 大類別 | 子類別 | 990 |
|---|---|---|:--:|
| 福音單張、海報印刷 | 印刷 | 海報 | 12 |
| 臉書/網路廣告、推廣文宣 | 印刷 | 廣告推廣 | 12 |
| 福音活動食物 | 餐飲 | 出餐費用/食材採購 | 24 |
| 給福音朋友/來賓的小禮物 | 其他 | 禮品 | 24 |
### 💵 財務/銀行/專業服務
| 買了什麼 | 大類別 | 子類別 | 990 |
|---|---|---|:--:|
| 銀行手續費、金流/刷卡手續費 | 財務與銀行 | 銀行/金流手續費 | 13 |
| 貸款利息 | 財務與銀行 | 利息支出 | 20 |
| 會計師、報稅、查核費 | 專業服務 | 會計與審計 | 11c |
| 律師、法律諮詢費 | 專業服務 | 法律服務 | 11b |
| 其他專業顧問費 | 專業服務 | 其他專業服務 | 11g |
---
## §4 最容易選錯的 6 組(特別注意)
| 情境 | 選這個 ✅ | 不要選 ❌ |
|---|---|---|
| 用完即丟的紙盤紙杯 | 餐飲 > **一次性餐具** | 餐飲 > 器具(那是可重複用的) |
| 買食材回來自己煮 | 餐飲 > **食材採購** | 餐飲 > 出餐費用(那是買現成的) |
| 修教會的水電、油漆牆面 | 場地 > **修繕維護** | 設備 > 維修(那是修「設備」不是修「建物」) |
| 一次性外部講員費 | 人事 > **酬庸** | 人事 > 薪資(薪資是固定領薪同工) |
| 喪事白包/探病禮金 | 關懷救助 > **慰問禮品** | 其他 > 禮品 |
| 一般活動感謝小禮(父親節、福音禮) | 其他 > **禮品** | 關懷救助 > 慰問禮品(那是針對喪病急難) |
---
## §5 ⚠️ 大額設備:為什麼要特別處理?
IRS 規定:**單項價值 ≥ $2,500** 的設備不能當年度一次費用化,要列為「固定資產」、分年攤提折舊(Form 990 第22行)。
| 例子 | 單價 | 怎麼處理 |
|---|---|---|
| 手機、麥克風、單張椅子 | < $2,500 | ✅ 直接登錄 `設備 > 購置` |
| 一次買一批便宜椅子(每張 < $2,500) | 逐張算 | ✅ 仍可直接費用化 |
| 整套音響系統、車輛、冷氣主機 | ≥ $2,500 | ⚠️ **先問財務負責人**,要列固定資產 |
> 系統目前還沒有「固定資產/折舊」功能(規劃中)。遇到大額設備,**先暫停、找財務負責人確認**,不要自己登成一般支出。
---
## §6 還是不確定?
1. 重讀 **§1 觀念 1**:我**實際買到的東西**是什麼?
2.**§3 速查表**用那個東西找(不是用活動名稱找)。
3. 找不到完全吻合的 → 選**性質最接近**的子類別。
4. 真的沒有 → `其他 > 雜支`,並在**說明欄寫清楚買了什麼、什麼場合**。
5. 金額大(設備 ≥ $2,500、或不確定要不要列資產)→ **先問財務負責人**
---
> **給管理者的備注(非同工日常需要):**
> 1. 「特別活動」(父親節、福音周、周年慶)刻意**不設為類別** —— 活動是「場合」不是「費用性質」。活動名稱寫在說明欄、主辦組別選事工;若日後要依活動別出報表,應另開「活動標籤」維度,而非新增大類。
> 2. 一般活動感謝禮、福音贈品歸 `其他 > 禮品`(990 第24行);**喪病急難**的慰問仍歸 `關懷救助 > 慰問禮品`(990 第2行),兩者性質不同勿混。
> 3. 「990 行」欄位由系統依大類/子類別自動對應,維護於 `DbSeeder.Form990SubMappingSeed`;對應規則詳見 `docs/DB_SCHEMA.md`。