lucabook 0.5.2 → 0.5.4
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 +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
|