1. 程式人生 > >2020 新個稅算的頭疼?會 python,這都不是事兒...

2020 新個稅算的頭疼?會 python,這都不是事兒...

背景

今年疫情復工後,財務小姐姐給我們普及了2020年新個稅的演算法。。

聽完之後的感覺就是:恩,原來是這麼回事!

雖然是個小工薪階級,但是對於扣多少稅還是很關心的。於是拿起筆算了算2月份的個稅,產生了另外一個感覺:頭疼,暈!

每個月都要這麼算一算,估計要崩潰了。

於是,決定利用python語言,用一次腦子寫個小指令碼算稅,以後只要填資料就好啦!

 

 

2020年新個稅

在寫指令碼之前,得整明白指令碼要處理哪些邏輯。

那麼,就得好好了解了解2020年新個稅方案。

按照財務小姐姐的普及,方案如下:

1)個稅起徵點調到5000;

2)累積預扣法:

​ 稅 = 計稅總額 * 扣除比例 - 累積已扣稅 - 速算扣除數

​              ||

​ 累積收入 - 累積扣除的(五險一金 + 5000 + 專項附加 + 其它)

​ 累積收入:含獎金、年終獎等。

3)扣除比例的多少,由2)中的計稅總額來決定,具體如下表:

 

 

 

有點兒小複雜,舉2個例子來說明:

 

 

 

 

 

 

python程式碼實現個稅計算

從以上新個稅的收法來看,我們需要分為5部分:

1)每個月的收入 - 累加

2)每個月的扣除 - 累加

3)扣除比例的計算

4)累積到本月為止的扣稅總額

5)扣稅額 = (累加收 - 累加扣除)*扣除比例 - 累積扣稅 - 速算扣除數

 

步驟1:準備一個excel表格,存放收入和扣除資料

以每月收入1萬元為例:

 

 

 

步驟2:用python讀取excel資料,並計算累積收入/累積扣除/累積扣稅額

累積收入、累積已扣稅:

 1 #*******************************累積收入+累積已扣稅***************************************
 2 def get_all_income_deducted_by_months(sh,m):
 3     """
 4     sh: excel的表單物件
 5     m: 月份。比如當前月份為3月。那麼 m=3. 
 6     一般公司都是,當月發放上一個月的薪資。3月份 要計算髮放2月份工資時,
 7     總收入 = 1月 + 2月的薪資 + 其它收入 。
 8     總扣稅 = 1月已扣稅
 9     """
10     income = 0   # 總收入金額
11     tax_deducted = 0 # 已扣稅金額
12     for index in range(3,2+(m-1)+1):
13         salary =  sh.cell(row=2,column=index).value
14         print("獲取第{}列 第{}個月 的薪資: {}".format(index, index-2,salary))
15         income += salary  # 收入累加
16         tax = sh.cell(row=3, column=index).value
17         print("獲取第{}列 第{}個月 的已扣稅: {}".format(index, index - 2, tax))
18         tax_deducted += tax
19 
20     # 加上其它收入
21     other_income = sh.cell(row=2,column=15).value
22     print("其它收入為:{}".format(other_income))
23     income += other_income
24     print("加上 {}月 為止的總收入為:{}".format(m,income))
25     print("到目前為止的總扣稅為:{}".format(tax_deducted))
26     return income,tax_deducted

 

累積的總扣除項:

 1 #*******************************扣除項***************************************
 2 def get_total_deduction(sh,m):
 3     """
 4     sh: excel的表單物件
 5     m: 月份。比如當前月份為3月。那麼 m=3. 
 6     3月份計算 包含2月在內的扣除項:
 7     總扣除 = 公積金 * 2 + 社保 *2 + 專項扣除項 * 2  +  5000 * 2 
 8     """
 9     # 各項扣除金額(含公積金&社保&附加項)
10     provident_fund = sh.cell(row=5,column=3).value  # 公積金
11     social_security = sh.cell(row=5,column=4).value # 社保
12     additional_item = sh.cell(row=5,column=5).value # 附加項
13     # 總扣除的金額 
14     total_deduction = (provident_fund + social_security + additional_item + 5000)*(m-1)
15     print("總扣除金額為:{}".format(total_deduction))
16     return total_deduction

 

步驟3 - 依據公式計算上月扣稅額,並寫入excel表中對應月份

 1 if __name__ == '__main__':
 2     # 開啟計稅excel表
 3     wb = load_workbook("data.xlsx")
 4     sh = wb["Sheet1"]
 5     # 獲取當前月份
 6     m = datetime.datetime.now().month
 7     # 獲取總收入、獲取總的扣稅額 - 到目前為止
 8     income, tax_deducted= get_all_income_deducted_by_months(sh,m)
 9     # 獲取總扣除項
10     total_deduction = get_total_deduction(sh,m)
11     # 計稅總額 = 總收入 - 總扣除項
12     cur_income = income - total_deduction
13     print("當前計稅金額 = {}(總收入) - {}(總扣除項):{}".format(income,total_deduction,cur_income))
14     # 最終要扣稅 --- 計算公式
15     # 稅 =  計稅總額 * 扣除比例 - 累積已扣稅 - 速算扣除數
16     tax_money = 0
17     if 0<= cur_income <= 36000:
18         tax_money = cur_income * 0.03 - tax_deducted
19     elif 36000 < cur_income <= 144000:
20         tax_money = cur_income * 0.1 - tax_deducted - 2520
21     elif 144000 < cur_income <= 300000:
22         tax_money = cur_income * 0.2 - tax_deducted -16920
23     elif 300000 < cur_income <= 420000:
24         tax_money = cur_income * 0.25 - tax_deducted - 31920
25     elif 420000 < cur_income <= 660000:
26         tax_money = cur_income * 0.3 - tax_deducted - 52920
27     elif 660000 < cur_income <= 960000:
28         tax_money = cur_income * 0.35 - tax_deducted - 85920
29     elif 960000 < cur_income:
30         tax_money = cur_income  * 0.45 - tax_deducted - 181920
31 
32     print("{}月最終的扣稅人民幣為:{}".format(m-1,tax_money))
33 
34     # 將扣稅額寫入對應的月份
35     sh.cell(row=3,column=m+1).value = tax_money
36     wb.save("data.xlsx")

 

現在是3月份,那麼如果收入是每月10000,2月份的扣稅金額為:

 

 

 

下一個月的時候,只要再執行一下這個指令碼,就可以得到3月份的扣稅額哦!!

當然,你也可以一口氣把這一年的都算完。

當然,有些小夥伴每月的收入並不是固定的,有些小夥伴還有一些額外的收入。

都可以在此基礎上根據個人情況做調整哦