luca-jp 0.19.1 → 0.20.1

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: 99f4c763f4419b099695dde406de31320b586826da34308b1d13df4fdf93310b
4
- data.tar.gz: 3f6e7b427033b063fba377ef6f9d5b633eb1f054132fbf3a37aa1d60d6fe9c6b
3
+ metadata.gz: 86f9348cd5fe742fe66e493c0381f53847681f534757b6b8e708a3e271a5929b
4
+ data.tar.gz: 30596a7a821462a685f32ea8ebbccf8db802c68ccad60c11d963417a47c67014
5
5
  SHA512:
6
- metadata.gz: 546ec171704b541956e0982ed550d30cf1ae5c48d2c778d2b17b65377f63075e74206c48c3657036fbf3a0ab325a34ea5d98c0bade6d04eacd5ad20a1f877a31
7
- data.tar.gz: dc682ce710480958ab7ba2dd88313ad955d448763ae5ab08e5afc9278035418dbcb9c6072f921dce39930062a41e4369153e4b3ed65ac533a606a96d1015eaf0
6
+ metadata.gz: '091a70016c17875a79e917a5c7d5e0001852ab6e64c00e0f1d372a6129f17de2deec91116cdcd73c5f22a6b59ae6eeb6ff9e55799788f0230f28cacf2b69c78e'
7
+ data.tar.gz: 41f7c60183071e68a1788f928bd3badf970eecb17da8e7dadba8b1556a6dac64b56e4517d49663579998e8dab637a5a23a23527bc5f45b07ca870e11731eb994
data/exe/luca-jp CHANGED
@@ -3,8 +3,8 @@
3
3
 
4
4
  require 'optparse'
5
5
  require 'luca/jp'
6
- require 'luca_salary/jp_payreport'
7
6
  require 'luca_cmd'
7
+ require 'luca_salary/jp_payreport'
8
8
  require 'luca_support/const'
9
9
  require 'yaml'
10
10
 
@@ -24,7 +24,7 @@ class LucaCmd
24
24
  if params[:export]
25
25
  puts Luca::Jp::Aoiro.range(*auto_range(args, params)).export_json(ext_config: ext_config)
26
26
  else
27
- puts Luca::Jp::Aoiro.range(*auto_range(args, params)).kani(ext_config: ext_config, no_xbrl: params[:noxbrl])
27
+ puts Luca::Jp::Aoiro.range(*auto_range(args, params)).kani(ext_config: ext_config, no_xbrl: params[:noxbrl], kessanbi: params[:kessanbi])
28
28
  end
29
29
  end
30
30
 
@@ -37,7 +37,9 @@ class LucaCmd
37
37
  puts JSON.dump(accounts)
38
38
  else
39
39
  Luca::Jp::Util.eltax_config('reports').each do |report|
40
- File.open("chihouzei-#{report['jichitai_code']}#{report['jimusho_code']}.xml", 'w') { |f| f.puts(Luca::Jp::Chihouzei.range(*auto_range(args, params)).kani(report, ext_config: ext_config))}
40
+ File.open("chihouzei-#{report['jichitai_code']}#{report['jimusho_code']}.xml", 'w') do |f|
41
+ f.puts(Luca::Jp::Chihouzei.range(*auto_range(args, params)).kani(report, ext_config: ext_config, kessanbi: params[:kessanbi]))
42
+ end
41
43
  end
42
44
  end
43
45
  end
@@ -56,9 +58,14 @@ class LucaCmd
56
58
  r = LucaBook::Util.current_fy(date, to: date)
57
59
  [r[0].year, r[0].month, r[1].year, r[1].month]
58
60
  when 0
59
- date = params[:lastyear] ? Date.today.prev_year : Date.today
60
- r = LucaBook::Util.current_fy(date)
61
- [r[0].year, r[0].month, r[1].year, r[1].month]
61
+ if params[:kessanbi]
62
+ r = LucaBook::Util.previous_fy(params[:kessanbi])
63
+ [r[0].year, r[0].month, r[1].year, r[1].month]
64
+ else
65
+ date = params[:lastyear] ? Date.today.prev_year : Date.today
66
+ r = LucaBook::Util.current_fy(date)
67
+ [r[0].year, r[0].month, r[1].year, r[1].month]
68
+ end
62
69
  end
63
70
  end
64
71
  end
@@ -81,6 +88,7 @@ when 'h', /hou?jinzei/
81
88
  opt.banner = 'Usage: luca-jp h|houjinzei [options] [yyyy mm yyyy mm]'
82
89
  opt.on('-x VAL', 'extra config') { |v| params[:extra] = v }
83
90
  opt.on('--export', 'export json') { |_v| params[:export] = true }
91
+ opt.on('--kessan VAL', 'settlement date') { |v| params[:kessanbi] = Date.parse(v) }
84
92
  opt.on('--lastyear', 'report on last Financial year') { |_v| params[:lastyear] = true }
85
93
  opt.on('--no-xbrl', 'skip XBRL statement') { |_v| params[:noxbrl] = true }
86
94
  args = opt.parse!(ARGV)
@@ -103,6 +111,7 @@ when 'c', /chihou?zei/
103
111
  opt.banner = 'Usage: luca-jp c|chihouzei [options] [yyyy mm yyyy mm]'
104
112
  opt.on('-x VAL', 'extra config') { |v| params[:extra] = v }
105
113
  opt.on('--export', 'export json') { |_v| params[:export] = true }
114
+ opt.on('--kessan VAL', 'settlement date') { |v| params[:kessanbi] = Date.parse(v) }
106
115
  opt.on('--lastyear', 'report on last Financial year') { |_v| params[:lastyear] = true }
107
116
  args = opt.parse!(ARGV)
108
117
  LucaCmd.check_dir('journals', ext_conf: EXT_CONF) do
@@ -112,7 +121,7 @@ when 'c', /chihou?zei/
112
121
  when /urikake/
113
122
  OptionParser.new do |opt|
114
123
  opt.banner = 'Usage: luca-jp urikake [options] yyyy mm'
115
- opt.on('--utf8', 'UTF-8でファイル生成') { |_v| params[:encode] = 'UTF-8' }
124
+ opt.on('--utf8', '確認用にUTF-8でファイル生成') { |_v| params[:encode] = 'UTF-8' }
116
125
  args = opt.parse!(ARGV)
117
126
  LucaCmd.check_dir('invoices', ext_conf: EXT_CONF) do
118
127
  LucaCmd.urikake(args, params)
data/lib/luca/jp/aoiro.rb CHANGED
@@ -20,10 +20,11 @@ module Luca
20
20
  @dirname = 'journals'
21
21
  @record_type = 'raw'
22
22
 
23
- def kani(ext_config: nil, export: false, no_xbrl: false)
23
+ def kani(ext_config: nil, export: false, no_xbrl: false, kessanbi: nil)
24
24
  set_pl(4)
25
25
  set_bs(4)
26
26
  @issue_date = Date.today
27
+ @kessanbi = kessanbi
27
28
  @company = CGI.escapeHTML(config.dig('company', 'name'))
28
29
  @software = 'LucaJp'
29
30
  @shinkoku_kbn = '30' # 確定申告
@@ -50,6 +51,7 @@ module Luca
50
51
  @法人税未払 = [@差引所得に対する法人税額 - @法人税中間納付, 0].max
51
52
 
52
53
  if export
54
+ @繰越損失管理.save unless @繰越損失管理.nil?
53
55
  {
54
56
  kokuzei: {
55
57
  zeigaku: @確定法人税額,
@@ -161,7 +163,7 @@ module Luca
161
163
  end
162
164
 
163
165
  def 別表一
164
- STDERR.puts "別表一: 「決算確定の日」などの追記が必要"
166
+ STDERR.puts "別表一: 「決算確定の日」などの追記、または --kessan オプション指定が必要" if @kessanbi.nil?
165
167
  render_erb(search_template('beppyo1.xml.erb'))
166
168
  end
167
169
 
@@ -331,19 +333,16 @@ module Luca
331
333
  end
332
334
 
333
335
  def 適用額明細フォーム
334
- return nil if @確定法人税額 == 0
336
+ return nil if 中小企業の軽減税率対象所得(所得金額) == 0
335
337
 
336
338
  'HOE990'
337
339
  end
338
340
 
339
341
  def 適用額明細
340
- if 期末資本金 <= 10_000_000
342
+ unless 軽減税率不適用法人
341
343
  STDERR.puts "適用額明細: 必要に応じて「少額減価償却資産の損金算入」(67条の5第1項, 00277。別表16[7])の確認が必要"
342
344
  end
343
- if @確定法人税額 == 0
344
- STDERR.puts "別表一:適用額明細書の有無の確認が必要"
345
- return nil
346
- end
345
+ return nil if 適用額明細フォーム.nil?
347
346
 
348
347
  render_erb(search_template('tekiyougaku.xml.erb'))
349
348
  end
@@ -354,7 +353,8 @@ module Luca
354
353
  @概況給料 = gaikyo('C12')
355
354
  @概況交際費 = gaikyo('C1B')
356
355
  @概況減価償却 = gaikyo('C1P')
357
- @概況地代租税 = ['C1E', 'C1I'].map { |k| gaikyo(k) }.compact.sum
356
+ chidai_accounts = @form_vers['HOK010'] >= '6.0' ? ['C1E'] : ['C1E', 'C1I']
357
+ @概況地代租税 = chidai_accounts.map { |k| gaikyo(k) }.compact.sum
358
358
  @概況営業損益 = gaikyo('CA')
359
359
  @概況特別利益 = gaikyo('F0')
360
360
  @概況特別損失 = gaikyo('G0')
@@ -965,14 +965,27 @@ module Luca
965
965
  end
966
966
 
967
967
  def proc_version
968
- if @end_date >= Date.parse('2023-4-1')
969
- { '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' }
968
+ init_version = {
969
+ 'HOA201' => '4.0',
970
+ 'HOA511' => '13.0',
971
+ 'HOB710' => '11.0',
972
+ 'HOE200' => '13.0',
973
+ 'HOE990' => '5.0',
974
+ 'HOI090' => '4.0',
975
+ 'HOI100' => '5.0',
976
+ 'HOI150' => '3.0',
977
+ 'HOI160' => '3.0',
978
+ }
979
+ if @end_date >= Date.parse('2024-4-1')
980
+ { 'proc' => '24.0.2', 'HOA112' => '6.0', 'HOA116' => '4.0', 'HOA201' => '5.0', 'HOA420' => '23.0', 'HOA511' => '15.0', 'HOA522' => '9.0', 'HOB710' => '13.0', 'HOE200' => '14.0', 'HOE990' => '7.0', 'HOI090' => '5.0', 'HOI100' => '6.0', 'HOI150' => '4.0', 'HOI160' => '4.0', 'HOK010' => '7.0' }
981
+ elsif @end_date >= Date.parse('2023-4-1')
982
+ init_version.merge({ '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' })
970
983
  elsif @end_date >= Date.parse('2022-4-1')
971
- { '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' }
984
+ init_version.merge({ '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' })
972
985
  elsif @end_date >= Date.parse('2021-4-1')
973
- { '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' }
986
+ init_version.merge({ 'proc' => '21.0.2', 'HOA112' => '3.1', 'HOA116' => '2.0', 'HOA420' => '20.0', 'HOA522' => '7.0', 'HOK010' => '6.0' })
974
987
  else
975
- { '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' }
988
+ init_version.merge({ 'proc' => '20.0.2', 'HOA112' => '2.0', 'HOA116' => '1.0', 'HOA420' => '19.0', 'HOA522' => '6.0', 'HOK010' => '5.0' })
976
989
  end
977
990
  end
978
991
 
@@ -17,10 +17,11 @@ module Luca
17
17
  @dirname = 'journals'
18
18
  @record_type = 'raw'
19
19
 
20
- def kani(report_cfg, export: false, ext_config: nil)
20
+ def kani(report_cfg, export: false, ext_config: nil, kessanbi: nil)
21
21
  set_pl(4)
22
22
  set_bs(4)
23
23
  @issue_date = Date.today
24
+ @kessanbi = kessanbi
24
25
  @software = 'LucaJp'
25
26
  @jimusho_name = report_cfg['jimusho_name']
26
27
  @report_category = report_cfg['type']
@@ -147,7 +148,7 @@ module Luca
147
148
 
148
149
  def 第六号
149
150
  @資本金準備金 = readable(['911', '9131'].map { |cd| @bs_data.dig(cd) }.compact.sum)
150
- STDERR.puts "第六号様式: 「決算確定の日」などの追記が必要。「国外関連者」の確認が必要"
151
+ STDERR.puts "第六号様式: #{ %q(「決算確定の日」などの追記、または --kessan オプション指定が必要。) if @kessanbi.nil? }「国外関連者」の確認が必要"
151
152
  render_erb(search_template('el-no6.xml.erb'))
152
153
  end
153
154
 
@@ -199,8 +200,8 @@ module Luca
199
200
  next if deduction == 0 && record['amount'] == 0
200
201
 
201
202
  %Q(<AMB00200>
202
- <AMB00210>#{etax_date(@start_date)}</AMB00210>
203
- <AMB00220>#{etax_date(@end_date)}</AMB00220>
203
+ <AMB00210>#{etax_date(record['start_date'])}</AMB00210>
204
+ <AMB00220>#{etax_date(record['end_date'])}</AMB00220>
204
205
  <AMB00225>1</AMB00225>
205
206
  #{render_attr('AMB00230', deduction + record['amount'])}
206
207
  #{render_attr('AMB00240', deduction)}
@@ -268,7 +269,11 @@ module Luca
268
269
  end
269
270
 
270
271
  def proc_version
271
- if @end_date >= Date.parse('2022-4-1')
272
+ if @start_date >= Date.parse('2025-4-1')
273
+ { 'R0102AA' => '250', 'R0102AG' => '211', 'R0102AM' => '240' }
274
+ elsif @end_date >= Date.parse('2024-4-1')
275
+ { 'R0102AA' => '240', 'R0102AG' => '211', 'R0102AM' => '240' }
276
+ elsif @end_date >= Date.parse('2022-4-1')
272
277
  { 'R0102AA' => '211', 'R0102AG' => '211', 'R0102AM' => '211' }
273
278
  elsif @start_date >= Date.parse('2020-4-1')
274
279
  { 'R0102AA' => '200', 'R0102AG' => '120','R0102AM' => '200' }
@@ -30,13 +30,13 @@ module Luca
30
30
  # -----------------------------------------------------
31
31
 
32
32
  def 中小企業の軽減税率対象所得(所得 = nil)
33
+ return 0 if 軽減税率不適用法人
34
+
33
35
  所得 ||= 所得金額
34
36
  return 0 if 所得 <= 0
35
37
 
36
38
  if 所得 >= 8_000_000
37
39
  8_000_000
38
- elsif 所得 < 0
39
- 0
40
40
  else
41
41
  (所得 / 1000).floor * 1000
42
42
  end
@@ -48,16 +48,19 @@ module Luca
48
48
 
49
49
  def 中小企業の軽減税率対象を超える所得(所得 = nil)
50
50
  所得 ||= 所得金額
51
- return 0 if 所得 <= 0
51
+ return 0 if 所得 <= 8_000_000
52
52
 
53
- if 所得 <= 8_000_000
54
- 0
55
- else
56
- ((所得 - 8_000_000) / 1000).floor * 1000
57
- end
53
+ ((所得 - 8_000_000) / 1000).floor * 1000
58
54
  end
59
55
 
60
56
  def 一般区分の税額(所得 = nil)
57
+ 所得 ||= 所得金額
58
+ return 0 if 所得 <= 0
59
+
60
+ if 軽減税率不適用法人
61
+ return ((所得 / 1000).floor * 1000 * 23.2 / 100).to_i
62
+ end
63
+
61
64
  (中小企業の軽減税率対象を超える所得(所得) * 23.2 / 100).to_i
62
65
  end
63
66
 
@@ -68,7 +71,7 @@ module Luca
68
71
  # 繰越損失適用後の所得金額
69
72
  #
70
73
  def 所得金額
71
- @繰越損失管理 = Sonshitsu.load(@end_date).update(@別表四調整所得).save if @繰越損失管理.nil?
74
+ @繰越損失管理 = Sonshitsu.load(@end_date).update(@別表四調整所得) if @繰越損失管理.nil?
72
75
  @繰越損失管理.profit
73
76
  end
74
77
 
@@ -31,9 +31,9 @@ module Luca
31
31
  # - start_date: 2020-01-01
32
32
  # end_date: 2020-12-31
33
33
  # increase: 1000000
34
- # - start_date: 2021-01-01
35
- # end_date: 2021-12-31
36
- # decrease: 800000
34
+ # decrease:
35
+ # - date: 2021-12-31
36
+ # val: 800000
37
37
  #
38
38
  def self.load(this_year)
39
39
  records = if File.exist?(record_file)
@@ -47,6 +47,10 @@ module Luca
47
47
  end
48
48
 
49
49
  def save
50
+ @records.each do |record|
51
+ record.delete('amount')
52
+ record.delete('decrease') if record['decrease'].nil? || record['decrease'].empty?
53
+ end
50
54
  File.open(self.class.record_file, 'w') { |f| f.puts YAML.dump(@records)}
51
55
  self
52
56
  end
@@ -83,14 +87,14 @@ module Luca
83
87
  def net_amount
84
88
  @records.each do |record|
85
89
  record['amount'] = record['increase'] - past_decreased(record['decrease'])
86
- record['decrease'] = record['decrease']&.reject { |decrease_record| decrease_record['date'] > @report_date.prev_year }
90
+ record['decrease'] = record['decrease']&.reject { |decrease_record| decrease_record['date'] >= @report_date }
87
91
  end
88
92
  end
89
93
 
90
94
  def past_decreased(decrease_records)
91
95
  return 0 if decrease_records.nil?
92
96
 
93
- decrease_records.filter { |record| record['date'] <= @report_date.prev_year }
97
+ decrease_records.filter { |record| record['date'] < @report_date }
94
98
  .map { |record| record['val'] }.sum || 0
95
99
  end
96
100
 
@@ -169,7 +169,9 @@ module Luca
169
169
  end
170
170
 
171
171
  def proc_version
172
- if @end_date >= Date.parse('2023-10-1')
172
+ if @end_date >= Date.parse('2024-4-1')
173
+ { 'proc' => '23.2.0', 'SHA020' => '9.0' }
174
+ elsif @end_date >= Date.parse('2023-10-1')
173
175
  { 'proc' => '23.0.0', 'SHA020' => '9.0' }
174
176
  elsif @end_date >= Date.parse('2021-4-1')
175
177
  { 'proc' => '20.0.1', 'SHA020' => '7.1' }
@@ -26,12 +26,13 @@
26
26
  <BGA00260><kubun_CD>1</kubun_CD></BGA00260>
27
27
  </BGA00210>
28
28
  <%= render_attr('BGA00290', @概況売上) %>
29
- <BGA00300><kubun_CD>1</kubun_CD></BGA00300>
29
+ <BGA00300><kubun_CD><%= 適用額明細フォーム ? "1" : "2" -%></kubun_CD></BGA00300>
30
30
  <BGA00330>
31
31
  <BGA00340 IDREF="JIGYO_NENDO_FROM"/>
32
32
  <BGA00350 IDREF="JIGYO_NENDO_TO"/>
33
33
  </BGA00330>
34
34
  <BGA00360 IDREF="SHINKOKU_KBN"/>
35
+ <%= render_attr('BGA00410', etax_date(@kessanbi)) -%>
35
36
  <BGA00420 IDREF="KANPU_KINYUKIKAN"/>
36
37
  </BGA00000>
37
38
 
@@ -1,15 +1,20 @@
1
- <HOI150 page="1" VR="3.0" id="HOI150" sakuseiNM="<%= @company %>" softNM="<%= @software %> <%= @company %>" sakuseiDay="<%= @issue_date %>">
1
+ <HOI150 page="1" VR="<%= @form_vers['HOI150'] %>" id="HOI150" sakuseiNM="<%= @company %>" softNM="<%= @software %> <%= @company %>" sakuseiDay="<%= @issue_date %>">
2
2
  <HOB00000>
3
- <% @地代家賃.values.each do |rent| %>
4
- <HOB10000>
5
- <%= render_attr('HOB11000', rent[:rent_type]) %>
6
- <%= render_attr('HOB12000', rent[:rent_purpose]) %>
7
- <%= render_attr('HOB13000', rent[:rent_address]) %>
8
- <%= render_attr('HOB14000', rent[:name]) %>
9
- <%= render_attr('HOB15000', rent[:address]) %>
10
- <%= render_attr('HOB17000', rent[:amount]) %>
11
- <%= render_attr('HOB18000', rent[:note]) %>
12
- </HOB10000>
13
- <% end %>
3
+ <% @地代家賃.values.each do |rent| %>
4
+ <HOB10000>
5
+ <%= render_attr('HOB11000', rent[:rent_type]) %>
6
+ <%= render_attr('HOB12000', rent[:rent_purpose]) %>
7
+ <%= render_attr('HOB13000', rent[:rent_address]) %>
8
+ <% if @form_vers['HOI150'] >= '4.0' && rent[:tax_id] %>
9
+ <HOB27000>
10
+ <%= render_attr('HOB27100', rent[:tax_id]) %>
11
+ </HOB27000>
12
+ <% end %>
13
+ <%= render_attr('HOB14000', rent[:name]) %>
14
+ <%= render_attr('HOB15000', rent[:address]) %>
15
+ <%= render_attr('HOB17000', rent[:amount]) %>
16
+ <%= render_attr('HOB18000', rent[:note]) %>
17
+ </HOB10000>
18
+ <% end %>
14
19
  </HOB00000>
15
20
  </HOI150>
@@ -18,12 +18,7 @@
18
18
  <gen:mm></gen:mm>
19
19
  <gen:dd></gen:dd>
20
20
  </AAA00700>
21
- <AAA00800>
22
- <gen:era><%= gengou(@issue_date) %></gen:era>
23
- <gen:yy><%= wareki(@issue_date) %></gen:yy>
24
- <gen:mm><%= @issue_date.month %></gen:mm>
25
- <gen:dd><%= @issue_date.day %></gen:dd>
26
- </AAA00800>
21
+ <%= render_attr('AAA00800', etax_date(@issue_date)) -%>
27
22
  <AAA00900 idref="ORG1_NAME"></AAA00900>
28
23
  <AAA_HONTEN_ZIP idref="HONTEN_ZIP"></AAA_HONTEN_ZIP>
29
24
  <AAA_HONTEN_ADDR idref="HONTEN_ADDR"></AAA_HONTEN_ADDR>
@@ -40,6 +35,11 @@
40
35
  <AAA_JIGYO_NAME idref="JIGYO_NAME"></AAA_JIGYO_NAME>
41
36
  <AAA_SHIHON idref="SHIHON"></AAA_SHIHON>
42
37
  <AAA_SHIHON3></AAA_SHIHON3>
38
+ <% if @form_vers['R0102AA'] == '250' %>
39
+ <AAA_GASSAN></AAA_GASSAN>
40
+ <AAA_GASSAN2></AAA_GASSAN2>
41
+ <AAA_HOUJIN_KBN></AAA_HOUJIN_KBN>
42
+ <% end %>
43
43
  <AAA_SHIHON4></AAA_SHIHON4>
44
44
  <AAA_SHIHON2><%= 資本金等の額 %></AAA_SHIHON2>
45
45
  <AAA_SHIHON5><%= @資本金準備金 %></AAA_SHIHON5>
@@ -161,10 +161,11 @@
161
161
  <AAH00200><%= 中間還付税額(@確定法人税割, @法人税割中間納付) + 中間還付税額(@所得割, 事業税中間納付) + 中間還付税額(特別法人事業税(@所得割), @地方特別法人事業税中間納付) %></AAH00200>
162
162
  <AAH00400><%= eltax_kouza %></AAH00400>
163
163
  <AAI00100>
164
- <gen:era />
165
- <gen:yy />
166
- <gen:mm />
167
- <gen:dd />
164
+ <% if @kessanbi -%>
165
+ <%= etax_date(@kessanbi) %>
166
+ <% else -%>
167
+ <gen:era /><gen:yy /><gen:mm /><gen:dd />
168
+ <% end -%>
168
169
  </AAI00100>
169
170
  <AAI00900>
170
171
  <gen:era />
@@ -198,4 +199,10 @@
198
199
  <AAI00800>2</AAI00800>
199
200
  <AAJ_DAIRI_NAME></AAJ_DAIRI_NAME>
200
201
  <AAJ_DAIRI_TEL_NUM></AAJ_DAIRI_TEL_NUM>
202
+ <% if @form_vers['R0102AA'] == '250' %>
203
+ <AAL00100></AAL00100>
204
+ <AAL00200></AAL00200>
205
+ <AAL00300></AAL00300>
206
+ <AAL00400></AAL00400>
207
+ <% end %>
201
208
  </R0102AA<%= @form_vers['R0102AA'] %>>
@@ -69,11 +69,18 @@
69
69
  <%= render_attr('IAE04300', gaikyo_config('software_kaikei') ? '<kubun_CD>1</kubun_CD>' : nil) %>
70
70
  <%= render_attr('IAE04500', gaikyo_config('software_kaikei')) %>
71
71
  <%= render_attr('IAE04600', gaikyo_config('software_mail')) %>
72
+ <% if @form_vers['HOK010'] >= '7.0' %>
73
+ <IAE07910>
74
+ <%= render_attr('IAE07920', gaikyo_config('dencho_good') ? '<kubun_CD>1</kubun_CD>' : nil) %>
75
+ <%= render_attr('IAE07930', gaikyo_config('dencho_generic') ? '<kubun_CD>1</kubun_CD>' : nil) %>
76
+ <%= render_attr('IAE07940', gaikyo_config('dencho_scanner') ? '<kubun_CD>1</kubun_CD>' : nil) %>
77
+ </IAE07910>
78
+ <% end %>
72
79
  <% if @form_vers['HOK010'] < '7.0' %>
73
- <IAE07000>
74
- <%= render_attr('IAE07700', gaikyo_config('data_cloud') ? '<kubun_CD>1</kubun_CD>' : nil) %>
75
- <%= render_attr('IAE07800', gaikyo_config('data_media') ? '<kubun_CD>1</kubun_CD>' : nil) %>
76
- <%= render_attr('IAE07900', gaikyo_config('data_server') ? '<kubun_CD>1</kubun_CD>' : nil) %>
80
+ <IAE07000>
81
+ <%= render_attr('IAE07700', gaikyo_config('data_cloud') ? '<kubun_CD>1</kubun_CD>' : nil) %>
82
+ <%= render_attr('IAE07800', gaikyo_config('data_media') ? '<kubun_CD>1</kubun_CD>' : nil) %>
83
+ <%= render_attr('IAE07900', gaikyo_config('data_server') ? '<kubun_CD>1</kubun_CD>' : nil) %>
77
84
  </IAE07000>
78
85
  <% end %>
79
86
  </IAE00000>
@@ -1,7 +1,12 @@
1
- <HOI090 page="1" VR="4.0" id="HOI090" sakuseiNM="<%= @company %>" softNM="<%= @software %> <%= @company %>" sakuseiDay="<%= @issue_date %>">
1
+ <HOI090 page="1" VR="<%= @form_vers['HOI090'] %>" id="HOI090" sakuseiNM="<%= @company %>" softNM="<%= @software %> <%= @company %>" sakuseiDay="<%= @issue_date %>">
2
2
  <% @買掛金.values.each do |payable| %>
3
3
  <HIB00000>
4
4
  <%= render_attr('HIB00100', payable[:payable_type]) %>
5
+ <% if @form_vers['HOI090'] >= '5.0' && payable[:tax_id] -%>
6
+ <HIB00500>
7
+ <%= render_attr('HIB00510', payable[:tax_id]) %>
8
+ </HIB00500>
9
+ <% end -%>
5
10
  <HIB00200>
6
11
  <%= render_attr('HIB00210', payable[:name]) %>
7
12
  <%= render_attr('HIB00220', payable[:address]) %>
@@ -1,4 +1,4 @@
1
- <HOI100 page="1" VR="5.0" id="HOI100" sakuseiNM="<%= @company %>" softNM="<%= @software %> <%= @company %>" sakuseiDay="<%= @issue_date %>">
1
+ <HOI100 page="1" VR="<%= @form_vers['HOI100'] %>" id="HOI100" sakuseiNM="<%= @company %>" softNM="<%= @software %> <%= @company %>" sakuseiDay="<%= @issue_date %>">
2
2
  <HJB00000>
3
3
  <HJB01000>
4
4
  <%= render_attr('HJB01100', '預り金') %>
@@ -101,6 +101,7 @@ module Luca #:nodoc:
101
101
  metadata = uchiwake_account_config(k).first
102
102
  if metadata && metadata['name']
103
103
  h[k][:name] = metadata['name']
104
+ h[k][:tax_id] = metadata['tax_id']&.to_s&.sub(/T/, '')
104
105
  h[k][:payable_type] = self.class.dict.dig(k[0..2], :label)
105
106
  h[k][:address] = metadata['address']
106
107
  h[k][:note] = metadata['note']
@@ -118,7 +119,10 @@ module Luca #:nodoc:
118
119
 
119
120
  def 仮受金内訳
120
121
  @源泉給与 = readable(@bs_data.dig('5191') || 0)
121
- @源泉報酬 = readable(@bs_data.dig('5193') || 0)
122
+ @源泉報酬 = [
123
+ readable(@bs_data.dig('5193') || 0),
124
+ readable(@bs_data.dig('5194') || 0)
125
+ ].sum
122
126
  render_erb(search_template('kariuke-meisai.xml.erb'))
123
127
  end
124
128
 
@@ -182,6 +186,7 @@ module Luca #:nodoc:
182
186
  metadata = uchiwake_account_config(k).first
183
187
  if metadata && metadata['name']
184
188
  h[k][:name] = metadata['name']
189
+ h[k][:tax_id] = metadata['tax_id']&.to_s&.sub(/T/, '')
185
190
  h[k][:address] = metadata['address']
186
191
  h[k][:rent_type] = metadata['rent_type'] || '家賃'
187
192
  h[k][:rent_purpose] = metadata['rent_purpose']
@@ -15,22 +15,32 @@ module Luca
15
15
  listed_amount = 0
16
16
  encoding ||= 'SJIS'
17
17
  customers, total = list
18
+ format_ver = @date > Date.new(2024, 3, 1) ? 4 : 3
18
19
  str = CSV.generate(String.new, headers: false, col_sep: ',', encoding: encoding) do |f|
19
20
  customers.map do |c|
20
21
  amount = readable(c['unsettled'])
21
22
  listed_amount += amount
22
- f << ['3', '0', '売掛金', c['customer'], c['address'], amount, nil ]
23
+ if format_ver >= 4
24
+ address = c['tax_id'] ? nil : c['address']
25
+ f << ['3', '0', '売掛金', c['tax_id']&.to_i, nil, c['customer'], address, amount, nil ]
26
+ else
27
+ f << ['3', '0', '売掛金', c['customer'], c['address'], amount, nil ]
28
+ end
23
29
  end
24
- if total - listed_amount > 0
30
+ if format_ver >= 4
31
+ f << ['3', '0', '売掛金', nil, nil, 'その他', nil, total - listed_amount, nil ]
32
+ f << ['3', '1', nil, nil, nil, nil, nil, total, nil ]
33
+ else
25
34
  f << ['3', '0', '売掛金', 'その他', nil, total - listed_amount, nil ]
35
+ f << ['3', '1', nil, nil, nil, total, nil ]
26
36
  end
27
- f << ['3', '1', nil, nil, nil, total, nil ]
28
37
  end
29
- File.open('HOI030_3.0.csv', 'w') { |f| f.write(str) }
38
+ STDERR.puts "Writing HOI030_#{format_ver}.0.csv..."
39
+ File.open("HOI030_#{format_ver}.0.csv", 'w') { |f| f.write(str) }
30
40
  end
31
41
 
32
42
  def list
33
- customers = self.class.report(@date, detail: true)
43
+ customers = self.class.report(@date, detail: true, due: true)
34
44
  .sort_by { |customer| customer['unsettled'] }
35
45
  .reverse
36
46
  total = customers.inject(0) { |sum, customer| sum + customer['unsettled'] }
data/lib/luca/jp/util.rb CHANGED
@@ -63,6 +63,8 @@ module Luca
63
63
  end
64
64
 
65
65
  def etax_date(date)
66
+ return nil if date.nil?
67
+
66
68
  "<gen:era>#{gengou(date)}</gen:era><gen:yy>#{wareki(date)}</gen:yy><gen:mm>#{date.month}</gen:mm><gen:dd>#{date.day}</gen:dd>"
67
69
  end
68
70
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Luca
4
4
  module Jp
5
- VERSION = '0.19.1'
5
+ VERSION = '0.20.1'
6
6
  end
7
7
  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.19.1
4
+ version: 0.20.1
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-04-12 00:00:00.000000000 Z
11
+ date: 2025-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lucabook
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.5.4
19
+ version: 0.5.6
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.5.4
26
+ version: 0.5.6
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: lucadeal
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.5.5
33
+ version: 0.5.8
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 0.5.5
40
+ version: 0.5.8
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: lucasalary
43
43
  requirement: !ruby/object:Gem::Requirement