C'est difficile de calculer les impôts, n'est-ce pas?
Quand je deviens membre de la société, les impôts et les primes d'assurance sont déduits chaque année, mais je ne connais pas du tout les impôts, alors je suis dans un état de quelque chose.
De plus, j'ai entendu dire que les règles relatives aux déductions et aux impôts sur le revenu changeront à partir de cette année.
Il y a un dicton (?) "Laissons Python faire toutes les choses ennuyeuses **", donc cette fois je vais essayer de créer une classe de calcul de taxes avec Python
pour étudier.
Depuis que je l'ai écrit en recherchant diverses choses à partir de zéro, il peut y avoir de nombreuses explications qui sont évidentes pour ceux qui la connaissent.
Github
J'ai fait une classe pour le calcul des taxes dans Github
.
Le site auquel j'ai fait référence lors de la rédaction du code
Avant de parler de la taxe difficile, commençons par une brève explication sur la façon de l'utiliser.
La classe Tax
créée cette fois est implémentée dans tax.py
.
À titre d'exemple, considérons ** un homme célibataire avec un revenu annuel de 5 millions **.
Faites ce qui suit avec tax.py
dans le répertoire parent:
# coding: utf-8
import sys, os
sys.path.append(os.pardir) #Paramètres d'importation des fichiers dans le répertoire parent
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())
production
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
est. Dans ce cas **, la valeur nominale est de 5 millions de yens et le salaire net est d'environ 4 millions de yens ** en raison de diverses déductions telles que les impôts et les primes d'assurance. Dans l'exemple ci-dessus, l'argument «impôt» ne donne que le revenu («= salaire brut»), mais si vous avez des ** personnes à charge ** ou des ** personnes handicapées **, il sera déduit, alors prenez l'argument Ces cas peuvent être calculés en spécifiant. Maintenant, je vais expliquer chacun dans l'ordre.
Tout d'abord, sur les ** revenus salariaux **. J'ignorais les impôts, alors je savais que «d'une manière ou d'une autre, l'impôt serait déduit de mon revenu et mon salaire net serait réduit», mais qu'est-ce que le ** revenu salarial **? C'était dans l'état. En fait, divers impôts ne sont pas calculés directement à partir du revenu de la valeur faciale, mais sont appliqués au montant après la déduction de la ** déduction du revenu salarial **. Cette fois, je parle chez un employé de l'entreprise, mais puisque les dépenses nécessaires seront engagées lors du travail initial
(le revenu) - (Dépenses) = (le revenu)
Le schéma de est établi. Ce n'est peut-être pas très évident pour un employé de bureau embauché, mais ** tous les employés de bureau sont déduits de leur revenu, en supposant qu'ils devraient payer pour cela s'ils travaillaient. ** ** D'ailleurs, cela est également répertorié dans le ** tableau de précompte mobilier ** à côté du revenu de la valeur nominale de l'entreprise sous le nom ** montant après déduction des revenus salariaux ** ↓
Le code pour Python
est ci-dessous.
Après 2020, les règles ont changé et cette ** déduction pour revenu salarial ** a diminué de 100 000 yens, et l '** impôt sur le revenu ** qui sortira plus tard a augmenté de 100 000 yens.
Par conséquent, le montant d'argent déduit avec Pramai Zero ne change pas, mais ceux qui ont un revenu annuel de 8,5 millions de yens ou plus paieront plus avec cette révision.
Je n'ai pas un revenu annuel de 8,5 millions, mais personnellement, je ne suis pas satisfait de cette révision parce que je ne suis pas motivé à penser que même si je fais de mon mieux et que mon revenu annuel augmente, je serai beaucoup déduit de l'impôt sur le revenu. ..
Le montant après déduction des revenus salariaux ainsi calculé est retourné comme «revenu».
Puisque la valeur de «revenu» est souvent utilisée dans d'autres fonctions de classe, elle est affectée à «self.income» dans le constructeur.
Tax.income()
def income(self):
"""
Calcul de la déduction pour revenu salarial,Renvoie le montant de la déduction avec le revenu comme argument
Depuis 2020, la déduction a été réduite de 100 000 et l'impôt sur le revenu a augmenté de 100 000, il n'y a donc pratiquement aucun changement.
Cependant, pour 8,5 millions ou plus, le montant de la déduction pour revenus salariaux a diminué, de sorte que l'impôt a en fait augmenté.
"""
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
Voyons ensuite les ** primes d'assurance sociale **.
Il s'agit de ** pension sociale **, ** assurance-emploi **, etc., qui sont distinctes des impôts.
La formule est écrite ci-dessous, mais il y a ** taux d'assurance-maladie **, ** taux d'assurance d'exemption ** et ** taux d'assurance-emploi **.
La prime finale est calculée en multipliant le revenu par le ** taux de prime ** calculé à partir de ceux-ci.
** Le taux de prime de l'assurance maladie ** varie selon la région, mais dans le cas de Tokyo il est de 9,87%
self.health_insurance_premium_rate contient
0,0987` par défaut.
Le taux de prime d'exemption détermine le montant de l'exonération de la pension sociale.
Le taux de prime d'exemption a tendance à augmenter avec l'âge, mais en moyenne, il est d'environ «0,4%», donc «self.rebate_contribution_rate» est «0,04» par défaut.
Ces valeurs peuvent être définies individuellement dans le constructeur.
Ces valeurs sont divisées par deux car elles partagent la moitié avec l'entreprise.
** Le taux de cotisation à l'emploi ** est uniformément «0,3%», alors additionnez-les pour calculer le taux de cotisation.
Tax.social_insurance_preium()
def social_insurance_premium(self):
"""
Calcul des primes d'assurance
Taux de prime = taux de prime de santé/2
+ (Taux de cotisation de la pension de prévoyance 18.3%-Taux de prime d'exemption)/2
+Taux de cotisation à l'emploi 0.3%
"""
#Taux de prime
insurance_premium_rate = (self.health_insurance_premium_rate)/2 \
+ (0.183 - self.rebate_contribution_rate)/2 \
+ 0.003
#Primes d'assurance sociale=Revenu annuel x taux de prime
social_insurance_premium = self.gross_salary*insurance_premium_rate
return social_insurance_premium
Vient ensuite ** l'impôt sur le revenu **.
** L'impôt sur le revenu ** soustrait d'abord ** la déduction de base ** du revenu calculé par «revenu ()».
Jusqu'à présent, la ** déduction de base ** était un taux forfaitaire de «380 000 yens», mais à partir de 2020, elle a été portée à «480 000 yens».
(Comme mentionné ci-dessus, la ** déduction pour revenu salarial ** a été réduite de 100 000 yens.)
Cependant, comme une nouvelle règle ajoutée à partir de ce moment, si le revenu annuel dépasse 24 millions, le montant de la déduction de base diminuera progressivement, et s'il dépasse 25 millions de yens, il sera nul.
En outre, la déduction pour personnes à charge ("dépendant_duction") et la déduction pour invalidité ("déduction_handicapée") en sont déduites.
Les deux dependents_deduction et handicapped_deduction
sont mis à zéro sauf indication contraire dans le constructeur.
Le revenu après diverses déductions est défini comme «target_of_income_tax», et ** l'impôt sur le revenu ** est calculé à partir de cela.
Plus le revenu annuel est élevé, plus vous pouvez en obtenir.
Le ** taux d'imposition sur le revenu ** (self.income_tax_rate
) qui apparaît ici est également utilisé pour le calcul lorsque vous effectuez le ** paiement de l'impôt local **.
Tax.income_tax()
def income_tax(self):
"""
Calcul de l'impôt sur le revenu
"""
#Déduction pour personne à charge de l'impôt sur le revenu
dependents_deduction = self.high_school_student * 480000 + self.college_student * 630000
#Déduction pour invalidité dans l'impôt sur le revenu
handicapped_deduction = self.handicapped * 260000
#La déduction de base était de 380000 yens jusqu'en 2019, mais à partir de 2020, elle sera de 480000 yens. Cependant, s'il dépasse 20 millions, il diminuera progressivement.
basic_deduction = 0
if self.income < 24000000:
basic_deduction = 480000
elif self.income < 24500000:
basic_deduction = 320000
elif self.income < 25000000:
basic_deduction = 160000
#Montant assujetti à l'impôt sur le revenu, revenu moins déductions et primes
target_of_income_tax = (self.income \
- self.social_insurance_premium() \
- self.spousal_deduction() \
- dependents_deduction \
- handicapped_deduction \
- basic_deduction)
#Taux d'imposition sur le revenu et montant de la déduction selon le revenu annuel
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
#Calcul de l'impôt sur le revenu
income_tax = target_of_income_tax * self.income_tax_rate - deduction
#Si l'impôt sur le revenu devient négatif, mettez-le à zéro
if income_tax <= 0:
income_tax = 0
return income_tax
Le calcul de la ** taxe d'habitation ** est similaire à l'impôt sur le revenu, donc je pense que ce ne sera pas si difficile si vous comprenez le mécanisme de l'impôt sur le revenu. Le montant de la déduction est différent de l '** impôt sur le revenu **, et il est également différent en ce que l'impôt est appliqué au revenu de l'année précédente. (Il n'y a pas de distinction particulière entre l'année précédente et cette année dans le programme)
Tax.inhabitant_tax()
def inhabitant_tax(self):
"""
Calcul de la taxe de séjour,Calculer la taxe d'habitation avec le revenu imposable comme argument
"""
#Déduction pour personne à charge de la taxe d'habitation
dependents_deduction = self.high_school_student * 330000 + self.college_student * 450000
#Déduction pour personnes handicapées de la taxe d'habitation
handicapped_deduction = self.handicapped * 270000
#Identique à la déduction de base et à l'impôt sur le revenu, modifié à partir de 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
#Diverses déductions et déductions de base (430000 yens) sont déduites du revenu et le taux d'imposition est de 10%multiplier
#Ajoutez le taux par habitant de 5 000 yens et soustrayez la déduction d'ajustement de 2 500 yens.
inhabitant_tax = (self.income
- self.social_insurance_premium()
- self.spousal_deduction()
- dependents_deduction
- handicapped_deduction
- basic_deduction) * 0.1 + 5000 - 2500
#Si la taxe d'habitation calculée devient négative, elle sera nulle.
if inhabitant_tax <=0:
inhabitant_tax = 0
return inhabitant_tax
À ce stade, vous pouvez calculer le ** à emporter **. Soustrayez les ** primes d'assurance sociale, l'impôt sur le revenu et la taxe d'habitation ** qui ont été calculés jusqu'à présent du revenu de la valeur nominale.
Tax.net_salary()
def net_salary(self):
"""
Calcul à la maison, déduire l'impôt sur le revenu, la taxe d'habitation, les primes d'assurance sociale du revenu
"""
total_tax = self.inhabitant_tax() + self.income_tax()
net_salary = self.gross_salary - total_tax - self.social_insurance_premium()
return net_salary
La couleur des cheveux est un peu différente de celles qui sont apparues jusqu'à présent, mais nous avons également mis en place ** Furusato Tax Payment **. ** Furusato Tax Payment ** est un système qui vous permet de recevoir des récompenses en faisant un don aux zones locales. À ce moment, ** l'impôt sur le revenu et la taxe d'habitation ** peuvent être réduits en fonction du don. Jusqu'à concurrence du montant maximal, seuls «2000 yens» du montant du don sont payés par vous-même, et tout le montant restant peut être déduit. La fonction suivante calcule le montant maximum des dons qui peuvent être entièrement déduits. Veuillez vous référer aux commentaires et au code pour la formule de calcul.
Tax.max_hurusato_donation()
def max_hurusato_donation(self):
"""
Calcul de la limite supérieure qui peut être entièrement déduite à 2000 yens à vos frais en payant votre taxe de séjour
En d'autres termes, le montant du retour moins 2000 yens sera déduit de l'impôt sur le revenu et de la taxe d'habitation.
"""
#Pourcentage du revenu fiscal des résidents(=Taxe de séjour)Calculer à partir de
#Limite supérieure de la déduction fiscale Furusato
hurusato_deduction = self.inhabitant_tax() * 0.2
# (Montant de la déduction) =(Montant du don-2000)×(90%-Taux d'imposition sur le revenu x 1.021)
# (Montant du don) = (Montant de la déduction)/(90%-Taux d'imposition sur le revenu x 1.021)+2000
max_hurusato_donation = hurusato_deduction / (0.9 - self.income_tax_rate * 1.021) + 2000
return max_hurusato_donation
Est-il judicieux d'écrire en Python
avec juste ça? Je vais donc essayer de le visualiser en utilisant matplotlib
.
D'abord, «importez» la bibliothèque requise.
Tax.show_ipynb
# coding: utf-8
import sys, os
sys.path.append(os.pardir) #Paramètres d'importation des fichiers dans le répertoire parent
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'
Calculez le revenu annuel de 2 à 12 millions de yens par incréments de 1 million de yens et plongez-vous dans la «liste».
Tax.show_ipynb2
#Valeur faciale annuelle, 200-1,Jusqu'à 2 millions par incréments de 10000
gross_salaries = [i for i in range(2000000,12010000, 1000000)]
#le revenu
incomes = []
#impôt
total_taxes = []
#Taxe de séjour
inhabitant_taxes = []
#impôt sur le revenu
income_taxes = []
#Primes d'assurance sociale (=Déduction des primes d'assurance sociale)
social_insurance_premiums = []
#Revenu annuel net
net_salaries = []
#Limite supérieure de la déduction fiscale Furusato et montant du don à ce moment
max_hurusato_donation = []
for gross_salary in gross_salaries:
tax = Tax(gross_salary)
#Ajouter de la valeur à la liste
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) #Soustrayez 2000 yens à vos frais
Stocker dans dataframe
. Vous pouvez voir le contenu avec df.head ()
.
Tax.show_ipynb3
df = pd.DataFrame()
df['revenu annuel'] = gross_salaries
df['Ramener à la maison'] = net_salaries
df['impôt'] = total_taxes
df['Taxe de séjour'] = inhabitant_taxes
df['impôt sur le revenu'] = income_taxes
df['Primes d'assurance sociale'] = social_insurance_premiums
df['Limite supérieure de la déduction fiscale pour la ville natale'] = max_hurusato_donation
Visualisez avec un graphique à barres.
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['Ramener à la maison'])
plt.bar(df.index, df['impôt'], bottom= df['Ramener à la maison'])
plt.bar(df.index, df['Limite supérieure de la déduction fiscale pour la ville natale'], bottom= df['Ramener à la maison'] + df['impôt'] - df['Limite supérieure de la déduction fiscale pour la ville natale'])
plt.bar(df.index, df['Primes d'assurance sociale'], bottom= df['Ramener à la maison'] + df['impôt'])
plt.xlabel('Salary (yen*10000)')
plt.ylabel('Breakdown (yen)')
plt.title('')
plt.legend(['net-salary', 'tax','hurusato_deduction', 'insurance'])
plt.show()
** Description du graphique **
――L'axe horizontal est le revenu annuel, l'axe vertical est le bleu, (orange + vert) est la taxe, le vert est la limite supérieure qui peut être déduite du paiement de l'impôt de la ville et le rouge est la prime d'assurance sociale.
** Mon impression de voir le graphique **
Recommended Posts