月額表「乙」所得稅計算邏輯修正:移除「144」判定與單發邏輯 -20251015

| Work Notes | 2 Reads

📘 說明

本次修改主要針對 MonthlyAccountCalcService.calcTaxWithholdingOver2020() 的所得稅計算邏輯進行調整。

原先程式因爲有自動把單發調查判定爲丙的邏輯,所以導致客戶在選擇稅表「乙」的時候,因爲符合了單發的條件結果沒有正確計算。

此次改修將「144」的判定從主要條件中抽離,只保留用於製作勤務日數(workingDays)的用途,並在所得稅最終確定後統一乘算,確保所有案件計算邏輯一致。
同時,舊有的「單發(one-off)」處理分支已刪除,不再影響乙表計算。

此更動是爲了避免重複稅額條件誤觸。

以下具體代碼:

// MonthlyAccountCalcService.java
// === 核心改動:將「144」從判定條件中移除,只用於製作 workingDays;刪除「單發」判定 ===

// 位置:calcTaxWithholdingOver2020(...)
// 分支:乙表(TAX_CODE_HEI)計算完成「result」之後,統一處理 workingDays 乘算
if (selectDto.taxTableCode.equals(TAX_CODE_HEI)) {
    // ...(日額稅額查表與加算的既有處理,保持不變)...

    // 以前是:if ("144".equals(selectDto.researchCode)) { result = result.multiply(researchAreaCount1 * 5); }
    // 現在改為:固定在結尾處理乘算,僅用「144」來決定 workingDays 的值
    BigDecimal workingDays = BigDecimal.ONE;
    if ("144".equals(selectDto.researchCode)) {
        BigDecimal area = selectDto.researchAreaCount1 == null ? BigDecimal.ZERO : selectDto.researchAreaCount1;
        workingDays = area.multiply(new BigDecimal(5));
    }
    result = result.multiply(workingDays);
}

// --------------------------------------------------------------
// 刪除原本的「單發」(one-off) 判定與對應稅額處理(整段移除)
// (示例:以下區塊請從原檔中刪除)
//
// else if (selectDto.oneoffResearchKbn.equals(ONEOFF_RESEARCH_KBN_ONE)
//       && selectDto.countOffResearch == 0) {
//     // 舊:單發時的特殊處理(整段刪除)
//     // ... 原有邏輯 ...
// }
// --------------------------------------------------------------

具體的文件我本地有保存備份。(沒有重建分支,因爲我個人覺得還是參照上面的改動比較好)

This article was last edited at