[Version 2020] Lassen Sie Python alle Steuer- und Take-Home-Berechnungen durchführen

Überblick

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

Wie benutzt man

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.

Arbeitseinkommen

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

スクリーンショット 2020-06-28 15.52.26.png

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

Sozialversicherungsprämien

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

Einkommenssteuer

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

Resident 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

Mit nach Hause nehmen

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

Steuerzahlung in der Heimatstadt

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

Visualisierung

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()

ダウンロード (1).png

** 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 **

Zusammenfassung

Recommended Posts

[Version 2020] Lassen Sie Python alle Steuer- und Take-Home-Berechnungen durchführen
Erhalten Sie das Formular in Python und führen Sie verschiedene Aktionen aus
(◎◎) {Lass Python die langweiligen Dinge machen) ......... (Hey? Lass uns Python die Hausaufgaben machen} (゜) (゜)
[Python-Anfänger] Wie entwickle und führe ich Python schließlich aus?
"Lassen Sie Python die langweiligen Dinge tun" Übung ~ Befehlszeilen-Mailer ~
Der Websocket von toio (nodejs) und python / websocket stellen keine Verbindung her.
[Python] df Lies und mache das erste Memo (NaN-Bestätigung usw.)
Lassen Sie das japanische BERT-Modell den Zentraltest und die Satzgenerierung durchführen
MoneyForward Cloud Automatisiert Zeitstempel [Lassen Sie Python die Probleme machen]
Was soll ich denn mit der Python-Verzeichnisstruktur machen?
[Python] Lass uns alle und jeden meistern
pyenv-change die Python-Version von virtualenv
So erhalten Sie die Python-Version
Beschleunigung der Berechnung der Fibonacci-Sequenz (Python-Version)
Informationen zur virtuellen Umgebung von Python Version 3.7
Lassen Sie Heroku die Hintergrundverarbeitung mit Python durchführen
[Python] Probieren Sie pydash der Python-Version von lodash aus
Academia Potter und der mysteriöse Python-Pass
Python open und io.open sind gleich
[Python] Kombinieren Sie alle Elemente in einem Array
Ich habe die Geschwindigkeit regulärer Ausdrücke in Ruby, Python und Perl (Version 2013) verglichen.