Module: Luca::Jp::Common

Included in:
Aoiro, Chihouzei, Syouhizei
Defined in:
lib/luca/jp/common.rb

Class Method Summary collapse

Class Method Details

.レポート種別Object



350
351
352
# File 'lib/luca/jp/common.rb', line 350

def レポート種別
  @report_category == 'city' ? ['city', '23ku'] : ['prefecture', '23ku']
end

.一般区分の税額(所得 = nil) ⇒ Object



60
61
62
# File 'lib/luca/jp/common.rb', line 60

def 一般区分の税額(所得 = nil)
  (中小企業の軽減税率対象を超える所得(所得) * 23.2 / 100).to_i
end

.中小企業の軽減税率対象を超える所得(所得 = nil) ⇒ Object



49
50
51
52
53
54
55
56
57
58
# File 'lib/luca/jp/common.rb', line 49

def 中小企業の軽減税率対象を超える所得(所得 = nil)
  所得 ||= 所得金額
  return 0 if 所得 <= 0

  if 所得 <= 8_000_000
    0
  else
    ((所得 - 8_000_000) / 1000).floor * 1000
  end
end

.中小企業の軽減税率対象所得(所得 = nil) ⇒ Object


:section: 法人税額の計算




32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/luca/jp/common.rb', line 32

def 中小企業の軽減税率対象所得(所得 = nil)
  所得 ||= 所得金額
  return 0 if 所得 <= 0

  if 所得 >= 8_000_000
    8_000_000
  elsif 所得 < 0
    0
  else
    (所得 / 1000).floor * 1000
  end
end

.中小企業の軽減税額(所得 = nil) ⇒ Object



45
46
47
# File 'lib/luca/jp/common.rb', line 45

def 中小企業の軽減税額(所得 = nil)
    中小企業の軽減税率対象所得(所得) * 15 / 100
end

.中間還付税額(税額, 中間納付額) ⇒ Object



268
269
270
271
272
273
274
# File 'lib/luca/jp/common.rb', line 268

def 中間還付税額(税額, 中間納付額)
  if 税額 < 中間納付額
    中間納付額 - 税額
  else
    0
  end
end

.事業所数による分割課税標準(課税標準) ⇒ Object



342
343
344
345
346
347
348
# File 'lib/luca/jp/common.rb', line 342

def 事業所数による分割課税標準(課税標準)
  分割基準の総数 = Luca::Jp::Util.eltax_config('reports')
                     .filter { |r| レポート種別.include?(r['type']) }
                     .map { |r| (r['office_count'] || 1).to_i }.sum
  ((課税標準.to_f / 分割基準の総数).floor(分割基準の総数.to_s.length) * @office_count / 1000)
    .floor * 1000
end

.事業税の分割課税標準(課税標準) ⇒ Object


:section: 複数自治体間の分割計算




320
321
322
323
324
325
326
327
328
329
330
331
332
# File 'lib/luca/jp/common.rb', line 320

def 事業税の分割課税標準(課税標準)
  case Luca::Jp::Util.eltax_config('reports')
         .filter { |r| レポート種別.include?(r['type']) }.length
  when 0, 1
    課税標準
  else
    half = (課税標準 / 2 / 1000).floor * 1000
    [
      事業所数による分割課税標準(half),
      従業員数による分割課税標準(half)
    ].sum
  end
end

.地方法人税額(地方法人税課税標準) ⇒ Object



64
65
66
# File 'lib/luca/jp/common.rb', line 64

def 地方法人税額(地方法人税課税標準)
  (地方法人税課税標準 * 10.3 / 100).to_i
end

.地方消費税中間納付額Object



294
295
296
# File 'lib/luca/jp/common.rb', line 294

def 地方消費税中間納付額
  prepaid_tax('185C')
end

.地方税資本金等の額Object



305
306
307
# File 'lib/luca/jp/common.rb', line 305

def 地方税資本金等の額
  [資本金等の額, readable(['911', '9131'].map { |cd| @bs_data.dig(cd) }.compact.sum)].max
end

.均等割Object


:section: 地方税額の計算




115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/luca/jp/common.rb', line 115

def 均等割
  tax = if 地方税資本金等の額 <= 10_000_000
          city = @employee > 50 ? 120_000 : 50_000
          [20_000, city]
        elsif 地方税資本金等の額 <= 100_000_000
          city = @employee > 50 ? 150_000 : 130_000
          [50_000, city]
        elsif 地方税資本金等の額 <= 1_000_000_000
          city = @employee > 50 ? 400_000 : 160_000
          [130_000, city]
        elsif 地方税資本金等の額 <= 5_000_000_000
          city = @employee > 50 ? 1_750_000 : 410_000
          [540_000, city]
        else
          city = @employee > 50 ? 3_000_000 : 410_000
          [800_000, city]
        end
  tokyo23? ? [tax.sum, 0] : tax
end

.当期所得金額Object

税引前当期利益をもとに計算 消費税を租税公課に計上している場合、控除済みの金額 事業税は仮払経理の場合にも納付時損金/還付時益金



79
80
81
82
83
# File 'lib/luca/jp/common.rb', line 79

def 当期所得金額
  _, 納付事業税 = 未納事業税期中増減
  事業税中間納付 = prepaid_tax('1854') + prepaid_tax('1855') + prepaid_tax('1856') + prepaid_tax('1857') + prepaid_tax('1858')
  LucaSupport::Code.readable(@pl_data.dig('GA') - 納付事業税 - 事業税中間納付 + 還付事業税)
end

.当期控除計Object



95
96
97
# File 'lib/luca/jp/common.rb', line 95

def 当期控除計
  @繰越損失管理.deduction
end

.当期繰越損失Object



105
106
107
108
# File 'lib/luca/jp/common.rb', line 105

def 当期繰越損失
  @繰越損失管理.records
    .filter { |record| record['start_date'] == @start_date }.dig(0, 'increase') || 0
end

.従業員数による分割課税標準(課税標準) ⇒ Object



334
335
336
337
338
339
340
# File 'lib/luca/jp/common.rb', line 334

def 従業員数による分割課税標準(課税標準)
  分割基準の総数 = Luca::Jp::Util.eltax_config('reports')
                     .filter { |r| レポート種別.include?(r['type']) }
                     .map { |r| (r['employee'] || 1).to_i }.sum
  ((課税標準.to_f / 分割基準の総数).floor(分割基準の総数.to_s.length) * @employee / 1000)
    .floor * 1000
end

.所得400万以下(所得 = nil) ⇒ Object



170
171
172
173
174
175
176
177
178
179
180
# File 'lib/luca/jp/common.rb', line 170

def 所得400万以下(所得 = nil)
  所得 ||= 所得金額
  return 0 if 所得 < 0

  total = if 所得 >= 4_000_000
            4_000_000
          else
            (所得 / 1000).floor * 1000
          end
  事業税の分割課税標準(total)
end

.所得800万以下(所得 = nil) ⇒ Object



198
199
200
201
202
203
204
205
206
207
208
209
210
# File 'lib/luca/jp/common.rb', line 198

def 所得800万以下(所得 = nil)
  所得 ||= 所得金額
  return 0 if 所得 < 0

  total = if 所得 <= 4_000_000
            0
          elsif 所得 >= 8_000_000
            4_000_000
          else
            ((所得 - 4_000_000) / 1000).floor * 1000
          end
  事業税の分割課税標準(total)
end

.所得800万超(所得 = nil) ⇒ Object



228
229
230
231
232
233
234
235
236
237
238
# File 'lib/luca/jp/common.rb', line 228

def 所得800万超(所得 = nil)
  所得 ||= 所得金額
  return 0 if 所得 < 0

  total = if 所得 <= 8_000_000
    0
  else
    ((所得 - 8_000_000) / 1000).floor * 1000
  end
  事業税の分割課税標準(total)
end

.所得割400万以下(所得 = nil) ⇒ Object

100円未満切り捨て



166
167
168
# File 'lib/luca/jp/common.rb', line 166

def 所得割400万以下(所得 = nil)
  ((所得400万以下(所得) * 所得割税率400万以下(所得) / 100) / 100).floor * 100
end

.所得割800万以下(所得 = 0) ⇒ Object

100円未満切り捨て



194
195
196
# File 'lib/luca/jp/common.rb', line 194

def 所得割800万以下(所得 = 0)
  ((所得800万以下(所得) * 所得割税率800万以下(所得) / 100) / 100).floor * 100
end

.所得割800万超(所得 = 0) ⇒ Object

100円未満切り捨て



224
225
226
# File 'lib/luca/jp/common.rb', line 224

def 所得割800万超(所得 = 0)
  ((所得800万超(所得) * 所得割税率800万超(所得) / 100) / 100).floor * 100
end

.所得割税率400万以下(所得 = nil) ⇒ Object



182
183
184
185
186
187
188
189
190
191
# File 'lib/luca/jp/common.rb', line 182

def 所得割税率400万以下(所得 = nil)
  return @shotyoku399.to_f if @shotoku399

  所得 ||= 所得金額
  if 期末資本金 > 100_000_000 || 所得 > 25_000_000
    軽減税率不適用法人 ? 7.48 : 3.75
  else
    軽減税率不適用法人 ? 7.0 : 3.5
  end
end

.所得割税率800万以下(所得 = nil) ⇒ Object



212
213
214
215
216
217
218
219
220
221
# File 'lib/luca/jp/common.rb', line 212

def 所得割税率800万以下(所得 = nil)
  return @shotyoku401.to_f if @shotoku401

  所得 ||= 所得金額
  if 期末資本金 > 100_000_000 || 所得 > 25_000_000
    軽減税率不適用法人 ? 7.48 : 5.665
  else
    軽減税率不適用法人 ? 7.0 : 5.3
  end
end

.所得割税率800万超(所得 = nil) ⇒ Object



240
241
242
243
244
245
246
247
248
249
# File 'lib/luca/jp/common.rb', line 240

def 所得割税率800万超(所得 = nil)
  return @shotyoku801.to_f if @shotoku801

  所得 ||= 所得金額
  if 期末資本金 > 100_000_000 || 所得 > 25_000_000
    7.48
  else
    7.0
  end
end

.所得金額Object

繰越損失適用後の所得金額



70
71
72
73
# File 'lib/luca/jp/common.rb', line 70

def 所得金額
  @繰越損失管理 = Sonshitsu.load(@end_date).update(当期所得金額).save if @繰越損失管理.nil?
  @繰越損失管理.profit
end

.期末資本金Object



313
314
315
# File 'lib/luca/jp/common.rb', line 313

def 期末資本金
  readable(@bs_data.dig('911'))
end

.期首繰越損失Object


:section: 繰越損失の計算




89
90
91
92
93
# File 'lib/luca/jp/common.rb', line 89

def 期首繰越損失
  @繰越損失管理.records
    .filter { |record| record['start_date'] > @end_date.prev_year(10) && record['end_date'] < @start_date }
    .inject(0) { |sum, record| sum + (record['amount'] || 0) }
end

.未納事業税期中増減Object



280
281
282
283
# File 'lib/luca/jp/common.rb', line 280

def 未納事業税期中増減
  r = gross_amount('5152', @start_date.year, @start_date.month, @end_date.year, @end_date.month)
  [LucaSupport::Code.readable(r[1]), LucaSupport::Code.readable(r[0])]
end

.法人税割(法人税 = nil) ⇒ Object

100円未満切り捨て



136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/luca/jp/common.rb', line 136

def 法人税割(法人税 = nil)
  課税標準 = if 法人税
               (法人税 / 1000).floor * 1000
             else
               法人税割課税標準
             end
  県税率, 市税率 = 法人税割税率(課税標準)
  [
    (課税標準 * 県税率 / 100 / 100).floor * 100,
    (課税標準 * 市税率 / 100 / 100).floor * 100
  ]
end

.法人税割税率(法人税 = nil) ⇒ Object



149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# File 'lib/luca/jp/common.rb', line 149

def 法人税割税率(法人税 = nil)
  return [@houjinzeiwari_rate.to_f, @houjinzeiwari_rate.to_f] if @houjinzeiwari_rate

  課税標準 = if 法人税
               (法人税 / 1000).floor * 1000
             else
               法人税割課税標準
             end
  rate = if 期末資本金 > 100_000_000 || 課税標準 > 10_000_000
           [2.0, 8.4]
         else
           [1.0, 6.0]
         end
  tokyo23? ? [rate.sum, 0] : rate
end

.消費税中間納付額Object


:section: 消費税の計算




290
291
292
# File 'lib/luca/jp/common.rb', line 290

def 消費税中間納付額
  prepaid_tax('185B')
end

.消費税課税売上高(税率 = 10) ⇒ Object



256
257
258
# File 'lib/luca/jp/common.rb', line 256

def 消費税課税売上高(税率 = 10)
  LucaSupport::Code.readable(@pl_data.dig('A0') * 100 / (100 + 税率).floor || 0)
end

.特別法人事業税(事業税) ⇒ Object

100円未満切り捨て



252
253
254
# File 'lib/luca/jp/common.rb', line 252

def 特別法人事業税(事業税)
  ((事業税 * 37 / 100) / 100).floor * 100
end

.税額計算Object

法人税、地方税の当期確定税額の計算



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/luca/jp/common.rb', line 12

def 税額計算
  所得 = 所得金額
  { houjin: {}, kenmin: {}, shimin: {} }.tap do |tax|
    法人税額 = 中小企業の軽減税額(所得) + 一般区分の税額(所得)
    tax[:houjin][:kokuzei] = (法人税額 / 100).floor * 100
    地方法人税課税標準 = (法人税額 / 1000).floor * 1000
    地方法人税 = 地方法人税額(地方法人税課税標準)
    tax[:houjin][:chihou] = (地方法人税 / 100).floor * 100

    tax[:kenmin][:houjinzei], tax[:shimin][:houjinzei] = 法人税割(法人税額)
    tax[:kenmin][:kintou], tax[:shimin][:kintou] = 均等割 if @report_category
    tax[:kenmin][:shotoku] = 所得割400万以下(所得) + 所得割800万以下(所得) + 所得割800万超(所得)
    tax[:kenmin][:tokubetsu] = 特別法人事業税(tax[:kenmin][:shotoku])
  end
end

.納付税額(税額, 中間納付額) ⇒ Object



260
261
262
263
264
265
266
# File 'lib/luca/jp/common.rb', line 260

def 納付税額(税額, 中間納付額)
  if 税額 > 中間納付額
    税額 - 中間納付額
  else
    0
  end
end

.翌期繰越損失Object



99
100
101
102
103
# File 'lib/luca/jp/common.rb', line 99

def 翌期繰越損失
  @繰越損失管理.records
    .filter { |record| record['start_date'] > @end_date.prev_year(10) && record['end_date'] < @start_date }
    .inject(0) { |sum, record| sum + (record['amount'] || 0) }
end

.資本金等の額Object


:section: 外形標準の計算




301
302
303
# File 'lib/luca/jp/common.rb', line 301

def 資本金等の額
  readable(['911', '913', '916'].map { |cd| @bs_data.dig(cd) }.compact.sum)
end

.軽減税率不適用法人Object



309
310
311
# File 'lib/luca/jp/common.rb', line 309

def 軽減税率不適用法人
  期末資本金 > 10_000_000 && eltax_config('no_keigen')
end

.還付事業税Object



276
277
278
# File 'lib/luca/jp/common.rb', line 276

def 還付事業税
  refund_tax('1504')
end