lucabook 0.2.29 → 0.3.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: b6e3ddc43f78a55be0357756cc617efd9fc798836cd771e4814a058e62abc6eb
4
- data.tar.gz: b5b6d3419d2dbfcee9f859744c7513830a6576868a6a51241ea0ee04633c0c5f
3
+ metadata.gz: b14674db9c7c07b4e523d4603f98e745ab680951822041666e7d957409aabfaf
4
+ data.tar.gz: 1a62eb8f39388727ab65bfa1f5242ac84a8c482a051715e944215d126b7bf93f
5
5
  SHA512:
6
- metadata.gz: f2c7c3b7043a60f39379be1c6e36b02367e2ec31261b0268768934c2f258cba62d3fc042f6286c5ac62b15289a89d1ac6e05143dcb9f2ecc04b5aa8d37bb9a89
7
- data.tar.gz: 653e43c3f11785dabf83e8997810ae3316b8549b8370854e42bcc170ba54729dc50762e11e0733fbff2994fc15a37d6ac1eeb60c2581885f451acafeb57f5cdc
6
+ metadata.gz: 6f5005cc3efbc02170c73418e760a5ac39b87480fbdc78caf5cc5f2604ab009ea8cf6437a90473a675c8716e77de2d6eefeb77b0a7ee0de3337016ee78d7e83d
7
+ data.tar.gz: ed2ef276ea1e82f8c074fcde7ab2a9ee7fe29ea952098e58ac486f65b8ddc22a1e87218f0ecc6cee19e56832fd1acd14f7945adfefa6931bf93db7ec0532adc4
data/exe/luca-book CHANGED
@@ -56,8 +56,23 @@ class LucaCmd
56
56
  def self.xbrl(args, params)
57
57
  level = params[:level] || 3
58
58
  legal = params[:legal] || false
59
- args = gen_range(params[:n] || 1) if args.empty?
60
- LucaBook::State.range(*args).render_xbrl(params[:output])
59
+ range = case args.length
60
+ when 4
61
+ args
62
+ when 2
63
+ date = Date.new(args[0].to_i, args[1].to_i)
64
+ r = LucaBook::Util.current_fy(date, to: date)
65
+ [r[0].year, r[0].month, r[1].year, r[1].month]
66
+ when 0
67
+ if params[:n]
68
+ gen_range(params[:n])
69
+ else
70
+ date = params[:lastyear] ? Date.today.prev_year : Date.today
71
+ r = LucaBook::Util.current_fy(date)
72
+ [r[0].year, r[0].month, r[1].year, r[1].month]
73
+ end
74
+ end
75
+ LucaBook::State.range(*range).render_xbrl(params[:output])
61
76
  end
62
77
 
63
78
  def self.balancesheet(args, params)
@@ -110,6 +125,11 @@ class LucaCmd
110
125
  def self.update_balance(args, params)
111
126
  LucaBook::Dict.generate_balance(*args)
112
127
  end
128
+
129
+ def self.export_balance(args, params)
130
+ date = Date.new(args[0].to_i, args[1].to_i, args[2].to_i)
131
+ LucaBook::Dict.export_balance(date)
132
+ end
113
133
  end
114
134
  end
115
135
 
@@ -192,14 +212,16 @@ when /reports?/, 'r'
192
212
  case subcmd
193
213
  when 'xbrl'
194
214
  OptionParser.new do |opt|
195
- opt.banner = 'Usage: luca-book reports bs [options] [YYYY M]'
196
- opt.on('-o', '--output VAL', 'output filename') { |v| params[:output] = v }
215
+ opt.banner = 'Usage: luca-book r[eports] xbrl [options] [YYYY M]'
216
+ opt.on('-n VAL', 'report count') { |v| params[:n] = v.to_i }
217
+ opt.on('-o VAL', '--output VAL', 'specify file name') { |v| params[:output] = v }
218
+ opt.on('--lastyear', 'report last Financial Year') { |_v| params[:lastyear] = true }
197
219
  args = opt.parse!(ARGV)
198
220
  LucaCmd::Report.xbrl(args, params)
199
221
  end
200
222
  when 'bs'
201
223
  OptionParser.new do |opt|
202
- opt.banner = 'Usage: luca-book reports bs [options] [YYYY M]'
224
+ opt.banner = 'Usage: luca-book r[eports] bs [options] [YYYY M]'
203
225
  opt.on('-l', '--level VAL', 'account level') { |v| params[:level] = v.to_i }
204
226
  opt.on('--legal', 'show legal mandatory account') { |_v| params[:legal] = true }
205
227
  opt.on('--nu', 'show table in nushell') { |_v| params[:output] = 'nu' }
@@ -209,7 +231,7 @@ when /reports?/, 'r'
209
231
  end
210
232
  when 'pl'
211
233
  OptionParser.new do |opt|
212
- opt.banner = 'Usage: luca-book reports pl [options] [YYYY M YYYY M]'
234
+ opt.banner = 'Usage: luca-book r[eports] pl [options] [YYYY M YYYY M]'
213
235
  opt.on('-l', '--level VAL', 'account level') { |v| params[:level] = v.to_i }
214
236
  opt.on('-n VAL', 'report count') { |v| params[:n] = v.to_i }
215
237
  opt.on('--nu', 'show table in nushell') { |_v| params[:output] = 'nu' }
@@ -219,7 +241,7 @@ when /reports?/, 'r'
219
241
  end
220
242
  when 'mail'
221
243
  OptionParser.new do |opt|
222
- opt.banner = 'Usage: luca-book reports mail [options] [YYYY M YYYY M]'
244
+ opt.banner = 'Usage: luca-book r[eports] mail [options] [YYYY M YYYY M]'
223
245
  opt.on('-l', '--level VAL', 'account level') { |v| params[:level] = v.to_i }
224
246
  opt.on('-n VAL', 'report count') { |v| params[:n] = v.to_i }
225
247
  args = opt.parse!(ARGV)
@@ -228,9 +250,11 @@ when /reports?/, 'r'
228
250
  else
229
251
  puts 'Proper subcommand needed.'
230
252
  puts
231
- puts 'Usage: luca-book (r|report[s]) (bs|pl) [options] YYYY M'
253
+ puts 'Usage: luca-book (r|report[s]) (bs|pl|mail|xbrl) [options] YYYY M'
232
254
  puts ' bs: show balance sheet'
233
255
  puts ' pl: show statement of income'
256
+ puts ' mail: send BS/PL via email'
257
+ puts ' xbrl: render XBRL report'
234
258
  exit 1
235
259
  end
236
260
  when /balance/
@@ -242,6 +266,12 @@ when /balance/
242
266
  args = opt.parse!(ARGV)
243
267
  LucaCmd::Dict.update_balance(args, params)
244
268
  end
269
+ when 'export'
270
+ OptionParser.new do |opt|
271
+ opt.banner = 'Usage: luca-book balance export YYYY M d'
272
+ args = opt.parse!(ARGV)
273
+ LucaCmd::Dict.export_balance(args, params)
274
+ end
245
275
  end
246
276
  else
247
277
  puts 'Proper subcommand needed.'
@@ -249,5 +279,6 @@ else
249
279
  puts 'Usage: luca-book (j[ournals]|r[eports]) subcommand'
250
280
  puts ' journals: operate journal records'
251
281
  puts ' reports: show reports'
282
+ puts ' balance update: generate accumulated balance'
252
283
  exit 1
253
284
  end
@@ -5,7 +5,7 @@ require 'luca_support/config'
5
5
 
6
6
  module LucaBook
7
7
  module Accumulator
8
- def self.included(klass) # :nodoc:
8
+ def self.included(klass) #:nodoc:
9
9
  klass.extend ClassMethods
10
10
  end
11
11
 
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LucaBook # :nodoc:
4
+ module Code
5
+ module_function
6
+
7
+ def currency_code(country)
8
+ {
9
+ 'de' => 'EUR',
10
+ 'ee' => 'EUR',
11
+ 'fr' => 'EUR',
12
+ 'gb' => 'GBP',
13
+ 'in' => 'INR',
14
+ 'it' => 'EUR',
15
+ 'nl' => 'EUR',
16
+ 'jp' => 'JPY',
17
+ 'uk' => 'GBP',
18
+ 'us' => 'USD'
19
+ }[country]
20
+ end
21
+ end
22
+ end
@@ -139,6 +139,31 @@ module LucaBook
139
139
  File.open(filepath, 'w') { |f| f.write csv }
140
140
  end
141
141
 
142
+ # TODO: support date in the middle of month.
143
+ def self.export_balance(date)
144
+ start_date, end_date = Util.current_fy(date, to: date)
145
+ labels = load('base.tsv')
146
+ bs = load_balance(start_date, end_date)
147
+ dat = [].tap do |res|
148
+ item = {}
149
+ item['date'] = date.to_s
150
+ item['debit'] = []
151
+ item['credit'] = []
152
+ bs.each do |code, balance|
153
+ next if balance.zero?
154
+
155
+ if /^[1-4]/.match(code)
156
+ item['debit'] << { 'label' => labels.dig(code, :label), 'amount' => LucaSupport::Code.readable(balance) }
157
+ elsif /^[5-9]/.match(code)
158
+ item['credit'] << { 'label' => labels.dig(code, :label), 'amount' => LucaSupport::Code.readable(balance) }
159
+ end
160
+ end
161
+ item['x-editor'] = 'LucaBook'
162
+ res << item
163
+ end
164
+ puts JSON.dump(dat)
165
+ end
166
+
142
167
  def self.load_balance(start_date, end_date)
143
168
  base = latest_balance(start_date).each_with_object({}) do |(k, v), h|
144
169
  h[k] = BigDecimal(v[:balance].to_s) if v[:balance]
@@ -81,7 +81,7 @@ module LucaBook
81
81
  else
82
82
  amount = BigDecimal(row[@config[:credit_amount]])
83
83
  end
84
- default_label = debit ? @config.dig(:default_debit) : @config.dig(:default_credit)
84
+ default_label = debit ? @config[:default_debit] : @config[:default_credit]
85
85
  code, options = search_code(row[@config[:label]], default_label, amount)
86
86
  counter_code = @code_map.dig(@config[:counter_label])
87
87
  if options
@@ -94,10 +94,12 @@ module LucaBook
94
94
  d['date'] = parse_date(row)
95
95
  if debit
96
96
  d['debit'] = data
97
+ d['debit'][0]['code'] ||= DEBIT_DEFAULT
97
98
  d['credit'] = data_c
98
99
  else
99
100
  d['debit'] = data_c
100
101
  d['credit'] = data
102
+ d['credit'][0]['code'] ||= CREDIT_DEFAULT
101
103
  end
102
104
  d['note'] = Array(@config[:note]).map{ |col| row[col] }.join(' ')
103
105
  d['headers'] = { 'x-editor' => "LucaBook::Import/#{@dict_name}" }
@@ -162,5 +162,36 @@ module LucaBook #:nodoc:
162
162
  record[:note] = record[:note]&.join('\n')
163
163
  end
164
164
  end
165
+
166
+ # Load data based on account code.
167
+ #
168
+ def self.filter_by_code(start_year, start_month, end_year, end_month, code, recursive = true, basedir = @dirname)
169
+ return enum_for(:filter_by_code, start_year, start_month, end_year, end_month, code, basedir) unless block_given?
170
+
171
+ re = recursive ? "^#{code}" : "^#{code}$"
172
+ LucaSupport::Code.encode_term(start_year, start_month, end_year, end_month).each do |subdir|
173
+ open_records(basedir, subdir, nil, nil) do |f, path|
174
+ CSV.new(f, headers: false, col_sep: "\t", encoding: 'UTF-8')
175
+ .each.with_index(0) do |line, i|
176
+ case i
177
+ when 0
178
+ if line.find { |cd| /#{re}/.match(cd) }
179
+ f.rewind
180
+ yield load_data(f, path), path
181
+ break
182
+ end
183
+ when 2
184
+ if line.find { |cd| /#{re}/.match(cd) }
185
+ f.rewind
186
+ yield load_data(f, path), path
187
+ end
188
+ when 3
189
+ break
190
+ else # skip
191
+ end
192
+ end
193
+ end
194
+ end
195
+ end
165
196
  end
166
197
  end
@@ -162,6 +162,7 @@ module LucaBook #:nodoc:
162
162
  view = { code: record[:code], amount: {} }
163
163
  view[:date], view[:txid] = decode_id(voucher[:id])
164
164
  view[:label] = @@dict.dig(record[:code], :label) if record[:code].length >= 4
165
+ view[:label] = voucher.dig(:headers, 'x-customer') if view[:label].nil?
165
166
  view[:amount][balance] = readable(record[:amount])
166
167
  view[:counter_code] = voucher.dig(counter_balance, 0, :code)
167
168
  view[:counter_label] = @@dict.dig(view[:counter_code], :label) || ''
@@ -49,7 +49,7 @@ module LucaBook #:nodoc:
49
49
  res['note'] = dat[:note]
50
50
  end
51
51
  end
52
- a << { 'code' => v.last[:code], 'header' => k, 'balance' => v.last[:balance], 'count' => v.count, 'jounals' => journals }
52
+ a << { 'code' => v.last[:code], 'header' => k, 'balance' => v.last[:balance], 'count' => v.count, 'journals' => journals }
53
53
  end
54
54
  readable(@data)
55
55
  end
@@ -67,16 +67,8 @@ module LucaBook #:nodoc:
67
67
  def set_balance
68
68
  return BigDecimal('0') if @code.nil? || /^[A-H]/.match(@code)
69
69
 
70
- balance_dict = Dict.latest_balance(@start)
71
- start_balance = BigDecimal(balance_dict.dig(@code.to_s, :balance) || '0')
72
- start = Dict.issue_date(balance_dict)&.next_month
73
- last = @start.prev_month
74
- if last.year >= start.year && last.month >= start.month
75
- #TODO: start_balance to be implemented by header
76
- self.class.term(start.year, start.month, last.year, last.month, code: @code).accumulate_code
77
- else
78
- #start_balance
79
- end
70
+ #TODO: start_balance to be implemented by header
71
+ LucaBook::State.start_balance(@start.year, @start.month)
80
72
  end
81
73
 
82
74
  def calc_code
@@ -19,6 +19,12 @@ module LucaBook
19
19
  end
20
20
  FileUtils.cp("#{__dir__}/templates/#{dict}", 'dict/base.tsv') unless File.exist?('dict/base.tsv')
21
21
  FileUtils.cp("#{__dir__}/templates/config.yml", 'config.yml') unless File.exist?('config.yml')
22
+ exdict = if File.exist?("#{__dir__}/templates/dictex-#{country}.tsv")
23
+ "dict-#{country}.tsv"
24
+ else
25
+ nil
26
+ end
27
+ FileUtils.cp("#{__dir__}/templates/#{exdict}", 'dict/ext.tsv') unless (File.exist?('dict/ext.tsv') || exdict.nil?)
22
28
  prepare_starttsv(dict) unless File.exist? 'data/balance/start.tsv'
23
29
  end
24
30
  end
@@ -146,7 +146,7 @@ module LucaBook
146
146
  res['debit_label'] = base[:debit][i] ? @@dict.dig(base[:debit][i].keys[0], :label) : ''
147
147
  #res['debit_balance'] = base[:debit][i] ? (@start_balance.dig(base[:debit][i].keys[0]) || 0) + base[:debit][i].values[0] : ''
148
148
  res['debit_balance'] = base[:debit][i] ? base[:debit][i].values[0] : ''
149
- res['credit_label'] = base[:credit][i] ? @dict.dig(base[:credit][i].keys[0], :label) : ''
149
+ res['credit_label'] = base[:credit][i] ? @@dict.dig(base[:credit][i].keys[0], :label) : ''
150
150
  #res['credit_balance'] = base[:credit][i] ? (@start_balance.dig(base[:credit][i].keys[0]) || 0) + base[:credit][i].values[0] : ''
151
151
  res['credit_balance'] = base[:credit][i] ? base[:credit][i].values[0] : ''
152
152
  a << res
@@ -245,12 +245,14 @@ module LucaBook
245
245
  prior_bs = @start_balance.filter { |k, _v| /^[9]/.match(k) }
246
246
  @xbrl_entries = @bs_data.map{ |k, v| xbrl_line(k, v, prior_bs[k]) }.compact.join("\n")
247
247
  @xbrl_entries += @pl_data.map{ |k, v| xbrl_line(k, v) }.compact.join("\n")
248
+ @xbrl_entries += equity_change.join("\n")
248
249
  @filename = filename || @issue_date.to_s
249
250
 
250
251
  File.open("#{@filename}.xbrl", 'w') { |f| f.write render_erb(search_template("base-#{country_suffix}.xbrl.erb")) }
251
252
  File.open("#{@filename}.xsd", 'w') { |f| f.write render_erb(search_template("base-#{country_suffix}.xsd.erb")) }
252
253
  end
253
254
 
255
+ # TODO: proper decimals attr for each currency
254
256
  def xbrl_line(code, amount, prior_amount = nil)
255
257
  return nil if /^_/.match(code)
256
258
 
@@ -260,8 +262,12 @@ module LucaBook
260
262
  return nil if tag.nil?
261
263
  return nil if readable(amount).zero? && prior_amount.nil?
262
264
 
263
- prior = prior_amount.nil? ? '' : "<#{tag} decimals=\"0\" unitRef=\"JPY\" contextRef=\"Prior1YearNonConsolidatedInstant\">#{readable(prior_amount)}</#{tag}>\n"
264
- current = "<#{tag} decimals=\"0\" unitRef=\"JPY\" contextRef=\"#{context}\">#{readable(amount)}</#{tag}>"
265
+ prior = if prior_amount.nil?
266
+ /^[9]/.match(code) ? "<#{tag} decimals=\"0\" unitRef=\"#{Code.currency_code(CONFIG['country'])}\" contextRef=\"Prior1YearNonConsolidatedInstant\">0</#{tag}>\n" : ''
267
+ else
268
+ "<#{tag} decimals=\"0\" unitRef=\"#{Code.currency_code(CONFIG['country'])}\" contextRef=\"Prior1YearNonConsolidatedInstant\">#{readable(prior_amount)}</#{tag}>\n"
269
+ end
270
+ current = "<#{tag} decimals=\"0\" unitRef=\"#{Code.currency_code(CONFIG['country'])}\" contextRef=\"#{context}\">#{readable(amount)}</#{tag}>"
265
271
 
266
272
  prior + current
267
273
  end
@@ -280,9 +286,12 @@ module LucaBook
280
286
  private
281
287
 
282
288
  def set_bs(level = 3, legal: false)
283
- @start_balance.each do |k, v|
284
- next if /^_/.match(k)
285
- @monthly.first[k] = (v || 0) + (@monthly.first[k] || 0)
289
+ unless @monthly.first['_setup']
290
+ @start_balance.each do |k, v|
291
+ next if /^_/.match(k)
292
+ @monthly.first[k] = (v || 0) + (@monthly.first[k] || 0)
293
+ end
294
+ @monthly.first['_setup'] = 'done'
286
295
  end
287
296
  list = @monthly.map { |data| data.select { |k, _v| k.length <= level } }
288
297
  list.map! { |data| code_sum(data).merge(data) } if legal
@@ -317,6 +326,59 @@ module LucaBook
317
326
  end
318
327
  end
319
328
 
329
+ def equity_change
330
+ begin
331
+ ex_dict = LucaRecord::Dict.new('ext.tsv')
332
+ rescue
333
+ return nil
334
+ end
335
+
336
+ changes = []
337
+ LucaBook::Journal.filter_by_code(@start_date.year, @start_date.month, @end_date.year, @end_date.month, '9').each do |dat|
338
+ debit_str = 'ASET' if dat[:debit].find { |e| /^[124]/.match(e[:code]) }
339
+ debit_str ||= '33' if dat[:debit].find { |e| /^[33]/.match(e[:code]) }
340
+ debit_str ||= 'ASET' if dat[:debit].find { |e| /^[3]/.match(e[:code]) }
341
+ credit_str = 'DEBT' if dat[:credit].find { |e| /^[57]/.match(e[:code]) }
342
+ credit_str ||= 'ASET' if dat[:credit].find { |e| /^[12]/.match(e[:code]) }
343
+ dat[:credit].each do |entry|
344
+ case entry[:code]
345
+ when /^(91[0-9a-zA-Z]+)/
346
+ code = $1
347
+ debit_str ||= dat[:debit].find { |e| /^[9]/.match(e[:code]) }.dig(:code)
348
+ debit_str = '914' if /^914[0-9a-zA-Z]+/.match(debit_str)
349
+ tag = ex_dict.dig("#{debit_str}:c#{code}#{credit_str}")&.dig(:xbrl_id)
350
+ changes << [tag, readable(entry[:amount])] if tag
351
+ end
352
+ end
353
+ dat[:debit].each do |entry|
354
+ case entry[:code]
355
+ when /^(916[0-9a-zA-Z]*)/
356
+ tag = ex_dict.dig("d#{$1}:_")&.dig(:xbrl_id)
357
+ changes << [tag, readable(entry[:amount] * -1)] if tag
358
+ when /^(91[0-57-9a-zA-Z]+)/
359
+ code = $1
360
+ credit_str ||= dat[:credit].find { |e| /^[9]/.match(e[:code]) }.dig(:code)
361
+ credit_str = '914' if /^914[0-9a-zA-Z]+/.match(credit_str)
362
+ tag = ex_dict.dig("#{debit_str}:c#{code}#{credit_str}")&.dig(:xbrl_id)
363
+ changes << [tag, readable(entry[:amount])] if tag
364
+ end
365
+ end
366
+ end
367
+ set_bs(4) # require level 4 accounts
368
+ @bs_data.each do |code, amount|
369
+ next if /^[^9]/.match(code)
370
+
371
+ diff = amount - (@start_balance[code]||0)
372
+ next if diff == 0
373
+
374
+ tag = ex_dict.dig("#{code}:#{code}")&.dig(:xbrl_id)
375
+ changes << [tag, readable(diff)] if tag
376
+ end
377
+ currency = %Q(unitRef="#{Code.currency_code(CONFIG['country'])}")
378
+ context = 'contextRef="CurrentYearNonConsolidatedDuration"'
379
+ changes.map { |tag, amount| %Q(<#{tag} decimals="0" #{currency} #{context}>#{amount}</#{tag}>) }
380
+ end
381
+
320
382
  def lib_path
321
383
  __dir__
322
384
  end
@@ -16,6 +16,10 @@ code label xbrl_id consumption_tax income_tax
16
16
  140 短期貸付金 jppfs_cor:ShortTermLoansReceivable
17
17
  150 未収入金 jppfs_cor:AccountsReceivableOther
18
18
  1501 未収消費税等
19
+ 1502 未収法人税
20
+ 1503 未収都道府県住民税
21
+ 1504 未収地方事業税
22
+ 1505 未収市民税
19
23
  160 棚卸資産 jppfs_cor:Inventories
20
24
  161 商品 jppfs_cor:Merchandize
21
25
  162 製品 jppfs_cor:FinishedGoods
@@ -27,6 +31,18 @@ code label xbrl_id consumption_tax income_tax
27
31
  183 立替金 jppfs_cor:AdvancesPaid
28
32
  184 仮払金 jppfs_cor:SuspensePayments
29
33
  1841 仮払消費税等
34
+ 185 仮払税金
35
+ 1851 仮払法人税
36
+ 1852 仮払法人税(地方)
37
+ 1854 仮払地方税特別法人事業税
38
+ 1855 仮払地方税所得割
39
+ 1856 仮払地方税収入割
40
+ 1857 仮払地方税資本割
41
+ 1858 仮払地方税付加価値割
42
+ 1859 仮払地方税法人税割
43
+ 185A 仮払地方税均等割
44
+ 185B 仮払消費税
45
+ 185C 仮払地方消費税
30
46
  30 固定資産 jppfs_cor:NonCurrentAssetsAbstract
31
47
  31 有形固定資産 jppfs_cor:PropertyPlantAndEquipmentAbstract
32
48
  311 建物 jppfs_cor:Buildings
@@ -67,10 +83,18 @@ code label xbrl_id consumption_tax income_tax
67
83
  513 コマーシャルペーパー jppfs_cor:CommercialPapersLiabilities
68
84
  514 未払金 jppfs_cor:AccountsPayableOther
69
85
  515 未払法人税等 jppfs_cor:IncomeTaxesPayable
86
+ 5151 未払法人税
87
+ 5152 未払地方事業税
88
+ 5153 未払都道府県民税
89
+ 5154 未払市民税
70
90
  516 未払消費税等 jppfs_cor:AccruedConsumptionTaxes
71
91
  517 未払費用 jppfs_cor:AccruedExpenses
72
92
  518 前受金 jppfs_cor:AdvancesReceived
73
93
  519 預り金 jppfs_cor:DepositsReceived
94
+ 5191 所得税源泉給与
95
+ 5192 住民税
96
+ 5193 所得税源泉士業
97
+ 5194 所得税源泉報酬
74
98
  51A 仮受金 jppfs_cor:SuspenseReceipt
75
99
  51A1 仮受消費税等 jppfs_cor:SuspenseReceiptOfConsumptionTaxes
76
100
  70 固定負債 jppfs_cor:NoncurrentLiabilitiesAbstract
@@ -82,14 +106,15 @@ code label xbrl_id consumption_tax income_tax
82
106
  91 株主資本 jppfs_cor:ShareholdersAbstract
83
107
  911 資本金 jppfs_cor:CapitalStock
84
108
  912 新株式申込証拠金 jppfs_cor:DepositForSubscriptionsToShares
85
- 913 資本剰余金 jppfs_cor:LegalCapitalSurplus
109
+ 913 資本剰余金 jppfs_cor:CapitalSurplus
86
110
  9131 資本準備金 jppfs_cor:LegalCapitalSurplus
87
111
  9132 その他資本剰余金 jppfs_cor:OtherCapitalSurplus
88
112
  914 利益剰余金 jppfs_cor:RetainedEarnings
89
113
  9141 利益準備金 jppfs_cor:LegalRetainedEarnings
90
114
  9142 その他利益剰余金 jppfs_cor:OtherRetainedEarningsAbstract
91
- 915 自己株式 jppfs_cor:TreasuryStock
92
- 916 自己株式申込証拠金 jppfs_cor:DepositForSubscriptionsToTreasuryStock
115
+ 915 利益準備金
116
+ 916 自己株式 jppfs_cor:TreasuryStock
117
+ 917 自己株式申込証拠金 jppfs_cor:DepositForSubscriptionsToTreasuryStock
93
118
  92 評価換算差額等 jppfs_cor:ValuationAndTranslationAdjustments
94
119
  921 有価証券評価差額金 jppfs_cor:ValuationDifferenceOnAvailableForSaleSecurities
95
120
  922 為替換算調整勘定 jppfs_cor:ForeignCurrencyTranslationAdjustment
@@ -124,6 +149,8 @@ C1F 水道光熱費 jppfs_cor:UtilitiesExpensesSGA
124
149
  C1G 消耗品費 jppfs_cor:SuppliesExpensesSGA
125
150
  C1H 保険料 jppfs_cor:InsuranceExpensesSGA
126
151
  C1I 租税公課 jppfs_cor:TaxesAndDuesSGA
152
+ C1I1 消費税
153
+ C1I2 事業税
127
154
  C1J 賃借料 jppfs_cor:RentExpensesSGA
128
155
  C1K 新聞図書費 jppfs_cor:BookExpensesSGA
129
156
  C1L 貸倒損失 jppfs_cor:BadDebtsExpensesSGA
@@ -17,8 +17,9 @@ code label xbrl_id consumption_tax income_tax
17
17
  150 未収入金 jpfr-t-cte:AccruedIncome
18
18
  1501 未収消費税等 jpfr-etax-t-cte:SuspenseAccountPaymentConsumptionTaxes
19
19
  1502 未収法人税
20
- 1503 未収地方住民税
20
+ 1503 未収都道府県住民税
21
21
  1504 未収地方事業税
22
+ 1505 未収市民税
22
23
  160 棚卸資産
23
24
  161 商品 jpfr-t-cte:Merchandise
24
25
  162 製品 jpfr-t-cte:FinishedGoods
@@ -105,7 +106,7 @@ code label xbrl_id consumption_tax income_tax
105
106
  91 株主資本 jpfr-t-cte:ShareholdersEquity
106
107
  911 資本金 jpfr-t-cte:CapitalStock
107
108
  912 新株式申込証拠金 jpfr-t-cte:DepositForSubscriptionsToShares
108
- 913 資本剰余金 jpfr-t-cte:LegalCapitalSurplus
109
+ 913 資本剰余金 jpfr-t-cte:CapitalSurplus
109
110
  9131 資本準備金 jpfr-t-cte:LegalCapitalSurplus
110
111
  9132 その他資本剰余金 jpfr-t-cte:OtherCapitalSurplus
111
112
  914 繰越利益剰余金 jpfr-t-cte:RetainedEarningsBroughtForward
@@ -0,0 +1,88 @@
1
+ code label xbrl_id
2
+ ASET:c911 新株の発行、資本金 jpfr-t-cte:IssuanceOfNewSharesCAP
3
+ 912:c911 新株の発行、資本金 jpfr-t-cte:IssuanceOfNewSharesCAP
4
+ 93:c911 新株の発行(新株予約権の行使)、資本金 jpfr-t-cte:IssuanceOfNewSharesExerciseOfSubscriptionRightsToSharesCAP
5
+ ASET:c911DEBT 合併による増加、資本金 jpfr-t-cte:IncreaseByMergerCAP
6
+ ASET:c911DEBT:split 会社分割による増加、資本金 jpfr-t-cte:IncreaseByCorporateDivisionCAP
7
+ 33:c911 株式交換による増加、資本金 jpfr-t-cte:IncreaseByShareTransfersCAP
8
+ 33:c911:transfer 株式移転による増加、資本金 jpfr-t-cte:IncreaseByShareExchangesCAP
9
+ d911ASET:DEBT 分割型の会社分割による減少、資本金 jpfr-t-cte:DecreaseByCorporateDivisionSplitOffTypeCAP
10
+ d911:9131 資本金から準備金への振替、資本金 jpfr-t-cte:TransferToLegalCapitalSurplusFromCapitalStockCAP
11
+ d911:9132 資本金から剰余金への振替、資本金 jpfr-t-cte:TransferToOtherCapitalSurplusFromCapitalStockCAP
12
+ 9131:c911 準備金から資本金への振替、資本金 jpfr-t-cte:TransferToCapitalStockFromLegalCapitalSurplusCAP
13
+ d911:914 減資、資本金 jpfr-t-cte:CapitalReductionCAP
14
+ 911:911 当期変動額合計、資本金 jpfr-t-cte:TotalChangesOfItemsDuringThePeriodCAP
15
+ ASET:c9131 新株の発行、資本準備金 jpfr-t-cte:IssuanceOfNewSharesLCS
16
+ 912:c9131 新株の発行、資本準備金 jpfr-t-cte:IssuanceOfNewSharesLCS
17
+ 93:c9131 新株の発行(新株予約権の行使)、資本準備金 jpfr-t-cte:IssuanceOfNewSharesExerciseOfSubscriptionRightsToSharesLCS
18
+ ASET:c9131DEBT 合併による増加、資本準備金 jpfr-t-cte:IncreaseByMergerLCS
19
+ ASET:c9131DEBT:split 会社分割による増加、資本準備金 jpfr-t-cte:IncreaseByCorporateDivisionLCS
20
+ 33:c9131 株式交換による増加、資本準備金 jpfr-t-cte:IncreaseByShareExchangesLCS
21
+ 33:c9131:transfer 株式移転による増加、資本準備金 jpfr-t-cte:IncreaseByShareTransfersLCS
22
+ d9131ASET:DEBT 分割型の会社分割による減少、資本準備金 jpfr-t-cte:DecreaseByCorporateDivisionSplitOffTypeLCS
23
+ 911:c9131 資本金から準備金への振替、資本準備金 jpfr-t-cte:TransferToLegalCapitalSurplusFromCapitalStockLCS
24
+ d9131:911 準備金から資本金への振替、資本準備金 jpfr-t-cte:TransferToCapitalStockFromLegalCapitalSurplusLCS
25
+ d9131:9132 準備金から剰余金への振替、資本準備金 jpfr-t-cte:TransferToOtherCapitalSurplusFromLegalCapitalSurplusLCS
26
+ d9131:_914 欠損填補、資本準備金 jpfr-t-cte:DeficitDispositionLCS
27
+ d9131:914 資本準備金の取崩、資本準備金 jpfr-t-cte:ReversalOfLegalCapitalSurplusLCS
28
+ 9131:9131 当期変動額合計、資本準備金 jpfr-t-cte:TotalChangesOfItemsDuringThePeriodLCS
29
+ d9132:ASET 剰余金(その他資本剰余金)の配当、その他資本剰余金 jpfr-t-cte:DividendsFromSurplusOtherCapitalSurplusOCS
30
+ d9132:DEBT 剰余金(その他資本剰余金)の配当、その他資本剰余金 jpfr-t-cte:DividendsFromSurplusOtherCapitalSurplusOCS
31
+ d9132:916 自己株式の処分、その他資本剰余金 jpfr-t-cte:DisposalOfTreasuryStockOCS
32
+ ASET:c9132DEBT 合併による増加、その他資本剰余金 jpfr-t-cte:IncreaseByMergerOCS
33
+ ASET:c9132DEBT:split 会社分割による増加、その他資本剰余金 jpfr-t-cte:IncreaseByCorporateDivisionOCS
34
+ 33:c9132 株式交換による増加、その他資本剰余金 jpfr-t-cte:IncreaseByShareExchangesOCS
35
+ 33:c9132:transfer 株式移転による増加、その他資本剰余金 jpfr-t-cte:IncreaseByShareTransfersOCS
36
+ d9132ASET:DEBT 分割型の会社分割による減少、その他資本剰余金 jpfr-t-cte:DecreaseByCorporateDivisionSplitOffTypeOCS
37
+ 911:c9132 資本金から剰余金への振替、その他資本剰余金 jpfr-t-cte:TransferToOtherCapitalSurplusFromCapitalStockOCS
38
+ 9131:c9132 準備金から剰余金への振替、その他資本剰余金 jpfr-t-cte:TransferToCapitalSurplusFromRetainedEarningsOCS
39
+ 914:c9132 利益剰余金から資本剰余金への振替、その他資本剰余金 jpfr-t-cte:TransferToOtherCapitalSurplusFromLegalCapitalSurplusOCS
40
+ d9132:916 自己株式の消却、その他資本剰余金 jpfr-t-cte:RetirementOfTreasuryStockOCS
41
+ d9132:_914 欠損填補、その他資本剰余金 jpfr-t-cte:DeficitDispositionOCS
42
+ d9132:914 資本準備金の取崩、その他資本剰余金 jpfr-t-cte:ReversalOfLegalCapitalSurplusOCS
43
+ d9132:914 減資、その他資本剰余金 jpfr-t-cte:CapitalReductionOCS
44
+ 9132:9132 当期変動額合計、その他資本剰余金 jpfr-t-cte:TotalChangesOfItemsDuringThePeriodOCS
45
+ 915:ASET 剰余金の配当、利益準備金 jpfr-t-cte:DividendsFromSurplusLRE
46
+ ASET:c915DEBT 合併による増加、利益準備金 jpfr-t-cte:IncreaseByMergerLRE
47
+ ASET:c915DEBT:split 会社分割による増加、利益準備金 jpfr-t-cte:IncreaseByCorporateDivisionLRE
48
+ 33:c915 株式交換による増加、利益準備金 jpfr-t-cte:IncreaseByShareExchangesLRE
49
+ 33:c915:transfer 株式移転による増加、利益準備金 jpfr-t-cte:IncreaseByShareTransfersLRE
50
+ d915ASET:DEBT 分割型の会社分割による減少、利益準備金 jpfr-t-cte:DecreaseByCorporateDivisionSplitOffTypeLRE
51
+ 914:c915 利益準備金の積立、利益準備金 jpfr-t-cte:ProvisionOfLegalRetainedEarningsLRE
52
+ d915:914 利益準備金の取崩、利益準備金 jpfr-t-cte:ReversalOfLegalRetainedEarningsLRE
53
+ 915:915 当期変動額合計、利益準備金 jpfr-t-cte:TotalChangesOfItemsDuringThePeriodLRE
54
+ d9141:ASET 剰余金の配当、その他利益剰余金 jpfr-t-cte:DividendsFromSurplusORE
55
+ d9141:DEBT 剰余金の配当、その他利益剰余金 jpfr-t-cte:DividendsFromSurplusORE
56
+ ASET:c9141DEBT 合併による増加、その他利益剰余金 jpfr-t-cte:IncreaseByMergerORE
57
+ ASET:c9141DEBT:split 会社分割による増加、その他利益剰余金 jpfr-t-cte:IncreaseByCorporateDivisionORE
58
+ 33:c9141 株式交換による増加、その他利益剰余金 jpfr-t-cte:IncreaseByShareExchangesORE
59
+ 33:c9141:transfer 株式移転による増加、その他利益剰余金 jpfr-t-cte:IncreaseByShareTransfersORE
60
+ d9141ASET:DEBT 分割型の会社分割による減少、その他利益剰余金 jpfr-t-cte:DecreaseByCorporateDivisionSplitOffTypeORE
61
+ d9141:916 自己株式の処分、その他利益剰余金 jpfr-t-cte:DisposalOfTreasuryStockORE
62
+ d9141:916 自己株式の消却、その他利益剰余金 jpfr-t-cte:RetirementOfTreasuryStockORE
63
+ d9141:_DEBT 利益処分、その他利益剰余金 jpfr-t-cte:ProfitAppropriationORE
64
+ d9141:915 利益準備金の積立、その他利益剰余金 jpfr-t-cte:ProvisionOfLegalRetainedEarningsORE
65
+ 915:c9141 利益準備金の取崩、その他利益剰余金 jpfr-t-cte:ReversalOfLegalRetainedEarningsORE
66
+ 911:c9141 減資、その他利益剰余金 jpfr-t-cte:CapitalReductionORE
67
+ d9141:9132 利益剰余金から資本剰余金への振替、その他利益剰余金 jpfr-t-cte:TransferToCapitalSurplusFromRetainedEarningsORE
68
+ 9141:9141 当期変動額合計、その他利益剰余金 jpfr-t-cte:TotalChangesOfItemsDuringThePeriodORE
69
+ d9142:ASET 剰余金の配当、繰越利益剰余金 jpfr-t-cte:DividendsFromSurplusREBF
70
+ ASET:c9142DEBT 合併による増加、繰越利益剰余金 jpfr-t-cte:IncreaseByMergerREBF
71
+ ASET:c9142DEBT:split 会社分割による増加、繰越利益剰余金 jpfr-t-cte:IncreaseByCorporateDivisionREBF
72
+ 33:c9142 株式交換による増加、繰越利益剰余金 jpfr-t-cte:IncreaseByShareExchangesREBF
73
+ 33:c9142:transfer 株式移転による増加、繰越利益剰余金 jpfr-t-cte:IncreaseByShareTransfersREBF
74
+ d9142ASET:DEBT 分割型の会社分割による減少、繰越利益剰余金 jpfr-t-cte:DecreaseByCorporateDivisionSplitOffTypeREBF
75
+ d9142:916 自己株式の処分、繰越利益剰余金 jpfr-t-cte:DisposalOfTreasuryStockREBF
76
+ d9142:916 自己株式の消却、繰越利益剰余金 jpfr-t-cte:RetirementOfTreasuryStockREBF
77
+ d9142:_DEBT 利益処分、繰越利益剰余金 jpfr-t-cte:ProfitAppropriationREBF
78
+ d9142:915 利益準備金の積立、繰越利益剰余金 jpfr-t-cte:ProvisionOfLegalRetainedEarningsREBF
79
+ 915:c9142 利益準備金の取崩、繰越利益剰余金 jpfr-t-cte:ReversalOfLegalRetainedEarningsREBF
80
+ _913:c9142 欠損填補、繰越利益剰余金 jpfr-t-cte:DeficitDispositionREBF
81
+ 911:c9142 減資、繰越利益剰余金 jpfr-t-cte:CapitalReductionREBF
82
+ d9142:9132 利益剰余金から資本剰余金への振替、繰越利益剰余金 jpfr-t-cte:TransferToCapitalSurplusFromRetainedEarningsREBF
83
+ 9142:9142 当期変動額合計、繰越利益剰余金 jpfr-t-cte:TotalChangesOfItemsDuringThePeriodREBF
84
+ d916:_ 自己株式の取得、自己株式 jpfr-t-cte:PurchaseOfTreasuryStockTS
85
+ _:c916 自己株式の処分、自己株式 jpfr-t-cte:DisposalOfTreasuryStockTS
86
+ _:c916 自己株式の消却、自己株式 jpfr-t-cte:RetirementOfTreasuryStockTS
87
+ _916:916 持分法適用会社に対する持分変動に伴う自己株式の増減、自己株式 jpfr-t-cte:ChangeInEquityInAffiliatesAccountedForByEquityMethodTreasuryStockTS
88
+ 916:916 当期変動額合計、自己株式 jpfr-t-cte:TotalChangesOfItemsDuringThePeriodTS
@@ -2,7 +2,7 @@
2
2
  <head>
3
3
  <meta charset="utf-8">
4
4
  <style>
5
- body { size: A4 }
5
+ body { size: A4; padding-top: 2em; padding-bottom: 2em }
6
6
  .pgbr { page-break-after: always; visibility: hidden }
7
7
  .title { margin-bottom: 1.5rem; text-align: center }
8
8
  div.note { font-size: .8em }
@@ -5,7 +5,7 @@ require 'luca_book'
5
5
  require 'luca_record/io'
6
6
  require 'luca_support/range'
7
7
 
8
- module LucaBook # :nodoc:
8
+ module LucaBook #:nodoc:
9
9
  # Provide data testing framework utilizing minitest.
10
10
  #
11
11
  class Test < MiniTest::Test
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LucaBook
4
- VERSION = '0.2.29'
4
+ VERSION = '0.3.0'
5
5
  end
data/lib/luca_book.rb CHANGED
@@ -6,6 +6,7 @@ require 'luca_book/version'
6
6
 
7
7
  module LucaBook
8
8
  autoload :Accumulator, 'luca_book/accumulator'
9
+ autoload :Code, 'luca_book/code'
9
10
  autoload :Dict, 'luca_book/dict'
10
11
  autoload :Import, 'luca_book/import'
11
12
  autoload :Journal, 'luca_book/journal'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lucabook
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.29
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chuma Takahiro
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-24 00:00:00.000000000 Z
11
+ date: 2022-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lucarecord
@@ -68,7 +68,7 @@ dependencies:
68
68
  version: 12.3.3
69
69
  description: 'Book keep
70
70
 
71
- '
71
+ '
72
72
  email:
73
73
  - co.chuma@gmail.com
74
74
  executables:
@@ -80,6 +80,7 @@ files:
80
80
  - exe/luca-book
81
81
  - lib/luca_book.rb
82
82
  - lib/luca_book/accumulator.rb
83
+ - lib/luca_book/code.rb
83
84
  - lib/luca_book/console.rb
84
85
  - lib/luca_book/dict.rb
85
86
  - lib/luca_book/import.rb
@@ -95,6 +96,7 @@ files:
95
96
  - lib/luca_book/templates/dict-en.tsv
96
97
  - lib/luca_book/templates/dict-jp-edinet.tsv
97
98
  - lib/luca_book/templates/dict-jp.tsv
99
+ - lib/luca_book/templates/dictex-jp.tsv
98
100
  - lib/luca_book/templates/journals.html.erb
99
101
  - lib/luca_book/templates/monthly-report.html.erb
100
102
  - lib/luca_book/test.rb
@@ -106,7 +108,7 @@ licenses:
106
108
  metadata:
107
109
  homepage_uri: https://github.com/chumaltd/luca/tree/master/lucabook
108
110
  source_code_uri: https://github.com/chumaltd/luca/tree/master/lucabook
109
- post_install_message:
111
+ post_install_message:
110
112
  rdoc_options: []
111
113
  require_paths:
112
114
  - lib
@@ -121,8 +123,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
123
  - !ruby/object:Gem::Version
122
124
  version: '0'
123
125
  requirements: []
124
- rubygems_version: 3.2.3
125
- signing_key:
126
+ rubygems_version: 3.2.5
127
+ signing_key:
126
128
  specification_version: 4
127
129
  summary: Book keep
128
130
  test_files: []