Es ist schwierig, Steuern zu berechnen, nicht wahr? Wenn ich Mitglied der Gesellschaft werde, werden jedes Jahr Steuern und Versicherungsprämien abgezogen, aber ich kenne mich mit Steuern überhaupt nicht aus, also bin ich in einem Zustand von etwas. Außerdem habe ich gehört, dass sich die Regeln für Abzüge und Einkommenssteuern ab diesem Jahr ändern werden. Es gibt ein Sprichwort (?) "Lass Python all die langweiligen Dinge machen **", also werde ich dieses Mal versuchen, eine Steuerberechnungsklasse mit "Python" für das Studium zu erstellen. Da ich es geschrieben habe, während ich verschiedene Dinge von Grund auf recherchiert habe, kann es viele Erklärungen geben, die für diejenigen, die es kennen, offensichtlich sind.
Github
Ich habe eine Klasse für die Steuerberechnung in Github
gemacht.
Die Site, auf die ich beim Schreiben des Codes verwiesen habe
Bevor wir über die schwierige Steuer sprechen, beginnen wir mit einer kurzen Erklärung, wie man sie verwendet.
Die diesmal erstellte Klasse "Tax" ist in "tax.py" implementiert.
Betrachten Sie als Beispiel ** einen einzelnen Mann mit einem Jahreseinkommen von 5 Millionen **.
Gehen Sie mit tax.py
im übergeordneten Verzeichnis wie folgt vor:
# coding: utf-8
import sys, os
sys.path.append(os.pardir) #Einstellungen zum Importieren von Dateien in das übergeordnete Verzeichnis
from common.tax import Tax
gross_salary = 5000000
tax = Tax(gross_salary)
print("gross_salary, income = ", tax.gross_salary, tax.income)
print("income_tax, inhabitant_tax, insurance_premiun = ", tax.income_tax(), tax.inhabitant_tax(), tax.social_insurance_premium())
print("net_salary = ", tax.net_salary())
print("max_hurusato_donation = ", tax.max_hurusato_donation())
Ausgabe
gross_salary, income = 5000000 3560000.0
income_tax, inhabitant_tax, insurance_premiun = 110575.0 215575.0 619249.9999999999
net_salary = 4054600.0
max_hurusato_donation = 56035.593432760994
ist. In diesem Fall ** beträgt der Nennwert 5 Millionen Yen, und die Bezahlung zum Mitnehmen beträgt aufgrund verschiedener Abzüge wie Steuern und Versicherungsprämien etwa 4 Millionen Yen **. Im obigen Beispiel gibt das Argument "Steuer" nur Einkommen ("= Bruttogehalt") an. Wenn Sie jedoch ** abhängige Personen ** oder ** behinderte Personen ** haben, wird es abgezogen. Nehmen Sie also das Argument Solche Fälle können durch Angabe berechnet werden. Jetzt werde ich jeden der Reihe nach erklären.
Zuallererst über ** Gehaltseinkommen **. Ich wusste nichts über Steuern, also wusste ich, dass "irgendwie die Steuer von meinem Einkommen abgezogen und mein Gehalt zum Mitnehmen reduziert würde", aber was ist ** Gehaltseinkommen **? Es war im Staat. Tatsächlich werden verschiedene Steuern nicht direkt aus dem Nennwert berechnet, sondern auf den Betrag angewendet, nachdem der Abzug des ** Lohneinkommens ** erfolgt ist. Dieses Mal spreche ich von einem Firmenangestellten, aber da die notwendigen Kosten bei der ursprünglichen Arbeit anfallen
(Einkommen) - (Kosten) = (Einkommen)
Das Schema von ist festgelegt. Es mag für einen angestellten Büroangestellten nicht sehr offensichtlich sein, aber ** alle Büroangestellten werden von ihrem Einkommen abgezogen, vorausgesetzt, sie müssten dafür bezahlen, wenn sie arbeiten würden. ** ** ** Dies ist übrigens auch in der ** Quellensteuertabelle ** neben dem Nennwerteinkommen des Unternehmens unter dem Namen ** Betrag nach Abzug des Gehaltseinkommens ** ↓ aufgeführt
Der Code für "Python" ist unten. Nach 2020 haben sich die Regeln geändert und dieser ** Lohnabzug ** hat sich um 100.000 Yen verringert, und die ** Einkommenssteuer **, die später erscheinen wird, hat sich um 100.000 Yen erhöht. Daher ändert sich der Geldbetrag, der mit Pramai Zero abgezogen werden kann, nicht, aber diejenigen mit einem Jahreseinkommen von 8,5 Millionen Yen oder mehr zahlen mit dieser Überarbeitung mehr. Ich habe kein Jahreseinkommen von 8,5 Millionen, aber ich persönlich bin mit dieser Überarbeitung nicht zufrieden, da ich nicht motiviert bin zu glauben, dass ich viel von der Einkommensteuer abgezogen werde, selbst wenn ich mein Bestes gebe und mein Jahreseinkommen steigt. .. Der auf diese Weise berechnete Betrag nach Abzug des Gehaltseinkommens wird als "Einkommen" zurückgegeben. Dieser "Einkommens" -Wert wird häufig in anderen Klassenfunktionen verwendet, daher ordne ich ihn im Konstruktor "self.income" zu.
Tax.income()
def income(self):
"""
Berechnung des Lohneinkommensabzugs,Gibt den Abzugsbetrag mit dem Einkommen als Argument zurück
Seit 2020 wurde der Abzug um 100.000 reduziert und die Einkommensteuer um 100.000 erhöht, sodass sich praktisch nichts ändert.
Bei 8,5 Millionen oder mehr hat sich jedoch der Betrag des Lohnabzugs verringert, sodass die Steuer tatsächlich gestiegen ist.
"""
employment_income_deduction = 0
if self.gross_salary < 550000:
employment_income_deduction = self.gross_salary
elif self.gross_salary <1800000:
employment_income_deduction = self.gross_salary * 0.4 - 100000
elif self.gross_salary <3600000:
employment_income_deduction = self.gross_salary*0.3 + 80000
elif self.gross_salary <6600000:
employment_income_deduction = self.gross_salary*0.2 + 440000
elif self.gross_salary <8500000:
employment_income_deduction = self.gross_salary*0.1 + 1100000
else:
employment_income_deduction = 1950000
income = self.gross_salary - employment_income_deduction
return income
Schauen wir uns als nächstes ** Sozialversicherungsprämien ** an.
Dies sind ** Sozialrente **, ** Arbeitsversicherung ** usw., die von Steuern getrennt sind.
Die Formel ist unten angegeben, es gibt jedoch ** Prämiensätze für Krankenversicherungen **, ** Prämiensätze für Befreiungsversicherungen ** und ** Prämiensätze für Arbeitsversicherungen **.
Die endgültige Prämie wird berechnet, indem das Einkommen mit dem daraus berechneten ** Prämiensatz ** multipliziert wird.
** Der Prämiensatz für Krankenversicherungen ** variiert je nach Region, im Fall von Tokio beträgt er jedoch 9,87%
self.health_insurance_premium_rate
enthält standardmäßig 0.0987
.
Der Befreiungsprämiensatz bestimmt, wie viel die Sozialrente befreit ist.
Der Befreiungsprämiensatz steigt tendenziell mit dem Alter an, liegt jedoch im Durchschnitt bei "0,4%", sodass "self.rebate_contribution_rate" standardmäßig "0,04" beträgt.
Diese Werte können im Konstruktor individuell eingestellt werden.
Diese Werte werden durch zwei geteilt, da sie die Hälfte mit dem Unternehmen teilen.
** Der Beschäftigungsprämiensatz ** beträgt einheitlich "0,3%". Addieren Sie diese also, um den Prämiensatz zu berechnen.
Tax.social_insurance_preium()
def social_insurance_premium(self):
"""
Berechnung der Versicherungsprämien
Prämiensatz = Gesundheitsprämiensatz/2
+ (Sozialrentenprämiensatz 18.3%-Befreiungsprämiensatz)/2
+Beschäftigungsprämiensatz 0.3%
"""
#Premium-Rate
insurance_premium_rate = (self.health_insurance_premium_rate)/2 \
+ (0.183 - self.rebate_contribution_rate)/2 \
+ 0.003
#Sozialversicherungsprämien=Jahreseinkommen x Prämiensatz
social_insurance_premium = self.gross_salary*insurance_premium_rate
return social_insurance_premium
Als nächstes kommt ** Einkommensteuer **. ** Einkommensteuer ** subtrahiert zuerst ** Grundabzug ** von dem Einkommen, das durch "Einkommen ()" berechnet wird. Bisher betrug der ** Grundabzug ** einheitlich "380.000 Yen", ab 2020 wurde er jedoch auf "480.000 Yen" angehoben. (Wie oben erwähnt, wurde der ** Lohnabzug ** um 100.000 Yen reduziert.) Als neue Regel, die ab diesem Zeitpunkt hinzugefügt wird, verringert sich der Betrag des Grundabzugs allmählich, wenn das Jahreseinkommen 24 Millionen übersteigt, und wenn er 25 Millionen Yen überschreitet, ist er Null. Darüber hinaus werden der Abzug von abhängigen Personen ("abhängiger Abzug") und der Abzug von Behinderungen ("behinderter Abzug") davon abgezogen. Sowohl "abhängige_Deduktion" als auch "behinderte_Deduktion" werden auf Null gesetzt, sofern im Konstruktor nichts anderes angegeben ist.
Das Einkommen nach verschiedenen Abzügen wird als "Ziel der Einkommenssteuer" festgelegt, und daraus wird die ** Einkommensteuer ** berechnet.
Je höher das Jahreseinkommen, desto mehr können Sie bekommen.
Der hier angezeigte ** Einkommensteuersatz ** (self.income_tax_rate
) wird auch für die Berechnung verwendet, wenn Sie ** die Steuerzahlung für die Heimatstadt ** leisten.
Tax.income_tax()
def income_tax(self):
"""
Einkommensteuerberechnung
"""
#Abhängiger Einkommensteuerabzug
dependents_deduction = self.high_school_student * 480000 + self.college_student * 630000
#Invaliditätsabzug bei Behinderung
handicapped_deduction = self.handicapped * 260000
#Der Grundabzug betrug bis 2019 380.000 Yen, ab 2020 jedoch 480.000 Yen. Wenn es jedoch 20 Millionen überschreitet, wird es allmählich abnehmen.
basic_deduction = 0
if self.income < 24000000:
basic_deduction = 480000
elif self.income < 24500000:
basic_deduction = 320000
elif self.income < 25000000:
basic_deduction = 160000
#Einkommensteuerpflichtiger Betrag, Einkommen abzüglich Abzüge und Prämien
target_of_income_tax = (self.income \
- self.social_insurance_premium() \
- self.spousal_deduction() \
- dependents_deduction \
- handicapped_deduction \
- basic_deduction)
#Einkommensteuersatz und Abzugsbetrag nach Jahreseinkommen
if target_of_income_tax < 1950000:
self.income_tax_rate = 0.05
deduction = 0
elif target_of_income_tax < 3300000:
self.income_tax_rate = 0.1
deduction = 97500
elif target_of_income_tax < 6950000:
self.income_tax_rate = 0.2
deduction = 427500
elif target_of_income_tax < 9000000:
self.income_tax_rate = 0.23
deduction = 636000
elif target_of_income_tax < 18000000:
self.income_tax_rate = 0.33
deduction = 1536000
elif target_of_income_tax < 40000000:
self.income_tax_rate = 0.40
deduction = 2796000
else:
self.income_tax_rate = 0.45
deduction = 479.6
#Einkommensteuerberechnung
income_tax = target_of_income_tax * self.income_tax_rate - deduction
#Wenn die Einkommensteuer negativ wird, machen Sie sie auf Null
if income_tax <= 0:
income_tax = 0
return income_tax
Die Berechnung der ** Aufenthaltssteuer ** ähnelt der Einkommensteuer, daher denke ich, dass es nicht so schwierig sein wird, wenn Sie den Mechanismus der Einkommensteuer verstehen. Die Höhe des Abzugs unterscheidet sich von der ** Einkommensteuer ** und unterscheidet sich auch darin, dass die Steuer auf das Einkommen des Vorjahres angewendet wird. (Es gibt keinen besonderen Unterschied zwischen dem Vorjahr und diesem Jahr im Programm)
Tax.inhabitant_tax()
def inhabitant_tax(self):
"""
Berechnung der Wohnsteuer,Berechnen Sie die Aufenthaltssteuer mit dem zu versteuernden Einkommen als Argument
"""
#Abhängiger Abzug in der Aufenthaltssteuer
dependents_deduction = self.high_school_student * 330000 + self.college_student * 450000
#Abzug für Menschen mit Behinderungen von der Aufenthaltssteuer
handicapped_deduction = self.handicapped * 270000
#Entspricht dem Grundabzug und der Einkommensteuer, geändert ab 2020
basic_deduction = 0
if self.income < 24000000:
basic_deduction = 430000
elif self.income < 24500000:
basic_deduction = 190000
elif self.income < 25000000:
basic_deduction = 150000
#Verschiedene Abzüge und Grundabzüge (430.000 Yen) werden vom Einkommen abgezogen, und der Steuersatz beträgt 10%multiplizieren
#Addieren Sie den Pro-Kopf-Satz von 5.000 Yen und subtrahieren Sie den Anpassungsabzug von 2.500 Yen.
inhabitant_tax = (self.income
- self.social_insurance_premium()
- self.spousal_deduction()
- dependents_deduction
- handicapped_deduction
- basic_deduction) * 0.1 + 5000 - 2500
#Wenn die berechnete Aufenthaltssteuer negativ wird, ist sie Null.
if inhabitant_tax <=0:
inhabitant_tax = 0
return inhabitant_tax
Zu diesem Zeitpunkt können Sie den ** Take-Home ** berechnen. Subtrahieren Sie die bisher berechneten ** Sozialversicherungsprämien, Einkommensteuer und Aufenthaltssteuer ** vom Nennwerteinkommen.
Tax.net_salary()
def net_salary(self):
"""
Berechnung zum Mitnehmen, Einkommensteuer, Aufenthaltssteuer, Sozialversicherungsprämien vom Einkommen abziehen
"""
total_tax = self.inhabitant_tax() + self.income_tax()
net_salary = self.gross_salary - total_tax - self.social_insurance_premium()
return net_salary
Die Haarfarbe unterscheidet sich ein wenig von den bisher erschienenen, aber wir haben auch ** Furusato Tax Payment ** implementiert. ** Furusato Tax Payment ** ist ein System, mit dem Sie Belohnungen erhalten können, indem Sie an lokale Gebiete spenden. Zu diesem Zeitpunkt kann die ** Einkommenssteuer und die Aufenthaltssteuer ** entsprechend der Spende gesenkt werden. Bis zum Höchstbetrag werden nur "2000 Yen" des gespendeten Betrags von Ihnen selbst bezahlt, und der gesamte verbleibende Betrag kann abgezogen werden. Die folgende Funktion berechnet den maximalen Betrag an Spenden, der vollständig abgezogen werden kann. Die Berechnungsformel entnehmen Sie bitte den Kommentaren und dem Code.
Tax.max_hurusato_donation()
def max_hurusato_donation(self):
"""
Berechnung der Obergrenze, die bei Selbstzahlung von 2000 Yen mit Steuerzahlung in der Heimatstadt vollständig abgezogen werden kann
Mit anderen Worten, der Betrag der Rendite abzüglich 2000 Yen wird von der Einkommensteuer und der Aufenthaltssteuer abgezogen.
"""
#Resident Tax Income Prozent(=Resident Tax)Berechnen aus
#Furusato Steuerabzug Obergrenze
hurusato_deduction = self.inhabitant_tax() * 0.2
# (Abzugsbetrag) =(Spendenbetrag-2000)×(90%-Einkommensteuersatz x 1.021)
# (Spendenbetrag) = (Abzugsbetrag)/(90%-Einkommensteuersatz x 1.021)+2000
max_hurusato_donation = hurusato_deduction / (0.9 - self.income_tax_rate * 1.021) + 2000
return max_hurusato_donation
Ist es sinnvoll, damit in Python zu schreiben? Also werde ich versuchen, es mit matplotlib
zu visualisieren.
Importieren Sie zunächst die erforderliche Bibliothek.
Tax.show_ipynb
# coding: utf-8
import sys, os
sys.path.append(os.pardir) #Einstellungen zum Importieren von Dateien in das übergeordnete Verzeichnis
from common.tax import Tax
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
%matplotlib inline
pd.options.display.precision = 0
plt.rcParams['font.family'] = 'AppleGothic'
Berechnen Sie das Jahreseinkommen von 2 bis 12 Millionen Yen in Schritten von 1 Million Yen und tauchen Sie in die "Liste" ein.
Tax.show_ipynb2
#Jährlicher Nennwert 200-1,Bis zu 2 Millionen in 10.000 Schritten
gross_salaries = [i for i in range(2000000,12010000, 1000000)]
#Einkommen
incomes = []
#MwSt
total_taxes = []
#Resident Tax
inhabitant_taxes = []
#Einkommenssteuer
income_taxes = []
#Sozialversicherungsprämien (=Sozialversicherungsprämienabzug)
social_insurance_premiums = []
#Jährliches Einkommen zum Mitnehmen
net_salaries = []
#Furusato Steuerabzug Obergrenze und Spendenbetrag zu diesem Zeitpunkt
max_hurusato_donation = []
for gross_salary in gross_salaries:
tax = Tax(gross_salary)
#Wert zur Liste hinzufügen
incomes.append(tax.income)
total_taxes.append(tax.income_tax() + tax.inhabitant_tax())
inhabitant_taxes.append(tax.inhabitant_tax())
income_taxes.append(tax.income_tax())
social_insurance_premiums.append(tax.social_insurance_premium())
net_salaries.append(tax.net_salary())
max_hurusato_donation.append(tax.max_hurusato_donation() - 2000) #Subtrahieren Sie 2000 Yen auf eigene Kosten
In dataframe
speichern. Sie können den Inhalt mit df.head ()
sehen.
Tax.show_ipynb3
df = pd.DataFrame()
df['jährliches Einkommen'] = gross_salaries
df['Mit nach Hause nehmen'] = net_salaries
df['MwSt'] = total_taxes
df['Resident Tax'] = inhabitant_taxes
df['Einkommenssteuer'] = income_taxes
df['Sozialversicherungsprämien'] = social_insurance_premiums
df['Obergrenze für den Steuerabzug in der Heimatstadt'] = max_hurusato_donation
Visualisieren Sie mit einem Balkendiagramm.
Tax.show_ipynb4
df.index = ['200', '300', '400', '500', '600', '700', '800', '900', '1000', '1100', '1200']
plt.figure(figsize=(12,7))
plt.rcParams["font.size"] = 14
plt.grid(axis='y')
yticks = [0, 1000000, 2000000, 3000000, 4000000, 5000000, 6000000, 7000000, 8000000, 9000000, 10000000, 11000000, 12000000]
plt.ylim(0, 12500000)
plt.yticks(yticks)
plt.bar(df.index, df['Mit nach Hause nehmen'])
plt.bar(df.index, df['MwSt'], bottom= df['Mit nach Hause nehmen'])
plt.bar(df.index, df['Obergrenze für den Steuerabzug in der Heimatstadt'], bottom= df['Mit nach Hause nehmen'] + df['MwSt'] - df['Obergrenze für den Steuerabzug in der Heimatstadt'])
plt.bar(df.index, df['Sozialversicherungsprämien'], bottom= df['Mit nach Hause nehmen'] + df['MwSt'])
plt.xlabel('Salary (yen*10000)')
plt.ylabel('Breakdown (yen)')
plt.title('')
plt.legend(['net-salary', 'tax','hurusato_deduction', 'insurance'])
plt.show()
** Grafikbeschreibung **
――Die horizontale Achse ist das Jahreseinkommen, die vertikale Achse ist die blaue Achse (orange + grün) ist die Steuer, das Grün ist die Obergrenze, die von der Steuerzahlung in der Heimatstadt abgezogen werden kann, und die rote ist die Sozialversicherungsprämie.
** Mein Eindruck, die Grafik zu sehen **
Recommended Posts