律岩會計師事務所

營業稅申報管理系統

System Analysis Document · 系統分析文件
文件版本
v0.8(草稿)
撰寫日期
2026-06-28
實作方式
自建網頁系統
架構參考
Ragic 範式(不採用)
使用人數
約 7 人
申報頻率
雙月一期

01系統概述

1.1 背景

事務所目前以 Excel(如 115期帳務明細.xlsx)人工維護營業稅申報。痛點:多人同檔協作衝突、權限無法隔離、歷史期別靠複製檔案、請款金額重複手動輸入、主管缺乏即時彙總視圖。

1.2 目標

  1. 申報作業線上化,支援 7 人同時作業且資料隔離。
  2. 以「期別」為單位管理工作分配與資料保存,歷史不覆蓋。
  3. 進銷項/代收費/服務費一次輸入,自動帶入請款單。
  4. 提供主管即時彙總儀表板與報表匯出。

1.3 範圍

範圍內範圍外(本期不做)
客戶主檔、期別分配、同事工作區、請款單、主管儀表板、歷史查詢、登入認證 線上金流/收款、電子發票開立、與國稅局申報系統 API 對接、完整總帳會計、記帳模組自動串接

02名詞定義

名詞定義
期別民國年 + 期次;雙月申報,每年 6 期。「115 期」指民國 115 年(西元 2026);系統內以「年-期次」表示,如 115-3 = 115 年第 3 期(05-06月)。為資料切分的主要維度。
民國年 / 期次民國年:西元 = 民國年 + 1911。期次:一年內雙月序號 1~6(1期 01-02月 … 6期 11-12月)。
留抵進項稅額大於銷項稅額時可留抵下期之稅額(本系統由人工填寫)。
代收事務所代客戶繳納/收取的款項(如代收營業稅、二代健保等)。
服務費事務所提供之服務收費(記帳費、簽證等)。
拋轉期別分配後,自動為該期每位客戶在工作區建立一筆待填記錄。
工作區同事個人專屬、僅見自己被分配客戶的作業介面。
結轉本期某數值自動帶入下一期(如留抵、應收欠款)。

03角色與權限

角色客戶主檔期別分配同事工作區請款單儀表板/報表
主管新增/修改/查全部建立期別、分配客戶查全部查全部全部 + 匯出
同事唯讀唯讀僅自己被分配客戶(可編輯)僅自己客戶無 / 僅自己
關鍵限制同事只能看到「自己被分配的客戶」,需做列級隔離:後端強制 負責同事 = 登入者 篩選與寫入控制。

04系統架構(自建網頁系統)

三層式架構。沿用 Ragic 的概念對照,但實作為自建系統:每張「表單」= 一張資料表 + 一組 CRUD API;「連結載入」= FK + JOIN;「列級權限」= 後端強制擁有者條件。

┌─────────── 前端 SPA ───────────┐
│ 登入  客戶主檔  工作區  請款單  儀表板 │
│ React/Vue + 表格元件 + 圖表          │
└───────────────┬────────────────────┘
                │ HTTPS / JWT
┌───────────────▼────────────────────┐
│           後端 API(REST)            │
│  Auth │ 業務邏輯 │ 計算層 │ 匯出服務    │
│  Node(NestJS) 或 Python(FastAPI)     │
└───────────────┬────────────────────┘
                │ SQL(含列級權限)
┌───────────────▼────────────────────┐
│        資料庫(PostgreSQL/MySQL)      │
│        7 張資料表(見第 6 節)          │
└─────────────────────────────────────┘

4.1 概念對照(Ragic → 自建)

本系統概念Ragic 對應自建系統對應
資料表Sheet 表單DB Table + 表單頁
跨表帶入連結與載入Foreign Key + JOIN
拋轉產生動作按鈕/批次批次寫入 API
列級隔離依登入者篩選權限Row-Level Security / WHERE owner=user
小計/應收公式欄位後端計算層(純加總)
建議選型前端 React + TanStack Table;後端 Node.js(NestJS) 或 Python(FastAPI);DB PostgreSQL;認證 JWT;匯出 exceljs / openpyxl。皆可依團隊熟悉度調整。

05資料模型(ERD)

[使用者] 1 ──< [客戶主檔] 1 ──< [期別分配明細] >── 1 [期別]
                   │                    │
                   │                    │ 拋轉產生
                   │                    ▼
                   │            [同事工作區記錄] 1 ─── 1 [請款單]
                   │                                      ▲
                   └──────────────────────────────────────┤
                                            [費用轉入紀錄] >─┘

5.1 主要實體與鍵值

實體主鍵重要外鍵
使用者 usersid
客戶主檔 customers客編預設負責同事
期別 periods期別代碼
期別分配明細 period_assignmentsid期別、客編、負責同事
同事工作區記錄 worksheet_recordsid期別、客編、負責同事
請款單 invoicesid期別、客編、負責同事
費用轉入紀錄 expense_importsid期別、客編
設計重點以「期別 + 客編」作為跨表一致的複合識別,確保每期資料獨立、可追溯、不覆蓋。

06資料庫 Schema(核心)

-- 1. 使用者(★帳號/密碼由主管直接管理)
TABLE users (
  id            PK,
  name, account, password_hash,
  role          ENUM('manager','staff'),
  active        BOOL, created_at, updated_at
)
-- 1.1 操作軌跡(★供熱度圖)
TABLE activity_logs (
  id PK, user_id FK→users,
  action,                          -- login / edit_worksheet / send_email...
  entity, entity_id,               -- 對象類型與識別
  created_at                       -- 熱度圖以 user+日期+小時 聚合
)

-- 2. 客戶主檔(可停用)
TABLE customers (
  customer_no   PK,              -- 客編 00001
  company_name, tax_id,            -- 名稱、統一編號
  default_staff_id FK→users,
  status        ENUM('active','inactive')  -- 停用功能
)
-- 2.1 客戶聯絡資訊(★一對多)
TABLE customer_contacts (
  id PK, customer_no FK,
  contact_name, phone, mobile, email,
  is_primary BOOL, note          -- 可多筆,設主要
)
-- 2.2 客戶匯款資訊(★一對多)
TABLE customer_bank_accounts (
  id PK, customer_no FK,
  bank_name, branch, account_no, account_name,
  is_primary BOOL, note          -- 可多筆,設主要
)

-- 3. 期別(★民國年 + 期次,每年 6 期)
TABLE periods (
  period_code   PK,              -- '115-3' = 民國115年 第3期
  roc_year      INT,             -- 民國年(西元 = +1911)
  seq           INT,             -- 期次 1~6(雙月)
  month_range,                     -- '05-06月'
  start_date, end_date, is_closed BOOL,
  UNIQUE(roc_year, seq)
)
-- 期次對照:1=01-02月 2=03-04月 3=05-06月
--          4=07-08月 5=09-10月 6=11-12月

-- 4. 期別分配明細
TABLE period_assignments (
  id            PK,
  period_code   FK, customer_no FK,
  staff_id      FK→users, assigned_at,
  UNIQUE(period_code, customer_no)   -- 一期一客戶一筆
)

-- 5. 同事工作區記錄(A~E 區)
TABLE worksheet_records (
  id PK, period_code FK, customer_no FK, staff_id FK,
  -- A 進銷項(手動)
  sales_amount, sales_tax, purchase_amount, purchase_tax,
  trade_count, other_qty, posting_note,
  -- B 稅額(★手動填寫,無公式)
  prev_credit, curr_credit, tax_reserved, collected_bt,
  -- C 代收 11 項(手動)→ c_subtotal 自動加總
  c_business_tax, c_invoice, c_dividend_nhi, c_prepay,
  c_rent_withhold, c_rent_nhi, c_addr_rent, c_nhi,
  c_other_collect, c_tax_collect, c_self_pay_offset,
  c_subtotal,                      -- 代收合計(自動)
  -- D 服務費 8 項(手動)→ d_subtotal 自動加總
  d_bookkeeping, d_biz_reg, d_shareholder, d_cpa_audit,
  d_dec_addon, d_other_service, d_other_fixed, d_bk_offset,
  d_subtotal,                      -- 服務合計(自動)
  -- E 申報狀態
  invoice_detail_note, einvoice_count, is_filed BOOL,
  UNIQUE(period_code, customer_no)
)

-- 6. 費用轉入紀錄(★手動輸入)
TABLE expense_imports (
  id PK, period_code FK, customer_no FK,
  category,                        -- 規費/郵費...
  amount, note, created_at
)

-- 7. 請款單
TABLE invoices (
  id PK, period_code FK, customer_no FK, staff_id FK,
  c_subtotal, d_subtotal,          -- ★預設帶工作區,員工可編輯覆寫
  imported_expense_total,          -- ★預設帶 expense_imports,可編輯
  current_amount,                  -- 本期金額(自動重算)
  prev_balance,                    -- ★上期結轉,可調
  received, discount,              -- 已收、折扣(手動)
  receivable,                      -- 應收(自動重算)
  amount_overridden BOOL,           -- 金額被手動覆寫標記
  email_to, email_cc,              -- ★寄送收件人/副本(預設帶主要聯絡人)
  email_sent_at, email_status,     -- ★寄送時間/狀態(sent/failed)
  note,
  UNIQUE(period_code, customer_no)
)
★ 標記B 區稅額欄位(prev_credit/curr_credit/tax_reserved/collected_bt)依需求改為人工填寫,系統不套用稅額公式;費用轉入僅手動;prev_balance 由上期應收結轉

07功能模組

M1客戶主檔
  • 固定欄位:客編、公司行號名稱、統一編號、預設負責同事(下拉)。
  • 停用狀態;新期開始時只繼承啟用中客戶,不需重建。
  • 權限:主管維護,同事唯讀。
M2期別工作分配
  • 整年檢視:分配表一次顯示當年 6 期,每位客戶逐期顯示處理同事(決策 #15)。
  • 解鎖編輯:右上「解鎖編輯」選的期次欄位才可編輯(🔓),其餘期欄鎖定唯讀(🔒),避免誤改已分配/歷史期。
  • 在解鎖期欄勾選客戶、批次指定負責同事。
  • 分配後「拋轉」:自動為該期每位客戶在工作區建立一筆待填記錄。
  • 每期可重新分配,不影響其他期歷史。
M3同事工作區(核心輸入)

分 A~E 五區(詳見第 8 節):A 進銷項(手動)、B 稅額(手動)、C 代收 11 項(手動,合計自動)、D 服務費 8 項(手動,合計自動)、E 申報狀態。

M4請款單產生
  • 資料來源:工作區 C/D 小計 + 費用轉入紀錄加總。
  • 本期金額、應收自動計算;前期欠款/溢收自上期結轉。
  • 費用轉入:規費、郵費等以手動方式登錄至「費用轉入表」,請款單自動吸收加總,同事不需重複輸入。
  • Email 發送:請款單可透過 Email 發送(附 PDF),收件人預設帶客戶主要聯絡人,記錄寄送時間/狀態(決策 #10)。
  • 查詢與調閱:可選客戶 + 期別查詢請款單,並調閱該客戶跨期歷史紀錄;每期獨立不覆蓋,受權限隔離(決策 #14)。
M5主管儀表板
  • 全體客戶當期申報狀況(已完成 / 未完成)。
  • 依負責同事分組、依申報狀態篩選。
  • 列表各欄位可點欄頭升/降冪排序(決策 #9)。
  • 一鍵匯出全體客戶帳務明細(可調整範本,對齊現行 Excel 彙總表)。
M6歷史資料與期別管理
  • 每期資料獨立保存,不覆蓋。
  • 可依期別查詢歷史。
  • 新期繼承啟用客戶主檔;留抵與應收欠款自動結轉。
M7主管管理工具
  • 員工帳號管理:主管可新增/停用員工帳號、改角色、直接重設密碼(後端雜湊);不提供員工自助忘記密碼(決策 #11)。
  • 操作熱度圖:記錄操作軌跡 activity_logs,主管可選員工與期間,以熱度圖檢視操作的日期 × 時段分佈(決策 #12)。

08欄位規格書

A. 進銷項資料 手動

欄位型態必填說明
銷項銷售額金額
銷項稅額金額
進項金額金額
進項稅額金額
進銷件數數值
其它數量數值電子發票張數等
入帳文字/日期完成日期或說明

B. 稅額計算欄 手動填寫(無公式)

欄位型態說明
上期留抵金額人工填寫(可參考上期數值)
本期留抵金額人工填寫
稅金(留底)金額人工填寫
代收營業稅金額(自繳稅額)金額人工填寫
說明依需求,B 區不套用稅額公式,全部由同事依實際申報結果手動輸入。系統僅負責儲存與顯示。

C. 代收費用欄(11 項)手動合計自動

代收營業稅、發票代收、股利二代健保費、暫繳、房租扣繳、房租二代、借址房租、搭保健保費、其他代收款、代收稅金、自繳稅額/發票折抵。

→ 小計:代收合計 = 上列 11 項加總(系統自動)

D. 服務費欄(8 項)手動合計自動

記帳費、工商登記、股東平台申報、會計師簽證、扣繳結算加收(12月)、其他服務費、其他固定收費、記帳費折抵。

→ 小計:服務合計 = 上列加總(折抵以負值計,系統自動)

E. 申報狀態

欄位型態說明
統購發票明細文字備註欄
電子發票張數數值
申報完成下拉(是/否)供儀表板篩選

請款單欄位

欄位來源 / 計算
客戶名稱、期別帶入
代收合計工作區 C 預設 員工可編輯
服務合計工作區 D 預設 員工可編輯
轉入費用合計費用轉入表加總預設 員工可編輯
本期金額代收合計 + 服務合計 + 轉入費用 自動重算
前期欠款/溢收上期應收結餘 結轉 可調
已收手動
折扣手動
應收本期金額 + 前期欠款/溢收 − 已收 − 折扣 自動重算
備註負責同事
決策 #8請款單金額(代收/服務/轉入/前期欠款)預設由系統帶入,開放負責員工編輯覆寫;覆寫後本期金額、應收即時重算,並標記 amount_overridden

客戶聯絡資訊 一對多

欄位說明
聯絡人 / 市話 / 手機 / Email基本聯絡欄位
主要聯絡人每客戶至多一筆為主要

客戶匯款資訊 一對多

欄位說明
銀行 / 分行 / 帳號 / 戶名匯款帳戶欄位
主要匯款帳戶每客戶至多一筆為主要

09計算邏輯

僅「純加總/結轉」由系統自動計算;稅額(B 區)為人工填寫。

-- 自動計算(後端計算層,前端不得自算)
c_subtotal            = Σ(代收 11 項)
d_subtotal            = Σ(服務 8 項,折抵為負)
imported_expense_total = Σ expense_imports WHERE 期別+客編
current_amount        = c_subtotal + d_subtotal + imported_expense_total
receivable            = current_amount + prev_balance - received - discount

-- 跨期結轉(開新期時帶入)
本期 invoices.receivable  ──結轉──▶  下期 invoices.prev_balance

-- B 區稅額:★人工填寫,系統不計算
prev_credit / curr_credit / tax_reserved / collected_bt = 手動輸入
注意「本期金額」是否納入轉入費用,請於上線前與貴所確認(目前設計為納入)。此為待辦項 D-1。

10API 設計(REST 摘要)

方法路徑角色用途
POST/auth/loginall登入取 JWT
GET/POST/PUT/users主管員工帳號管理(新增/停用/改角色)
PUT/users/{id}/password主管主管直接重設員工密碼
GET/activity/heatmap?staff=&from=&to=主管操作熱度(日期×時段聚合)
GET/POST/PUT/customers主管寫·同事讀客戶主檔(含停用)
POST/periods主管建立新期(繼承啟用客戶 + 結轉)
POST/periods/{p}/assignments:batch主管批次分配
POST/periods/{p}/dispatch主管拋轉產生工作區記錄
GET/worksheets?period=&staff=隔離工作區列表(同事僅自己)
PUT/worksheets/{id}擁有者輸入 A~E;後端回算 C/D 小計
GET/invoices?customer=&period=隔離依客戶/期別查詢請款單(單筆)
GET/invoices?customer=隔離調閱該客戶跨期歷史請款紀錄(列表)
GET/PUT/invoices/{id}隔離請款單明細
POST/invoices/{id}/send-email隔離透過 Email 發送請款單(附 PDF),記錄寄送狀態
GET/POST/expense-imports主管/同事費用轉入(手動)
GET/dashboard?period=主管完成率、分組篩選
GET/export?period=&format=xlsx主管匯出彙總報表(可調範本)

11權限控制(列級隔離)

中介層:解析 JWT → req.user { id, role }

if role == 'manager':
    # 不加擁有者條件,可查/改全部
if role == 'staff':
    # 所有 worksheet / invoice 查詢強制:
    WHERE staff_id = req.user.id
    # 寫入時僅能改 staff_id == 自己 的記錄

# 客戶主檔 / 期別 / 分配 / 拋轉 → 僅 manager
原則權限在後端強制,前端隱藏僅為體驗,不可作為安全邊界。

12業務流程

主管建立新期別(如 115 年 第3期 / period_code 115-3)
   → 繼承「啟用中」客戶主檔
   → 結轉上期留抵 / 應收欠款
   → 批次分配客戶給同事
   → 拋轉至各同事工作區
        → 同事輸入 進銷項 / 稅額 / 代收 / 服務費
        → 系統自動算 代收合計 / 服務合計
        → 標記「申報完成」
   → 費用轉入(規費 / 郵費 手動登錄)
   → 產生請款單(自動帶金額、結轉欠款)
   → 主管儀表板檢視完成率
   → 匯出全體報表(對齊 Excel 範本)

13報表與匯出

  • 當期全體客戶帳務明細(進銷項 + 代收 + 服務費 + 應收)。
  • 格式對齊現行 Excel 彙總表;做成可調整範本(欄位順序/欄名可設定),因日後可能再改。
  • 篩選維度:期別、負責同事、申報狀態。
  • 輸出格式:Excel(xlsx) / CSV。

14非功能性需求

項目需求
並行支援 7 人同時作業
權限隔離同事僅見自己被分配客戶(後端強制)
資料保存每期獨立、不可覆蓋、可追溯
認證自建帳號 + JWT 登入,密碼雜湊儲存
易用性欄位名稱沿用現行 Excel 慣用名稱
可維護主檔繼承、期別可重複分配、匯出範本可調

15決策紀錄與待辦

15.1 已確認決策

#議題決定
1B 區稅額計算手動填寫,不套公式
2費用轉入來源手動輸入(不串接記帳模組)
3前期欠款/溢收由上期應收自動結轉
4匯出格式對齊 Excel,做成可調整範本(日後可能再改)
5客戶主檔需有停用功能;新期僅繼承啟用客戶
6平台不用 Ragic(僅參考架構),自建並含登入
7客戶聯絡/匯款資訊拆獨立子表,一對多(可多筆、設主要)
8請款單金額員工可編輯覆寫,本期金額/應收即時重算
9儀表板列表各欄位可點欄頭排序
10請款單 Email 發送可透過 Email 發送(附 PDF、帶主要聯絡人、記寄送狀態)
11帳號密碼管理主管直接管理員工帳號/重設密碼,不做自助忘記密碼
12操作熱度圖記錄 activity_logs,主管看員工操作日期×時段熱度
13期別定義「115 期」=民國 115 年;每年 6 期;period_code 改 民國年-期次(如 115-3)
14請款單查詢調閱可選客戶+期別查詢,調閱跨期歷史紀錄;每期獨立不覆蓋
15期別分配整年檢視分配表一次顯示當年 6 期處理同事;右上解鎖編輯單期,其餘鎖定

15.2 待辦/待確認

編號項目狀態
D-1「本期金額」是否納入轉入費用(目前設計:納入)待確認
D-2現行 Excel 彙總表的精確欄位順序,供匯出範本對齊待提供樣本
D-3密碼政策、是否需重設/忘記密碼流程✅ 結案(決策 #11:主管直接重設)
D-4是否需操作稽核紀錄(誰改了什麼)✅ 結案(決策 #12:activity_logs)
D-5Email 寄件方式與帳號(事務所信箱 / SMTP / 第三方寄信服務)、寄件人顯示名稱、信件範本待確認
版本v0.8 — 已納入 15 項決策。後續變更請更新本表並升版。

律岩會計師事務所 · 營業稅申報管理系統 SA 文件 v0.8 · 2026-06-28