lucabook 0.2.17 → 0.2.18

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b204a2ed70889d0750a6883de424ceb3b7e335cce99262eb98e288db6962cbd
4
- data.tar.gz: e19db20331a4edce1ea02ffb47495c3f849f74ba0bf78b13c7cf0562207fc0d2
3
+ metadata.gz: d25b3a6c62980682db52a5553ce26cafdcb36e80e9657a302a8413e1e92b565b
4
+ data.tar.gz: e82a86c04d13aa6addef398afd85755a7a54ce437d1e9415ce3f98bf1b28f914
5
5
  SHA512:
6
- metadata.gz: 16800a60362abcc56adb26ed60611a98a5ec5c3545143b4a0c4a379aac3988952e733dac19bf5c2188ce9e7c244dff1b4d6269635a226eeda51ec85c4ab2178f
7
- data.tar.gz: f60f61de1a1c18df3db8c1bc5278ae084089137b15ee88f198ff17c6418917c6adebb634820dcd9979b42a9ecf7e902329c7bb14fb950f5270154492a2b0d8b2
6
+ metadata.gz: 652c00f982977bbb619bfc834c312dbbb06f2ada524e1824869c04ef4ed09e3fadd5aee2b082fc3944cda4eaf7bfd18fd041a80582fe57f67cc88d13197b60a6
7
+ data.tar.gz: 422dedf33b9a9bd53ac8502613ae4a27c3c10730e2ac65841fddd9e424d9435a2cb92118700f9571dceea09b54b1f9a1538b9c76facfed87542832e2ce4ba939
@@ -12,20 +12,21 @@ module LucaCmd
12
12
  LucaBook::Import.import_json(STDIN.read)
13
13
  else
14
14
  puts 'Usage: luca-book import -c import_config'
15
+ exit 1
15
16
  end
16
17
  end
17
18
 
18
19
  def self.list(args, params)
20
+ args = LucaCmd.gen_range(params[:n] || 1) if args.empty?
19
21
  if params['code']
20
22
  LucaBook::List.term(*args, code: params['code']).list_on_code.to_yaml
21
- elsif args.length > 0
22
- LucaBook::List.term(*args).list_journals.to_yaml
23
23
  else
24
- # TODO: define default function
24
+ LucaBook::List.term(*args).list_journals.to_yaml
25
25
  end
26
26
  end
27
27
 
28
28
  def self.stats(args, params)
29
+ args = LucaCmd.gen_range(params[:n]) if args.empty?
29
30
  LucaBook::State.term(*args).stats(params[:level])
30
31
  end
31
32
  end
@@ -34,13 +35,24 @@ module LucaCmd
34
35
  def self.balancesheet(args, params)
35
36
  level = params[:level] || 2
36
37
  legal = params[:legal] || false
38
+ args = LucaCmd.gen_range(params[:n] || 1) if args.empty?
37
39
  LucaBook::State.term(*args).bs(level, legal: legal)
38
40
  end
39
41
 
40
42
  def self.profitloss(args, params)
43
+ args = LucaCmd.gen_range(params[:n]) if args.empty?
41
44
  LucaBook::State.term(*args).pl.to_yaml
42
45
  end
43
46
  end
47
+
48
+ module_function
49
+
50
+ def gen_range(count)
51
+ count ||= 3
52
+ today = Date.today
53
+ start = today.prev_month(count - 1)
54
+ [start.year, start.month, today.year, today.month]
55
+ end
44
56
  end
45
57
 
46
58
  def new_pj(args = nil, params = {})
@@ -57,7 +69,7 @@ when /journals?/, 'j'
57
69
  case subcmd
58
70
  when 'import'
59
71
  OptionParser.new do |opt|
60
- opt.banner = 'Usage: luca-book journals import filepath'
72
+ opt.banner = 'Usage: luca-book journals import [options] filepath'
61
73
  opt.on('-c', '--config VAL', 'import definition'){ |v| params['config'] = v }
62
74
  opt.on('-j', '--json', 'import via json format'){ |_v| params['json'] = true }
63
75
  args = opt.parse!(ARGV)
@@ -65,23 +77,32 @@ when /journals?/, 'j'
65
77
  end
66
78
  when 'list'
67
79
  OptionParser.new do |opt|
68
- opt.banner = 'Usage: luca-book journals list [year month]'
80
+ opt.banner = 'Usage: luca-book journals list [options] [YYYY M]'
69
81
  opt.on('-c', '--code VAL', 'search with code') { |v| params['code'] = v }
82
+ opt.on('-n VAL', 'report count') { |v| params[:n] = v.to_i }
70
83
  opt.on_tail('List records. If you specify code and/or month, search on each criteria.')
71
84
  args = opt.parse!(ARGV)
72
85
  LucaCmd::Journal.list(args, params)
73
86
  end
74
87
  when 'stats'
75
88
  OptionParser.new do |opt|
76
- opt.banner = 'Usage: luca-book reports bs'
77
- opt.on('-l', '--level VAL', 'account level') { |v| params[:level] = v.to_i }
89
+ opt.banner = 'Usage: luca-book journals stats [options] [YYYY M]'
90
+ opt.on('-n VAL', 'report count') { |v| params[:n] = v.to_i }
78
91
  args = opt.parse!(ARGV)
79
92
  LucaCmd::Journal.stats(args, params)
80
93
  end
94
+ else
95
+ puts 'Proper subcommand needed.'
96
+ puts
97
+ puts 'Usage: luca-book (j|journal[s]) subcommand [options] [YYYY M YYYY M]'
98
+ puts ' import: import journals from JSON/TSV'
99
+ puts ' list: list journals'
100
+ puts ' stats: list account statistics'
101
+ exit 1
81
102
  end
82
103
  when 'new'
83
104
  OptionParser.new do |opt|
84
- opt.banner = 'Usage: luca-book new Dir'
105
+ opt.banner = 'Usage: luca-book new [options] Dir'
85
106
  opt.on('-c', '--country VAL', 'specify country code') { |v| params['coountry'] = v }
86
107
  args = opt.parse(ARGV)
87
108
  new_pj(args, params)
@@ -91,7 +112,7 @@ when /reports?/, 'r'
91
112
  case subcmd
92
113
  when 'bs'
93
114
  OptionParser.new do |opt|
94
- opt.banner = 'Usage: luca-book reports bs'
115
+ opt.banner = 'Usage: luca-book reports bs [options] [YYYY M]'
95
116
  opt.on('-l', '--level VAL', 'account level') { |v| params[:level] = v.to_i }
96
117
  opt.on('--legal', 'show legal mandatory account') { |_v| params[:legal] = true }
97
118
  args = opt.parse!(ARGV)
@@ -99,15 +120,24 @@ when /reports?/, 'r'
99
120
  end
100
121
  when 'pl'
101
122
  OptionParser.new do |opt|
102
- opt.banner = 'Usage: luca-book reports pl'
123
+ opt.banner = 'Usage: luca-book reports pl [options] [YYYY M YYYY M]'
124
+ opt.on('-n VAL', 'report count') { |v| params[:n] = v.to_i }
103
125
  args = opt.parse!(ARGV)
104
126
  LucaCmd::Report.profitloss(args, params)
105
127
  end
128
+ else
129
+ puts 'Proper subcommand needed.'
130
+ puts
131
+ puts 'Usage: luca-book (r|report[s]) (bs|pl) [options] YYYY M'
132
+ puts ' bs: show balance sheet'
133
+ puts ' pl: show statement of income'
134
+ exit 1
106
135
  end
107
- when '--help'
108
- puts 'Usage: luca-book subcommand'
136
+ else
137
+ puts 'Proper subcommand needed.'
138
+ puts
139
+ puts 'Usage: luca-book (j[ournals]|r[eports]) subcommand'
109
140
  puts ' journals: operate journal records'
110
141
  puts ' reports: show reports'
111
- else
112
- puts 'Invalid subcommand'
142
+ exit 1
113
143
  end
@@ -47,9 +47,9 @@ module LucaBook
47
47
  reports = [].tap do |r|
48
48
  while date <= last_date do
49
49
  diff, count = accumulate_month(date.year, date.month)
50
- r << diff
51
- counts << count
52
- date = date.next_month
50
+ r << diff.tap { |c| c['_d'] = date.to_s }
51
+ counts << count.tap { |c| c['_d'] = date.to_s }
52
+ date = Date.new(date.next_month.year, date.next_month.month, -1)
53
53
  end
54
54
  end
55
55
  new reports, counts
@@ -87,16 +87,18 @@ module LucaBook
87
87
  @statement ||= @data
88
88
  @statement.map do |report|
89
89
  {}.tap do |h|
90
- report.each { |k, v| h[@dict.dig(k, :label)] = v }
90
+ report.each { |k, v| h[@dict.dig(k, :label) || k] = v }
91
91
  end
92
92
  end
93
93
  end
94
94
 
95
95
  def stats(level = nil)
96
- keys = @count.map(&:keys).flatten.uniq.sort
96
+ keys = @count.map(&:keys).flatten.push('_t').uniq.sort
97
97
  @count.map! do |data|
98
+ sum = 0
98
99
  keys.each do |k|
99
100
  data[k] ||= 0
101
+ sum += data[k] if /^[^_]/.match(k)
100
102
  next if level.nil? || k.length <= level
101
103
 
102
104
  if data[k[0, level]]
@@ -106,6 +108,7 @@ module LucaBook
106
108
  end
107
109
  end
108
110
  data.select! { |k, _v| k.length <= level } if level
111
+ data['_t'] = sum
109
112
  data.sort.to_h
110
113
  end
111
114
  keys.map! { |k| k[0, level] }.uniq.select! { |k| k.length <= level } if level
@@ -147,7 +150,7 @@ module LucaBook
147
150
  case k
148
151
  when /^[0-4].*/
149
152
  res[:debit] << { k => v }
150
- when /^[5-9H].*/
153
+ when /^[5-9].*/
151
154
  res[:credit] << { k => v }
152
155
  end
153
156
  end
@@ -155,8 +158,9 @@ module LucaBook
155
158
  end
156
159
 
157
160
  def pl
158
- @statement = @data.map { |data| data.select { |k, _v| /^[A-H].+/.match(k) } }
161
+ @statement = @data.map { |data| data.select { |k, _v| /^[A-H_].+/.match(k) } }
159
162
  @statement << @statement.each_with_object({}) { |item, h| item.each { |k, v| h[k].nil? ? h[k] = v : h[k] += v } }
163
+ .tap { |h| h['_d'] = 'Total' }
160
164
  self
161
165
  end
162
166
 
@@ -169,12 +173,6 @@ module LucaBook
169
173
  #
170
174
  def self.total_subaccount(report)
171
175
  {}.tap do |res|
172
- res['10'] = sum_matched(report, /^[123][0-9A-Z]{2,}/)
173
- res['40'] = sum_matched(report, /^[4][0-9A-Z]{2,}/)
174
- res['50'] = sum_matched(report, /^[56][0-9A-Z]{2,}/)
175
- res['70'] = sum_matched(report, /^[78][0-9A-Z]{2,}/)
176
- res['8ZZ'] = res['50'] + res['70']
177
- res['9ZZ'] = sum_matched(report, /^[9][0-9A-Z]{2,}/)
178
176
  res['A0'] = sum_matched(report, /^[A][0-9A-Z]{2,}/)
179
177
  res['B0'] = sum_matched(report, /^[B][0-9A-Z]{2,}/)
180
178
  res['BA'] = res['A0'] - res['B0']
@@ -184,12 +182,22 @@ module LucaBook
184
182
  res['E0'] = sum_matched(report, /^[E][0-9A-Z]{2,}/)
185
183
  res['EA'] = res['CA'] + res['D0'] - res['E0']
186
184
  res['F0'] = sum_matched(report, /^[F][0-9A-Z]{2,}/)
187
- res['G0'] = sum_matched(report, /^[G][0-9A-Z]{2,}/)
185
+ res['G0'] = sum_matched(report, /^[G][0-9][0-9A-Z]{1,}/)
188
186
  res['GA'] = res['EA'] + res['F0'] - res['G0']
189
- res['HA'] = res['GA'] - sum_matched(report, /^[H][0-9A-Z]{2,}/)
187
+ res['H0'] = sum_matched(report, /^[H][0-9][0-9A-Z]{1,}/)
188
+ res['HA'] = res['GA'] - res['H0']
189
+
190
+ res['9142'] = (report['9142'] || 0) + res['HA']
191
+ res['10'] = sum_matched(report, /^[123][0-9A-Z]{2,}/)
192
+ res['40'] = sum_matched(report, /^[4][0-9A-Z]{2,}/)
193
+ res['50'] = sum_matched(report, /^[56][0-9A-Z]{2,}/)
194
+ res['70'] = sum_matched(report, /^[78][0-9A-Z]{2,}/)
195
+ res['8ZZ'] = res['50'] + res['70']
196
+ res['9ZZ'] = sum_matched(report, /^[9][0-9A-Z]{2,}/)
190
197
 
191
198
  res['1'] = res['10'] + res['40']
192
199
  res['5'] = res['8ZZ'] + res['9ZZ'] + res['HA']
200
+ res['_d'] = report['_d']
193
201
 
194
202
  report.each do |k, v|
195
203
  if k.length >= 4
@@ -115,6 +115,11 @@ C1O 外注費
115
115
  C1P Depreciation
116
116
  C1Q Miscellaneous
117
117
  C1R 貸倒引当金繰入
118
+ C1S 支払報酬
119
+ C1T 研修費
120
+ C1U 採用費
121
+ C1V 業務委託費
122
+ C1W 会議費
118
123
  CA Operating profit/loss
119
124
  D0 営業外収益
120
125
  D11 Interest income
@@ -139,4 +144,6 @@ G11 固定資産売却損
139
144
  G12 固定資産除却損
140
145
  G13 災害損失
141
146
  GA Income before taxes
147
+ H0 Income Taxes
148
+ H11 Income Taxes Current
142
149
  HA Net Income/Loss
@@ -1,5 +1,5 @@
1
1
  code label xbrl_id consumption_tax income_tax
2
- 1 資産合計
2
+ 1 資産合計 jppfs_cor:AssetsAbstract
3
3
  10 流動資産 jppfs_cor:CurrentAssetsAbstract
4
4
  10XX UNSETTLED_IMPORT
5
5
  110 現金及び預金 jppfs_cor:CashAndDeposits
@@ -55,7 +55,7 @@ code label xbrl_id consumption_tax income_tax
55
55
  442 創立費 jppfs_cor:DeferredOrganisationExpensesDA
56
56
  442 新株発行費 jppfs_cor:StockIssuanceCostDA
57
57
  443 社債発行費 jppfs_cor:BondIssuanceCostDA
58
- 5 負債・純資産合計
58
+ 5 負債・純資産合計 jppfs_cor:LiabilitiesAndNetAssets
59
59
  50 流動負債 jppfs_cor:CurrentLiabilitiesAbstract
60
60
  50XX UNSETTLED_IMPORT
61
61
  510 支払手形 jppfs_cor:NotePayableTrade
@@ -74,25 +74,24 @@ code label xbrl_id consumption_tax income_tax
74
74
  712 長期借入金 jppfs_cor:LongTermLoansPayable
75
75
  713 退職給付引当金 jppfs_cor:ProvisionForRetirementBenefits
76
76
  714 繰延税金負債 jppfs_cor:DeferredTaxLiabilities
77
- 8ZZ 負債合計
78
- 90 純資産 jppfs_cor:NetAssetsAbstract
77
+ 8ZZ 負債合計 jppfs_cor:LiabilitiesAbstract
79
78
  91 株主資本 jppfs_cor:ShareholdersAbstract
80
79
  911 資本金 jppfs_cor:CapitalStock
81
- 912 新株式申込証拠金
80
+ 912 新株式申込証拠金 jppfs_cor:DepositForSubscriptionsToShares
82
81
  913 資本剰余金 jppfs_cor:LegalCapitalSurplus
83
- 9131 資本準備金
84
- 9132 その他資本剰余金
82
+ 9131 資本準備金 jppfs_cor:LegalCapitalSurplus
83
+ 9132 その他資本剰余金 jppfs_cor:OtherCapitalSurplus
85
84
  914 利益剰余金 jppfs_cor:RetainedEarnings
86
- 9141 利益準備金
87
- 9142 その他利益剰余金
85
+ 9141 利益準備金 jppfs_cor:LegalRetainedEarnings
86
+ 9142 その他利益剰余金 jppfs_cor:OtherRetainedEarningsAbstract
88
87
  915 自己株式 jppfs_cor:TreasuryStock
89
- 916 自己株式申込証拠金
88
+ 916 自己株式申込証拠金 jppfs_cor:DepositForSubscriptionsToTreasuryStock
90
89
  92 評価換算差額等 jppfs_cor:ValuationAndTranslationAdjustments
91
90
  921 有価証券評価差額金 jppfs_cor:ValuationDifferenceOnAvailableForSaleSecurities
92
91
  922 為替換算調整勘定 jppfs_cor:ForeignCurrencyTranslationAdjustment
93
92
  93 新株予約権 jppfs_cor:SubscriptionRightsToShares
94
93
  940 非支配株主持分 jppfs_cor:NonControllingInterests
95
- 9ZZ 純資産合計
94
+ 9ZZ 純資産合計 jppfs_cor:NetAssetsAbstract
96
95
  A0 売上 jppfs_cor:NetSalesAbstract
97
96
  A11 売上高 jppfs_cor:NetSales
98
97
  B0 売上原価 jppfs_cor:CostOfSalesAbstract
@@ -130,7 +129,11 @@ C1O 外注費 jppfs_cor:SubcontructExpensesSGA
130
129
  C1P 減価償却費 jppfs_cor:DepreciationSGA
131
130
  C1Q 雑費 jppfs_cor:MiscellaneousExpensesSGA
132
131
  C1R 貸倒引当金繰入 jppfs_cor:ProvisionOfAllowanceForDebtfulAccountsSGA
133
- C1S 支払報酬
132
+ C1S 支払報酬 jppfs_cor:CompensationsSGA
133
+ C1T 研修費 jppfs_cor:TrainingExpensesSGA
134
+ C1U 採用費 jppfs_cor:RecruitingExpensesSGA
135
+ C1V 業務委託費 jppfs_cor:BusinessConsignmentExpensesSGA
136
+ C1W 会議費 jppfs_cor:ConferenceExpensesSGA
134
137
  CA 営業利益 jppfs_cor:OperatingIncome
135
138
  D0 営業外収益 jppfs_cor:NonOperatingIncomeAbstract
136
139
  D11 受取利息 jppfs_cor:InterestIncomeNOI
@@ -154,5 +157,7 @@ G0 特別損失 jppfs_cor:ExtraordinaryLossAbstract
154
157
  G11 固定資産売却損 jppfs_cor:LossOnSalesOfNoncurrentAssetsEL
155
158
  G12 固定資産除却損 jppfs_cor:LossOnRetirementOfNoncurrentAssetsEL
156
159
  G13 災害損失 jppfs_cor:LossOnDisasterEL
157
- GA 税引前純利益 jppfs_cor:IncomeBeforeIncomeTaxes
160
+ GA 税引前利益 jppfs_cor:IncomeBeforeIncomeTaxes
161
+ H0 法人税等 jppfs_cor:IncomeTaxes
162
+ H11 法人税、住民税及び事業税 jppfs_cor:IncomeTaxesCurrent
158
163
  HA 当期利益 jppfs_cor:ProfitLoss
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LucaBook
4
- VERSION = '0.2.17'
4
+ VERSION = '0.2.18'
5
5
  end
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.17
4
+ version: 0.2.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chuma Takahiro
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-11-18 00:00:00.000000000 Z
11
+ date: 2020-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lucarecord
@@ -84,7 +84,6 @@ files:
84
84
  - lib/luca_book/import.rb
85
85
  - lib/luca_book/journal.rb
86
86
  - lib/luca_book/list.rb
87
- - lib/luca_book/report.rb
88
87
  - lib/luca_book/setup.rb
89
88
  - lib/luca_book/state.rb
90
89
  - lib/luca_book/templates/base-jp.xbrl.erb
@@ -1,3 +0,0 @@
1
- # move to LucaBook::State
2
- class LucaBookReport
3
- end