luca-jp 0.9.0 → 0.12.0

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: 4397cf29a4b348c06c854a7317bf1c7a63feef296635ffe5d8cc8ab237a5ca86
4
- data.tar.gz: 8f0e650b20dcd79af950dfaf09b3e5df4f7e32094651d3661fe7f232c58685fd
3
+ metadata.gz: 14025702bd2ec1fc0f9758ae982c09b437af41b531834d71de1b6b881cdc1e76
4
+ data.tar.gz: 8c265c52dd25ea94c4dff01886f0afcc6dd187612b0e61856eab8c50c520ed2f
5
5
  SHA512:
6
- metadata.gz: 25b4554065a779fee709b1f32e0120cfddf0ce23fa80397ff470f54d2a20604246781dee7c29c8f565477fedb32aa37a18398053b2411d92db1dd4e6002ce123
7
- data.tar.gz: ba9dd2935aba7e2609278732f1db875d0896587db70605519282f94eca98264e0f51cc2d2f25ab12249477750c4debfcf74d73b472679367429a25dad2ffb9a1
6
+ metadata.gz: ea5d03e02adeae4b9257a055fe528a77cd2dcc2627df0379d063e9e88ae55b8f03ad8298dcd78334522d490c600d75012b8ad5b2d74c56b07e1b2a24bc06cf80
7
+ data.tar.gz: 989dd502799f53c48ba1655518b4def4b15e0737f5e8ec5fd9169bbf18e18022950c1409e9ea95b25db6c2bf4d9351beb37ad0a24dd65b7713ac3e6c0194617e
data/exe/luca-jp CHANGED
@@ -6,29 +6,29 @@ require 'luca/jp'
6
6
  class LucaCmd
7
7
  def self.syouhizei(args, params)
8
8
  if params[:export]
9
- Luca::Jp::Syouhizei.range(*args).export_json
9
+ Luca::Jp::Syouhizei.range(*auto_range(args, params)).export_json
10
10
  else
11
- puts Luca::Jp::Syouhizei.range(*args).kani
11
+ puts Luca::Jp::Syouhizei.range(*auto_range(args, params)).kani
12
12
  end
13
13
  end
14
14
 
15
15
  def self.houjinzei(args, params)
16
16
  if params[:export]
17
- Luca::Jp::Aoiro.range(*args).export_json
17
+ Luca::Jp::Aoiro.range(*auto_range(args, params)).export_json
18
18
  else
19
- puts Luca::Jp::Aoiro.range(*args).kani
19
+ puts Luca::Jp::Aoiro.range(*auto_range(args, params)).kani
20
20
  end
21
21
  end
22
22
 
23
23
  def self.chihouzei(args, params)
24
24
  if params[:export]
25
25
  accounts = Luca::Jp::Util.eltax_config('reports').map do |report|
26
- Luca::Jp::Chihouzei.range(*args).export_json(report)
26
+ Luca::Jp::Chihouzei.range(*auto_range(args, params)).export_json(report)
27
27
  end
28
28
  puts JSON.dump(accounts)
29
29
  else
30
30
  Luca::Jp::Util.eltax_config('reports').each do |report|
31
- File.open("chihouzei-#{report['jichitai_code']}#{report['jimusho_code']}.xml", 'w') { |f| f.puts(Luca::Jp::Chihouzei.range(*args).kani(report))}
31
+ File.open("chihouzei-#{report['jichitai_code']}#{report['jimusho_code']}.xml", 'w') { |f| f.puts(Luca::Jp::Chihouzei.range(*auto_range(args, params)).kani(report))}
32
32
  end
33
33
  end
34
34
  end
@@ -37,30 +37,48 @@ class LucaCmd
37
37
  date = "#{args[0]}-#{args[1]}-1"
38
38
  Luca::Jp::Urikake.new(date).report(params[:total])
39
39
  end
40
+
41
+ def self.auto_range(args, params)
42
+ case args.length
43
+ when 4
44
+ args
45
+ when 2
46
+ date = Date.new(args[0].to_i, args[1].to_i)
47
+ r = LucaBook::Util.current_fy(date, to: date)
48
+ [r[0].year, r[0].month, r[1].year, r[1].month]
49
+ when 0
50
+ date = params[:lastyear] ? Date.today.prev_year : Date.today
51
+ r = LucaBook::Util.current_fy(date)
52
+ [r[0].year, r[0].month, r[1].year, r[1].month]
53
+ end
54
+ end
40
55
  end
41
56
 
42
57
  cmd = ARGV.shift
43
58
  params = {}
44
59
 
45
60
  case cmd
46
- when /hou?jinzei/
61
+ when 'h', /hou?jinzei/
47
62
  OptionParser.new do |opt|
48
- opt.banner = 'Usage: luca-jp houjinzei [options] yyyy mm yyyy mm'
63
+ opt.banner = 'Usage: luca-jp h|houjinzei [options] [yyyy mm yyyy mm]'
49
64
  opt.on('--export', 'export json') { |_v| params[:export] = true }
65
+ opt.on('--lastyear', 'report on last Financial year') { |_v| params[:lastyear] = true }
50
66
  args = opt.parse!(ARGV)
51
67
  LucaCmd.houjinzei(args, params)
52
68
  end
53
- when /s[yh]ou?hizei/
69
+ when 's', /s[yh]ou?hizei/
54
70
  OptionParser.new do |opt|
55
- opt.banner = 'Usage: luca-jp syouhizei [options] yyyy mm yyyy mm'
71
+ opt.banner = 'Usage: luca-jp s|syouhizei [options] [yyyy mm yyyy mm]'
56
72
  opt.on('--export', 'export json') { |_v| params[:export] = true }
73
+ opt.on('--lastyear', 'report on last Financial year') { |_v| params[:lastyear] = true }
57
74
  args = opt.parse!(ARGV)
58
75
  LucaCmd.syouhizei(args, params)
59
76
  end
60
- when /chihou?zei/
77
+ when 'c', /chihou?zei/
61
78
  OptionParser.new do |opt|
62
- opt.banner = 'Usage: luca-jp chihouzei [options] yyyy mm yyyy mm'
79
+ opt.banner = 'Usage: luca-jp c|chihouzei [options] [yyyy mm yyyy mm]'
63
80
  opt.on('--export', 'export json') { |_v| params[:export] = true }
81
+ opt.on('--lastyear', 'report on last Financial year') { |_v| params[:lastyear] = true }
64
82
  args = opt.parse!(ARGV)
65
83
  LucaCmd.chihouzei(args, params)
66
84
  end
@@ -71,4 +89,13 @@ when /urikake/
71
89
  args = opt.parse!(ARGV)
72
90
  LucaCmd.urikake(args, params)
73
91
  end
92
+ else
93
+ puts 'Proper subcommand needed.'
94
+ puts
95
+ puts 'Usage: luca-jp <subcommand>'
96
+ puts ' h[oujinzei]: 法人税の計算'
97
+ puts ' s[youhizei]: 消費税の計算'
98
+ puts ' c[hihouzei]: 地方税の計算'
99
+ puts ' urikake: 勘定科目内訳明細書の売掛金リスト(CSV)'
100
+ exit 1
74
101
  end
data/lib/luca/jp/aoiro.rb CHANGED
@@ -141,9 +141,9 @@ module Luca
141
141
 
142
142
  @当期還付法人税 = refund_tax('1502')
143
143
  @当期還付都道府県住民税 = refund_tax('1503')
144
- @翌期還付都道府県住民税 = 中間還付税額(@税額.dig(:kenmin, :kintou), @都道府県民税均等割中間納付) + 中間還付税額(@税額.dig(:kenmin, :houjinzei), @都道府県民税法人税割中間納付)
144
+ @翌期還付都道府県住民税 = readable(@bs_data['1503'])
145
145
  @当期還付市民税 = refund_tax('1505')
146
- @翌期還付市民税 = 中間還付税額(@税額.dig(:shimin, :kintou), @市民税均等割中間納付) + 中間還付税額(@税額.dig(:shimin, :houjinzei), @市民税法人税割中間納付)
146
+ @翌期還付市民税 = readable(@bs_data['1505']) || 0
147
147
  @事業税期首残高 = 期首未納事業税 > 0 ? 期首未納事業税 : (@当期還付事業税 * -1)
148
148
  @仮払税金 = @翌期還付法人税 + @翌期還付都道府県住民税 + @翌期還付事業税 + @翌期還付市民税
149
149
 
@@ -467,7 +467,7 @@ module Luca
467
467
  end
468
468
 
469
469
  def 確定都道府県住民税
470
- @税額.dig(:kenmin, :kintou) + @税額.dig(:kenmin, :houjinzei)
470
+ readable(@pl_data['H112']) || 0
471
471
  end
472
472
 
473
473
  def 期首未納都道府県民税
@@ -475,7 +475,7 @@ module Luca
475
475
  end
476
476
 
477
477
  def 期末未納都道府県民税
478
- 納付税額(@税額.dig(:kenmin, :kintou), @都道府県民税均等割中間納付) + 納付税額(@税額.dig(:kenmin, :houjinzei), @都道府県民税法人税割中間納付)
478
+ readable(@bs_data['5153']) || 0
479
479
  end
480
480
 
481
481
  def 未納都道府県民税期中増減
@@ -484,16 +484,15 @@ module Luca
484
484
  end
485
485
 
486
486
  def 都道府県民税仮払納付
487
- [(@都道府県民税中間納付 - 確定都道府県住民税), 0].max
488
- 中間還付税額(@税額.dig(:kenmin, :kintou), @都道府県民税均等割中間納付) + 中間還付税額(@税額.dig(:kenmin, :houjinzei), @都道府県民税法人税割中間納付)
487
+ readable(@bs_data['1503']) || 0
489
488
  end
490
489
 
491
490
  def 都道府県民税損金納付
492
- [@都道府県民税均等割中間納付, @税額.dig(:kenmin, :kintou)].min + [@都道府県民税法人税割中間納付, @税額.dig(:kenmin, :houjinzei)].min
491
+ [@都道府県民税均等割中間納付 + @都道府県民税法人税割中間納付, readable(@pl_data['H112'])||0].min
493
492
  end
494
493
 
495
494
  def 確定市民税
496
- @税額.dig(:shimin, :kintou) - @税額.dig(:shimin, :houjinzei)
495
+ readable(@pl_data['H113']) || 0
497
496
  end
498
497
 
499
498
  def 期首未納市民税
@@ -501,7 +500,7 @@ module Luca
501
500
  end
502
501
 
503
502
  def 期末未納市民税
504
- 納付税額(@税額.dig(:shimin, :kintou), @市民税均等割中間納付) + 納付税額(@税額.dig(:shimin, :houjinzei), @市民税法人税割中間納付)
503
+ readable(@bs_data['5154']) || 0
505
504
  end
506
505
 
507
506
  def 未納市民税期中増減
@@ -510,15 +509,15 @@ module Luca
510
509
  end
511
510
 
512
511
  def 市民税仮払納付
513
- 中間還付税額(@税額.dig(:shimin, :kintou), @市民税均等割中間納付) + 中間還付税額(@税額.dig(:shimin, :houjinzei), @市民税法人税割中間納付)
512
+ readable(@bs_data['1505']) || 0
514
513
  end
515
514
 
516
515
  def 市民税損金納付
517
- [@市民税均等割中間納付, @税額.dig(:shimin, :kintou)].min + [@市民税法人税割中間納付, @税額.dig(:shimin, :houjinzei)].min
516
+ [@市民税均等割中間納付 + @市民税法人税割中間納付, readable(@pl_data['H113'])||0].min
518
517
  end
519
518
 
520
519
  def 確定事業税
521
- @税額.dig(:kenmin, :shotoku) + @税額.dig(:kenmin, :tokubetsu)
520
+ readable(@pl_data['H114']) || 0
522
521
  end
523
522
 
524
523
  def 事業税損金納付
@@ -23,19 +23,28 @@ module Luca
23
23
  set_bs(4)
24
24
  @issue_date = Date.today
25
25
  @software = 'LucaJp'
26
+ @jimusho_name = report_cfg['jimusho_name']
26
27
  @report_category = report_cfg['type']
27
28
  @employee = report_cfg['employee'] || 1
29
+ @office_count = report_cfg['office_count'] || 1
30
+ # 自治体ごとの税率カスタマイズ
31
+ @houjinzeiwari_rate = report_cfg['houjinzeiwari']
32
+ @shotoku399 = report_cfg['shotoku399']
33
+ @shotoku401 = report_cfg['shotoku401']
34
+ @shotoku801 = report_cfg['shotoku801']
28
35
 
29
36
  @税額 = 税額計算
30
- @均等割 = @税額.dig(:kenmin, :kintou)
31
- @確定法人税割 = @税額.dig(:kenmin, :houjinzei)
32
- @地方特別法人事業税中間納付 = prepaid_tax('1854')
33
- @所得割中間納付 = prepaid_tax('1855')
34
- @法人税割中間納付 = prepaid_tax('1859')
35
- @均等割中間納付 = prepaid_tax('185A')
37
+ jichitai = @report_category == 'city' ? :shimin : :kenmin
38
+ @均等割 = report_cfg['kintouwari'] || @税額.dig(jichitai, :kintou)
39
+ @確定法人税割 = @税額.dig(jichitai, :houjinzei)
40
+ @地方特別法人事業税中間納付 = prepaid_tax('1854', @jimusho_name)
41
+ @所得割中間納付 = prepaid_tax('1855', @jimusho_name)
42
+ @法人税割中間納付 = prepaid_tax('1859', @jimusho_name)
43
+ @均等割中間納付 = prepaid_tax('185A', @jimusho_name)
36
44
  @所得割 = @税額.dig(:kenmin, :shotoku)
37
45
  if export
38
46
  {
47
+ customer: @jimusho_name,
39
48
  jigyouzei: {
40
49
  shotoku: {
41
50
  zeigaku: @所得割,
@@ -62,10 +71,10 @@ module Luca
62
71
  @form_vers = proc_version
63
72
  @jichitai_code = report_cfg['jichitai_code']
64
73
  @jimusho_code = report_cfg['jimusho_code']
65
- @jimusho_name = report_cfg['jimusho_name']
66
74
  @kanri_bango = report_cfg['x_houjin_bango']
67
75
  @app_version = report_cfg['app_version']
68
76
  @address = report_cfg['address'] || it_part_config('nozeisha_adr')
77
+ @jigyosho_name = report_cfg['name'] || '本店'
69
78
  @procedure_code = 'R0102100'
70
79
  @procedure_name = '法人都道府県民税・事業税・特別法人事業税又は地方法人特別税 確定申告'
71
80
  @form_sec = case @report_category
@@ -76,7 +85,7 @@ module Luca
76
85
  ["R0102AA#{@form_vers['R0102AA']}", "R0102AG120", 別表九フォーム]
77
86
  .compact.map{ |c| form_attr(c) }.join('')
78
87
  when 'city'
79
- # TODO: implement
88
+ ["R0504AA180"].compact.map{ |c| form_attr(c) }.join('')
80
89
  end
81
90
  @user_inf = render_erb(search_template('eltax-userinf.xml.erb'))
82
91
  @form_data = case @report_category
@@ -85,7 +94,7 @@ module Luca
85
94
  when '23ku'
86
95
  [第六号, 別表四三, 別表九].compact.join("\n")
87
96
  when 'city'
88
- # TODO: implement
97
+ [第二十号].compact.join("\n")
89
98
  end
90
99
  render_erb(search_template('eltax.xml.erb'))
91
100
  end
@@ -93,32 +102,36 @@ module Luca
93
102
 
94
103
  def export_json(report_cfg)
95
104
  records = kani(report_cfg, export: true)
105
+ label = @report_category == 'city' ? '市町村住民税' : '都道府県住民税'
96
106
  {}.tap do |item|
97
107
  item['date'] = @end_date
98
108
  item['debit'] = []
99
109
  item['credit'] = []
100
- records[:jigyouzei].each do |k, dat|
101
- if dat[:chukan] > 0
102
- item['credit'] << { 'label' => karibarai_label(k), 'amount' => dat[:chukan] }
103
- end
104
- if dat[:chukan] > dat[:zeigaku]
105
- item['debit'] << { 'label' => '未収地方事業税', 'amount' => dat[:chukan] - dat[:zeigaku] }
106
- else
107
- item['credit'] << { 'label' => '未払地方事業税', 'amount' => dat[:zeigaku] - dat[:chukan] }
110
+ unless @report_category == 'city'
111
+ records[:jigyouzei].each do |k, dat|
112
+ if dat[:chukan] > 0
113
+ item['credit'] << { 'label' => karibarai_label(k), 'amount' => dat[:chukan] }
114
+ end
115
+ if dat[:chukan] > dat[:zeigaku]
116
+ item['debit'] << { 'label' => '未収地方事業税', 'amount' => dat[:chukan] - dat[:zeigaku] }
117
+ else
118
+ item['credit'] << { 'label' => '未払地方事業税', 'amount' => dat[:zeigaku] - dat[:chukan] }
119
+ end
120
+ item['debit'] << { 'label' => '地方事業税', 'amount' => dat[:zeigaku] } if dat[:zeigaku] > 0
108
121
  end
109
- item['debit'] << { 'label' => '法人税、住民税及び事業税', 'amount' => dat[:zeigaku] } if dat[:zeigaku] > 0
110
122
  end
111
123
  records[:juminzei].each do |k, dat|
112
124
  if dat[:chukan] > 0
113
125
  item['credit'] << { 'label' => karibarai_label(k), 'amount' => dat[:chukan] }
114
126
  end
115
127
  if dat[:chukan] > dat[:zeigaku]
116
- item['debit'] << { 'label' => '未収都道府県住民税', 'amount' => dat[:chukan] - dat[:zeigaku] }
128
+ item['debit'] << { 'label' => "未収#{label}", 'amount' => dat[:chukan] - dat[:zeigaku] }
117
129
  else
118
- item['credit'] << { 'label' => '未払都道府県民税', 'amount' => dat[:zeigaku] - dat[:chukan] }
130
+ item['credit'] << { 'label' => "未払#{label}", 'amount' => dat[:zeigaku] - dat[:chukan] }
119
131
  end
120
- item['debit'] << { 'label' => '法人税、住民税及び事業税', 'amount' => dat[:zeigaku] } if dat[:zeigaku] > 0
132
+ item['debit'] << { 'label' => label, 'amount' => dat[:zeigaku] } if dat[:zeigaku] > 0
121
133
  end
134
+ item['x-customer'] = records[:customer] unless records[:customer].nil?
122
135
  item['x-editor'] = 'LucaJp'
123
136
  end
124
137
  end
@@ -134,6 +147,11 @@ module Luca
134
147
  render_erb(search_template('el-no6-43.xml.erb'))
135
148
  end
136
149
 
150
+ def 第二十号
151
+ @資本金準備金 = readable(['911', '9131'].map { |cd| @bs_data.dig(cd) }.compact.sum)
152
+ render_erb(search_template('el-no20.xml.erb'))
153
+ end
154
+
137
155
  def 別表九フォーム
138
156
  return nil if @繰越損失管理.records.length == 0
139
157
 
@@ -149,7 +167,13 @@ module Luca
149
167
  private
150
168
 
151
169
  def 法人税割課税標準
152
- (@税額.dig(:houjin, :kokuzei) / 1000).floor * 1000
170
+ case Luca::Jp::Util.eltax_config('reports')
171
+ .filter { |r| レポート種別.include?(r['type']) }.length
172
+ when 0, 1
173
+ (@税額.dig(:houjin, :kokuzei) / 1000).floor * 1000
174
+ else
175
+ 従業員数による分割課税標準 @税額.dig(:houjin, :kokuzei)
176
+ end
153
177
  end
154
178
 
155
179
  def 事業税中間納付
@@ -19,9 +19,9 @@ module Luca
19
19
  tax[:houjin][:chihou] = (地方法人税 / 100).floor * 100
20
20
 
21
21
  tax[:kenmin][:houjinzei], tax[:shimin][:houjinzei] = 法人税割(法人税額)
22
- tax[:kenmin][:kintou], tax[:shimin][:kintou] = 均等割
22
+ tax[:kenmin][:kintou], tax[:shimin][:kintou] = 均等割 if @report_category
23
23
  tax[:kenmin][:shotoku] = 所得割400万以下(所得) + 所得割800万以下(所得) + 所得割800万超(所得)
24
- tax[:kenmin][:tokubetsu] = 地方法人特別税(tax[:kenmin][:shotoku])
24
+ tax[:kenmin][:tokubetsu] = 特別法人事業税(tax[:kenmin][:shotoku])
25
25
  end
26
26
  end
27
27
 
@@ -139,14 +139,16 @@ module Luca
139
139
  else
140
140
  法人税割課税標準
141
141
  end
142
- 税率 = 法人税割税率(課税標準)
142
+ 県税率, 市税率 = 法人税割税率(課税標準)
143
143
  [
144
- (課税標準 * 税率[0] / 100 / 100).floor * 100,
145
- (課税標準 * 税率[1] / 100 / 100).floor * 100
144
+ (課税標準 * 県税率 / 100 / 100).floor * 100,
145
+ (課税標準 * 市税率 / 100 / 100).floor * 100
146
146
  ]
147
147
  end
148
148
 
149
149
  def 法人税割税率(法人税 = nil)
150
+ return [@houjinzeiwari_rate.to_f, @houjinzeiwari_rate.to_f] if @houjinzeiwari_rate
151
+
150
152
  課税標準 = if 法人税
151
153
  (法人税 / 1000).floor * 1000
152
154
  else
@@ -169,14 +171,17 @@ module Luca
169
171
  所得 ||= 所得金額
170
172
  return 0 if 所得 < 0
171
173
 
172
- if 所得 >= 4_000_000
173
- 4_000_000
174
- else
175
- (所得 / 1000).floor * 1000
176
- end
174
+ total = if 所得 >= 4_000_000
175
+ 4_000_000
176
+ else
177
+ (所得 / 1000).floor * 1000
178
+ end
179
+ 事業税の分割課税標準(total)
177
180
  end
178
181
 
179
182
  def 所得割税率400万以下(所得 = nil)
183
+ return @shotyoku399.to_f if @shotoku399
184
+
180
185
  所得 ||= 所得金額
181
186
  if 期末資本金 > 100_000_000 || 所得 > 25_000_000
182
187
  軽減税率不適用法人 ? 7.48 : 3.75
@@ -194,16 +199,19 @@ module Luca
194
199
  所得 ||= 所得金額
195
200
  return 0 if 所得 < 0
196
201
 
197
- if 所得 <= 4_000_000
198
- 0
199
- elsif 所得 >= 8_000_000
200
- 4_000_000
201
- else
202
- ((所得 - 4_000_000) / 1000).floor * 1000
203
- end
202
+ total = if 所得 <= 4_000_000
203
+ 0
204
+ elsif 所得 >= 8_000_000
205
+ 4_000_000
206
+ else
207
+ ((所得 - 4_000_000) / 1000).floor * 1000
208
+ end
209
+ 事業税の分割課税標準(total)
204
210
  end
205
211
 
206
212
  def 所得割税率800万以下(所得 = nil)
213
+ return @shotyoku401.to_f if @shotoku401
214
+
207
215
  所得 ||= 所得金額
208
216
  if 期末資本金 > 100_000_000 || 所得 > 25_000_000
209
217
  軽減税率不適用法人 ? 7.48 : 5.665
@@ -221,14 +229,17 @@ module Luca
221
229
  所得 ||= 所得金額
222
230
  return 0 if 所得 < 0
223
231
 
224
- if 所得 <= 8_000_000
232
+ total = if 所得 <= 8_000_000
225
233
  0
226
234
  else
227
235
  ((所得 - 8_000_000) / 1000).floor * 1000
228
236
  end
237
+ 事業税の分割課税標準(total)
229
238
  end
230
239
 
231
240
  def 所得割税率800万超(所得 = nil)
241
+ return @shotyoku801.to_f if @shotoku801
242
+
232
243
  所得 ||= 所得金額
233
244
  if 期末資本金 > 100_000_000 || 所得 > 25_000_000
234
245
  7.48
@@ -238,7 +249,7 @@ module Luca
238
249
  end
239
250
 
240
251
  # 100円未満切り捨て
241
- def 地方法人特別税(事業税)
252
+ def 特別法人事業税(事業税)
242
253
  ((事業税 * 37 / 100) / 100).floor * 100
243
254
  end
244
255
 
@@ -302,6 +313,43 @@ module Luca
302
313
  def 期末資本金
303
314
  readable(@bs_data.dig('911'))
304
315
  end
316
+
317
+ # -----------------------------------------------------
318
+ # :section: 複数自治体間の分割計算
319
+ # -----------------------------------------------------
320
+ def 事業税の分割課税標準(課税標準)
321
+ case Luca::Jp::Util.eltax_config('reports')
322
+ .filter { |r| レポート種別.include?(r['type']) }.length
323
+ when 0, 1
324
+ 課税標準
325
+ else
326
+ half = (課税標準 / 2 / 1000).floor * 1000
327
+ [
328
+ 事業所数による分割課税標準(half),
329
+ 従業員数による分割課税標準(half)
330
+ ].sum
331
+ end
332
+ end
333
+
334
+ def 従業員数による分割課税標準(課税標準)
335
+ 分割基準の総数 = Luca::Jp::Util.eltax_config('reports')
336
+ .filter { |r| レポート種別.include?(r['type']) }
337
+ .map { |r| (r['employee'] || 1).to_i }.sum
338
+ ((課税標準.to_f / 分割基準の総数).floor(分割基準の総数.to_s.length) * @employee / 1000)
339
+ .floor * 1000
340
+ end
341
+
342
+ def 事業所数による分割課税標準(課税標準)
343
+ 分割基準の総数 = Luca::Jp::Util.eltax_config('reports')
344
+ .filter { |r| レポート種別.include?(r['type']) }
345
+ .map { |r| (r['office_count'] || 1).to_i }.sum
346
+ ((課税標準.to_f / 分割基準の総数).floor(分割基準の総数.to_s.length) * @office_count / 1000)
347
+ .floor * 1000
348
+ end
349
+
350
+ def レポート種別
351
+ @report_category == 'city' ? ['city', '23ku'] : ['prefecture', '23ku']
352
+ end
305
353
  end
306
354
  end
307
355
  end
@@ -0,0 +1,143 @@
1
+ <R0504AA180 xmlns="http://eltax.jp/HOJIN_DOFUKEN" vr="180" page="" seiseiSoft="<%= @software %>" seiseiVr="1" seiseiDay="<%= Date.today.strftime('%Y%m%d') %>" seiseiNM="<%= it_part_config('nozeisha_nm') %>" koshinSoft="" koshinVr="" koshinDay="" koshinNM="" taari="">
2
+ <AAA00100 idref="SEIRI_NUM" />
3
+ <AAA00200 idref="JIMUSHO_NUM"></AAA00200>
4
+ <AAA00300 idref="HOJIN_NUM"></AAA00300>
5
+ <AAA00400 />
6
+ <AAA00500 idref="HOJIN_NUMBER"></AAA00500>
7
+ <AAA00700 idref="RPT_DATE">
8
+ <gen:era></gen:era>
9
+ <gen:yy></gen:yy>
10
+ <gen:mm></gen:mm>
11
+ <gen:dd></gen:dd>
12
+ </AAA00700>
13
+ <AAA00800>
14
+ <gen:era><%= gengou(@issue_date) %></gen:era>
15
+ <gen:yy><%= wareki(@issue_date) %></gen:yy>
16
+ <gen:mm><%= @issue_date.month %></gen:mm>
17
+ <gen:dd><%= @issue_date.day %></gen:dd>
18
+ </AAA00800>
19
+ <AAA00900 idref="ORG1_NAME"></AAA00900>
20
+ <AAA_HONTEN_ZIP idref="HONTEN_ZIP"></AAA_HONTEN_ZIP>
21
+ <AAA_HONTEN_ADDR idref="HONTEN_ADDR"></AAA_HONTEN_ADDR>
22
+ <AAA_HONTEN_TEL_NUM idref="HONTEN_TEL"></AAA_HONTEN_TEL_NUM>
23
+ <AAA_ZIP />
24
+ <AAA_ADDR />
25
+ <AAA_TEL_NUM />
26
+ <AAA_KANA idref="KANA"></AAA_KANA>
27
+ <AAA_NAME idref="NAME"></AAA_NAME>
28
+ <AAA_DAIHYO_KANA idref="DAIHYO_KANA"></AAA_DAIHYO_KANA>
29
+ <AAA_DAIHYO_NAME idref="DAIHYO_NAME"></AAA_DAIHYO_NAME>
30
+ <AAA01000>
31
+ <gen:era />
32
+ <gen:yy />
33
+ <gen:mm />
34
+ <gen:dd />
35
+ <gen:yyyymmdd />
36
+ </AAA01000>
37
+ <AAA01100 />
38
+ <AAA01200 />
39
+ <AAA_JIGYO_NAME idref="JIGYO_NAME"></AAA_JIGYO_NAME>
40
+ <AAA_SHIHON idref="SHIHON"></AAA_SHIHON>
41
+ <AAA_SHIHON2><%= 資本金等の額 %></AAA_SHIHON2>
42
+ <AAA_SHIHON3><%= @資本金準備金 %></AAA_SHIHON3>
43
+ <AAA_SHIHON4><%= 地方税資本金等の額 %></AAA_SHIHON4>
44
+ <AAA_KEIRI_KANA></AAA_KEIRI_KANA>
45
+ <AAA_KEIRI_NAME></AAA_KEIRI_NAME>
46
+ <AAA_JIGYO_SDATE idref="SDATE">
47
+ <gen:era></gen:era>
48
+ <gen:yy></gen:yy>
49
+ <gen:mm></gen:mm>
50
+ <gen:dd></gen:dd>
51
+ <gen:yyyymmdd></gen:yyyymmdd>
52
+ </AAA_JIGYO_SDATE>
53
+ <AAA_JIGYO_EDATE idref="EDATE">
54
+ <gen:era></gen:era>
55
+ <gen:yy></gen:yy>
56
+ <gen:mm></gen:mm>
57
+ <gen:dd></gen:dd>
58
+ <gen:yyyymmdd></gen:yyyymmdd>
59
+ </AAA_JIGYO_EDATE>
60
+ <AAA_RPT_KBN idref="RPT_NAME">確定</AAA_RPT_KBN>
61
+ <AAA01300 />
62
+ <AAB00100 />
63
+ <AAB00110><%= @税額.dig(:houjin, :kokuzei) %></AAB00110>
64
+ <AAB00200 />
65
+ <AAB00400 />
66
+ <AAB00500 />
67
+ <AAB00600><%= 法人税割課税標準 %></AAB00600>
68
+ <AAB00610><%= 法人税割税率[1] %></AAB00610>
69
+ <AAB00620><%= 法人税割[1] %></AAB00620>
70
+ <AAB00700 />
71
+ <AAB00710 />
72
+ <AAB00720 />
73
+ <AAB00730 />
74
+ <AAB00750 />
75
+ <AAB00800 />
76
+ <AAB00900 />
77
+ <AAB01000><%= 法人税割[1] %></AAB01000>
78
+ <AAB01100><%= @法人税割中間納付 %></AAB01100>
79
+ <AAB01200 />
80
+ <AAB01300><%= @確定法人税割 - @法人税割中間納付 %></AAB01300>
81
+ <AAB01400>12</AAB01400>
82
+ <AAB01410><%= @均等割 %></AAB01410>
83
+ <AAB01420><%= @均等割 %></AAB01420>
84
+ <AAB01500><%= @均等割中間納付 %></AAB01500>
85
+ <AAB01600><%= @均等割 - @均等割中間納付 %></AAB01600>
86
+ <AAB01700><%= 納付税額(@確定法人税割, @法人税割中間納付) + 納付税額(@均等割, @均等割中間納付) %></AAB01700>
87
+ <AAB01800 />
88
+ <AAB01900><%= 納付税額(@確定法人税割, @法人税割中間納付) + 納付税額(@均等割, @均等割中間納付) %></AAB01900>
89
+ <AAC00100>
90
+ <AAC00200><%= @jigyosho_name %></AAC00200>
91
+ <AAC00300><%= @address %></AAC00300>
92
+ <AAC00400><%= @employee %></AAC00400>
93
+ <AAC00500><%= @employee %></AAC00500>
94
+ </AAC00100>
95
+ <AAC00600><%# 全従業者数 %></AAC00600>
96
+ <AAC00700><%= @employee %></AAC00700>
97
+ <AAC00800><%= @employee %></AAC00800>
98
+ <AAD00100>
99
+ <AAD00200 />
100
+ <AAD00300 />
101
+ <AAD00400 />
102
+ <AAD00500 />
103
+ <AAD00600 />
104
+ </AAD00100>
105
+ <AAE00100>
106
+ <gen:era />
107
+ <gen:yy />
108
+ <gen:mm />
109
+ <gen:dd />
110
+ </AAE00100>
111
+ <AAE01000>
112
+ <gen:era />
113
+ <gen:yy />
114
+ <gen:mm />
115
+ <gen:dd />
116
+ </AAE01000>
117
+ <AAE01100>
118
+ <gen:era />
119
+ <gen:yy />
120
+ <gen:mm />
121
+ <gen:dd />
122
+ </AAE01100>
123
+ <AAE00200>1</AAE00200><%# 青色申告 %>
124
+ <AAE00300><%= @税額.dig(:houjin, :kokuzei) > 200000 ? 1 : 2 %></AAE00300>
125
+ <AAE00400>
126
+ <gen:era />
127
+ <gen:yy />
128
+ <gen:mm />
129
+ <gen:dd />
130
+ </AAE00400>
131
+ <AAE00500>
132
+ <gen:era />
133
+ <gen:yy />
134
+ <gen:mm />
135
+ <gen:dd />
136
+ </AAE00500>
137
+ <AAE00600>2</AAE00600>
138
+ <AAE00700><%= eltax_kouza %></AAE00700>
139
+ <AAE00800><%= 中間還付税額(@確定法人税割, @法人税割中間納付) %></AAE00800>
140
+ <AAE00900 />
141
+ <AAJ_DAIRI_NAME></AAJ_DAIRI_NAME>
142
+ <AAJ_DAIRI_TEL_NUM></AAJ_DAIRI_TEL_NUM>
143
+ </R0504AA180>
@@ -136,18 +136,18 @@
136
136
  <AAE01500><%= @所得割 - 事業税中間納付 %></AAE01500>
137
137
  <%= render_attr('AAK00100', @所得割) %>
138
138
  <%= render_attr('AAK00200', 37) %>
139
- <%= render_attr('AAK00300', 地方法人特別税(@所得割)) %>
139
+ <%= render_attr('AAK00300', 特別法人事業税(@所得割)) %>
140
140
  <AAK00400 />
141
141
  <AAK00500 />
142
142
  <AAK00600 />
143
- <%= render_attr('AAK00700', 地方法人特別税(@所得割)) %>
143
+ <%= render_attr('AAK00700', 特別法人事業税(@所得割)) %>
144
144
  <AAK00800 />
145
- <%= render_attr('AAK00850', 地方法人特別税(@所得割)) %>
145
+ <%= render_attr('AAK00850', 特別法人事業税(@所得割)) %>
146
146
  <%= render_attr('AAK00900', @地方特別法人事業税中間納付) %>
147
147
  <AAK01000 />
148
- <AAK01100><%= 地方法人特別税(@所得割) - @地方特別法人事業税中間納付 %></AAK01100>
148
+ <AAK01100><%= 特別法人事業税(@所得割) - @地方特別法人事業税中間納付 %></AAK01100>
149
149
  <AAK01200 />
150
- <AAK01300><%= 地方法人特別税(@所得割) - @地方特別法人事業税中間納付 %></AAK01300>
150
+ <AAK01300><%= 特別法人事業税(@所得割) - @地方特別法人事業税中間納付 %></AAK01300>
151
151
  <%= render_attr('AAF00100', 当期所得金額) %>
152
152
  <AAF00200 />
153
153
  <AAF00300 />
@@ -157,7 +157,7 @@
157
157
  <%= render_attr('AAF00700', @繰越損失管理.deduction) %>
158
158
  <%= render_attr('AAG00100', 所得金額) %>
159
159
  <AAH00100 />
160
- <AAH00200><%= 中間還付税額(@確定法人税割, @法人税割中間納付) + 中間還付税額(@所得割, 事業税中間納付) + 中間還付税額(地方法人特別税(@所得割), @地方特別法人事業税中間納付) %></AAH00200>
160
+ <AAH00200><%= 中間還付税額(@確定法人税割, @法人税割中間納付) + 中間還付税額(@所得割, 事業税中間納付) + 中間還付税額(特別法人事業税(@所得割), @地方特別法人事業税中間納付) %></AAH00200>
161
161
  <AAH00400><%= eltax_kouza %></AAH00400>
162
162
  <AAI00100>
163
163
  <gen:era />
data/lib/luca/jp/util.rb CHANGED
@@ -21,10 +21,10 @@ module Luca
21
21
  end
22
22
  end
23
23
 
24
- def prepaid_tax(code)
25
- #LucaSupport::Code.readable(@bs_data.dig(code) || 0)
24
+ def prepaid_tax(code, customer = nil)
26
25
  search_end = @end_date.prev_month # exclude year end adjustment
27
- amount, _ = self.class.net(@start_date.year, @start_date.month, search_end.year, search_end.month, code: code)
26
+ header = { customer: customer } unless customer.nil?
27
+ amount, _ = self.class.net(@start_date.year, @start_date.month, search_end.year, search_end.month, code: code, header: header)
28
28
  LucaSupport::Code.readable(amount[code] || 0)
29
29
  end
30
30
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Luca
4
4
  module Jp
5
- VERSION = '0.9.0'
5
+ VERSION = '0.12.0'
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.9.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chuma Takahiro
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-15 00:00:00.000000000 Z
11
+ date: 2022-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lucabook
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '0.4'
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'
26
+ version: '0.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -98,6 +98,7 @@ files:
98
98
  - lib/luca/jp/templates/beppyo7.xml.erb
99
99
  - lib/luca/jp/templates/chidai-meisai.xml.erb
100
100
  - lib/luca/jp/templates/consumption.xtx.erb
101
+ - lib/luca/jp/templates/el-no20.xml.erb
101
102
  - lib/luca/jp/templates/el-no6-43.xml.erb
102
103
  - lib/luca/jp/templates/el-no6-9.xml.erb
103
104
  - lib/luca/jp/templates/el-no6.xml.erb