luca-jp 0.16.1 → 0.16.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a6dbb648afd83fd8f7240fcda13d1ab94f7cbff8d3499edfd3dba0641a94ab6
4
- data.tar.gz: '087559b7426943953b6ece1cfc8e25b3dfed1da12a0047fbc6367884751e1bb9'
3
+ metadata.gz: fa9b6007a2a529b1d17eaca40694c831f8c1be63343571c5c3d7e926b7f52949
4
+ data.tar.gz: cb198bc844cc2d905ac9aab9c6bb35693f0b16de1d57331aac58c31c5f5a2300
5
5
  SHA512:
6
- metadata.gz: 290000091d4b1fcbff40cbd11ed97d477d4a3c6144bc668cc93ad4d40568869ad1ad69bf0bdad3df1301dcc76c3c4322eff30bb4f602ede1d120f579801af8da
7
- data.tar.gz: 1fc13e4658ed8735f80abdb087cfae9f3abbc18dfed81709d9174b0e70a10ceb0bb11ec535e690ca4c1ea414b4c6d183c6ef5dae25dd71b49cb1af4a1cee63e4
6
+ metadata.gz: ef9754c6618cfe2eaeb27f0e14a0a6f3b302853e73f4138128a23b1e688a33a715a11cef549ac98f942e759430ea11f0af2e134875590bcea4aba497a0a23f36
7
+ data.tar.gz: 56827cd19f691db069c42503ee2175477763f164abcdfbc46dea99ae3f942cc025c47aed8abf28b9f7f546a2f7bec709e915f10bebecefbb17df7a23895093ea
data/exe/luca-jp CHANGED
@@ -7,6 +7,8 @@ require 'luca_salary/jp_payreport'
7
7
  require 'luca_cmd'
8
8
  require 'luca_support/const'
9
9
 
10
+ EXT_CONF = 'config-lucajp.yml'
11
+
10
12
  class LucaCmd
11
13
  def self.syouhizei(args, params)
12
14
  if params[:export]
@@ -56,26 +58,6 @@ class LucaCmd
56
58
  [r[0].year, r[0].month, r[1].year, r[1].month]
57
59
  end
58
60
  end
59
-
60
- def self.check_dir_jp(target)
61
- check_dir(target) do
62
- begin
63
- ex_conf = YAML.safe_load(
64
- File.read(Pathname(LucaSupport::CONST.pjdir) / 'config-lucajp.yml'),
65
- permitted_classes: [Date]
66
- )
67
- if ex_conf
68
- LucaSupport::CONST.set_config(
69
- LucaSupport::CONST.config.merge(ex_conf)
70
- )
71
- end
72
- rescue Errno::ENOENT
73
- nil
74
- end
75
-
76
- yield
77
- end
78
- end
79
61
  end
80
62
 
81
63
  module LucaSalaryCmd
@@ -97,7 +79,7 @@ when 'h', /hou?jinzei/
97
79
  opt.on('--export', 'export json') { |_v| params[:export] = true }
98
80
  opt.on('--lastyear', 'report on last Financial year') { |_v| params[:lastyear] = true }
99
81
  args = opt.parse!(ARGV)
100
- LucaCmd.check_dir_jp('journals') do
82
+ LucaCmd.check_dir('journals', ext_conf: EXT_CONF) do
101
83
  LucaCmd.houjinzei(args, params)
102
84
  end
103
85
  end
@@ -107,7 +89,7 @@ when 's', /s[yh]ou?hizei/
107
89
  opt.on('--export', 'export json') { |_v| params[:export] = true }
108
90
  opt.on('--lastyear', 'report on last Financial year') { |_v| params[:lastyear] = true }
109
91
  args = opt.parse!(ARGV)
110
- LucaCmd.check_dir_jp('journals') do
92
+ LucaCmd.check_dir('journals', ext_conf: EXT_CONF) do
111
93
  LucaCmd.syouhizei(args, params)
112
94
  end
113
95
  end
@@ -117,7 +99,7 @@ when 'c', /chihou?zei/
117
99
  opt.on('--export', 'export json') { |_v| params[:export] = true }
118
100
  opt.on('--lastyear', 'report on last Financial year') { |_v| params[:lastyear] = true }
119
101
  args = opt.parse!(ARGV)
120
- LucaCmd.check_dir_jp('journals') do
102
+ LucaCmd.check_dir('journals', ext_conf: EXT_CONF) do
121
103
  LucaCmd.chihouzei(args, params)
122
104
  end
123
105
  end
@@ -127,7 +109,7 @@ when /urikake/
127
109
  opt.on('--total VAL', '売掛金総額') { |v| params[:total] = v&.to_i }
128
110
  opt.on('--utf8', 'UTF-8でファイル生成') { |_v| params[:encode] = 'UTF-8' }
129
111
  args = opt.parse!(ARGV)
130
- LucaCmd.check_dir_jp('invoices') do
112
+ LucaCmd.check_dir('invoices', ext_conf: EXT_CONF) do
131
113
  LucaCmd.urikake(args, params)
132
114
  end
133
115
  end
@@ -135,7 +117,7 @@ when 'k', 'kyuyo', 'salary'
135
117
  OptionParser.new do |opt|
136
118
  opt.banner = 'Usage: luca-jp kyuyo [--export] year'
137
119
  args = opt.parse(ARGV)
138
- LucaCmd.check_dir_jp('profiles') do
120
+ LucaCmd.check_dir('profiles', ext_conf: EXT_CONF) do
139
121
  LucaSalaryCmd::Export.payreport(args)
140
122
  end
141
123
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Luca
4
4
  module Jp
5
- VERSION = '0.16.1'
5
+ VERSION = '0.16.3'
6
6
  end
7
7
  end
@@ -49,7 +49,7 @@ def 給与支払報告明細行(slip, company, year)
49
49
  支払を受ける者の詳細(slip, year),
50
50
  company['tax_id'], # 法人番号
51
51
  支払を受ける者の扶養情報(slip['profile'], year),
52
- slip['911'], # 基礎控除の額
52
+ slip['911'] == 480_000 ? nil : slip['911'], # 基礎控除の額、48万の場合記載しない
53
53
  nil, # 所得金額調整控除額 TODO: 未実装 措法41の3の3
54
54
  nil, # ひとり親
55
55
  提出先判定(slip), # 必須:作成区分(国税のみ0, 地方のみ1, 両方2)
@@ -82,6 +82,7 @@ end
82
82
 
83
83
  def 支払(slip, year)
84
84
  配偶者控除等 = [slip['916'], slip['917']].compact.sum
85
+ 扶養対象 = 扶養親族分類(slip.dig('profile', 'family'), year)
85
86
  [
86
87
  '給料', # 種別
87
88
  slip['1'], # 支払金額
@@ -93,12 +94,12 @@ def 支払(slip, year)
93
94
  配偶者控除等 > 0 ? 1 : 2, # 控除対象配偶者の有無 TODO: 従たる給与
94
95
  老人控除対象配偶者(slip.dig('profile', 'spouse'), year),
95
96
  配偶者控除等, # 配偶者控除の額
96
- nil, # 控除対象扶養親族の数 特定 主
97
+ 扶養対象['特定'].length, # 控除対象扶養親族の数 特定 主
97
98
  nil, # 控除対象扶養親族の数 特定 従
98
- nil, # 控除対象扶養親族の数 老人 主
99
+ 扶養対象['老人'].length, # 控除対象扶養親族の数 老人 主
99
100
  nil, # 控除対象扶養親族の数 老人 上の内訳
100
101
  nil, # 控除対象扶養親族の数 老人 従
101
- nil, # 控除対象扶養親族の数 その他 主
102
+ 扶養対象['その他'].length, # 控除対象扶養親族の数 その他 主
102
103
  nil, # 控除対象扶養親族の数 その他 従
103
104
  nil, # 障害者の数 特別障害者
104
105
  nil, # 障害者の数 上の内訳 NOTE: 同居・同一生計
@@ -122,7 +123,7 @@ def 支払を受ける者の詳細(slip, year)
122
123
  nil, # 地震保険料の控除額
123
124
  nil, # 住宅借入金等特別控除等の額
124
125
  nil, # 旧個人年金保険料の額
125
- slip.dig('spouse', 'income'), # 配偶者の合計所得
126
+ slip.dig('profile', 'spouse', 'income', year), # 配偶者の合計所得
126
127
  nil, # 旧長期損害保険料の額
127
128
  生年月日[0], # 必須:受給者の生年月日 元号
128
129
  生年月日[1], # 必須:受給者の生年月日 年
@@ -174,7 +175,7 @@ def 支払を受ける者の扶養情報(profile, year)
174
175
  nil, # 青色専従者
175
176
  nil, # 条約免除
176
177
  半角変換(profile['katakana']), # 必須:支払を受ける者のフリガナ(半角)
177
- nil, # 需給者番号
178
+ nil, # 受給者番号
178
179
  profile.dig('resident', 'area_code'), # 必須:提出先市町村コード
179
180
  profile.dig('resident', 'tax_id'), # 指定番号
180
181
  ]
@@ -203,17 +204,27 @@ end
203
204
  def 扶養親族分類(family, year)
204
205
  return {} if family.nil?
205
206
 
206
- { '16才以上' => [], '16才未満' => [] }.tap do |result|
207
+ this_year = Date.new(year, 12, -1)
208
+ { '16才以上' => [], '16才未満' => [], '老人' => [], '特定' => [], 'その他' => [] }.tap do |result|
207
209
  family.each do |p|
208
210
  if !p['birth_date']
209
211
  result['16才以上'] << p
212
+ result['その他'] << p
210
213
  else
211
214
  date = p['birth_date']
212
215
  date = Date.parse(date) if date.is_a?(String)
213
- if date.next_year(16) < Date.new(year, 12, -1)
216
+ if date.next_year(16) <= this_year
214
217
  result['16才以上'] << p
218
+ if date.next_year(70) <= this_year
219
+ result['老人'] << p
220
+ elsif date.next_year(19) <= this_year and date.next_year(23) > this_year
221
+ result['特定'] << p
222
+ else
223
+ result['その他'] << p
224
+ end
215
225
  else
216
226
  result['16才未満'] << p
227
+ result['その他'] << p
217
228
  end
218
229
  end
219
230
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: luca-jp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.1
4
+ version: 0.16.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chuma Takahiro
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-10 00:00:00.000000000 Z
11
+ date: 2024-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lucabook
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 0.7.0
47
+ version: 0.7.3
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 0.7.0
54
+ version: 0.7.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: jp-national-tax
57
57
  requirement: !ruby/object:Gem::Requirement