luca-jp 0.16.2 → 0.17.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
  SHA256:
3
- metadata.gz: 4a2439c73cf61040d39604aba50f3765abd94a42ca9a6a3f531864993856e2c6
4
- data.tar.gz: 6ecf8ad72b8fe7c6ac1a68c04360f0a5dc4f7c5ec754291c728d4a172319c6fe
3
+ metadata.gz: 1eb3cc018828ad1a0e466b86bac2280a7db7661118c6a47748bfa2feae045824
4
+ data.tar.gz: '080aef29106f45e7a0188f646f8098d047decd6bc4adc70453d36ec2ae147f22'
5
5
  SHA512:
6
- metadata.gz: d9983fbb9704f1867813024e0da0653d2079443190673c62964074d4c81cac6d92a5a8a6a86c1c8b4988b6f1e0db7d974ba9ed504ff0c35176961dd8e755c63f
7
- data.tar.gz: 7e0303ee440175e577d7ef1c563f06278edf4f48e42a4e9c4a930c92cd353f9e7a511dcea715491c37e6f31af72b46dc687b3f31ff08949bc7cca9c12e9bd64b
6
+ metadata.gz: 0ba0df576a6bb63923a33a0dc124a3a3539a1bda7346fa428228304fc371cc0218f3e855d18dbbc935d7a7352ace49f7ef012c46fe04f9abcca0b26b3af59217
7
+ data.tar.gz: e10900edeed0d1596fcd7f02225d4e49fef3f9656ece12604d631bf5c788fd14e011cf41c5cf0ff043fee02f3171156c109d86a2e6bc70e819f0d7fdec92e42e
data/exe/luca-jp CHANGED
@@ -6,6 +6,9 @@ require 'luca/jp'
6
6
  require 'luca_salary/jp_payreport'
7
7
  require 'luca_cmd'
8
8
  require 'luca_support/const'
9
+ require 'yaml'
10
+
11
+ EXT_CONF = 'config-lucajp.yml'
9
12
 
10
13
  class LucaCmd
11
14
  def self.syouhizei(args, params)
@@ -17,17 +20,19 @@ class LucaCmd
17
20
  end
18
21
 
19
22
  def self.houjinzei(args, params)
23
+ ext_config = params[:extra] ? YAML.load_file(params[:extra]) : nil
20
24
  if params[:export]
21
- Luca::Jp::Aoiro.range(*auto_range(args, params)).export_json
25
+ puts Luca::Jp::Aoiro.range(*auto_range(args, params)).export_json(ext_config: ext_config)
22
26
  else
23
- puts Luca::Jp::Aoiro.range(*auto_range(args, params)).kani
27
+ puts Luca::Jp::Aoiro.range(*auto_range(args, params)).kani(ext_config: ext_config)
24
28
  end
25
29
  end
26
30
 
27
31
  def self.chihouzei(args, params)
32
+ ext_config = params[:extra] ? YAML.load_file(params[:extra]) : nil
28
33
  if params[:export]
29
34
  accounts = Luca::Jp::Util.eltax_config('reports').map do |report|
30
- Luca::Jp::Chihouzei.range(*auto_range(args, params)).export_json(report)
35
+ Luca::Jp::Chihouzei.range(*auto_range(args, params)).export_json(report, ext_config: ext_config)
31
36
  end
32
37
  puts JSON.dump(accounts)
33
38
  else
@@ -56,26 +61,6 @@ class LucaCmd
56
61
  [r[0].year, r[0].month, r[1].year, r[1].month]
57
62
  end
58
63
  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
64
  end
80
65
 
81
66
  module LucaSalaryCmd
@@ -94,10 +79,11 @@ case cmd
94
79
  when 'h', /hou?jinzei/
95
80
  OptionParser.new do |opt|
96
81
  opt.banner = 'Usage: luca-jp h|houjinzei [options] [yyyy mm yyyy mm]'
82
+ opt.on('-x VAL', 'extra config') { |v| params[:extra] = v }
97
83
  opt.on('--export', 'export json') { |_v| params[:export] = true }
98
84
  opt.on('--lastyear', 'report on last Financial year') { |_v| params[:lastyear] = true }
99
85
  args = opt.parse!(ARGV)
100
- LucaCmd.check_dir_jp('journals') do
86
+ LucaCmd.check_dir('journals', ext_conf: EXT_CONF) do
101
87
  LucaCmd.houjinzei(args, params)
102
88
  end
103
89
  end
@@ -107,17 +93,18 @@ when 's', /s[yh]ou?hizei/
107
93
  opt.on('--export', 'export json') { |_v| params[:export] = true }
108
94
  opt.on('--lastyear', 'report on last Financial year') { |_v| params[:lastyear] = true }
109
95
  args = opt.parse!(ARGV)
110
- LucaCmd.check_dir_jp('journals') do
96
+ LucaCmd.check_dir('journals', ext_conf: EXT_CONF) do
111
97
  LucaCmd.syouhizei(args, params)
112
98
  end
113
99
  end
114
100
  when 'c', /chihou?zei/
115
101
  OptionParser.new do |opt|
116
102
  opt.banner = 'Usage: luca-jp c|chihouzei [options] [yyyy mm yyyy mm]'
103
+ opt.on('-x VAL', 'extra config') { |v| params[:extra] = v }
117
104
  opt.on('--export', 'export json') { |_v| params[:export] = true }
118
105
  opt.on('--lastyear', 'report on last Financial year') { |_v| params[:lastyear] = true }
119
106
  args = opt.parse!(ARGV)
120
- LucaCmd.check_dir_jp('journals') do
107
+ LucaCmd.check_dir('journals', ext_conf: EXT_CONF) do
121
108
  LucaCmd.chihouzei(args, params)
122
109
  end
123
110
  end
@@ -127,7 +114,7 @@ when /urikake/
127
114
  opt.on('--total VAL', '売掛金総額') { |v| params[:total] = v&.to_i }
128
115
  opt.on('--utf8', 'UTF-8でファイル生成') { |_v| params[:encode] = 'UTF-8' }
129
116
  args = opt.parse!(ARGV)
130
- LucaCmd.check_dir_jp('invoices') do
117
+ LucaCmd.check_dir('invoices', ext_conf: EXT_CONF) do
131
118
  LucaCmd.urikake(args, params)
132
119
  end
133
120
  end
@@ -135,7 +122,7 @@ when 'k', 'kyuyo', 'salary'
135
122
  OptionParser.new do |opt|
136
123
  opt.banner = 'Usage: luca-jp kyuyo [--export] year'
137
124
  args = opt.parse(ARGV)
138
- LucaCmd.check_dir_jp('profiles') do
125
+ LucaCmd.check_dir('profiles', ext_conf: EXT_CONF) do
139
126
  LucaSalaryCmd::Export.payreport(args)
140
127
  end
141
128
  end
data/lib/luca/jp/aoiro.rb CHANGED
@@ -20,7 +20,7 @@ module Luca
20
20
  @dirname = 'journals'
21
21
  @record_type = 'raw'
22
22
 
23
- def kani(export: false)
23
+ def kani(ext_config: nil, export: false)
24
24
  set_pl(4)
25
25
  set_bs(4)
26
26
  @issue_date = Date.today
@@ -28,12 +28,14 @@ module Luca
28
28
  @software = 'LucaJp'
29
29
  @shinkoku_kbn = '30' # 確定申告
30
30
 
31
+ 別表四所得調整(ext_config)
31
32
  @税額 = 税額計算
32
33
  @確定法人税額 = @税額.dig(:houjin, :kokuzei)
33
34
  @法人税額 = 中小企業の軽減税額 + 一般区分の税額
34
35
  @地方法人税課税標準 = (@法人税額 / 1000).floor * 1000
35
36
  @地方法人税額 = 地方法人税額(@地方法人税課税標準)
36
37
  @確定地方法人税額 = @税額.dig(:houjin, :chihou)
38
+
37
39
  @法人税中間納付 = prepaid_tax('1851')
38
40
  @地方法人税中間納付 = prepaid_tax('1852')
39
41
 
@@ -63,8 +65,6 @@ module Luca
63
65
  @都道府県民税期中増, @都道府県民税期中減 = 未納都道府県民税期中増減
64
66
  @市民税期中増, @市民税期中減 = 未納市民税期中増減
65
67
  @事業税期中増, @事業税期中減 = 未納事業税期中増減
66
- @事業税中間納付 = ['1854', '1855', '1856', '1857', '1858']
67
- .map{ |k| prepaid_tax(k) }.compact.sum
68
68
  @翌期還付法人税 = 中間還付税額(@確定法人税額 + @確定地方法人税額, @法人税中間納付 + @地方法人税中間納付)
69
69
  @概況売上 = gaikyo('A0')
70
70
  @form_sec = [
@@ -85,35 +85,35 @@ module Luca
85
85
  end
86
86
  end
87
87
 
88
- def export_json
89
- dat = kani(export: true)
90
- [].tap do |res|
91
- item = {}
92
- item['date'] = @end_date
93
- item['debit'] = []
94
- item['credit'] = []
95
- if dat[:kokuzei][:chukan] > 0
96
- item['credit'] << { 'label' => '仮払法人税', 'amount' => dat[:kokuzei][:chukan] }
97
- end
98
- if dat[:kokuzei][:chukan] > dat[:kokuzei][:zeigaku]
99
- item['debit'] << { 'label' => '未収法人税', 'amount' => dat[:kokuzei][:chukan] - dat[:kokuzei][:zeigaku] }
100
- else
101
- item['credit'] << { 'label' => '未払法人税', 'amount' => dat[:kokuzei][:zeigaku] - dat[:kokuzei][:chukan] }
102
- end
103
- item['debit'] << { 'label' => '法人税、住民税及び事業税', 'amount' => dat[:kokuzei][:zeigaku] } if dat[:kokuzei][:zeigaku] > 0
104
- if dat[:chihou][:chukan] > 0
105
- item['credit'] << { 'label' => '仮払法人税(地方)', 'amount' => dat[:chihou][:chukan] }
106
- end
107
- if dat[:chihou][:chukan] > dat[:chihou][:zeigaku]
108
- item['debit'] << { 'label' => '未収法人税', 'amount' => dat[:chihou][:chukan] - dat[:chihou][:zeigaku] }
109
- else
110
- item['credit'] << { 'label' => '未払法人税', 'amount' => dat[:chihou][:zeigaku] - dat[:chihou][:chukan] }
111
- end
112
- item['debit'] << { 'label' => '法人税、住民税及び事業税', 'amount' => dat[:chihou][:zeigaku] } if dat[:chihou][:zeigaku] > 0
113
- item['x-editor'] = 'LucaJp'
114
- res << item
115
- puts JSON.dump(res)
88
+ def export_json(ext_config: nil, raw: false)
89
+ dat = kani(export: true, ext_config: ext_config)
90
+ res = []
91
+ item = {}
92
+ item['date'] = @end_date
93
+ item['debit'] = []
94
+ item['credit'] = []
95
+ if dat[:kokuzei][:chukan] > 0
96
+ item['credit'] << { 'label' => '仮払法人税', 'amount' => dat[:kokuzei][:chukan] }
97
+ end
98
+ if dat[:kokuzei][:chukan] > dat[:kokuzei][:zeigaku]
99
+ item['debit'] << { 'label' => '未収法人税', 'amount' => dat[:kokuzei][:chukan] - dat[:kokuzei][:zeigaku] }
100
+ else
101
+ item['credit'] << { 'label' => '未払法人税', 'amount' => dat[:kokuzei][:zeigaku] - dat[:kokuzei][:chukan] }
102
+ end
103
+ item['debit'] << { 'label' => '法人税、住民税及び事業税', 'amount' => dat[:kokuzei][:zeigaku] }
104
+ if dat[:chihou][:chukan] > 0
105
+ item['credit'] << { 'label' => '仮払法人税(地方)', 'amount' => dat[:chihou][:chukan] }
116
106
  end
107
+ if dat[:chihou][:chukan] > dat[:chihou][:zeigaku]
108
+ item['debit'] << { 'label' => '未収法人税', 'amount' => dat[:chihou][:chukan] - dat[:chihou][:zeigaku] }
109
+ else
110
+ item['credit'] << { 'label' => '未払法人税', 'amount' => dat[:chihou][:zeigaku] - dat[:chihou][:chukan] }
111
+ end
112
+ item['debit'] << { 'label' => '法人税、住民税及び事業税', 'amount' => dat[:chihou][:zeigaku] } if dat[:chihou][:zeigaku] > 0
113
+ item['x-editor'] = 'LucaJp'
114
+ res << item
115
+
116
+ raw ? res : JSON.dump(res)
117
117
  end
118
118
 
119
119
  def 別表一
@@ -130,28 +130,74 @@ module Luca
130
130
  render_erb(search_template('beppyo2.xml.erb'))
131
131
  end
132
132
 
133
+ # NOTE: 別表四所得調整に依存
133
134
  def 別表四簡易
134
135
  @当期純損益 = readable(@pl_data.dig('HA'))
135
- @法人税等 = readable(@pl_data.dig('H0'))
136
- _, @納付事業税 = 未納事業税期中増減
137
- @当期還付事業税 = 還付事業税
138
- @翌期還付事業税 = 中間還付税額(確定事業税, @事業税中間納付)
139
- @別表四調整所得 = @当期純損益 + @法人税等 - @納付事業税 - @翌期還付事業税 + @当期還付事業税
140
136
 
141
- @当期還付法人税 = refund_tax('1502')
142
- @当期還付都道府県住民税 = refund_tax('1503')
143
- @翌期還付都道府県住民税 = readable(@bs_data['1503']) || 0
144
- @当期還付市民税 = refund_tax('1505')
145
- @翌期還付市民税 = readable(@bs_data['1505']) || 0
146
- @事業税期首残高 = 期首未納事業税 > 0 ? 期首未納事業税 : (@当期還付事業税 * -1)
147
- @仮払税金 = [@翌期還付法人税, @翌期還付都道府県住民税, @翌期還付事業税, @翌期還付市民税]
148
- .compact.sum
137
+ ### 損金不算入額の計算
138
+
139
+ @損金経理をした法人税及び地方法人税 = 法人税損金納付額
140
+ @損金経理をした道府県民税及び市町村民税 = [
141
+ 都道府県民税損金納付,
142
+ 市民税損金納付,
143
+ ].compact.sum
144
+ @損金経理をした納税充当金 = 当期納税充当金
145
+ @損金不算入額 = [
146
+ @損金不算入額税額未確定,
147
+ @損金経理をした法人税及び地方法人税,
148
+ @損金経理をした道府県民税及び市町村民税,
149
+ @損金経理をした納税充当金,
150
+ ].compact.sum
151
+ @損金不算入額留保 = [
152
+ @減価償却の償却超過額,
153
+ @当期還付事業税,
154
+ @損金経理をした法人税及び地方法人税,
155
+ @損金経理をした道府県民税及び市町村民税,
156
+ @損金経理をした納税充当金,
157
+ ].compact.sum
158
+ @損金不算入額社外流出 = [
159
+ @役員給与の損金不算入額,
160
+ @交際費等の損金不算入額,
161
+ # TODO: 附帯税
162
+ ].compact.sum
163
+
164
+ ### 益金不算入額の計算
165
+ STDERR.puts "別表八「受取配当等の益金算入に関する明細書」の追加作成が必要" if @受取配当金の益金不算入額
166
+
167
+ @翌期還付事業税 = ['1504', '1854', '1855', '1856', '1857', '1858']
168
+ .map{ |code| readable(@bs_data[code]) }
169
+ .compact.sum
170
+ @益金不算入額 = [
171
+ @益金不算入額税額未確定,
172
+ # NOTE: 確定税額は会計上も費用認識しているため相殺
173
+ (@事業税中間納付 * -1),
174
+ @翌期還付事業税
175
+ ].compact.sum
176
+ @益金不算入額留保 = [
177
+ @納付事業税,
178
+ @減価償却超過額の当期認容額,
179
+ @翌期還付事業税
180
+ ].compact.sum
181
+ @益金不算入額社外流出 = [
182
+ # TODO: 欠損金繰戻還付、欠損金当期控除
183
+ @受取配当金の益金不算入額,
184
+ @受贈益の益金不算入額,
185
+ ].compact.sum
186
+ @別表四調整所得留保 = @当期純損益 + @損金不算入額留保 - @益金不算入額留保
187
+ @別表四調整所得社外流出 = @当期純損益 + @損金不算入額社外流出 - @益金不算入額社外流出
188
+ # TODO: 寄付金、所得税額控除、外国法人税の損金不算入調整
149
189
 
150
190
  render_erb(search_template('beppyo4.xml.erb'))
151
191
  end
152
192
 
153
193
  def 別表五一
154
- @期首資本金 = readable(@start_balance.dig('911'))
194
+ @当期還付法人税 = refund_tax('1502')
195
+ @当期還付都道府県住民税 = refund_tax('1503')
196
+ @当期還付市民税 = refund_tax('1505')
197
+ @翌期還付都道府県住民税 = readable(@bs_data['1503']) || 0
198
+ @翌期還付市民税 = readable(@bs_data['1505']) || 0
199
+
200
+ @期首資本金 = readable(@start_balance.dig('911')) || 0
155
201
  @資本金期中減, @資本金期中増 = 純資産期中増減('911')
156
202
  @期首資本準備金, @期末資本準備金 = 期首期末残高('9131')
157
203
  @資本準備金期中減, @資本準備金期中増 = 純資産期中増減('9131')
@@ -169,6 +215,7 @@ module Luca
169
215
  @当期還付消費税 = refund_tax('1501')
170
216
  @消費税期首残高 = 期首未納消費税 > 0 ? 期首未納消費税 : (@当期還付消費税 * -1)
171
217
  @翌期還付消費税 = 中間還付税額(@消費税期中増, @消費税中間納付額)
218
+ @事業税期首残高 = 期首未納事業税 > 0 ? 期首未納事業税 : (@当期還付事業税 * -1)
172
219
  @その他事業税 = 租税公課 - @消費税期中増
173
220
  render_erb(search_template('beppyo52.xml.erb'))
174
221
  end
@@ -374,21 +421,18 @@ module Luca
374
421
  "<ARC00220><ARC00230>仮払事業税消却(未収計上した還付事業税)</ARC00230>#{render_attr('ARC00240', @当期還付事業税)}#{render_attr('ARC00250', @当期還付事業税)}</ARC00220>\n"
375
422
  end
376
423
 
377
- def 別表五一仮払税金
378
- 未収仮払税金 = ['1502', '1503', '1504', '1505']
379
- .map { |k| @start_balance[k] }.compact.sum
380
- 還付税金 = [@当期還付法人税, @当期還付都道府県住民税, @当期還付事業税, @当期還付市民税].compact.sum
381
- return '' if 未収仮払税金 == 0 && 還付税金 == 0 && @仮払税金 == 0
424
+ def 別表五一仮払事業税
425
+ return '' if @当期還付事業税 == 0 && @翌期還付事業税 == 0
382
426
 
383
427
  %Q(<ICB00140>
384
- #{render_attr('ICB00150', '仮払税金')}
385
- #{render_attr('ICB00160', readable(未収仮払税金) * -1)}
386
- <ICB00170>
387
- #{render_attr('ICB00190', readable(還付税金) * -1)}
388
- #{render_attr('ICB00200', @仮払税金 * -1)}
389
- </ICB00170>
390
- #{render_attr('ICB00210', @仮払税金 * -1)}
391
- </ICB00140>)
428
+ #{render_attr('ICB00150', '仮払事業税')}
429
+ #{render_attr('ICB00160', @当期還付事業税 * -1)}
430
+ <ICB00170>
431
+ #{render_attr('ICB00190', @当期還付事業税 * -1)}
432
+ #{render_attr('ICB00200', @翌期還付事業税 * -1)}
433
+ </ICB00170>
434
+ #{render_attr('ICB00210', @翌期還付事業税 * -1)}
435
+ </ICB00140>)
392
436
  end
393
437
 
394
438
  def 別表五一還付法人税
@@ -448,7 +492,12 @@ module Luca
448
492
  end
449
493
 
450
494
  def 当期納税充当金
451
- readable(@pl_data.dig('H0')) - [法人税損金納付額, 都道府県民税損金納付, 市民税損金納付, 事業税損金納付].compact.sum
495
+ r = credit_amount('515', @start_date.year, @start_date.month, @end_date.year, @end_date.month)
496
+ readable(r)
497
+ end
498
+
499
+ def 期末納税充当金
500
+ readable(@bs_data.dig('515')) || 0
452
501
  end
453
502
 
454
503
  def 期首未納法人税
@@ -465,6 +514,7 @@ module Luca
465
514
  end
466
515
 
467
516
  # 中間納付した金額のうち税額とならず、還付されるべき額
517
+ # 決算後において、未収法人税・仮払法人税・仮払法人税(地方)の合計金額の想定
468
518
  #
469
519
  def 法人税仮払納付額
470
520
  [(@法人税中間納付 + @地方法人税中間納付 - @確定法人税額 - @確定地方法人税額), 0].max
@@ -489,8 +539,15 @@ module Luca
489
539
  [確定都道府県住民税, readable(r)]
490
540
  end
491
541
 
542
+ # 決算後において、仮払地方税法人税割・仮払地方税均等割の金額は
543
+ # 本来都道府県と市区町村に区分すべきだが、全額市民税とみなしている
544
+ #
492
545
  def 都道府県民税仮払納付
493
- readable(@bs_data['1503']) || 0
546
+ [
547
+ readable(@bs_data['1503']),
548
+ readable(@bs_data['1859']),
549
+ readable(@bs_data['185A']),
550
+ ].compact.sum
494
551
  end
495
552
 
496
553
  # 期末納付済金額のうち税額として確定したもの
@@ -499,6 +556,10 @@ module Luca
499
556
  @都道府県民税均等割中間納付 + @都道府県民税法人税割中間納付 - 都道府県民税仮払納付
500
557
  end
501
558
 
559
+ def 期末未納都道府県民税
560
+ readable(@bs_data.dig('5153')) || 0
561
+ end
562
+
502
563
  def 確定市民税
503
564
  readable(@pl_data['H113']) || 0
504
565
  end
@@ -517,7 +578,11 @@ module Luca
517
578
  end
518
579
 
519
580
  def 市民税仮払納付
520
- readable(@bs_data['1505']) || 0
581
+ [
582
+ readable(@bs_data['1505']),
583
+ readable(@bs_data['185D']),
584
+ readable(@bs_data['185E']),
585
+ ].compact.sum
521
586
  end
522
587
 
523
588
  # 期末納付済金額のうち税額として確定したもの
@@ -534,8 +599,18 @@ module Luca
534
599
  [@事業税中間納付, 確定事業税].min
535
600
  end
536
601
 
602
+ def 期末未納事業税
603
+ readable(@bs_data['5152']) || 0
604
+ end
605
+
537
606
  def 別表五一期首差引金額
538
- [期首繰越損益, 期首納税充当金].compact.sum - [
607
+ [
608
+ @当期還付法人税,
609
+ @当期還付都道府県住民税,
610
+ @当期還付市民税,
611
+ 期首繰越損益,
612
+ 期首納税充当金
613
+ ].compact.sum - [
539
614
  期首未納法人税,
540
615
  期首未納都道府県民税,
541
616
  期首未納市民税,
@@ -544,16 +619,28 @@ module Luca
544
619
  end
545
620
 
546
621
  def 別表五一期末差引金額
547
- [期末繰越損益, 当期納税充当金].compact.sum - [
622
+ [
623
+ @翌期還付法人税,
624
+ @翌期還付都道府県住民税,
625
+ @翌期還付市民税,
626
+ 期末繰越損益,
627
+ 期末納税充当金
628
+ ].compact.sum - [
548
629
  期末未納法人税,
549
- 確定都道府県住民税,
550
- 確定市民税,
630
+ 期末未納都道府県民税,
631
+ 期末未納市民税,
551
632
  @翌期還付事業税
552
633
  ].compact.sum
553
634
  end
554
635
 
555
636
  def 別表五一期中減差引金額
556
- [期首繰越損益, 納税充当金期中減].compact.sum - [
637
+ [
638
+ @当期還付法人税,
639
+ @当期還付都道府県住民税,
640
+ @当期還付市民税,
641
+ 期首繰越損益,
642
+ 納税充当金期中減
643
+ ].compact.sum - [
557
644
  @法人税期中減,
558
645
  @都道府県民税期中減,
559
646
  @市民税期中減,
@@ -566,11 +653,20 @@ module Luca
566
653
  end
567
654
 
568
655
  def 別表五一期中増差引金額
569
- [期末繰越損益, 納付税額(確定事業税, @事業税中間納付)].compact.sum - [
656
+ [
657
+ @翌期還付法人税,
658
+ @翌期還付都道府県住民税,
659
+ @翌期還付市民税,
660
+ 期末繰越損益,
661
+ 期末納税充当金
662
+ ].compact.sum - [
570
663
  @法人税中間納付,
571
664
  @地方法人税中間納付,
665
+ 期末未納法人税,
572
666
  @都道府県民税中間納付,
667
+ 期末未納都道府県民税,
573
668
  @市民税中間納付,
669
+ 期末未納市民税,
574
670
  @翌期還付事業税
575
671
  ].compact.sum
576
672
  end
@@ -701,12 +797,14 @@ module Luca
701
797
  end
702
798
 
703
799
  def proc_version
704
- if @end_date >= Date.parse('2022-4-1')
705
- { 'proc' => '22.0.3', 'HOA112' => '4.0', 'HOA116' => '3.0', 'HOA420' => '21.0', 'HOA511' => '14.0', 'HOA522' => '8.0', 'HOB710' => '12.0', 'HOE200' => '14.0', 'HOE990' => '6.1', 'HOK010' => '6.0' }
800
+ if @end_date >= Date.parse('2023-4-1')
801
+ { 'proc' => '23.0.2', 'HOA112' => '5.0', 'HOA116' => '4.0', 'HOA201' => '5.0', 'HOA420' => '22.0', 'HOA511' => '14.0', 'HOA522' => '9.0', 'HOB710' => '13.0', 'HOE200' => '14.0', 'HOE990' => '7.0', 'HOK010' => '6.0' }
802
+ elsif @end_date >= Date.parse('2022-4-1')
803
+ { 'proc' => '22.0.3', 'HOA112' => '4.0', 'HOA116' => '3.0', 'HOA201' => '4.0', 'HOA420' => '21.0', 'HOA511' => '14.0', 'HOA522' => '8.0', 'HOB710' => '12.0', 'HOE200' => '14.0', 'HOE990' => '6.1', 'HOK010' => '6.0' }
706
804
  elsif @end_date >= Date.parse('2021-4-1')
707
- { 'proc' => '21.0.2', 'HOA112' => '3.1', 'HOA116' => '2.0', 'HOA420' => '20.0', 'HOA511' => '13.0', 'HOA522' => '7.0', 'HOB710' => '11.0', 'HOE200' => '13.0', 'HOE990' => '5.0', 'HOK010' => '6.0' }
805
+ { 'proc' => '21.0.2', 'HOA112' => '3.1', 'HOA116' => '2.0', 'HOA201' => '4.0', 'HOA420' => '20.0', 'HOA511' => '13.0', 'HOA522' => '7.0', 'HOB710' => '11.0', 'HOE200' => '13.0', 'HOE990' => '5.0', 'HOK010' => '6.0' }
708
806
  else
709
- { 'proc' => '20.0.2', 'HOA112' => '2.0', 'HOA116' => '1.0', 'HOA420' => '19.0', 'HOA511' => '13.0', 'HOA522' => '6.0', 'HOB710' => '11.0', 'HOE200' => '13.0', 'HOE990' => '5.0', 'HOK010' => '5.0' }
807
+ { 'proc' => '20.0.2', 'HOA112' => '2.0', 'HOA116' => '1.0', 'HOA201' => '4.0', 'HOA420' => '19.0', 'HOA511' => '13.0', 'HOA522' => '6.0', 'HOB710' => '11.0', 'HOE200' => '13.0', 'HOE990' => '5.0', 'HOK010' => '5.0' }
710
808
  end
711
809
  end
712
810
 
@@ -17,7 +17,7 @@ module Luca
17
17
  @dirname = 'journals'
18
18
  @record_type = 'raw'
19
19
 
20
- def kani(report_cfg, export: false)
20
+ def kani(report_cfg, export: false, ext_config: nil)
21
21
  set_pl(4)
22
22
  set_bs(4)
23
23
  @issue_date = Date.today
@@ -32,28 +32,25 @@ module Luca
32
32
  @shotoku401 = report_cfg['shotoku401']
33
33
  @shotoku801 = report_cfg['shotoku801']
34
34
 
35
+ 別表四所得調整(ext_config)
35
36
  @税額 = 税額計算
36
37
  jichitai = @report_category == 'city' ? :shimin : :kenmin
37
38
  @均等割 = report_cfg['kintouwari'] || @税額.dig(jichitai, :kintou)
38
39
  @確定法人税割 = @税額.dig(jichitai, :houjinzei)
39
40
  @地方特別法人事業税中間納付 = prepaid_tax('1854', @jimusho_name)
40
41
  @所得割中間納付 = prepaid_tax('1855', @jimusho_name)
41
- @法人税割中間納付 = prepaid_tax('1859', @jimusho_name)
42
- @均等割中間納付 = prepaid_tax('185A', @jimusho_name)
42
+ @法人税割中間納付 = prepaid_tax(
43
+ @report_category == 'city' ? '185D' :'1859',
44
+ @jimusho_name
45
+ )
46
+ @均等割中間納付 = prepaid_tax(
47
+ @report_category == 'city' ? '185E' : '185A',
48
+ @jimusho_name
49
+ )
43
50
  @所得割 = @税額.dig(:kenmin, :shotoku)
44
51
  if export
45
52
  {
46
53
  customer: @jimusho_name,
47
- jigyouzei: {
48
- shotoku: {
49
- zeigaku: @所得割,
50
- chukan: @所得割中間納付
51
- },
52
- tokubetsu: {
53
- zeigaku: @税額.dig(:kenmin, :tokubetsu),
54
- chukan: @地方特別法人事業税中間納付
55
- },
56
- },
57
54
  juminzei: {
58
55
  kinto: {
59
56
  zeigaku: @均等割,
@@ -64,7 +61,20 @@ module Luca
64
61
  chukan: @法人税割中間納付
65
62
  }
66
63
  }
67
- }
64
+ }.tap do |record|
65
+ if @report_category != 'city'
66
+ record[:jigyouzei] = {
67
+ shotoku: {
68
+ zeigaku: @所得割,
69
+ chukan: @所得割中間納付
70
+ },
71
+ tokubetsu: {
72
+ zeigaku: @税額.dig(:kenmin, :tokubetsu),
73
+ chukan: @地方特別法人事業税中間納付
74
+ },
75
+ }
76
+ end
77
+ end
68
78
  else
69
79
  @company = CGI.escapeHTML(config.dig('company', 'name'))
70
80
  @form_vers = proc_version
@@ -99,8 +109,8 @@ module Luca
99
109
  end
100
110
  end
101
111
 
102
- def export_json(report_cfg)
103
- records = kani(report_cfg, export: true)
112
+ def export_json(report_cfg, ext_config: nil)
113
+ records = kani(report_cfg, export: true, ext_config: ext_config)
104
114
  label = @report_category == 'city' ? '市町村住民税' : '都道府県住民税'
105
115
  {}.tap do |item|
106
116
  item['date'] = @end_date
@@ -109,7 +119,7 @@ module Luca
109
119
  unless @report_category == 'city'
110
120
  records[:jigyouzei].each do |k, dat|
111
121
  if dat[:chukan] > 0
112
- item['credit'] << { 'label' => karibarai_label(k), 'amount' => dat[:chukan] }
122
+ item['credit'] << { 'label' => karibarai_label(k, @report_category), 'amount' => dat[:chukan] }
113
123
  end
114
124
  if dat[:chukan] > dat[:zeigaku]
115
125
  item['debit'] << { 'label' => '未収地方事業税', 'amount' => dat[:chukan] - dat[:zeigaku] }
@@ -121,7 +131,7 @@ module Luca
121
131
  end
122
132
  records[:juminzei].each do |k, dat|
123
133
  if dat[:chukan] > 0
124
- item['credit'] << { 'label' => karibarai_label(k), 'amount' => dat[:chukan] }
134
+ item['credit'] << { 'label' => karibarai_label(k, @report_category), 'amount' => dat[:chukan] }
125
135
  end
126
136
  if dat[:chukan] > dat[:zeigaku]
127
137
  item['debit'] << { 'label' => "未収#{label}", 'amount' => dat[:chukan] - dat[:zeigaku] }
@@ -229,22 +239,31 @@ module Luca
229
239
  "<FORM_ATTR><FORM_ID>#{code}</FORM_ID><FORM_NAME>#{name}</FORM_NAME><FORM_FILE_NAME></FORM_FILE_NAME><FORM_XSL_NAME></FORM_XSL_NAME></FORM_ATTR>"
230
240
  end
231
241
 
232
- def karibarai_label(key)
233
- case key
234
- when :tokubetsu
235
- '仮払地方税特別法人事業税'
236
- when :shotoku
237
- '仮払地方税所得割'
238
- when :syunyu
239
- '仮払地方税収入割'
240
- when :shihon
241
- '仮払地方税資本割'
242
- when :fukakachi
243
- '仮払地方税付加価値割'
244
- when :houjinzei
245
- '仮払地方税法人税割'
246
- when :kinto
247
- '仮払地方税均等割'
242
+ def karibarai_label(key, category)
243
+ if category == 'city'
244
+ case key
245
+ when :houjinzei
246
+ '仮払市民税法人税割'
247
+ when :kinto
248
+ '仮払市民税均等割'
249
+ end
250
+ else
251
+ case key
252
+ when :tokubetsu
253
+ '仮払地方税特別法人事業税'
254
+ when :shotoku
255
+ '仮払地方税所得割'
256
+ when :syunyu
257
+ '仮払地方税収入割'
258
+ when :shihon
259
+ '仮払地方税資本割'
260
+ when :fukakachi
261
+ '仮払地方税付加価値割'
262
+ when :houjinzei
263
+ '仮払地方税法人税割'
264
+ when :kinto
265
+ '仮払地方税均等割'
266
+ end
248
267
  end
249
268
  end
250
269