tax_jp 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +4 -1
  3. data/app/assets/javascripts/tax.js +0 -2
  4. data/data//346/266/210/350/262/273/347/250/216.yml +3 -0
  5. data/data//346/272/220/346/263/211/345/276/264/345/217/216/347/250/216/20070101-20121231.tsv +335 -0
  6. data/data//346/272/220/346/263/211/345/276/264/345/217/216/347/250/216/20130101-20371231.tsv +402 -0
  7. data/data//346/272/220/346/263/211/345/276/264/345/217/216/347/250/216/schema.sql +15 -0
  8. data/data//346/272/220/346/263/211/345/276/264/345/217/216/347/250/216.db +0 -0
  9. data/data//351/203/275/351/201/223/345/272/234/347/234/214.yml +47 -0
  10. data/features/01./351/203/275/351/201/223/345/272/234/347/234/214.feature +16 -0
  11. data/features/{ → 02.}/346/266/210/350/262/273/347/250/216.feature +1 -1
  12. data/features/03./346/272/220/346/263/211/345/276/264/345/217/216/347/250/216.feature +22 -0
  13. data/features/step_definitions/prefectures.rb +15 -8
  14. data/lib/build_tasks/build.rake +29 -0
  15. data/lib/tax_jp/consumption_tax.rb +1 -1
  16. data/lib/tax_jp/prefecture.rb +1 -1
  17. data/lib/tax_jp/utils.rb +9 -1
  18. data/lib/tax_jp/version.rb +1 -1
  19. data/lib/tax_jp/withheld_tax.rb +74 -0
  20. data/lib/tax_jp/withheld_taxes/db_builder.rb +51 -0
  21. data/lib/tax_jp.rb +4 -0
  22. data/tax_jp.gemspec +6 -3
  23. data/templates/app/assets/javascripts/tax.js.erb +1 -3
  24. metadata +52 -11
  25. data/data/consumption_taxes.yml +0 -4
  26. data/data/prefectures.yml +0 -48
  27. data/features//351/203/275/351/201/223/345/272/234/347/234/214.feature +0 -53
  28. data/lib/tasks/build.rake +0 -8
  29. data/lib/tax_jp/tasks.rb +0 -3
@@ -0,0 +1,74 @@
1
+ require 'sqlite3'
2
+
3
+ module TaxJp
4
+ module WithheldTaxes
5
+ end
6
+
7
+ class WithheldTax
8
+ DB_PATH = File.join(TaxJp::Utils.data_dir, '源泉徴収税.db')
9
+
10
+ attr_reader :valid_from, :valid_until
11
+ attr_reader :salary_range_from, :salary_range_to
12
+ attr_reader :dependent_0, :dependent_1, :dependent_2, :dependent_3, :dependent_4, :dependent_5, :dependent_6, :dependent_7
13
+ attr_reader :sub_salary
14
+
15
+ def initialize(row)
16
+ @valid_from = row[0]
17
+ @valid_until = row[1]
18
+ @salary_range_from = row[2]
19
+ @salary_range_to = row[3]
20
+ @dependent_0 = row[4]
21
+ @dependent_1 = row[5]
22
+ @dependent_2 = row[6]
23
+ @dependent_3 = row[7]
24
+ @dependent_4 = row[8]
25
+ @dependent_5 = row[9]
26
+ @dependent_6 = row[10]
27
+ @dependent_7 = row[11]
28
+ @sub_salary = row[12]
29
+ end
30
+
31
+ def self.find_by_date_and_salary(date, salary)
32
+ date = date.strftime('%Y-%m-%d') if date.is_a?(Date)
33
+ with_database do |db|
34
+ sql = 'select * from withheld_taxes where valid_from <= ? and valid_until >= ? and salary_range_from <= ? and salary_range_to > ?'
35
+
36
+ ret = nil
37
+ db.execute(sql, [date, date, salary, salary]) do |row|
38
+ if ret
39
+ raise "源泉徴収税が重複して登録されています。date=#{date}, salary=#{salary}"
40
+ else
41
+ ret = TaxJp::WithheldTax.new(row)
42
+ end
43
+ end
44
+ ret
45
+ end
46
+ end
47
+
48
+ def self.find_by_date(date)
49
+ date = date.strftime('%Y-%m-%d') if date.is_a?(Date)
50
+ with_database do |db|
51
+ sql = 'select * from withheld_taxes where valid_from <= ? and valid_until >= ?'
52
+
53
+ ret = []
54
+ db.execute(sql, [date, date]) do |row|
55
+ ret << TaxJp::WithheldTax.new(row)
56
+ end
57
+
58
+ ret.sort{|a, b| a.salary_range_from <=> b.salary_range_from }
59
+ end
60
+ end
61
+
62
+ private
63
+
64
+ def self.with_database
65
+ db = SQLite3::Database.new(DB_PATH)
66
+ begin
67
+ yield db
68
+ ensure
69
+ db.close
70
+ end
71
+ end
72
+
73
+ end
74
+ end
@@ -0,0 +1,51 @@
1
+ require 'csv'
2
+ require 'date'
3
+
4
+ class TaxJp::WithheldTaxes::DbBuilder
5
+
6
+ def initialize(db_path)
7
+ @db_path = db_path
8
+ end
9
+
10
+ def run(options = {})
11
+ db = SQLite3::Database.new(@db_path)
12
+
13
+ if options.fetch(:recreate, true)
14
+ db.execute(TaxJp::Utils.load_file(File.join('源泉徴収税', 'schema.sql')))
15
+ end
16
+
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
24
+ end
25
+
26
+ db.close
27
+ end
28
+
29
+ private
30
+
31
+ def insert_sql
32
+ ret = 'insert into withheld_taxes (valid_from, valid_until, salary_range_from, salary_range_to, '
33
+ 8.times do |i|
34
+ ret << "dependent_#{i}, "
35
+ end
36
+ ret << 'sub_salary) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
37
+ ret
38
+ end
39
+
40
+ def normalize_amount(amount)
41
+ amount.to_s.gsub(',', '').to_i
42
+ end
43
+
44
+ def filename_to_date(filename)
45
+ valid_from, valid_until = File.basename(filename).split('.').first.split('-')
46
+ valid_from = Date.strptime(valid_from, '%Y%m%d')
47
+ valid_until = Date.strptime(valid_until, '%Y%m%d')
48
+ [valid_from.to_s, valid_until.to_s]
49
+ end
50
+
51
+ end
data/lib/tax_jp.rb CHANGED
@@ -10,6 +10,10 @@ require 'tax_jp/utils'
10
10
  require 'tax_jp/prefecture'
11
11
 
12
12
  module TaxJp
13
+ # 消費税
13
14
  require 'tax_jp/consumption_tax'
14
15
  extend TaxJp::ConsumptionTax
16
+
17
+ # 源泉徴収税
18
+ require 'tax_jp/withheld_tax'
15
19
  end
data/tax_jp.gemspec CHANGED
@@ -19,7 +19,10 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.required_ruby_version = '~> 2.0'
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1.7"
23
- spec.add_development_dependency "closer", "~> 0.0.1"
24
- spec.add_development_dependency "rake", "~> 10.0"
22
+ spec.add_runtime_dependency 'sqlite3', '~> 1.3'
23
+
24
+ spec.add_development_dependency 'bundler', '~> 1.7'
25
+ spec.add_development_dependency 'closer', '~> 0.0.1'
26
+ spec.add_development_dependency 'rake', '~> 10.0'
27
+ spec.add_development_dependency 'rails', '>= 3.2.0', '< 5.0.0'
25
28
  end
@@ -6,10 +6,8 @@ tax.NONTAXABLE = <%= TaxJp::TAX_TYPE_NONTAXABLE %>; // 非課税
6
6
  tax.INCLUSIVE = <%= TaxJp::TAX_TYPE_INCLUSIVE %>; // 内税
7
7
  tax.EXCLUSIVE = <%= TaxJp::TAX_TYPE_EXCLUSIVE %>; // 外税
8
8
 
9
- tax.RATE_3 = Date.parse('1989-04-01');
10
-
11
9
  tax.consumptionTaxes = [
12
- <%- TaxJp::Utils.load_yaml('consumption_taxes.yml')['consumption_taxes'].reverse_each do |start_date, rate| -%>
10
+ <%- TaxJp::Utils.load_yaml('消費税.yml').reverse_each do |start_date, rate| -%>
13
11
  {date: Date.parse('<%= start_date.strftime('%Y-%m-%d') %>'), rate: <%= rate %>},
14
12
  <%- end -%>
15
13
  ];
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.0.6
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ichylinux
@@ -9,8 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-12-23 00:00:00.000000000 Z
12
+ date: 2015-07-18 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sqlite3
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.3'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.3'
14
28
  - !ruby/object:Gem::Dependency
15
29
  name: bundler
16
30
  requirement: !ruby/object:Gem::Requirement
@@ -53,6 +67,26 @@ dependencies:
53
67
  - - "~>"
54
68
  - !ruby/object:Gem::Version
55
69
  version: '10.0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rails
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: 3.2.0
77
+ - - "<"
78
+ - !ruby/object:Gem::Version
79
+ version: 5.0.0
80
+ type: :development
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 3.2.0
87
+ - - "<"
88
+ - !ruby/object:Gem::Version
89
+ version: 5.0.0
56
90
  description: "税金計算ライブラリ"
57
91
  email:
58
92
  - ichylinux@gmail.com
@@ -69,24 +103,30 @@ files:
69
103
  - Rakefile
70
104
  - app/assets/javascripts/tax.js
71
105
  - app/assets/javascripts/tax_jp.js
72
- - data/consumption_taxes.yml
73
- - data/prefectures.yml
106
+ - data/消費税.yml
107
+ - data/源泉徴収税.db
108
+ - data/源泉徴収税/20070101-20121231.tsv
109
+ - data/源泉徴収税/20130101-20371231.tsv
110
+ - data/源泉徴収税/schema.sql
111
+ - data/都道府県.yml
74
112
  - features/.gitignore
113
+ - features/01.都道府県.feature
114
+ - features/02.消費税.feature
115
+ - features/03.源泉徴収税.feature
75
116
  - features/step_definitions/consumption_tax.rb
76
117
  - features/step_definitions/prefectures.rb
77
118
  - features/support/env.rb
78
- - features/消費税.feature
79
- - features/都道府県.feature
80
- - lib/tasks/build.rake
119
+ - lib/build_tasks/build.rake
81
120
  - lib/tax_jp.rb
82
121
  - lib/tax_jp/const.rb
83
122
  - lib/tax_jp/consumption_tax.rb
84
123
  - lib/tax_jp/prefecture.rb
85
124
  - lib/tax_jp/rails/engine.rb
86
125
  - lib/tax_jp/rails/railtie.rb
87
- - lib/tax_jp/tasks.rb
88
126
  - lib/tax_jp/utils.rb
89
127
  - lib/tax_jp/version.rb
128
+ - lib/tax_jp/withheld_tax.rb
129
+ - lib/tax_jp/withheld_taxes/db_builder.rb
90
130
  - tax_jp.gemspec
91
131
  - templates/app/assets/javascripts/tax.js.erb
92
132
  homepage: https://github.com/hybitz/tax_jp
@@ -109,14 +149,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
149
  version: '0'
110
150
  requirements: []
111
151
  rubyforge_project:
112
- rubygems_version: 2.4.2
152
+ rubygems_version: 2.4.8
113
153
  signing_key:
114
154
  specification_version: 4
115
155
  summary: "税金計算ライブラリ"
116
156
  test_files:
117
157
  - features/.gitignore
158
+ - features/01.都道府県.feature
159
+ - features/02.消費税.feature
160
+ - features/03.源泉徴収税.feature
118
161
  - features/step_definitions/consumption_tax.rb
119
162
  - features/step_definitions/prefectures.rb
120
163
  - features/support/env.rb
121
- - features/消費税.feature
122
- - features/都道府県.feature
@@ -1,4 +0,0 @@
1
- consumption_taxes:
2
- 1989-04-01: 0.03
3
- 1997-04-01: 0.05
4
- 2014-04-01: 0.08
data/data/prefectures.yml DELETED
@@ -1,48 +0,0 @@
1
- prefectures:
2
- 01: '北海道'
3
- 02: '青森県'
4
- 03: '岩手県'
5
- 04: '宮城県'
6
- 05: '秋田県'
7
- 06: '山形県'
8
- 07: '福島県'
9
- 08: '茨城県'
10
- 09: '栃木県'
11
- 10: '群馬県'
12
- 11: '埼玉県'
13
- 12: '千葉県'
14
- 13: '東京都'
15
- 14: '神奈川県'
16
- 15: '新潟県'
17
- 16: '富山県'
18
- 17: '石川県'
19
- 18: '福井県'
20
- 19: '山梨県'
21
- 20: '長野県'
22
- 21: '岐阜県'
23
- 22: '静岡県'
24
- 23: '愛知県'
25
- 24: '三重県'
26
- 25: '滋賀県'
27
- 26: '京都府'
28
- 27: '大阪府'
29
- 28: '兵庫県'
30
- 29: '奈良県'
31
- 30: '和歌山県'
32
- 31: '鳥取県'
33
- 32: '島根県'
34
- 33: '岡山県'
35
- 34: '広島県'
36
- 35: '山口県'
37
- 36: '徳島県'
38
- 37: '香川県'
39
- 38: '愛媛県'
40
- 39: '高知県'
41
- 40: '福岡県'
42
- 41: '佐賀県'
43
- 42: '長崎県'
44
- 43: '熊本県'
45
- 44: '大分県'
46
- 45: '宮崎県'
47
- 46: '鹿児島県'
48
- 47: '沖縄県'
@@ -1,53 +0,0 @@
1
- # language: ja
2
-
3
- 機能: 都道府県
4
-
5
- シナリオ: 都道府県コード
6
- * JISで定義されているコードは以下の通りです。
7
- | 01 | 北海道 |
8
- | 02 | 青森県 |
9
- | 03 | 岩手県 |
10
- | 04 | 宮城県 |
11
- | 05 | 秋田県 |
12
- | 06 | 山形県 |
13
- | 07 | 福島県 |
14
- | 08 | 茨城県 |
15
- | 09 | 栃木県 |
16
- | 10 | 群馬県 |
17
- | 11 | 埼玉県 |
18
- | 12 | 千葉県 |
19
- | 13 | 東京都 |
20
- | 14 | 神奈川県 |
21
- | 15 | 新潟県 |
22
- | 16 | 富山県 |
23
- | 17 | 石川県 |
24
- | 18 | 福井県 |
25
- | 19 | 山梨県 |
26
- | 20 | 長野県 |
27
- | 21 | 岐阜県 |
28
- | 22 | 静岡県 |
29
- | 23 | 愛知県 |
30
- | 24 | 三重県 |
31
- | 25 | 滋賀県 |
32
- | 26 | 京都府 |
33
- | 27 | 大阪府 |
34
- | 28 | 兵庫県 |
35
- | 29 | 奈良県 |
36
- | 30 | 和歌山県 |
37
- | 31 | 鳥取県 |
38
- | 32 | 島根県 |
39
- | 33 | 岡山県 |
40
- | 34 | 広島県 |
41
- | 35 | 山口県 |
42
- | 36 | 徳島県 |
43
- | 37 | 香川県 |
44
- | 38 | 愛媛県 |
45
- | 39 | 高知県 |
46
- | 40 | 福岡県 |
47
- | 41 | 佐賀県 |
48
- | 42 | 長崎県 |
49
- | 43 | 熊本県 |
50
- | 44 | 大分県 |
51
- | 45 | 宮崎県 |
52
- | 46 | 鹿児島県 |
53
- | 47 | 沖縄県 |
data/lib/tasks/build.rake DELETED
@@ -1,8 +0,0 @@
1
- require 'rake'
2
- require 'tax_jp'
3
-
4
- namespace :taxjp do
5
- task :build do
6
- TaxJp::Utils.render 'app/assets/javascripts/tax.js'
7
- end
8
- end
data/lib/tax_jp/tasks.rb DELETED
@@ -1,3 +0,0 @@
1
- Dir[File.join(File.dirname(File.dirname(__FILE__)), 'tasks/*.rake')].each do |f|
2
- load f
3
- end