Module: JpNationalTax::IncomeTax

Defined in:
lib/jp_national_tax/income_tax/income_nenmatsu_2020.rb,
lib/jp_national_tax/income_tax.rb,
lib/jp_national_tax/income_tax/income_kouran_2020.rb

Overview

:nodoc:

Defined Under Namespace

Modules: Kouran2020, Nenmatsu2020

Constant Summary collapse

MOD_M =
[Kouran2020]
MOD_Y =
[Nenmatsu2020]

Class Method Summary collapse

Class Method Details

.basic_deduction(income, calc_date) ⇒ Object



26
27
28
29
# File 'lib/jp_national_tax/income_tax.rb', line 26

def basic_deduction(income, calc_date)
  responsible_mod_y(calc_date)
    .send(:基礎控除額, income)
end

.calc_kouran(pay_amount, pay_date, partner = false, dependent = 0) ⇒ Object



13
14
15
16
17
# File 'lib/jp_national_tax/income_tax.rb', line 13

def calc_kouran(pay_amount, pay_date, partner = false, dependent = 0)
  responsible_mod_monthly(pay_date)
    .send(:monthly_kouran, pay_amount, partner, dependent)
    .to_i
end

.responsible_mod_monthly(date = nil) ⇒ Object



38
39
40
# File 'lib/jp_national_tax/income_tax.rb', line 38

def responsible_mod_monthly(date = nil)
  responsible_module(date, MOD_M)
end

.responsible_mod_y(date = nil) ⇒ Object



42
43
44
# File 'lib/jp_national_tax/income_tax.rb', line 42

def responsible_mod_y(date = nil)
  responsible_module(date, MOD_Y)
end

.responsible_module(date = nil, mod) ⇒ Object

Raises:

  • (UndefinedDateError)


46
47
48
49
50
51
52
53
54
# File 'lib/jp_national_tax/income_tax.rb', line 46

def responsible_module(date = nil, mod)
  raise UndefinedDateError if date.nil?

  date = Date.parse(date) if date.class.name == 'String'
  rules = mod.map { |mod| [mod.send(:effective_date), mod] }.filter { |a| date >= a[0] }
  raise NoValidModuleError if rules.length <= 0

  rules.sort_by { |a| a[0] }.reverse!.first[1]
end

.year_salary_taxable(income, calc_date) ⇒ Object



19
20
21
22
23
24
# File 'lib/jp_national_tax/income_tax.rb', line 19

def year_salary_taxable(income, calc_date)
  salary = responsible_mod_y(calc_date)
             .send(:年調給与額, income)
  responsible_mod_y(calc_date)
    .send(:給与所得控除後の給与等の金額, salary)
end

.year_tax(income_taxable, calc_date) ⇒ Object



31
32
33
34
35
36
# File 'lib/jp_national_tax/income_tax.rb', line 31

def year_tax(income_taxable, calc_date)
  income_tax = responsible_mod_y(calc_date)
                 .send(:算出所得税額, income_taxable)
  responsible_mod_y(calc_date)
    .send(:年調年税額, income_tax)
end