lucabook 0.5.3 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 33c275cc53bc4538109f607fcfac3cb8ae5014863037c58ff6a74903cf6dc862
4
- data.tar.gz: 6b51180e7d5501cc94d030859ff4ad12508fc1aa68a848f5d78e89bf06f1a2c4
3
+ metadata.gz: c6cc66f4a8bcc5ca7fb1e2a86c6ba57d1ff75d01dec530835ad671386ca2409a
4
+ data.tar.gz: d13133523464f63818b5acea123472f9ab736ba50c6bba4f93ec1cc3924246d7
5
5
  SHA512:
6
- metadata.gz: c2d2db06519f28374a632f9ec8e697af1e52cb73f46042cb1b14ab3404441cc3fe3395c59d39cb4b50dad1d571f5a4cec8f1824d864ea00a6958ee832f10b12c
7
- data.tar.gz: 45e5306fdd26e9fa9a2e3850a4674cbe552a5a612e3b57f98319d3e0d67687bfd6a2bf3c3dffc0bba5722ceadef3b3fb43a2846faa281d02eeaee66c97cadff0
6
+ metadata.gz: fdb7baa012b6110695687435f830eb64f930a88025284494ba509ec76d27f6f3bc906ff5cd8ea936869b4f339fa2a7854ee456534ec4e2c63eec4bfe876e794d
7
+ data.tar.gz: 5b49a82f52825781ad3c5e7db1bfcb45be9ef2e0c4f93040d3d368bfa8e6da5b4048eb97550c947c154646c277c4496d3c50e1f4ec9d23604a15f73ddf754bb5
data/exe/luca-book CHANGED
@@ -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).render_xbrl(params[:output])
80
+ LucaBook::State.range(*range).write_xbrl(params[:output])
81
81
  end
82
82
 
83
83
  def self.balancesheet(args, params)
@@ -102,12 +102,13 @@ module LucaBook
102
102
  end
103
103
 
104
104
  def self.latest_balance_path(date)
105
- start_year = date.month >= LucaSupport::CONST.config['fy_start'] ? date.year : date.year - 1
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
- fileglob = %Q(start-#{latest.year}-#{format("%02d", latest.month)}-*)
109
- path = Dir.glob(fileglob, base: dict_dir)[0] || 'start.tsv'
110
- dict_dir / path
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)
@@ -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
- base = Dict.latest_balance(start_date).each_with_object({}) do |(k, v), h|
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
- if month == LucaSupport::CONST.config['fy_start'].to_i
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
- year -= 1 if month <= LucaSupport::CONST.config['fy_start'].to_i
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
- File.open("#{@filename}.xbrl", 'w') { |f| f.write render_erb(search_template("base-#{country_suffix}.xbrl.erb")) }
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| /^[33]/.match(e[:code]) }
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" />
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LucaBook
4
- VERSION = '0.5.3'
4
+ VERSION = '0.5.4'
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.5.3
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-03-31 00:00:00.000000000 Z
11
+ date: 2024-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lucarecord