tax_jp 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bd3b8870dcdcddb9b568f780365e9d9b3ddd4aaf
4
- data.tar.gz: be33ca2deca8d2cf456a73afec7104f112a200cd
3
+ metadata.gz: 2f16da7a03b1366e9eafe72db8a78fbc1385182f
4
+ data.tar.gz: cb1a337823ce91d335b715317139b3ff15450b1d
5
5
  SHA512:
6
- metadata.gz: cb8f53c8059918fed565b91f888de3aab080ef109d4efa9276e81f2dce5236e2ec604b138c752767ffc3b6bcdb6b62fde5502f6b6d7fc4d4e55921910b12ff77
7
- data.tar.gz: f506dc9113ad23baa409aac819a1d0896201621acf7df2793f2489197299500579a0a683f24704c936ce467388df69b992385eadb5891de607655aea90fdd7c4
6
+ metadata.gz: 827c978c46a68a24cfc9b7d3db2316857e2318b4572525ed298b88f6e3682afaa522141373f43bbee942af2f67ba34ea27387f1ef68588c6337e85d36137b890
7
+ data.tar.gz: e294e606c71498fa9605c332f52d26f6c129c47a91f57b78a4a14c1006716fa9422f9651da0c3fdc361aa99196277a5ae2ad0ac6dbab38cc0107855413b6fe17
@@ -0,0 +1,10 @@
1
+ create table grades (
2
+ valid_from date not null,
3
+ valid_until date not null,
4
+ grade integer not null,
5
+ pension_grade integer not null,
6
+ monthly_standard integer not null,
7
+ daily_standard integer not null,
8
+ salary_from integer not null,
9
+ salary_to integer not null
10
+ );
@@ -0,0 +1,8 @@
1
+ create table health_insurances (
2
+ valid_from date not null,
3
+ valid_until date not null,
4
+ prefecture_code char(2) not null,
5
+ general decimal(1,4) not null,
6
+ particular decimal(1,4) not null,
7
+ basic decimal(1,4) not null
8
+ );
@@ -0,0 +1,7 @@
1
+ create table welfare_pensions (
2
+ valid_from date not null,
3
+ valid_until date not null,
4
+ general decimal(1,5) not null,
5
+ particular decimal(1,5) not null,
6
+ child_support decimal(1,5) not null
7
+ );
@@ -0,0 +1,48 @@
1
+ 都道府県 一般保険料率(%) 特定保険料率(%) 基本保険料率(%)
2
+ 北海道 10.12 4.07 6.05
3
+ 青森県 10.00 4.07 5.93
4
+ 岩手県  9.93 4.07 5.86
5
+ 宮城県 10.01 4.07 5.94
6
+ 秋田県 10.02 4.07 5.95
7
+ 山形県  9.96 4.07 5.89
8
+ 福島県  9.96 4.07 5.89
9
+ 茨城県  9.93 4.07 5.86
10
+ 栃木県  9.95 4.07 5.88
11
+ 群馬県  9.95 4.07 5.88
12
+ 埼玉県  9.94 4.07 5.87
13
+ 千葉県  9.93 4.07 5.86
14
+ 東京都  9.97 4.07 5.90
15
+ 神奈川県  9.98 4.07 5.91
16
+ 新潟県  9.90 4.07 5.83
17
+ 富山県  9.93 4.07 5.86
18
+ 石川県 10.03 4.07 5.96
19
+ 福井県 10.02 4.07 5.95
20
+ 山梨県  9.94 4.07 5.87
21
+ 長野県  9.85 4.07 5.78
22
+ 岐阜県  9.99 4.07 5.92
23
+ 静岡県  9.92 4.07 5.85
24
+ 愛知県  9.97 4.07 5.90
25
+ 三重県  9.94 4.07 5.87
26
+ 滋賀県  9.97 4.07 5.90
27
+ 京都府  9.98 4.07 5.91
28
+ 大阪府 10.06 4.07 5.99
29
+ 兵庫県 10.00 4.07 5.93
30
+ 奈良県 10.02 4.07 5.95
31
+ 和歌山県 10.02 4.07 5.95
32
+ 鳥取県  9.98 4.07 5.91
33
+ 島根県 10.00 4.07 5.93
34
+ 岡山県 10.06 4.07 5.99
35
+ 広島県 10.03 4.07 5.96
36
+ 山口県 10.03 4.07 5.96
37
+ 徳島県 10.08 4.07 6.01
38
+ 香川県 10.09 4.07 6.02
39
+ 愛媛県 10.03 4.07 5.96
40
+ 高知県 10.04 4.07 5.97
41
+ 福岡県 10.12 4.07 6.05
42
+ 佐賀県 10.16 4.07 6.09
43
+ 長崎県 10.06 4.07 5.99
44
+ 熊本県 10.07 4.07 6.00
45
+ 大分県 10.08 4.07 6.01
46
+ 宮崎県 10.01 4.07 5.94
47
+ 鹿児島県 10.03 4.07 5.96
48
+ 沖縄県 10.03 4.07 5.96
@@ -0,0 +1,48 @@
1
+ 都道府県 一般保険料率(%) 特定保険料率(%) 基本保険料率(%)
2
+ 北海道 10.14 3.83 6.31
3
+ 青森県 9.98 3.83 6.15
4
+ 岩手県 9.97 3.83 6.14
5
+ 宮城県 9.96 3.83 6.13
6
+ 秋田県 10.06 3.83 6.23
7
+ 山形県 9.97 3.83 6.14
8
+ 福島県 9.92 3.83 6.09
9
+ 茨城県 9.92 3.83 6.09
10
+ 栃木県 9.95 3.83 6.12
11
+ 群馬県 9.92 3.83 6.09
12
+ 埼玉県 9.93 3.83 6.1
13
+ 千葉県 9.97 3.83 6.14
14
+ 東京都 9.97 3.83 6.14
15
+ 神奈川県 9.98 3.83 6.15
16
+ 新潟県 9.86 3.83 6.03
17
+ 富山県 9.91 3.83 6.08
18
+ 石川県 9.99 3.83 6.16
19
+ 福井県 9.93 3.83 6.1
20
+ 山梨県 9.96 3.83 6.13
21
+ 長野県 9.91 3.83 6.08
22
+ 岐阜県 9.98 3.83 6.15
23
+ 静岡県 9.92 3.83 6.09
24
+ 愛知県 9.97 3.83 6.14
25
+ 三重県 9.94 3.83 6.11
26
+ 滋賀県 9.94 3.83 6.11
27
+ 京都府 10.02 3.83 6.19
28
+ 大阪府 10.04 3.83 6.21
29
+ 兵庫県 10.04 3.83 6.21
30
+ 奈良県 9.98 3.83 6.15
31
+ 和歌山県 9.97 3.83 6.14
32
+ 鳥取県 9.96 3.83 6.13
33
+ 島根県 10.06 3.83 6.23
34
+ 岡山県 10.09 3.83 6.26
35
+ 広島県 10.03 3.83 6.2
36
+ 山口県 10.1 3.83 6.27
37
+ 徳島県 10.1 3.83 6.27
38
+ 香川県 10.11 3.83 6.28
39
+ 愛媛県 10.03 3.83 6.2
40
+ 高知県 10.05 3.83 6.22
41
+ 福岡県 10.09 3.83 6.26
42
+ 佐賀県 10.21 3.83 6.38
43
+ 長崎県 10.07 3.83 6.24
44
+ 熊本県 10.09 3.83 6.26
45
+ 大分県 10.03 3.83 6.2
46
+ 宮崎県 9.98 3.83 6.15
47
+ 鹿児島県 10.02 3.83 6.19
48
+ 沖縄県 9.96 3.83 6.13
@@ -0,0 +1,2 @@
1
+ 適用開始日 適用終了日 一般の被保険者(%) 坑内員・船員(%) こども・子育て拠出金(%)
2
+ 2014-09-01 2015-08-31 17.474 17.688 0.15
@@ -0,0 +1,48 @@
1
+ 等級(健康保険) 等級(厚生年金) 標準報酬月額 標準報酬日額 報酬月額(以上) 報酬月額(未満)
2
+ 1 0 58000 1930 0 63000
3
+ 2 0 68000 2270 63000 73000
4
+ 3 0 78000 2600 73000 83000
5
+ 4 0 88000 2930 83000 93000
6
+ 5 1 98000 3270 93000 101000
7
+ 6 2 104000 3470 101000 107000
8
+ 7 3 110000 3670 107000 114000
9
+ 8 4 118000 3930 114000 122000
10
+ 9 5 126000 4200 122000 130000
11
+ 10 6 134000 4470 130000 138000
12
+ 11 7 142000 4730 138000 146000
13
+ 12 8 150000 5000 146000 155000
14
+ 13 9 160000 5330 155000 165000
15
+ 14 10 170000 5670 165000 175000
16
+ 15 11 180000 6000 175000 185000
17
+ 16 12 190000 6330 185000 195000
18
+ 17 13 200000 6670 195000 210000
19
+ 18 14 220000 7330 210000 230000
20
+ 19 15 240000 8000 230000 250000
21
+ 20 16 260000 8670 250000 270000
22
+ 21 17 280000 9330 270000 290000
23
+ 22 18 300000 10000 290000 310000
24
+ 23 19 320000 10670 310000 330000
25
+ 24 20 340000 11330 330000 350000
26
+ 25 21 360000 12000 350000 370000
27
+ 26 22 380000 12670 370000 395000
28
+ 27 23 410000 13670 395000 425000
29
+ 28 24 440000 14670 425000 455000
30
+ 29 25 470000 15670 455000 485000
31
+ 30 26 500000 16670 485000 515000
32
+ 31 27 530000 17670 515000 545000
33
+ 32 28 560000 18670 545000 575000
34
+ 33 29 590000 19670 575000 605000
35
+ 34 30 620000 20670 605000 635000
36
+ 35 30 650000 21670 635000 665000
37
+ 36 30 680000 22670 665000 695000
38
+ 37 30 710000 23670 695000 730000
39
+ 38 30 750000 25000 730000 770000
40
+ 39 30 790000 26330 770000 810000
41
+ 40 30 830000 27670 810000 855000
42
+ 41 30 880000 29330 855000 905000
43
+ 42 30 930000 31000 905000 955000
44
+ 43 30 980000 32670 955000 1005000
45
+ 44 30 1030000 34330 1005000 1055000
46
+ 45 30 1090000 36330 1055000 1115000
47
+ 46 30 1150000 38330 1115000 1175000
48
+ 47 30 1210000 40330 1175000 -
@@ -1,10 +1,12 @@
1
1
  require 'rake'
2
2
  require 'tax_jp'
3
+ require 'tax_jp/social_insurances/db_builder'
3
4
  require 'tax_jp/withheld_taxes/db_builder'
4
5
 
5
6
  namespace :taxjp do
6
7
  task :build do
7
8
  Rake::Task["taxjp:build:consumption_tax"].invoke
9
+ Rake::Task["taxjp:build:social_insurance"].invoke
8
10
  Rake::Task["taxjp:build:withheld_tax"].invoke
9
11
  end
10
12
 
@@ -19,11 +21,14 @@ namespace :taxjp do
19
21
  desc '源泉徴収税DBを構築します。'
20
22
  task :withheld_tax do
21
23
  puts '源泉徴収税'
24
+ TaxJp::WithheldTaxes::DbBuilder.new.run
25
+ end
22
26
 
23
- db_path = TaxJp::WithheldTax::DB_PATH
24
- FileUtils.rm_f(db_path)
25
-
26
- TaxJp::WithheldTaxes::DbBuilder.new(db_path).run
27
+ desc '社会保険料DBを構築します。'
28
+ task :social_insurance do
29
+ puts '社会保険料'
30
+ TaxJp::SocialInsurances::DbBuilder.new.run
27
31
  end
32
+
28
33
  end
29
34
  end
data/lib/tax_jp.rb CHANGED
@@ -14,6 +14,9 @@ module TaxJp
14
14
  require 'tax_jp/consumption_tax'
15
15
  extend TaxJp::ConsumptionTax
16
16
 
17
+ # 社会保険料
18
+ require 'tax_jp/social_insurance'
19
+
17
20
  # 源泉徴収税
18
21
  require 'tax_jp/withheld_tax'
19
22
  end
@@ -0,0 +1,44 @@
1
+ module TaxJp
2
+
3
+ # 健康年金
4
+ class HealthInsurance
5
+ attr_reader :valid_from, :valid_until
6
+ attr_reader :monthly_standard
7
+ attr_reader :prefecture
8
+ attr_reader :general, :particular, :basic
9
+
10
+ def initialize(attrs = {})
11
+ @valid_from = attrs[:valid_from]
12
+ @valid_until = attrs[:valid_until]
13
+ @monthly_standard = attrs[:monthly_standard]
14
+ @prefecture = attrs[:prefecture]
15
+ @general= attrs[:general]
16
+ @particular= attrs[:particular]
17
+ @basic = attrs[:basic]
18
+ end
19
+
20
+ def general_amount
21
+ floor_amount(monthly_standard * general)
22
+ end
23
+
24
+ def general_amount_half
25
+ floor_amount(monthly_standard * general / 2)
26
+ end
27
+
28
+ def general_amount_care
29
+ floor_amount(monthly_standard * (general + 0.0158))
30
+ end
31
+
32
+ def general_amount_care_half
33
+ floor_amount(monthly_standard * (general + 0.0158) / 2)
34
+ end
35
+
36
+ private
37
+
38
+ def floor_amount(amount)
39
+ (amount * 10).floor * 0.1
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -9,18 +9,24 @@ module TaxJp
9
9
  @name = name
10
10
  end
11
11
 
12
- @@prefectures = {}
12
+ @@prefectures_by_code = {}
13
+ @@prefectures_by_name = {}
13
14
  TaxJp::Utils.load_yaml('都道府県.yml').each do |key, value|
14
15
  code = "%02d" % key.to_i
15
- @@prefectures[code] = Prefecture.new(code, value)
16
+ p = Prefecture.new(code, value)
17
+ @@prefectures_by_code[p.code] = @@prefectures_by_name[p.name] = p
16
18
  end
17
19
 
18
20
  def self.all
19
- @@prefectures.values
21
+ @@prefectures_by_code.values
20
22
  end
21
23
 
22
24
  def self.find_by_code(code)
23
- @@prefectures["%02d" % code.to_i]
25
+ @@prefectures_by_code["%02d" % code.to_i]
26
+ end
27
+
28
+ def self.find_by_name(name)
29
+ @@prefectures_by_name[name]
24
30
  end
25
31
 
26
32
  end
@@ -0,0 +1,138 @@
1
+ require 'sqlite3'
2
+ require_relative 'health_insurance'
3
+ require_relative 'welfare_pension'
4
+
5
+ module TaxJp
6
+ module SocialInsurances
7
+ end
8
+
9
+ # 社会保険
10
+ class SocialInsurance
11
+ DB_PATH = File.join(TaxJp::Utils.data_dir, '社会保険料.db')
12
+
13
+ # 等級
14
+ attr_reader :valid_from, :valid_until
15
+ attr_reader :grade, :pension_grade
16
+ attr_reader :monthly_standard, :daily_standard
17
+ attr_reader :salary_from, :salary_to
18
+
19
+ # 健康保険
20
+ attr_reader :health_insurance
21
+ # 厚生年金
22
+ attr_reader :welfare_pension
23
+
24
+ def initialize(row)
25
+ @valid_from = row[0]
26
+ @valid_until = row[1]
27
+ @grade = row[2]
28
+ @pension_grade = row[3]
29
+ @monthly_standard = row[4]
30
+ @daily_standard = row[5]
31
+ @salary_from = row[6]
32
+ @salary_to = row[7]
33
+
34
+ @health_insurance = TaxJp::HealthInsurance.new(
35
+ :valid_from => row[8], :valid_until => row[9],
36
+ :monthly_standard => row[4],
37
+ :prefecture => Prefecture.find_by_code(row[10]),
38
+ :general => row[11], :particular => row[12],
39
+ :basic => row[13])
40
+
41
+ @welfare_pension = TaxJp::WelfarePension.new(
42
+ :valid_from => row[14], :valid_until => row[15],
43
+ :monthly_standard => row[4],
44
+ :general => row[16], :particular => row[17],
45
+ :child_support => row[18])
46
+ end
47
+
48
+ def self.find_grade_by_date_and_salary(date, salary)
49
+ date = date.strftime('%Y-%m-%d') if date.is_a?(Date)
50
+
51
+ with_database do |db|
52
+ sql = 'select * from grades where valid_from <= ? and valid_until >= ? and salary_from <= ? and salary_to > ?'
53
+
54
+ ret = nil
55
+ db.execute(sql, [date, date, salary, salary]) do |row|
56
+ if ret
57
+ raise "等級が重複して登録されています。date=#{date}, salary=#{salary}"
58
+ else
59
+ ret = TaxJp::SocialInsurance.new(row)
60
+ end
61
+ end
62
+ ret
63
+ end
64
+ end
65
+
66
+ def self.find_grades_by_date(date)
67
+ date = date.strftime('%Y-%m-%d') if date.is_a?(Date)
68
+
69
+ with_database do |db|
70
+ sql = 'select * from grades where valid_from <= ? and valid_until >= ?'
71
+
72
+ ret = []
73
+ db.execute(sql, [date, date]) do |row|
74
+ ret << TaxJp::SocialInsurance.new(row)
75
+ end
76
+
77
+ ret.sort{|a, b| a.grade <=> b.grade }
78
+ end
79
+ end
80
+
81
+ def self.find_by_date_and_prefecture_and_grade(date, prefecture, grade)
82
+ if date.is_a?(Date)
83
+ date = date.strftime('%Y-%m-%d')
84
+ elsif date.is_a?(String)
85
+ else
86
+ raise TypeError.new(date.class)
87
+ end
88
+
89
+ if prefecture.is_a?(TaxJp::Prefecture)
90
+ prefecture_code = prefecture.code
91
+ elsif prefecture.to_s =~ /[0-9]{2}/
92
+ prefecture_code = prefecture
93
+ else
94
+ p = Prefecture.find_by_name(prefecture.to_s)
95
+ if p
96
+ prefecture_code = p.code
97
+ else
98
+ raise TypeError.new(prefecture.class)
99
+ end
100
+ end
101
+
102
+ if grade.is_a?(TaxJp::SocialInsurance)
103
+ grade = grade.grade
104
+ elsif grade.is_a?(Fixnum)
105
+ grade = grade.to_i
106
+ else
107
+ raise TypeError.new("#{grade.class} は等級として不正です。")
108
+ end
109
+
110
+ with_database do |db|
111
+ sql = 'select g.*, hi.*, wp.* from grades g '
112
+ sql << 'inner join health_insurances hi on (hi.valid_from <= ? and hi.valid_until >= ? and hi.prefecture_code = ?) '
113
+ sql << 'inner join welfare_pensions wp on (wp.valid_from <= ? and wp.valid_until >= ?) '
114
+ sql << 'where g.valid_from <= ? and g.valid_until >= ? and g.grade = ? '
115
+
116
+ ret = nil
117
+ db.execute(sql, [date, date, prefecture_code, date, date, date, date, grade]) do |row|
118
+ if ret
119
+ raise "健康保険が重複して登録されています。date=#{date}, prefecture_code=#{prefecture_code}, grade=#{grade}"
120
+ else
121
+ ret = TaxJp::SocialInsurance.new(row)
122
+ end
123
+ end
124
+ ret
125
+ end
126
+ end
127
+
128
+ def self.with_database
129
+ db = SQLite3::Database.new(DB_PATH)
130
+ begin
131
+ yield db
132
+ ensure
133
+ db.close
134
+ end
135
+ end
136
+ end
137
+
138
+ end
@@ -0,0 +1,115 @@
1
+ require 'csv'
2
+ require 'date'
3
+
4
+ class TaxJp::SocialInsurances::DbBuilder
5
+
6
+ def initialize(db_path = nil)
7
+ @db_path = db_path || TaxJp::SocialInsurance::DB_PATH
8
+ end
9
+
10
+ def run(options = {})
11
+ with_database(options) do |db|
12
+ Dir.glob(File.join(TaxJp::Utils.data_dir, '社会保険料', '等級-*.tsv')).each do |filename|
13
+ valid_from, valid_until = filename_to_date(filename)
14
+
15
+ CSV.foreach(filename, :col_sep => "\t") do |row|
16
+ next if row[0].to_i == 0
17
+ db.execute(insert_sql_grade, [valid_from, valid_until] + row.map{|col| normalize_amount(col)})
18
+ end
19
+ end
20
+
21
+ Dir.glob(File.join(TaxJp::Utils.data_dir, '社会保険料', '健康保険-*.tsv')).each do |filename|
22
+ valid_from, valid_until = filename_to_date(filename)
23
+
24
+ CSV.foreach(filename, :col_sep => "\t") do |row|
25
+ next unless row[1].to_f > 0
26
+ values = [valid_from, valid_until]
27
+ values << TaxJp::Prefecture.find_by_name(row.shift).code
28
+ values += row.map{|col| (col.to_f * 0.01).round(4) }
29
+ db.execute(insert_sql_health_insurance, values)
30
+ end
31
+ end
32
+
33
+ Dir.glob(File.join(TaxJp::Utils.data_dir, '社会保険料', '厚生年金.tsv')).each do |filename|
34
+ CSV.foreach(filename, :col_sep => "\t") do |row|
35
+ next unless row[2].to_f > 0
36
+ values = []
37
+ values << row.shift
38
+ values << row.shift
39
+ values += row.map{|col| (col.to_f * 0.01).round(5) }
40
+ db.execute(insert_sql_welfare_pensions, values)
41
+ end
42
+ end
43
+
44
+ end
45
+ end
46
+
47
+ private
48
+
49
+ def with_database(options = {})
50
+ if options.fetch(:recreate, true)
51
+ FileUtils.rm_f(@db_path)
52
+ db = SQLite3::Database.new(@db_path)
53
+ db.execute(TaxJp::Utils.load_file(File.join('社会保険料', 'schema_grades.sql')))
54
+ db.execute(TaxJp::Utils.load_file(File.join('社会保険料', 'schema_health_insurances.sql')))
55
+ db.execute(TaxJp::Utils.load_file(File.join('社会保険料', 'schema_welfare_pensions.sql')))
56
+ else
57
+ db = SQLite3::Database.new(@db_path)
58
+ end
59
+
60
+ begin
61
+ yield db
62
+ ensure
63
+ db.close
64
+ end
65
+ end
66
+
67
+ def insert_sql_grade
68
+ columns = %w{valid_from valid_until grade pension_grade monthly_standard daily_standard salary_from salary_to}
69
+
70
+ ret = 'insert into grades ( '
71
+ ret << columns.join(',')
72
+ ret << ') values ('
73
+ ret << columns.map{|c| '?' }.join(',')
74
+ ret << ')'
75
+ ret
76
+ end
77
+
78
+ def insert_sql_health_insurance
79
+ columns = %w{valid_from valid_until prefecture_code general particular basic}
80
+
81
+ ret = 'insert into health_insurances ( '
82
+ ret << columns.join(',')
83
+ ret << ') values ('
84
+ ret << columns.map{|c| '?' }.join(',')
85
+ ret << ')'
86
+ ret
87
+ end
88
+
89
+ def insert_sql_welfare_pensions
90
+ columns = %w{valid_from valid_until general particular child_support}
91
+
92
+ ret = 'insert into welfare_pensions ( '
93
+ ret << columns.join(',')
94
+ ret << ') values ('
95
+ ret << columns.map{|c| '?' }.join(',')
96
+ ret << ')'
97
+ ret
98
+ end
99
+
100
+ def normalize_amount(amount, options = {})
101
+ if amount.to_s == '-'
102
+ ret = 2147483647
103
+ else
104
+ ret = amount.to_s.gsub(',', '').to_i
105
+ end
106
+ end
107
+
108
+ def filename_to_date(filename)
109
+ title, valid_from, valid_until = File.basename(filename).split('.').first.split('-')
110
+ valid_from = Date.strptime(valid_from, '%Y%m%d')
111
+ valid_until = Date.strptime(valid_until, '%Y%m%d')
112
+ [valid_from.strftime('%Y-%m-%d'), valid_until.strftime('%Y-%m-%d')]
113
+ end
114
+
115
+ end
@@ -1,3 +1,3 @@
1
1
  module TaxJp
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -0,0 +1,35 @@
1
+ module TaxJp
2
+
3
+ # 厚生年金
4
+ class WelfarePension
5
+ attr_reader :valid_from, :valid_until
6
+ attr_reader :monthly_standard
7
+ attr_reader :general, :particular
8
+ attr_reader :child_support
9
+
10
+ def initialize(attrs = {})
11
+ @valid_from = attrs[:valid_from]
12
+ @valid_until = attrs[:valid_until]
13
+ @monthly_standard = attrs[:monthly_standard]
14
+ @general= attrs[:general]
15
+ @particular= attrs[:particular]
16
+ @child_support = attrs[:child_support]
17
+ end
18
+
19
+ def general_amount
20
+ floor_amount(monthly_standard * general)
21
+ end
22
+
23
+ def general_amount_half
24
+ floor_amount(monthly_standard * general / 2)
25
+ end
26
+
27
+ private
28
+
29
+ def floor_amount(amount)
30
+ (amount * 10).floor * 0.1
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -3,31 +3,41 @@ require 'date'
3
3
 
4
4
  class TaxJp::WithheldTaxes::DbBuilder
5
5
 
6
- def initialize(db_path)
7
- @db_path = db_path
6
+ def initialize(db_path = nil)
7
+ @db_path = db_path || TaxJp::WithheldTax::DB_PATH
8
8
  end
9
9
 
10
10
  def run(options = {})
11
- db = SQLite3::Database.new(@db_path)
11
+ with_database(options) do |db|
12
+ Dir.glob(File.join(TaxJp::Utils.data_dir, '源泉徴収税', '*.tsv')).each do |filename|
13
+ valid_from, valid_until = filename_to_date(filename)
14
+
15
+ CSV.foreach(filename, :col_sep => "\t") do |row|
16
+ next if row[0].nil?
17
+ db.execute(insert_sql, [valid_from.to_s, valid_until.to_s] + row.map{|col| normalize_amount(col)})
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ private
12
24
 
25
+ def with_database(options = {})
13
26
  if options.fetch(:recreate, true)
27
+ FileUtils.rm_f(@db_path)
28
+ db = SQLite3::Database.new(@db_path)
14
29
  db.execute(TaxJp::Utils.load_file(File.join('源泉徴収税', 'schema.sql')))
30
+ else
31
+ db = SQLite3::Database.new(@db_path)
15
32
  end
16
33
 
17
- Dir.glob(File.join(TaxJp::Utils.data_dir, '源泉徴収税', '*.tsv')).each do |filename|
18
- valid_from, valid_until = filename_to_date(filename)
19
-
20
- CSV.foreach(filename, :col_sep => "\t") do |row|
21
- next if row[0].nil?
22
- db.execute(insert_sql, [valid_from.to_s, valid_until.to_s] + row.map{|col| normalize_amount(col)})
23
- end
34
+ begin
35
+ yield db
36
+ ensure
37
+ db.close
24
38
  end
25
-
26
- db.close
27
39
  end
28
40
 
29
- private
30
-
31
41
  def insert_sql
32
42
  ret = 'insert into withheld_taxes (valid_from, valid_until, salary_range_from, salary_range_to, '
33
43
  8.times do |i|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tax_jp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ichylinux
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-07-18 00:00:00.000000000 Z
12
+ date: 2015-07-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sqlite3
@@ -108,6 +108,14 @@ files:
108
108
  - data/源泉徴収税/20070101-20121231.tsv
109
109
  - data/源泉徴収税/20130101-20371231.tsv
110
110
  - data/源泉徴収税/schema.sql
111
+ - data/社会保険料.db
112
+ - data/社会保険料/schema_grades.sql
113
+ - data/社会保険料/schema_health_insurances.sql
114
+ - data/社会保険料/schema_welfare_pensions.sql
115
+ - data/社会保険料/健康保険-20140301-20150331.tsv
116
+ - data/社会保険料/健康保険-20150401-20991231.tsv
117
+ - data/社会保険料/厚生年金.tsv
118
+ - data/社会保険料/等級-20090901-20991231.tsv
111
119
  - data/都道府県.yml
112
120
  - features/.gitignore
113
121
  - features/01.都道府県.feature
@@ -120,11 +128,15 @@ files:
120
128
  - lib/tax_jp.rb
121
129
  - lib/tax_jp/const.rb
122
130
  - lib/tax_jp/consumption_tax.rb
131
+ - lib/tax_jp/health_insurance.rb
123
132
  - lib/tax_jp/prefecture.rb
124
133
  - lib/tax_jp/rails/engine.rb
125
134
  - lib/tax_jp/rails/railtie.rb
135
+ - lib/tax_jp/social_insurance.rb
136
+ - lib/tax_jp/social_insurances/db_builder.rb
126
137
  - lib/tax_jp/utils.rb
127
138
  - lib/tax_jp/version.rb
139
+ - lib/tax_jp/welfare_pension.rb
128
140
  - lib/tax_jp/withheld_tax.rb
129
141
  - lib/tax_jp/withheld_taxes/db_builder.rb
130
142
  - tax_jp.gemspec