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.
- checksums.yaml +4 -4
- data/Rakefile +4 -1
- data/app/assets/javascripts/tax.js +0 -2
- data/data//346/266/210/350/262/273/347/250/216.yml +3 -0
- data/data//346/272/220/346/263/211/345/276/264/345/217/216/347/250/216/20070101-20121231.tsv +335 -0
- data/data//346/272/220/346/263/211/345/276/264/345/217/216/347/250/216/20130101-20371231.tsv +402 -0
- data/data//346/272/220/346/263/211/345/276/264/345/217/216/347/250/216/schema.sql +15 -0
- data/data//346/272/220/346/263/211/345/276/264/345/217/216/347/250/216.db +0 -0
- data/data//351/203/275/351/201/223/345/272/234/347/234/214.yml +47 -0
- data/features/01./351/203/275/351/201/223/345/272/234/347/234/214.feature +16 -0
- data/features/{ → 02.}/346/266/210/350/262/273/347/250/216.feature +1 -1
- data/features/03./346/272/220/346/263/211/345/276/264/345/217/216/347/250/216.feature +22 -0
- data/features/step_definitions/prefectures.rb +15 -8
- data/lib/build_tasks/build.rake +29 -0
- data/lib/tax_jp/consumption_tax.rb +1 -1
- data/lib/tax_jp/prefecture.rb +1 -1
- data/lib/tax_jp/utils.rb +9 -1
- data/lib/tax_jp/version.rb +1 -1
- data/lib/tax_jp/withheld_tax.rb +74 -0
- data/lib/tax_jp/withheld_taxes/db_builder.rb +51 -0
- data/lib/tax_jp.rb +4 -0
- data/tax_jp.gemspec +6 -3
- data/templates/app/assets/javascripts/tax.js.erb +1 -3
- metadata +52 -11
- data/data/consumption_taxes.yml +0 -4
- data/data/prefectures.yml +0 -48
- data/features//351/203/275/351/201/223/345/272/234/347/234/214.feature +0 -53
- data/lib/tasks/build.rake +0 -8
- 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
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.
|
23
|
-
|
24
|
-
spec.add_development_dependency
|
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('
|
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
|
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:
|
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
|
73
|
-
- data
|
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
|
-
-
|
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.
|
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
|
data/data/consumption_taxes.yml
DELETED
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
data/lib/tax_jp/tasks.rb
DELETED