lucabook 0.3.0 → 0.4.1
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 +31 -6
- data/lib/luca_book/accumulator.rb +28 -4
- data/lib/luca_book/import.rb +6 -0
- data/lib/luca_book/templates/dict-jp-edinet.tsv +7 -3
- data/lib/luca_book/templates/dict-jp.tsv +7 -3
- 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: fe62638b0f400b25938ba7515e0f33089fa2d8044e07622ef03333bc478159cb
|
4
|
+
data.tar.gz: 79b319cb365b2ee19e340d4abb4496e25aec430c021063409bd239de5443abad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3cd9de1187394edda17a34c2aeeb7ea4c1804097084ad264ae685af17821df373ff607a5ef2d95797792e800740838a476550190636eaf94515266d6974280d
|
7
|
+
data.tar.gz: 9864cdeacb8220c049fbca8a7ac1bbf1214085343cf454a99714a83758f7c261990a997e41a27c7ea4d5ba3c9cf87bcb53b1da22bfa0dcc940a0f27211770f98
|
data/exe/luca-book
CHANGED
@@ -78,20 +78,42 @@ class LucaCmd
|
|
78
78
|
def self.balancesheet(args, params)
|
79
79
|
level = params[:level] || 3
|
80
80
|
legal = params[:legal] || false
|
81
|
-
args
|
82
|
-
render(LucaBook::State.range(*args).bs(level, legal: legal), params)
|
81
|
+
render(LucaBook::State.range(*parse_range_args(args, params)).bs(level, legal: legal), params)
|
83
82
|
end
|
84
83
|
|
85
84
|
def self.profitloss(args, params)
|
86
85
|
level = params[:level] || 2
|
87
|
-
args
|
88
|
-
render(LucaBook::State.range(*args).pl(level), params)
|
86
|
+
render(LucaBook::State.range(*parse_range_args(args, params)).pl(level), params)
|
89
87
|
end
|
90
88
|
|
91
89
|
def self.report_mail(args, params)
|
92
90
|
level = params[:level] || 3
|
93
|
-
args
|
94
|
-
|
91
|
+
render(LucaBook::State.range(*parse_range_args(args, params)).report_mail(level), params)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.parse_range_args(args, params)
|
96
|
+
case args.length
|
97
|
+
when 4
|
98
|
+
args
|
99
|
+
when 2
|
100
|
+
if params[:financialyear]
|
101
|
+
date = Date.new(args[0].to_i, args[1].to_i)
|
102
|
+
r = LucaBook::Util.current_fy(date, to: date)
|
103
|
+
[r[0].year, r[0].month, r[1].year, r[1].month]
|
104
|
+
else
|
105
|
+
args
|
106
|
+
end
|
107
|
+
when 0
|
108
|
+
if params[:n]
|
109
|
+
gen_range(params[:n])
|
110
|
+
elsif params[:financialyear]
|
111
|
+
date = Date.today
|
112
|
+
r = LucaBook::Util.current_fy(date)
|
113
|
+
[r[0].year, r[0].month, date.year, date.month]
|
114
|
+
else
|
115
|
+
[Date.today.year, Date.today.month]
|
116
|
+
end
|
95
117
|
end
|
96
118
|
end
|
97
119
|
|
@@ -223,6 +245,7 @@ when /reports?/, 'r'
|
|
223
245
|
OptionParser.new do |opt|
|
224
246
|
opt.banner = 'Usage: luca-book r[eports] bs [options] [YYYY M]'
|
225
247
|
opt.on('-l', '--level VAL', 'account level') { |v| params[:level] = v.to_i }
|
248
|
+
opt.on('--fy', 'adjust start date to Financial Year') { |_v| params[:financialyear] = true }
|
226
249
|
opt.on('--legal', 'show legal mandatory account') { |_v| params[:legal] = true }
|
227
250
|
opt.on('--nu', 'show table in nushell') { |_v| params[:output] = 'nu' }
|
228
251
|
opt.on('-o', '--output VAL', 'output serialized data') { |v| params[:output] = v }
|
@@ -233,6 +256,7 @@ when /reports?/, 'r'
|
|
233
256
|
OptionParser.new do |opt|
|
234
257
|
opt.banner = 'Usage: luca-book r[eports] pl [options] [YYYY M YYYY M]'
|
235
258
|
opt.on('-l', '--level VAL', 'account level') { |v| params[:level] = v.to_i }
|
259
|
+
opt.on('--fy', 'adjust start date to Financial Year') { |_v| params[:financialyear] = true }
|
236
260
|
opt.on('-n VAL', 'report count') { |v| params[:n] = v.to_i }
|
237
261
|
opt.on('--nu', 'show table in nushell') { |_v| params[:output] = 'nu' }
|
238
262
|
opt.on('-o', '--output VAL', 'output serialized data') { |v| params[:output] = v }
|
@@ -243,6 +267,7 @@ when /reports?/, 'r'
|
|
243
267
|
OptionParser.new do |opt|
|
244
268
|
opt.banner = 'Usage: luca-book r[eports] mail [options] [YYYY M YYYY M]'
|
245
269
|
opt.on('-l', '--level VAL', 'account level') { |v| params[:level] = v.to_i }
|
270
|
+
opt.on('--fy', 'adjust start date to Financial Year') { |_v| params[:financialyear] = true }
|
246
271
|
opt.on('-n VAL', 'report count') { |v| params[:n] = v.to_i }
|
247
272
|
args = opt.parse!(ARGV)
|
248
273
|
LucaCmd::Report.report_mail(args, params)
|
@@ -74,17 +74,41 @@ module LucaBook
|
|
74
74
|
|
75
75
|
# for assert purpose
|
76
76
|
#
|
77
|
-
|
77
|
+
# header: { customer: 'some-customer' }
|
78
|
+
#
|
79
|
+
def gross(start_year, start_month, end_year = nil, end_month = nil, code: nil, date_range: nil, rows: 4, recursive: false, header: nil)
|
78
80
|
if ! date_range.nil?
|
79
81
|
raise if date_range.class != Range
|
80
82
|
# TODO: date based range search
|
81
83
|
end
|
84
|
+
scan_headers = header&.map { |k, v|
|
85
|
+
[:customer, :editor].include?(k) ? [ "x-#{k.to_s}", v ] : nil
|
86
|
+
}&.compact&.to_h
|
82
87
|
|
83
88
|
end_year ||= start_year
|
84
89
|
end_month ||= start_month
|
85
90
|
sum = { debit: {}, credit: {}, debit_count: {}, credit_count: {} }
|
86
91
|
idx_memo = []
|
87
|
-
|
92
|
+
|
93
|
+
enm = if scan_headers.nil? || scan_headers.empty?
|
94
|
+
term(start_year, start_month, end_year, end_month, code, 'journals')
|
95
|
+
else
|
96
|
+
Enumerator.new do |y|
|
97
|
+
term(start_year, start_month, end_year, end_month, code, 'journals') do |f, path|
|
98
|
+
4.times { f.gets } # skip to headers
|
99
|
+
CSV.new(f, headers: false, col_sep: "\t", encoding: 'UTF-8')
|
100
|
+
.each do |line|
|
101
|
+
break if line.empty?
|
102
|
+
|
103
|
+
if scan_headers.keys.include? line[0]
|
104
|
+
f.rewind
|
105
|
+
y << [f, path]
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
enm.each do |f, _path|
|
88
112
|
CSV.new(f, headers: false, col_sep: "\t", encoding: 'UTF-8')
|
89
113
|
.each_with_index do |row, i|
|
90
114
|
break if i >= rows
|
@@ -142,8 +166,8 @@ module LucaBook
|
|
142
166
|
|
143
167
|
# netting vouchers in specified term
|
144
168
|
#
|
145
|
-
def net(start_year, start_month, end_year = nil, end_month = nil, code: nil, date_range: nil, recursive: false)
|
146
|
-
g = gross(start_year, start_month, end_year, end_month, code: code, date_range: date_range, recursive: recursive)
|
169
|
+
def net(start_year, start_month, end_year = nil, end_month = nil, code: nil, date_range: nil, recursive: false, header: nil)
|
170
|
+
g = gross(start_year, start_month, end_year, end_month, code: code, date_range: date_range, recursive: recursive, header: header)
|
147
171
|
idx = (g[:debit].keys + g[:credit].keys).uniq.sort
|
148
172
|
count = {}
|
149
173
|
diff = {}.tap do |sum|
|
data/lib/luca_book/import.rb
CHANGED
@@ -54,6 +54,12 @@ module LucaBook
|
|
54
54
|
d['debit'].each { |h| h['code'] = code_map.dig(h['label']) || DEBIT_DEFAULT }
|
55
55
|
d['credit'].each { |h| h['code'] = code_map.dig(h['label']) || CREDIT_DEFAULT }
|
56
56
|
|
57
|
+
LucaBook::Journal::ACCEPTED_HEADERS.each do |header|
|
58
|
+
next if d[header].nil?
|
59
|
+
d['headers'] ||= {}
|
60
|
+
d['headers'][header] = d[header]
|
61
|
+
d[header].delete
|
62
|
+
end
|
57
63
|
LucaBook::Journal.create(d)
|
58
64
|
end
|
59
65
|
end
|
@@ -19,7 +19,7 @@ code label xbrl_id consumption_tax income_tax
|
|
19
19
|
1502 未収法人税
|
20
20
|
1503 未収都道府県住民税
|
21
21
|
1504 未収地方事業税
|
22
|
-
1505
|
22
|
+
1505 未収市町村住民税
|
23
23
|
160 棚卸資産 jppfs_cor:Inventories
|
24
24
|
161 商品 jppfs_cor:Merchandize
|
25
25
|
162 製品 jppfs_cor:FinishedGoods
|
@@ -85,8 +85,8 @@ code label xbrl_id consumption_tax income_tax
|
|
85
85
|
515 未払法人税等 jppfs_cor:IncomeTaxesPayable
|
86
86
|
5151 未払法人税
|
87
87
|
5152 未払地方事業税
|
88
|
-
5153
|
89
|
-
5154
|
88
|
+
5153 未払都道府県住民税
|
89
|
+
5154 未払市町村住民税
|
90
90
|
516 未払消費税等 jppfs_cor:AccruedConsumptionTaxes
|
91
91
|
517 未払費用 jppfs_cor:AccruedExpenses
|
92
92
|
518 前受金 jppfs_cor:AdvancesReceived
|
@@ -191,4 +191,8 @@ G13 災害損失 jppfs_cor:LossOnDisasterEL
|
|
191
191
|
GA 税引前利益 jppfs_cor:IncomeBeforeIncomeTaxes
|
192
192
|
H0 法人税等 jppfs_cor:IncomeTaxes
|
193
193
|
H11 法人税、住民税及び事業税 jppfs_cor:IncomeTaxesCurrent
|
194
|
+
H111 法人税
|
195
|
+
H112 都道府県住民税
|
196
|
+
H113 市町村住民税
|
197
|
+
H114 地方事業税
|
194
198
|
HA 当期利益 jppfs_cor:ProfitLoss
|
@@ -19,7 +19,7 @@ code label xbrl_id consumption_tax income_tax
|
|
19
19
|
1502 未収法人税
|
20
20
|
1503 未収都道府県住民税
|
21
21
|
1504 未収地方事業税
|
22
|
-
1505
|
22
|
+
1505 未収市町村住民税
|
23
23
|
160 棚卸資産
|
24
24
|
161 商品 jpfr-t-cte:Merchandise
|
25
25
|
162 製品 jpfr-t-cte:FinishedGoods
|
@@ -85,8 +85,8 @@ code label xbrl_id consumption_tax income_tax
|
|
85
85
|
515 未払法人税等 jpfr-t-cte:IncomeTaxesPayable
|
86
86
|
5151 未払法人税
|
87
87
|
5152 未払地方事業税
|
88
|
-
5153
|
89
|
-
5154
|
88
|
+
5153 未払都道府県住民税
|
89
|
+
5154 未払市町村住民税
|
90
90
|
516 未払消費税等 jpfr-t-cte:AccruedConsumptionTaxes
|
91
91
|
517 未払費用 jpfr-t-cte:AccruedExpenses
|
92
92
|
518 前受金 jpfr-t-cte:AdvancesReceived
|
@@ -191,4 +191,8 @@ G13 災害損失 jpfr-t-cte:LossOnDisasterEL
|
|
191
191
|
GA 税引前利益 jpfr-t-cte:IncomeBeforeIncomeTaxes
|
192
192
|
H0 法人税等 jpfr-t-cte:IncomeTaxes
|
193
193
|
H11 法人税、住民税及び事業税 jpfr-t-cte:IncomeTaxesCurrent
|
194
|
+
H111 法人税
|
195
|
+
H112 都道府県住民税
|
196
|
+
H113 市町村住民税
|
197
|
+
H114 地方事業税
|
194
198
|
HA 当期利益 jpfr-t-cte:NetIncome
|
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.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chuma Takahiro
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-03-
|
11
|
+
date: 2022-03-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: lucarecord
|