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 +4 -4
- data/exe/luca-book +39 -8
- data/lib/luca_book/accumulator.rb +1 -1
- data/lib/luca_book/code.rb +22 -0
- data/lib/luca_book/dict.rb +25 -0
- data/lib/luca_book/import.rb +3 -1
- data/lib/luca_book/journal.rb +31 -0
- data/lib/luca_book/list.rb +1 -0
- data/lib/luca_book/list_by_header.rb +3 -11
- data/lib/luca_book/setup.rb +6 -0
- data/lib/luca_book/state.rb +68 -6
- data/lib/luca_book/templates/dict-jp-edinet.tsv +30 -3
- data/lib/luca_book/templates/dict-jp.tsv +3 -2
- data/lib/luca_book/templates/dictex-jp.tsv +88 -0
- data/lib/luca_book/templates/journals.html.erb +1 -1
- data/lib/luca_book/test.rb +1 -1
- data/lib/luca_book/version.rb +1 -1
- data/lib/luca_book.rb +1 -0
- metadata +9 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b14674db9c7c07b4e523d4603f98e745ab680951822041666e7d957409aabfaf
|
4
|
+
data.tar.gz: 1a62eb8f39388727ab65bfa1f5242ac84a8c482a051715e944215d126b7bf93f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
60
|
-
|
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
|
196
|
-
opt.on('-
|
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
|
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
|
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
|
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
|
@@ -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
|
data/lib/luca_book/dict.rb
CHANGED
@@ -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]
|
data/lib/luca_book/import.rb
CHANGED
@@ -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
|
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}" }
|
data/lib/luca_book/journal.rb
CHANGED
@@ -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
|
data/lib/luca_book/list.rb
CHANGED
@@ -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, '
|
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
|
-
|
71
|
-
start_balance
|
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
|
data/lib/luca_book/setup.rb
CHANGED
@@ -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
|
data/lib/luca_book/state.rb
CHANGED
@@ -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] ?
|
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?
|
264
|
-
|
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
|
-
@
|
284
|
-
|
285
|
-
|
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:
|
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
|
92
|
-
916
|
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:
|
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
|
data/lib/luca_book/test.rb
CHANGED
data/lib/luca_book/version.rb
CHANGED
data/lib/luca_book.rb
CHANGED
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.
|
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:
|
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.
|
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: []
|