とうもろこしのダンス

とうもろこし頭の男女
踊らんとして見詰め合う
やがて音楽が流れ
とうもろこしの毛がなびき
下をむいてははなれ
上をむいては抱く
やがて女脚高くあげ
男、女を抱き上げる
観衆の黒い影の向こう
音楽の鳴り止むのを待って
     セキザン

第10章 応用事例 年末調整 python3.020110923更新

 この章で使用するpython文法

 

 return ; オブジェクトを返す

 組み込み関数
 
 def : 自作関数定義
 input ; データ入力を促す

 print:  データを画面に出力

 if elif else :  制御関数

 int : 整数化する

 算術演算子  : 商

             *: 

 

 

 リスト [ ]

  辞書 {  }
 
 python3.0から漢字の使用ができる、税法の用語はローマ字ではわか  
  り難いので、変数に漢字を使いました。
  辞書(ディクショナリ)のキーにも漢字を使います。


 電算機等による平成20年分の年末調整の計算方法(年末調整のしかた大 
 蔵財務協会電算機等による平成20年分の年末調整の計算方法電算機用
 等参照)


 (a)年末調整に必要なデータを辞書にまとめ、値を入力する
   nen_data{ } はキーを漢字用語で記述し値が0の辞書を作成する。
 input文で辞書の値を入力する。
 結果を辞書を表示する。辞書のキーは順番が不定で表示される。
 
def  nen_data():
 nen_data = {'社員番号':0,'氏名':0,'生保支払':0,'個人年金支払':0,'地震保険  
 支払':0,'旧長損保支払':0,'旧長損保支払':0,'社保支払':0,'共済保険支
 払':0,'住宅控除額':0,'国民年金':0,'総支給額':0,'源泉税額':0}
 nen_data['社員番号'] = input('社員番号>')
 nen_data['氏名'] = input('氏名>')
 nen_data['生保支払'] = input('生保支払>')
 nen_data['個人年金支払'] = input('個人年金支払>')
 nen_data['地震保険支払'] = input('地震保険支払>')
 nen_data['旧長損保支払'] = input('旧長損保支払>')
 nen_data['社保支払>'] = input('社保支払>')
 nen_data['共済保険支払'] = input('共済保険支払>')
 nen_data['住宅控除額'] = input('住宅控除額>')
 nen_data['国民年金'] = input('国民年金>')
 nen_data['総支給額'] = input('総支給額>')
 nen_data['源泉税額'] = input('源泉税額>')
 print('------------------------------------------------------')
 print (nen_data)
,

>>> nen_data()
社員番号>1234
氏名>'xyz'
生保支払>36000
個人年金支払>42000
地震保険支払>25000
旧長損保支払>20000
社保支払>450000
共済保険支払>50000
住宅控除額>0
国民年金>240000
総支給額>7000000
源泉税額>380000
------------------------------------------------------
{'旧長損保支払': '20000', '国民年金': '240000', '共済保険支払': '50000', '社員番号': '1234', '生保支払': '36000', '社保支払': 0, '氏名': "'xyz'", '住宅控除額': '0', '源泉税額': '380000', '総支給額': '7000000', '社保支払>': '450000', '個人年金支払': '42000', '地震保険支払': '25000'
}
>>>


(b)給与の総額の整理と年調給与額の計算と給与所得控除後の給与の金額
  の計算(電算機等による年末調整)
  
  年調給与額の計算

def  nenkyu():
    x = input('給与総額 >')
    if  int(x) <= 1618999 :
       z = int(x)
       print('年調給与 ', z)
    elif  int(x) < 1619999 :
       y = (int(x) - 1619000) % 1000
       z = int(x) - y
       print('年調給与 ',  z)
    elif  int(x) <= 1623999 :
       y = (int(x) - 1620000)  %  2000
       z = int(x)  -  y
       print('年調給与 ',  z)
    elif  int(x) <= 6599999 :
       y = (int(x) - 1624000) % 4000
       z = int(x) - y
       print ('年調給与 ', z)
    else :
       z = int(x)
       print ('年調給与 ', z)
    
 
>>> nenkyu()                    実行
給与総額 >3666000
年調給与  3664000

  

給与所得控除後の給与の金額の計算

def kyu_go() :
    x = input('年調給与額>')
    if  int(x) <= 650999 :
        控除後給与額 = 0
        print('控除後給与額', 控除後給与額)
    elif  int(x ) <= 1618999 :
        控除後給与額 = int(x) - 650000%
        print('控除後給与額' ,控除後給与額)
    elif  int(x) <= 1619999 :
        控除給与額 = int(x) * 0.6 - 2400
        print('控除後給与額', 控除後給与額)
    elif int(x) <= 1621999 :
        控除後給与額 = int(x) * 0.6-2000
        print('控除後給与額',控除後給与額)
    elif int(x) <= 1623999:
        控除後給与額 = int(x) * 0.6 - 1200
        print('控除給与額', 控除給与額)
    elif int(x) <= 1627999 :
        控除後給与額 = int(x) * 0.6 - 400
        print('控除後給与額', 控除後給与額)
    elif int(x) <= 1799999:
         
控除後給与額 = int(x) * 0.6
        print('控除後給与額', 控除後給与額)
    elif int(x ) <= 3599999 :
        控除後給与額 = int(x) * 0.7 - 180000
        print('控除後給与額', 控除後給与額)
    elif int(x)  <= 6599999 :
        控除後給与額 = int(x) * 0.8-540000
        print('控除後給与額', 控除後給与額)
    elif int(x )<= 9999999 :
        控除後給与額 = int(x) * 0.9 - 1200000     
        print('控除後給与額', 控除後給与額)
    elif int(x) <= 20000000 :
        控除後給与額 = int(x) * 0.95 - 1700000
        print('控除後給与額', 控除後給与額)     
   
else :
        return '確定申告が必要です。'

>>> kyu_go()
年調給与額>
4500000
控除後給与額 3060000.0

   (c)配偶者、扶養親族、基礎控除の計算

1 各控除内容表示用の辞書(ディクショナリ)を税法に従つて作る。

2 該当数入力する辞書(ディクショナリ)及び値を保持する辞書(ディクショナ 
  リ)を作る。
3 input関数を使ってデータ入力用のコードを書く。
4  辞書(ディクショナリ)を画面出力する。
5 それぞれの値をint型に変換し
掛算で控除額を算出し変数に代入する。
6 控除額をprintする。

配偶者控除額 コード

 print(haiko)    def  haiko():
 hais = {0:'一般控除対象配偶者',1:'老人控除対象配偶者',2:'同居特別障害控  
 除対象配偶者',3:'同居特別障害老人控除対象配偶者'}
 haisu={0:0,1:0,2:0,3:0}
 print ('控除対象配偶者の数を種類別に入力してください.不該当0入力 ')
 haisu[0] = input('一般>')
 haisu[1] = input('老人>')
 haisu[2] = input('同居特障老人>')
 print (haisu)
 haiko = int(haisu[0]) * 380000 +int (haisu[1]) * 480000 + int(haisu[2]) * 730000 + int(haisu[3]) * 830000
 print(haiko)   

配偶者控除額 入力

 >>> haiko()
控除対象配偶者の数を種類別に入力してください。
一般>
0
老人>
1
同居特障>
0
同居特障老人>
0
{0: '0', 1: '1', 2: '0', 3: '0'}
480000

扶養親族控除額 コード

def fuko():
 fuko=  {0:380000,1:630000,2:580000,3:480000,4:730000,5:930000,6:980000,7:830000}
 fusu={0:0,1:0,2:0,3:0}  
 print('該当数を入力してください。不該当は0入力')
 fusu[0] = input('一般扶数>')
 fusu[1] = input('特定扶数>')
 fusu[2] = input('同老親等老扶数>')
 fusu[3] = input('同老親等外老扶数>')
 fusu[4] = input('同特障一般扶数>')
 fusu[5] = input('同特障同老親等数>')
 fusu[6]=input('同特障特定扶養数>')
 fusu[7] = input('同老親外同特障老扶数>')
 fuko = int(fusu[0]) * int(fuko[0]) + int(fusu[1]) * int(fuko[1]) + int(fusu[2]) * int(fuko[2]) + int(fusu[3]) * int(fuko[3]) + int(fusu[4]) * int(fuko[4]) + int(fusu[5]) * int(fuko[5])+ int(fusu[6]) * int(fuko[6]) + int(fusu[7]) * int(fuko[7])
 print( '扶養親族控除額 ', fuko)

扶養親族控除額 入力

>>> fuko()
一般扶数>
3
特定扶数>
1
同老親等老扶数>
1
同老親等外老扶数>
0
同特障一般扶数>
0
同特障定扶養数>
0
同特障同老親等数>
0
同老親外同特老扶数>
0
扶養親族控除額 
2350000
 

 

(d) 障害者、寡婦、寡夫又は勤労学生の控除計算

作成方法は(c)と同様

 

def shoko():
   shoko = {0:270000,1:400000,2:270000,3:350000,4:270000}
   shosu = {0:0}
   shosu[0] = input('一般障=自身・配偶・扶養・該当数入力・不該当0入力>')
   shosu[1] = input('特別障=自身・配偶・扶養・該当数入力・不該当0入力>')
   shosu[2] = input('一般寡婦夫=自身・該当1不該当0入力>')
   shosu[3] = input('特別寡婦=自身・該当1不該当0入力>')
   shosu[4] = input('勤学=自身・該当1不該当0入力>')
   shoga = int(shosu[0]) * 270000 + int(shosu[1]) * 400000 + int(shosu[2]) * 270000 + int(shosu[3]) * 350000 + int(shosu[4]) * 270000
   print('障害・寡婦夫・勤学控除額 ', shoko)

>>> shoko()
一般障=自身・配偶・扶養・該当数入力・不該当0入力>
1
特別障=自身・配偶・扶養・該当数入力・不該当0入力>
0
一般寡婦夫=自身・該当1不該当0入力>
1
特別寡婦=自身・該当1不該当0入力>0
勤学=自身・該当1不該当0入力>1
障害・寡婦夫・勤学控除額  810000
>>> 

  (e)配偶者特別控除の計算

配偶者の合計所得の額によって決まる 。
keiは i配偶者の合計所得額

>>> def hai_tokuko(kei):            
        if kei < 400000 :               
                hai_tokuko=38000
                print ('配偶者特別控除 ', hai_tokuko)
        elif kei < 450000 :
                hai_tokuko= 360000
                print ('配偶者特別控除 ', hai_tokuko)
        elif kei < 500000 :
                hai_tokuko= 310000
                print( '配偶者特別控除 ', hai_tokuko)
        elif kei < 550000 :
                hai_tokuko= 260000
                print( '配偶者特別控除 ', hai_tokuko)
        elif kei < 600000 :
                hai_tokuko= 210000
                print( '配偶者特別控除 ', hai_tokuko)
        elif kei < 650000 :
                hai_tokuko= 160000
                print ('配偶者特別控除 ', hai_tokuko)

       
elif kei < 700000 :
                hai_tokuko= 110000
                print ('配偶者特別控除 ', hai_tokuko)
        elif kei < 750000 :
                hai_tokuko= 60000
                print( '配偶者特別控除 ', hai_tokuko)
        elif kei < 760000 :
                hai_tokuko = 30000
                print( '配偶者特別控除 ', hai_tokuko)
        else :
                hai_tokukokei = 0
                print ('配偶者特別控除 ', hai_tokuko)

               
>>> hai_tokuko(450000)
配偶者特別控除  310000
               

(f) 一般生命保険控除

def  han_seiho(x) :         

    if x  <= 25000 :          
        return x
    elif x  <= 50000 :
        return x / 2 + 12500
    elif x  <= 100000 :
        return x / 4 + 25000
    else :
        return 50000

  han_seiho(79800)          

 44950

個人年金保険料も算式は同じです。

(g)地震保険料控除額

0 :地震保険料か1: 旧長期保険料のいずれかがある場合

def jisin_hok() :
    kn = input('種類−0,1>')
   
    if kn  == 0  :
       d0 = input('地震保険料>')
              
       if d0  <= 50000 :
           k0 = d0
           print( k0)
       else  :
           k0 = 50000
           print( k0)
    elif kn == 1   :
       d1 = input('旧長期損害保険料>')
       if d1 <= 10000 :
           k1 = d1
           print( k1)
       elif d1 <= 20000 :
           k1=d1 / 2 + 5000
           print( k1)
     
  else :
           k1 = 15000
           print (k1)
  >>> jisin_hok()
種類−0,1>
1
旧長期損害保険料 >
20000
 15000

(h)地震保険料と旧長期損害保険料の両方がある場合

def jisin_hok2() :
   
    
       d21 = input('地震保険料>')
     
       if d21 <= 50000 :
          k21d21
         
      
else   :
          k21 =  50000
         
         
       d22 = input('旧長期損害保険料>')
       if d22 <= 10000 :
              k22 = d22
       elif d22 <= 20000 :
              k22 = d22 / 2 + 5000
       else :
              k22 = 15000
             
       if k21 + k22 <= 50000 :
              print (k21 + k22)
       else   :
               print( 50000)

>>> jisin_hok2()
地震保険料>
15000
旧長期損害保険料>
39000
 30000
 

(i) 控除金額総額の計算

(j)課税所得の計算

(k)算出年税額の計算

def nen_zei(x) :                      

    if x  <= 1950000 :                   

        return int(x  *  0.05)
    elif x  <=  3300000 :
        return int (x  *  0.1)  -  97500
    elif x   <= 6950000 :
        return int(x  *  0.2)  -  427500
    elif x  <=  9000000 :
        return int(x  *  0.23)  -  636000
    elif x  <=  16920000 :
        return int(x  *  0.33)  -  1536000
    else :
        return 'nentyo sinai'

>>> nen_zei(413000)
   20650

課題 以上で個別のデータ入力と計算方法は理解できたようですが、これを一括して処理する方法を考え、主な途中経過と算出額、過不足税額を表示する。

さらにデータをデータベースに蓄えてデータベースからデータを入手して計算を行い、その結果をデーターベースに戻す方法を考える。

さらに入力、出力画面をGUIインターフェースで処理する方法を考える。
現在実行中の方法と判断
1.まず税法法律要件を正しくpython言語で表現する。
2.それを参考にしてIBM社のデーターベース・ロータスアプローチでデータベース化する。
3.理由はPYTHONSQLITEを操作し、GUIを実現するには高度の技術が必要である。
4・しかしPYTHON言語は、税法要件を比較的自由に表現でき、ソフトウエアの視野が開ける。
5.lotus aproachを使う理由はシンプルで論理的なツールであり、ユーザフレンドリーにデザインできる。
6・aproachの関数でpython流に表現税法要件を記述できるが、記述場所が狭小で、バグの発見が困難なので、要件をより細分化してフィールド定義を行うのが
適切である。
7.パソコンは一にデータベース、二にWEB利用と考えられる。

 

 (a)配偶者控除等をまとめる

def haifuko():
    haifuko = {'社員番号':0,'氏名':0,'haiko':0,'fuko':0,'shoko':0,'hai_tokuko':0,'kisoko':380000}
    haifuko['haiko'] = input('社員番号>')
    haifuko['haiko'] = input('氏名>')
    haifuko['haiko'] = input('配偶者控除>')
    haifuko['fuko'] = input('扶養控除>')
    haifuko['shoko'] = input('障害者等控除>')
    haifuko['hai_tokuko'] = input('配偶者特別控除>')
    haifuko = int(haifuko['haiko']) + int(haifuko['fuko']) + int(haifuko['shoko']) + int(haifuko['hai_tokuko']) + int(haifuko['kisoko'])
    print('配偶者・扶養・障害・配偶者特別・基礎控除>', haifuko)

 >>> haifuko()
社員番号>
1234
氏名>
'xyz'
配偶者控除>
480000
扶養控除>
2350000
障害者等控除>
810000
配偶者特別控除>
310000
配偶者・扶養・障害・配偶者特別・基礎控除> 4330000
>>>

(b)生保等控除をまとめる

def nen_ko2():
 nen_ko2 = {'社員番号':0,'1氏名':0,'生保控除':0,'個人年金控除':0,'地震保険控除':0,'旧長損保控除':0,'社保控除':0,'共済保険控除':0,'住宅控除':0,'国民年金':0}
 nen_ko2[0] = input('社員番号>')
 nen_ko2[1] = input('氏名>')
 nen_ko2[2] = input('生保控除>')
 nen_ko2[3] = input('個人年金控除>')
 nen_ko2[4] = input('地震保険控除>')
 nen_ko2[5] = input('旧長損保控除>')
 nen_ko2[6] = input('社保控除>')
 nen_ko2[7] = input('共済保険控除>')
 nen_ko2[8] = input('住宅控除>')
 nen_ko2[9] = input('国民年金>')
 諸控除計 = int(nen_ko2[2]) + int(nen_ko2[3]) + int(nen_ko2[4]) + int(nen_ko2[5]) + int(nen_ko2[6]) + int(nen_ko2[7]) + int(nen_ko2[8]) + int(nen_ko2[9])
 print('諸控除計',諸控除計)
 >>> nen_ko2()
社員番号>
1234
氏名>
'xyz'
生保控除>
30000
個人年金控除>
20000
地震保険控除>
10000
旧長損保控除>
12000
社保控除>
360000
共済保険控除>
60000
住宅控除>
70000
国民年金>
240000
諸控除計 802000

(c)年調データを総まとめする。

def nentyo():
    nentyo = {'配扶障等控除計':0, '生保等控除計':0, '給与総額':0, '控除後給与
                額':0,'算出税額':0, '徴収済税額':0, '過不足税額':0}
    nentyo['配扶障等控除計'] = input('配扶障等控除計>')
    nentyo['生保等控除計'] = input('生保等控除計>')
    nentyo['給与総額'] = input('給与総額>')
    nentyo['控除後給与額'] = input('控除後給与額>')
    nentyo['算出税額'] = input('算出税額>')
    nentyo['徴収済税額'] = input('徴収済税額>')
    nentyo['過不足税額'] = input('過不足税額>')
    print(nentyo)
 
>>> nentyo()
配扶障等控除計>
433000
生保等控除計>
802000
給与総額>
7000000
控除後給与額>
3060000
算出税額>
0
徴収済税額>
380000
過不足税額>
0
{'配扶障等控除計': '433000', '算出税額': '0', '徴収済税額': '380000', '控除後給与額': '3060000', '給与総額': '7000000', '過不足税額': '0', '生保等控除計': '802000'}

 

 ホーム     戻る