tax_jp 0.0.6 → 0.1.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.
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