とうもろこしのダンス
とうもろこし頭の男女 踊らんとして見詰め合う やがて音楽が流れ とうもろこしの毛がなびき 下をむいてははなれ 上をむいては抱く やがて女脚高くあげ 男、女を抱き上げる 観衆の黒い影の向こう 音楽の鳴り止むのを待って セキザン
第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 : k21 = d21 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.理由はPYTHONでSQLITEを操作し、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'}
ホーム 戻る
。 |