lucabook 0.5.2 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/exe/luca-book +4 -3
- data/lib/luca_book/accumulator.rb +26 -3
- data/lib/luca_book/dict.rb +6 -5
- data/lib/luca_book/setup.rb +1 -1
- data/lib/luca_book/state.rb +15 -7
- data/lib/luca_book/templates/base-jp.xbrl.erb +0 -1
- data/lib/luca_book/templates/base-jp.xsd.erb +0 -1
- data/lib/luca_book/templates/dict-jp.tsv +9 -2
- data/lib/luca_book/util.rb +2 -2
- data/lib/luca_book/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c6cc66f4a8bcc5ca7fb1e2a86c6ba57d1ff75d01dec530835ad671386ca2409a
|
4
|
+
data.tar.gz: d13133523464f63818b5acea123472f9ab736ba50c6bba4f93ec1cc3924246d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fdb7baa012b6110695687435f830eb64f930a88025284494ba509ec76d27f6f3bc906ff5cd8ea936869b4f339fa2a7854ee456534ec4e2c63eec4bfe876e794d
|
7
|
+
data.tar.gz: 5b49a82f52825781ad3c5e7db1bfcb45be9ef2e0c4f93040d3d368bfa8e6da5b4048eb97550c947c154646c277c4496d3c50e1f4ec9d23604a15f73ddf754bb5
|
data/exe/luca-book
CHANGED
@@ -27,9 +27,9 @@ class LucaCmd
|
|
27
27
|
params[:col_order] = %w(date diff balance counter_code note code id no)
|
28
28
|
if params['code']
|
29
29
|
if params['headers']
|
30
|
-
render(LucaBook::ListByHeader.term(*args, code: params['code'], header: params['headers']).list_by_code, params)
|
30
|
+
render(LucaBook::ListByHeader.term(*parse_range_args(args, params), code: params['code'], header: params['headers']).list_by_code, params)
|
31
31
|
else
|
32
|
-
render(LucaBook::List.term(*args, code: params['code'], recursive: params[:recursive]).list_by_code(params[:recursive]), params)
|
32
|
+
render(LucaBook::List.term(*parse_range_args(args, params), code: params['code'], recursive: params[:recursive]).list_by_code(params[:recursive]), params)
|
33
33
|
end
|
34
34
|
elsif params['render']
|
35
35
|
puts LucaBook::List.term(*args).render_html(params['render'])
|
@@ -77,7 +77,7 @@ class LucaCmd
|
|
77
77
|
[r[0].year, r[0].month, r[1].year, r[1].month]
|
78
78
|
end
|
79
79
|
end
|
80
|
-
LucaBook::State.range(*range).
|
80
|
+
LucaBook::State.range(*range).write_xbrl(params[:output])
|
81
81
|
end
|
82
82
|
|
83
83
|
def self.balancesheet(args, params)
|
@@ -195,6 +195,7 @@ when /journals?/, 'j'
|
|
195
195
|
opt.on('-c', '--code VAL', 'filter with code or label') { |v| params['code'] = v }
|
196
196
|
opt.on('-r', '--recursive', 'include subaccounts') { |_v| params[:recursive] = true }
|
197
197
|
opt.on('--customer', 'categorize by x-customer header') { |_v| params['headers'] = 'x-customer' }
|
198
|
+
opt.on('--fy', 'adjust start date to Financial Year') { |_v| params[:financialyear] = true }
|
198
199
|
opt.on('-n VAL', 'report count') { |v| params[:n] = v.to_i }
|
199
200
|
opt.on('--nu', 'show table in nushell') { |_v| params[:output] = 'nu' }
|
200
201
|
opt.on('--explore', 'explore table in nushell') { |_v| params[:output] = 'explore' }
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'luca_book/util'
|
4
|
+
require 'luca_support/code'
|
4
5
|
require 'luca_support/const'
|
5
6
|
|
6
7
|
module LucaBook
|
@@ -79,7 +80,21 @@ module LucaBook
|
|
79
80
|
def gross(start_year, start_month, end_year = nil, end_month = nil, code: nil, date_range: nil, rows: 4, recursive: false, header: nil)
|
80
81
|
if ! date_range.nil?
|
81
82
|
raise if date_range.class != Range
|
82
|
-
|
83
|
+
|
84
|
+
start_year = date_range.first.year
|
85
|
+
start_month = date_range.first.month
|
86
|
+
end_year = date_range.last.year
|
87
|
+
end_month = date_range.last.month
|
88
|
+
date_bound = {
|
89
|
+
start: {
|
90
|
+
month: "#{start_year}#{LucaSupport::Code.encode_month(start_month)}",
|
91
|
+
day: LucaSupport::Code.encode_date(date_range.first)
|
92
|
+
},
|
93
|
+
end: {
|
94
|
+
month: "#{end_year}#{LucaSupport::Code.encode_month(end_month)}",
|
95
|
+
day: LucaSupport::Code.encode_date(date_range.last)
|
96
|
+
}
|
97
|
+
}
|
83
98
|
end
|
84
99
|
scan_headers = header&.map { |k, v|
|
85
100
|
[:customer, :editor].include?(k) ? [ "x-#{k.to_s}", v ] : nil
|
@@ -108,7 +123,15 @@ module LucaBook
|
|
108
123
|
end
|
109
124
|
end
|
110
125
|
end
|
111
|
-
enm.each do |f,
|
126
|
+
enm.each do |f, path|
|
127
|
+
if date_bound
|
128
|
+
if path[0] == date_bound[:start][:month]
|
129
|
+
next if path[1][0] < date_bound[:start][:day]
|
130
|
+
elsif path[0] == date_bound[:end][:month]
|
131
|
+
next if path[1][0] > date_bound[:end][:day]
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
112
135
|
CSV.new(f, headers: false, col_sep: "\t", encoding: 'UTF-8')
|
113
136
|
.each_with_index do |row, i|
|
114
137
|
break if i >= rows
|
@@ -183,7 +206,7 @@ module LucaBook
|
|
183
206
|
# Override LucaRecord::IO.load_data
|
184
207
|
#
|
185
208
|
def load_data(io, path = nil)
|
186
|
-
io
|
209
|
+
[io, path]
|
187
210
|
end
|
188
211
|
end
|
189
212
|
|
data/lib/luca_book/dict.rb
CHANGED
@@ -102,12 +102,13 @@ module LucaBook
|
|
102
102
|
end
|
103
103
|
|
104
104
|
def self.latest_balance_path(date)
|
105
|
-
|
106
|
-
latest = Date.new(start_year, LucaSupport::CONST.config['fy_start'], 1).prev_month
|
105
|
+
start_date, _ = LucaBook::Util.current_fy(date)
|
107
106
|
dict_dir = Pathname(LucaSupport::CONST.pjdir) / 'data' / 'balance'
|
108
|
-
|
109
|
-
|
110
|
-
dict_dir /
|
107
|
+
paths = Dir.glob(%Q(start-*-*-*), base: dict_dir, sort: true)
|
108
|
+
.reject {|path| path > %Q(start-#{start_date.year}-#{format("%02d", start_date.month)}-) }
|
109
|
+
return dict_dir / 'start.tsv' if paths.empty?
|
110
|
+
|
111
|
+
dict_dir / paths.reverse.first
|
111
112
|
end
|
112
113
|
|
113
114
|
def self.issue_date(obj)
|
data/lib/luca_book/setup.rb
CHANGED
@@ -38,7 +38,7 @@ module LucaBook
|
|
38
38
|
csv << ['code', 'label', 'balance']
|
39
39
|
csv << ['_date', '2020-1-1']
|
40
40
|
CSV.open("#{__dir__}/templates/#{dict}", 'r', col_sep: "\t", encoding: 'UTF-8').each do |row|
|
41
|
-
csv << row if /^[1-9]/.match(row[0])
|
41
|
+
csv << row[0, 1] if /^[1-9]/.match(row[0])
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
data/lib/luca_book/state.rb
CHANGED
@@ -213,17 +213,18 @@ module LucaBook
|
|
213
213
|
|
214
214
|
def self.start_balance(year, month, recursive: true)
|
215
215
|
start_date = Date.new(year, month, 1)
|
216
|
-
|
216
|
+
balance = Dict.latest_balance(start_date)
|
217
|
+
base = balance.each_with_object({}) do |(k, v), h|
|
217
218
|
h[k] = BigDecimal(v[:balance].to_s) if v[:balance]
|
218
219
|
h[k] ||= BigDecimal('0') if k.length == 2
|
219
220
|
end
|
220
|
-
|
221
|
+
pre_first = Date.parse(balance.dig("_date", :label)).next_month
|
222
|
+
if start_date <= pre_first
|
221
223
|
return recursive ? total_subaccount(base) : base
|
222
224
|
end
|
223
225
|
|
224
226
|
pre_last = start_date.prev_month
|
225
|
-
|
226
|
-
pre = accumulate_term(year, LucaSupport::CONST.config['fy_start'], pre_last.year, pre_last.month)
|
227
|
+
pre = accumulate_term(pre_first.year, pre_first.month, pre_last.year, pre_last.month)
|
227
228
|
total = {}.tap do |h|
|
228
229
|
(pre.keys + base.keys).uniq.each do |k|
|
229
230
|
h[k] = (base[k] || BigDecimal('0')) + (pre[k] || BigDecimal('0'))
|
@@ -232,6 +233,14 @@ module LucaBook
|
|
232
233
|
recursive ? total_subaccount(total) : total
|
233
234
|
end
|
234
235
|
|
236
|
+
def write_xbrl(filename = nil)
|
237
|
+
xbrl, xsd = render_xbrl(filename)
|
238
|
+
doctype = %Q(<?xml version="1.0" encoding="UTF-8"?>)
|
239
|
+
|
240
|
+
File.open("#{@filename}.xbrl", 'w') { |f| f.write [doctype, xbrl].join("\n") }
|
241
|
+
File.open("#{@filename}.xsd", 'w') { |f| f.write [doctype, xsd].join("\n") }
|
242
|
+
end
|
243
|
+
|
235
244
|
def render_xbrl(filename = nil)
|
236
245
|
set_bs(3, legal: true)
|
237
246
|
set_pl(3)
|
@@ -248,8 +257,7 @@ module LucaBook
|
|
248
257
|
@xbrl_entries += equity_change.join("\n")
|
249
258
|
@filename = filename || "statement-#{@issue_date}"
|
250
259
|
|
251
|
-
|
252
|
-
File.open("#{@filename}.xsd", 'w') { |f| f.write render_erb(search_template("base-#{country_suffix}.xsd.erb")) }
|
260
|
+
[render_erb(search_template("base-#{country_suffix}.xbrl.erb")), render_erb(search_template("base-#{country_suffix}.xsd.erb"))]
|
253
261
|
end
|
254
262
|
|
255
263
|
# TODO: proper decimals attr for each currency
|
@@ -336,7 +344,7 @@ module LucaBook
|
|
336
344
|
changes = []
|
337
345
|
LucaBook::Journal.filter_by_code(@start_date.year, @start_date.month, @end_date.year, @end_date.month, '9').each do |dat|
|
338
346
|
debit_str = 'ASET' if dat[:debit].find { |e| /^[124]/.match(e[:code]) }
|
339
|
-
debit_str ||= '33' if dat[:debit].find { |e| /^
|
347
|
+
debit_str ||= '33' if dat[:debit].find { |e| /^33/.match(e[:code]) }
|
340
348
|
debit_str ||= 'ASET' if dat[:debit].find { |e| /^[3]/.match(e[:code]) }
|
341
349
|
credit_str = 'DEBT' if dat[:credit].find { |e| /^[57]/.match(e[:code]) }
|
342
350
|
credit_str ||= 'ASET' if dat[:credit].find { |e| /^[12]/.match(e[:code]) }
|
@@ -1,4 +1,3 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
1
|
<xbrli:xbrl xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:iso4217="http://www.xbrl.org/2003/iso4217" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:jpfr-etax-di="http://xml.e-tax.nta.go.jp/jp/fr/etax/o/di/2013-03-25" xmlns:jpfr-oe="http://info.edinet-fsa.go.jp/jp/fr/gaap/o/oe/2012-01-25" xmlns:jpfr-t-cte="http://info.edinet-fsa.go.jp/jp/fr/gaap/t/cte/2012-01-25" xmlns:jppfs_cor="http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2019-11-01/jppfs_cor" xmlns:jpfr-etax-t-cte="http://xml.e-tax.nta.go.jp/jp/fr/etax/t/cte/2013-03-25">
|
3
2
|
<link:schemaRef xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="<%= @filename %>.xsd" />
|
4
3
|
|
@@ -1,4 +1,3 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
1
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:e-tax-pks-<%= @issue_date %>="http://xbrlsoft.e-tax.nta.go.jp/XSD/e-tax-pks-<%= @issue_date %>" targetNamespace="http://xbrlsoft.e-tax.nta.go.jp/XSD/e-tax-pks-<%= @issue_date %>" elementFormDefault="qualified">
|
3
2
|
<xsd:import namespace="http://www.xbrl.org/2003/instance" schemaLocation="http://www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd" />
|
4
3
|
<xsd:import namespace="http://xml.e-tax.nta.go.jp/jp/fr/etax/o/di/2013-03-25" schemaLocation="http://xml.e-tax.nta.go.jp/jp/fr/etax/o/di/2013-03-25/jpfr-etax-di-2013-03-25.xsd" />
|
@@ -41,8 +41,11 @@ code label xbrl_id consumption_tax income_tax
|
|
41
41
|
1858 仮払地方税付加価値割
|
42
42
|
1859 仮払地方税法人税割
|
43
43
|
185A 仮払地方税均等割
|
44
|
-
185B 仮払消費税
|
44
|
+
185B 仮払消費税
|
45
45
|
185C 仮払地方消費税
|
46
|
+
185D 仮払市民税法人税割
|
47
|
+
185E 仮払市民税均等割
|
48
|
+
185F 仮払所得税
|
46
49
|
30 固定資産 jpfr-t-cte:NoncurrentAssets
|
47
50
|
31 有形固定資産 jpfr-t-cte:PropertyPlantAndEquipment
|
48
51
|
311 建物 jpfr-t-cte:Buildings
|
@@ -164,7 +167,9 @@ C1S 支払報酬 jpfr-t-cte:CompensationsSGA
|
|
164
167
|
C1T 研修費 jpfr-etax-t-cte:RecruitmentEducationExpense
|
165
168
|
C1U 採用費
|
166
169
|
C1V 業務委託費
|
167
|
-
C1W 会議費
|
170
|
+
C1W 会議費 jpfr-etax-t-cte:ConventionExpense
|
171
|
+
C1X 寄付金 jpfr-etax-t-cte:Donation
|
172
|
+
C1X1 指定寄付金
|
168
173
|
CA 営業利益 jpfr-t-cte:OperatingIncome
|
169
174
|
D0 営業外収益 jpfr-t-cte:NonOperatingIncome
|
170
175
|
D11 受取利息 jpfr-t-cte:InterestIncomeNOI
|
@@ -195,4 +200,6 @@ H111 法人税
|
|
195
200
|
H112 都道府県住民税
|
196
201
|
H113 市町村住民税
|
197
202
|
H114 地方事業税
|
203
|
+
H115 所得税税額控除
|
204
|
+
H116 外国税
|
198
205
|
HA 当期利益 jpfr-t-cte:NetIncome
|
data/lib/luca_book/util.rb
CHANGED
@@ -15,7 +15,7 @@ module LucaBook
|
|
15
15
|
[d - c, { debit: d, credit: c }]
|
16
16
|
end
|
17
17
|
|
18
|
-
# items assumed
|
18
|
+
# items assumed:
|
19
19
|
# [{ code: '113', amount: 1000 }, ... ]
|
20
20
|
#
|
21
21
|
def diff_by_code(items, code)
|
@@ -48,7 +48,7 @@ module LucaBook
|
|
48
48
|
start_month = LucaSupport::CONST.config['fy_start']
|
49
49
|
start_year = date.month >= start_month ? date.year : date.year - 1
|
50
50
|
@start_date = Date.new(start_year, start_month, 1)
|
51
|
-
@end_date =
|
51
|
+
@end_date = @start_date.next_year.prev_day
|
52
52
|
@end_date = [to, @end_date].min if to
|
53
53
|
[@start_date, @end_date]
|
54
54
|
end
|
data/lib/luca_book/version.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.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chuma Takahiro
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: lucarecord
|