litexbrl 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/README.md +1 -1
  4. data/TODO.txt +8 -0
  5. data/bin/1.htm +2 -0
  6. data/bin/1q.htm +2 -0
  7. data/bin/ifrs-rev.htm +2 -0
  8. data/bin/ifrs.htm +2 -0
  9. data/bin/litexbrl +28 -0
  10. data/bin/mid.htm +2 -0
  11. data/bin/minus.htm +2 -0
  12. data/bin/non-cons.htm +2 -0
  13. data/bin/rev-non-cons.htm +2 -0
  14. data/bin/rev.htm +3986 -0
  15. data/bin/year.htm +2919 -0
  16. data/lib/litexbrl/tdnet/account_item.rb +111 -0
  17. data/lib/litexbrl/tdnet/company_attribute.rb +15 -0
  18. data/lib/litexbrl/tdnet/financial_information.rb +151 -0
  19. data/lib/litexbrl/tdnet/financial_information2.rb +97 -0
  20. data/lib/litexbrl/tdnet/results_forecast.rb +102 -0
  21. data/lib/litexbrl/tdnet/results_forecast2.rb +139 -0
  22. data/lib/litexbrl/tdnet/results_forecast_attribute.rb +35 -0
  23. data/lib/litexbrl/tdnet/summary.rb +127 -134
  24. data/lib/litexbrl/tdnet/summary2.rb +178 -0
  25. data/lib/litexbrl/tdnet/summary_attribute.rb +60 -0
  26. data/lib/litexbrl/tdnet.rb +64 -0
  27. data/lib/litexbrl/utils.rb +29 -35
  28. data/lib/litexbrl/version.rb +1 -1
  29. data/lib/litexbrl.rb +1 -1
  30. data/litexbrl.gemspec +4 -4
  31. data/spec/data/tdnet/results_forecast/ifrs-cons-2014.xbrl +4 -0
  32. data/spec/data/tdnet/results_forecast/jp-cons-2012.xbrl +6 -0
  33. data/spec/data/tdnet/results_forecast/jp-noncons-2014.xbrl +6 -0
  34. data/spec/data/tdnet/results_forecast/us-cons-2014.xbrl +8 -0
  35. data/spec/data/tdnet/results_forecast.xbrl +6 -0
  36. data/spec/data/tdnet/results_forecast2/1q.htm +2 -0
  37. data/spec/data/tdnet/results_forecast2/2q-4q.htm +2 -0
  38. data/spec/data/tdnet/results_forecast2/3q.htm +2 -0
  39. data/spec/data/tdnet/results_forecast2/ifrs-cons-2014.htm +2 -0
  40. data/spec/data/tdnet/results_forecast2/jp-cons-2014.htm +2 -0
  41. data/spec/data/tdnet/results_forecast2/jp-noncons-2014.htm +2 -0
  42. data/spec/data/tdnet/results_forecast2/range.htm +2 -0
  43. data/spec/data/tdnet/results_forecast2/us-cons-2014.htm +2 -0
  44. data/spec/data/tdnet/results_forecast2.htm +2 -0
  45. data/spec/data/tdnet/summary/ifrs-cons-2014-q1.xbrl +2 -0
  46. data/spec/data/tdnet/summary/ifrs-or-cons-2014-q1.xbrl +2 -0
  47. data/spec/data/tdnet/summary/ifrs-sa-cons-2014-q1.xbrl +5 -0
  48. data/spec/data/tdnet/summary/jp-bk-cons-2014-q1.xbrl +2 -0
  49. data/spec/data/tdnet/summary/jp-cons-2013-q4.xbrl +2 -0
  50. data/spec/data/tdnet/summary/jp-goprv-cons-2013-q4.xbrl +3 -0
  51. data/spec/data/tdnet/summary/jp-in-cons-2014-q1.xbrl +2 -0
  52. data/spec/data/tdnet/summary/jp-nsco-cons-2013-q4.xbrl +3 -0
  53. data/spec/data/tdnet/summary/jp-oprv-cons-2014-q1.xbrl +3 -0
  54. data/spec/data/tdnet/summary/jp-oprvsp-cons-2014-q1.xbrl +2 -0
  55. data/spec/data/tdnet/summary/jp-se-cons-2014-q1.xbrl +3 -0
  56. data/spec/data/tdnet/summary/us-bnip-cons-2014-q1.xbrl +5 -0
  57. data/spec/data/tdnet/summary/us-cons-2014-q1.xbrl +24 -0
  58. data/spec/data/tdnet/summary/us-ibmi-cons-2013-q4.xbrl +10 -0
  59. data/spec/data/tdnet/summary/us-ifco-cons-2013-q4.xbrl +6 -0
  60. data/spec/data/tdnet/summary/us-nsoprv-cons-2014-q1.xbrl +3 -0
  61. data/spec/data/tdnet/summary/us-oi-cons-2014-q1.xbrl +3 -0
  62. data/spec/data/tdnet/summary/us-oprv-cons-2014-q1.xbrl +3 -0
  63. data/spec/data/tdnet/summary/us-tr-ibit-cons-2013-q4.xbrl +3 -0
  64. data/spec/data/tdnet/summary2/ifrs-cons-2013-q4.htm +2 -0
  65. data/spec/data/tdnet/summary2/jp-cons-2013-q4.htm +2 -0
  66. data/spec/data/tdnet/summary2/jp-cons-2014-q1.htm +2 -0
  67. data/spec/data/tdnet/summary2/jp-noncons-2014-q4.htm +2 -0
  68. data/spec/data/tdnet/summary2/us-cons-2014-q4.htm +2 -0
  69. data/spec/data/tdnet/summary2.htm +2 -0
  70. data/spec/spec_helper.rb +0 -1
  71. data/spec/support/nokogiri_helper.rb +4 -0
  72. data/spec/tdnet/account_item_spec.rb +57 -0
  73. data/spec/tdnet/results_forecast2_spec.rb +257 -0
  74. data/spec/tdnet/results_forecast_attribute_spec.rb +58 -0
  75. data/spec/tdnet/results_forecast_spec.rb +112 -0
  76. data/spec/tdnet/summary2_spec.rb +247 -0
  77. data/spec/tdnet/summary_attribute_spec.rb +92 -0
  78. data/spec/tdnet/summary_spec.rb +543 -62
  79. data/spec/tdnet_spec.rb +41 -0
  80. data/spec/utils_spec.rb +74 -0
  81. metadata +144 -20
  82. /data/spec/data/tdnet/summary/{ja-cons-2013-q1.xbrl → jp-cons-2013-q1.xbrl} +0 -0
  83. /data/spec/data/tdnet/summary/{ja-cons-2013-q2.xbrl → jp-cons-2013-q2.xbrl} +0 -0
  84. /data/spec/data/tdnet/summary/{ja-cons-2013-q3.xbrl → jp-cons-2013-q3.xbrl} +0 -0
  85. /data/spec/data/tdnet/summary/{ja-noncons-q1.xbrl → jp-noncons-q1.xbrl} +0 -0
  86. /data/spec/data/tdnet/{summary/ja-cons-2013-q4.xbrl → summary.xbrl} +0 -0
@@ -9,35 +9,30 @@ module LiteXBRL
9
9
  let(:dir) { File.expand_path '../../data/tdnet/summary', __FILE__ }
10
10
 
11
11
  describe ".find_consolidation" do
12
- it "連結" do
13
- consolidation = Summary.send(:find_consolidation, doc("#{dir}/ja-cons-2013-q1.xbrl"))
14
- expect(consolidation).to eq("Consolidated")
15
- end
16
-
17
12
  it "非連結" do
18
- consolidation = Summary.send(:find_consolidation, doc("#{dir}/ja-noncons-q1.xbrl"))
13
+ consolidation = Summary.send(:find_consolidation, doc("#{dir}/jp-noncons-q1.xbrl"))
19
14
  expect(consolidation).to eq("NonConsolidated")
20
15
  end
21
16
  end
22
17
 
23
18
  describe ".find_season" do
24
19
  it "Q1" do
25
- season = Summary.send(:find_season, doc("#{dir}/ja-cons-2013-q1.xbrl"), "Consolidated")
20
+ season = Summary.send(:find_season, doc("#{dir}/jp-cons-2013-q1.xbrl"), "Consolidated")
26
21
  expect(season).to eq("AccumulatedQ1")
27
22
  end
28
23
 
29
24
  it "Q2" do
30
- season = Summary.send(:find_season, doc("#{dir}/ja-cons-2013-q2.xbrl"), "Consolidated")
25
+ season = Summary.send(:find_season, doc("#{dir}/jp-cons-2013-q2.xbrl"), "Consolidated")
31
26
  expect(season).to eq("AccumulatedQ2")
32
27
  end
33
28
 
34
29
  it "Q3" do
35
- season = Summary.send(:find_season, doc("#{dir}/ja-cons-2013-q3.xbrl"), "Consolidated")
30
+ season = Summary.send(:find_season, doc("#{dir}/jp-cons-2013-q3.xbrl"), "Consolidated")
36
31
  expect(season).to eq("AccumulatedQ3")
37
32
  end
38
33
 
39
34
  it "Q4" do
40
- season = Summary.send(:find_season, doc("#{dir}/ja-cons-2013-q4.xbrl"), "Consolidated")
35
+ season = Summary.send(:find_season, doc("#{dir}/jp-cons-2013-q4.xbrl"), "Consolidated")
41
36
  expect(season).to eq("Year")
42
37
  end
43
38
  end
@@ -54,77 +49,563 @@ module LiteXBRL
54
49
  end
55
50
  end
56
51
 
57
- describe ".parse" do
58
- context "連結・第1四半期" do
59
- let(:xbrl) { Summary.parse("#{dir}/ja-cons-2013-q1.xbrl") }
52
+ describe ".find_value_tse_t_ed" do
53
+ context "要素が取得できない" do
54
+ let(:doc) { double "doc", at_xpath: nil }
55
+ let(:item) { ['NetSales'] }
60
56
 
61
- it do
62
- expect(xbrl.code).to eq('4368')
63
- expect(xbrl.year).to eq(2013)
64
- expect(xbrl.quarter).to eq(1)
65
-
66
- expect(xbrl.net_sales).to eq(6818)
67
- expect(xbrl.operating_income).to eq(997)
68
- expect(xbrl.ordinary_income).to eq(957)
69
- expect(xbrl.net_income).to eq(543)
70
- expect(xbrl.net_income_per_share).to eq(86.21)
57
+ it "nilを返す" do
58
+ val = Summary.send(:find_value_tse_t_ed, doc, item, nil)
59
+ expect(val).to be_nil
71
60
  end
72
61
  end
62
+ end
63
+
64
+ describe ".read doc" do
65
+ context '日本会計基準' do
66
+ context "連結・第1四半期" do
67
+ let(:xbrl) { Summary.read doc("#{dir}/jp-cons-2013-q1.xbrl") }
68
+ let(:summary) { xbrl[:summary] }
69
+ let(:results_forecast) { xbrl[:results_forecast].first }
70
+
71
+ it do
72
+ expect(summary[:code]).to eq('4368')
73
+ expect(summary[:year]).to eq(2013)
74
+ expect(summary[:month]).to eq(3)
75
+ expect(summary[:quarter]).to eq(1)
76
+
77
+ expect(summary[:net_sales]).to eq(6818)
78
+ expect(summary[:operating_income]).to eq(997)
79
+ expect(summary[:ordinary_income]).to eq(957)
80
+ expect(summary[:net_income]).to eq(543)
81
+ expect(summary[:net_income_per_share]).to eq(86.21)
73
82
 
74
- context "連結・第2四半期" do
75
- let(:xbrl) { Summary.parse("#{dir}/ja-cons-2013-q2.xbrl") }
83
+ expect(summary[:change_in_net_sales]).to eq(-0.118)
84
+ expect(summary[:change_in_operating_income]).to eq(-0.225)
85
+ expect(summary[:change_in_ordinary_income]).to eq(-0.222)
86
+ expect(summary[:change_in_net_income]).to eq(-0.545)
76
87
 
77
- it do
78
- expect(xbrl.code).to eq('4368')
79
- expect(xbrl.year).to eq(2013)
80
- expect(xbrl.quarter).to eq(2)
88
+ expect(summary[:prior_net_sales]).to eq(7727)
89
+ expect(summary[:prior_operating_income]).to eq(1287)
90
+ expect(summary[:prior_ordinary_income]).to eq(1230)
91
+ expect(summary[:prior_net_income]).to eq(1192)
92
+ expect(summary[:prior_net_income_per_share]).to eq(189.29)
81
93
 
82
- expect(xbrl.net_sales).to eq(13740)
83
- expect(xbrl.operating_income).to eq(1863)
84
- expect(xbrl.ordinary_income).to eq(1777)
85
- expect(xbrl.net_income).to eq(1056)
86
- expect(xbrl.net_income_per_share).to eq(167.60)
94
+ expect(summary[:change_in_prior_net_sales]).to eq(0.03)
95
+ expect(summary[:change_in_prior_operating_income]).to eq(0.117)
96
+ expect(summary[:change_in_prior_ordinary_income]).to eq(0.186)
97
+ expect(summary[:change_in_prior_net_income]).to eq 0.947
98
+
99
+ expect(results_forecast[:forecast_net_sales]).to eq(30000)
100
+ expect(results_forecast[:forecast_operating_income]).to eq(3700)
101
+ expect(results_forecast[:forecast_ordinary_income]).to eq(3600)
102
+ expect(results_forecast[:forecast_net_income]).to eq(2000)
103
+ expect(results_forecast[:forecast_net_income_per_share]).to eq(317.4)
104
+
105
+ expect(results_forecast[:change_in_forecast_net_sales]).to eq(0.062)
106
+ expect(results_forecast[:change_in_forecast_operating_income]).to eq(-0.053)
107
+ expect(results_forecast[:change_in_forecast_ordinary_income]).to eq(-0.059)
108
+ expect(results_forecast[:change_in_forecast_net_income]).to eq(-0.203)
109
+ end
110
+ end
111
+
112
+ context "連結・第2四半期" do
113
+ let(:xbrl) { Summary.read doc("#{dir}/jp-cons-2013-q2.xbrl") }
114
+ let(:summary) { xbrl[:summary] }
115
+ let(:results_forecast) { xbrl[:results_forecast].first }
116
+
117
+ it do
118
+ expect(summary[:code]).to eq('4368')
119
+ expect(summary[:year]).to eq(2013)
120
+ expect(summary[:month]).to eq(3)
121
+ expect(summary[:quarter]).to eq(2)
122
+
123
+ expect(summary[:net_sales]).to eq(13740)
124
+ expect(summary[:operating_income]).to eq(1863)
125
+ expect(summary[:ordinary_income]).to eq(1777)
126
+ expect(summary[:net_income]).to eq(1056)
127
+ expect(summary[:net_income_per_share]).to eq(167.60)
128
+ expect(results_forecast[:forecast_net_sales]).to eq(30000)
129
+ expect(results_forecast[:forecast_operating_income]).to eq(3700)
130
+ expect(results_forecast[:forecast_ordinary_income]).to eq(3600)
131
+ expect(results_forecast[:forecast_net_income]).to eq(2000)
132
+ expect(results_forecast[:forecast_net_income_per_share]).to eq(317.4)
133
+ end
134
+ end
135
+
136
+ context "連結・第3四半期" do
137
+ let(:xbrl) { Summary.read doc("#{dir}/jp-cons-2013-q3.xbrl") }
138
+ let(:summary) { xbrl[:summary] }
139
+ let(:results_forecast) { xbrl[:results_forecast].first }
140
+
141
+ it do
142
+ expect(summary[:code]).to eq('4368')
143
+ expect(summary[:year]).to eq(2013)
144
+ expect(summary[:month]).to eq(3)
145
+ expect(summary[:quarter]).to eq(3)
146
+
147
+ expect(summary[:net_sales]).to eq(20793)
148
+ expect(summary[:operating_income]).to eq(2772)
149
+ expect(summary[:ordinary_income]).to eq(2720)
150
+ expect(summary[:net_income]).to eq(1655)
151
+ expect(summary[:net_income_per_share]).to eq(262.79)
152
+ expect(results_forecast[:forecast_net_sales]).to eq(30000)
153
+ expect(results_forecast[:forecast_operating_income]).to eq(3700)
154
+ expect(results_forecast[:forecast_ordinary_income]).to eq(3600)
155
+ expect(results_forecast[:forecast_net_income]).to eq(2000)
156
+ expect(results_forecast[:forecast_net_income_per_share]).to eq(317.4)
157
+ end
158
+ end
159
+
160
+ context "連結・第4四半期" do
161
+ let(:xbrl) { Summary.read doc("#{dir}/jp-cons-2013-q4.xbrl") }
162
+ let(:summary) { xbrl[:summary] }
163
+ let(:results_forecast) { xbrl[:results_forecast].first }
164
+
165
+ it do
166
+ expect(summary[:code]).to eq('4368')
167
+ expect(summary[:year]).to eq(2013)
168
+ expect(summary[:month]).to eq(3)
169
+ expect(summary[:quarter]).to eq(4)
170
+
171
+ expect(summary[:net_sales]).to eq(27355)
172
+ expect(summary[:operating_income]).to eq(3223)
173
+ expect(summary[:ordinary_income]).to eq(3231)
174
+ expect(summary[:net_income]).to eq(1903)
175
+ expect(summary[:net_income_per_share]).to eq(302.11)
176
+
177
+ expect(summary[:change_in_net_sales]).to eq(-0.032)
178
+ expect(summary[:change_in_operating_income]).to eq(-0.175)
179
+ expect(summary[:change_in_ordinary_income]).to eq(-0.155)
180
+ expect(summary[:change_in_net_income]).to eq(-0.241)
181
+
182
+ expect(summary[:prior_net_sales]).to eq(28247)
183
+ expect(summary[:prior_operating_income]).to eq(3908)
184
+ expect(summary[:prior_ordinary_income]).to eq(3826)
185
+ expect(summary[:prior_net_income]).to eq(2508)
186
+ expect(summary[:prior_net_income_per_share]).to eq(398.04)
187
+
188
+ expect(summary[:change_in_prior_net_sales]).to eq -0.066
189
+ expect(summary[:change_in_prior_operating_income]).to eq -0.157
190
+ expect(summary[:change_in_prior_ordinary_income]).to eq -0.122
191
+ expect(summary[:change_in_prior_net_income]).to eq 0.076
192
+
193
+ expect(results_forecast[:forecast_net_sales]).to eq(30000)
194
+ expect(results_forecast[:forecast_operating_income]).to eq(3500)
195
+ expect(results_forecast[:forecast_ordinary_income]).to eq(3400)
196
+ expect(results_forecast[:forecast_net_income]).to eq(2000)
197
+ expect(results_forecast[:forecast_net_income_per_share]).to eq(317.4)
198
+
199
+ expect(results_forecast[:change_in_forecast_net_sales]).to eq(0.097)
200
+ expect(results_forecast[:change_in_forecast_operating_income]).to eq(0.086)
201
+ expect(results_forecast[:change_in_forecast_ordinary_income]).to eq(0.052)
202
+ expect(results_forecast[:change_in_forecast_net_income]).to eq(0.051)
203
+ end
204
+ end
205
+
206
+ context "業種:銀行" do
207
+ let(:xbrl) { Summary.read doc("#{dir}/jp-bk-cons-2014-q1.xbrl") }
208
+ let(:summary) { xbrl[:summary] }
209
+
210
+ it do
211
+ expect(summary[:code]).to eq('8361')
212
+ expect(summary[:year]).to eq(2014)
213
+ expect(summary[:month]).to eq(3)
214
+ expect(summary[:quarter]).to eq(1)
215
+
216
+ expect(summary[:net_sales]).to eq(28278)
217
+ expect(summary[:operating_income]).to eq(5079)
218
+ expect(summary[:ordinary_income]).to eq(5079)
219
+ expect(summary[:net_income]).to eq(4521)
220
+ expect(summary[:net_income_per_share]).to eq(12.82)
221
+ end
222
+ end
223
+
224
+ context '業種:証券' do
225
+ let(:xbrl) { Summary.read doc("#{dir}/jp-se-cons-2014-q1.xbrl") }
226
+ let(:summary) { xbrl[:summary] }
227
+
228
+ it do
229
+ expect(summary[:code]).to eq('8601')
230
+ expect(summary[:year]).to eq(2014)
231
+ expect(summary[:month]).to eq(3)
232
+ expect(summary[:quarter]).to eq(1)
233
+
234
+ expect(summary[:net_sales]).to eq(183082)
235
+ expect(summary[:operating_income]).to eq(62307)
236
+ expect(summary[:ordinary_income]).to eq(65087)
237
+ expect(summary[:net_income]).to eq(57297)
238
+ expect(summary[:net_income_per_share]).to eq(33.72)
239
+ end
240
+ end
241
+
242
+ context '業種:保険' do
243
+ let(:xbrl) { Summary.read doc("#{dir}/jp-in-cons-2014-q1.xbrl") }
244
+ let(:summary) { xbrl[:summary] }
245
+
246
+ it do
247
+ expect(summary[:code]).to eq('8715')
248
+ expect(summary[:year]).to eq(2014)
249
+ expect(summary[:month]).to eq(3)
250
+ expect(summary[:quarter]).to eq(1)
251
+
252
+ expect(summary[:net_sales]).to eq(4394)
253
+ expect(summary[:operating_income]).to eq(113)
254
+ expect(summary[:ordinary_income]).to eq(113)
255
+ expect(summary[:net_income]).to eq(68)
256
+ expect(summary[:net_income_per_share]).to eq(3.96)
257
+ end
87
258
  end
88
- end
89
259
 
90
- context "連結・第3四半期" do
91
- let(:xbrl) { Summary.parse("#{dir}/ja-cons-2013-q3.xbrl") }
260
+ context '業種:営業収益' do
261
+ let(:xbrl) { Summary.read doc("#{dir}/jp-oprv-cons-2014-q1.xbrl") }
262
+ let(:summary) { xbrl[:summary] }
92
263
 
93
- it do
94
- expect(xbrl.code).to eq('4368')
95
- expect(xbrl.year).to eq(2013)
96
- expect(xbrl.quarter).to eq(3)
264
+ it do
265
+ expect(summary[:code]).to eq('8289')
266
+ expect(summary[:year]).to eq(2014)
267
+ expect(summary[:month]).to eq(2)
268
+ expect(summary[:quarter]).to eq(1)
97
269
 
98
- expect(xbrl.net_sales).to eq(20793)
99
- expect(xbrl.operating_income).to eq(2772)
100
- expect(xbrl.ordinary_income).to eq(2720)
101
- expect(xbrl.net_income).to eq(1655)
102
- expect(xbrl.net_income_per_share).to eq(262.79)
270
+ expect(summary[:net_sales]).to eq(24866)
271
+ expect(summary[:operating_income]).to eq(117)
272
+ expect(summary[:ordinary_income]).to eq(101)
273
+ expect(summary[:net_income]).to eq(89)
274
+ expect(summary[:net_income_per_share]).to eq(3.88)
275
+ end
276
+ end
277
+
278
+ context '業種:営業収入' do
279
+ let(:xbrl) { Summary.read doc("#{dir}/jp-oprvsp-cons-2014-q1.xbrl") }
280
+ let(:summary) { xbrl[:summary] }
281
+
282
+ it do
283
+ expect(summary[:code]).to eq('9946')
284
+ expect(summary[:year]).to eq(2014)
285
+ expect(summary[:month]).to eq(2)
286
+ expect(summary[:quarter]).to eq(1)
287
+
288
+ expect(summary[:net_sales]).to eq(33307)
289
+ expect(summary[:operating_income]).to eq(240)
290
+ expect(summary[:ordinary_income]).to eq(563)
291
+ expect(summary[:net_income]).to eq(113)
292
+ expect(summary[:net_income_per_share]).to eq(3.92)
293
+ end
294
+ end
295
+
296
+ context '業種:営業総収入' do
297
+ let(:xbrl) { Summary.read doc("#{dir}/jp-goprv-cons-2013-q4.xbrl") }
298
+ let(:summary) { xbrl[:summary] }
299
+
300
+ it do
301
+ expect(summary[:code]).to eq('8028')
302
+ expect(summary[:year]).to eq(2013)
303
+ expect(summary[:month]).to eq(2)
304
+ expect(summary[:quarter]).to eq(4)
305
+
306
+ expect(summary[:net_sales]).to eq(334087)
307
+ expect(summary[:operating_income]).to eq(43107)
308
+ expect(summary[:ordinary_income]).to eq(45410)
309
+ expect(summary[:net_income]).to eq(25020)
310
+ expect(summary[:net_income_per_share]).to eq(263.57)
311
+ end
312
+ end
313
+
314
+ context '業種:完成工事高' do
315
+ let(:xbrl) { Summary.read doc("#{dir}/jp-nsco-cons-2013-q4.xbrl") }
316
+ let(:summary) { xbrl[:summary] }
317
+
318
+ it do
319
+ expect(summary[:code]).to eq('1861')
320
+ expect(summary[:year]).to eq(2013)
321
+ expect(summary[:month]).to eq(3)
322
+ expect(summary[:quarter]).to eq(4)
323
+
324
+ expect(summary[:net_sales]).to eq(260753)
325
+ expect(summary[:operating_income]).to eq(-1167)
326
+ expect(summary[:ordinary_income]).to eq(65)
327
+ expect(summary[:net_income]).to eq(-1083)
328
+ expect(summary[:net_income_per_share]).to eq(-5.91)
329
+ end
103
330
  end
104
331
  end
105
332
 
106
- context "連結・第4四半期" do
107
- let(:xbrl) { Summary.parse("#{dir}/ja-cons-2013-q4.xbrl") }
333
+ context '米国会計基準' do
334
+ context '売上高:NetSales' do
335
+ let(:xbrl) { Summary.read doc("#{dir}/us-cons-2014-q1.xbrl") }
336
+ let(:summary) { xbrl[:summary] }
337
+ let(:results_forecast) { xbrl[:results_forecast].first }
338
+
339
+ it do
340
+ expect(summary[:code]).to eq('7203')
341
+ expect(summary[:year]).to eq(2014)
342
+ expect(summary[:month]).to eq(3)
343
+ expect(summary[:quarter]).to eq(1)
108
344
 
109
- it do
110
- expect(xbrl.code).to eq('4368')
111
- expect(xbrl.year).to eq(2013)
112
- expect(xbrl.quarter).to eq(4)
345
+ expect(summary[:net_sales]).to eq(6255319)
346
+ expect(summary[:operating_income]).to eq(663383)
347
+ expect(summary[:ordinary_income]).to eq(724163)
348
+ expect(summary[:net_income]).to eq(562194)
349
+ expect(summary[:net_income_per_share]).to eq(177.45)
113
350
 
114
- expect(xbrl.net_sales).to eq(27355)
115
- expect(xbrl.operating_income).to eq(3223)
116
- expect(xbrl.ordinary_income).to eq(3231)
117
- expect(xbrl.net_income).to eq(1903)
118
- expect(xbrl.net_income_per_share).to eq(302.11)
351
+ expect(summary[:change_in_net_sales]).to eq 0.137
352
+ expect(summary[:change_in_operating_income]).to eq 0.879
353
+ expect(summary[:change_in_ordinary_income]).to eq 0.744
354
+ expect(summary[:change_in_net_income]).to eq 0.936
355
+
356
+ expect(summary[:prior_net_sales]).to eq 5501573
357
+ expect(summary[:prior_operating_income]).to eq 353143
358
+ expect(summary[:prior_ordinary_income]).to eq 415203
359
+ expect(summary[:prior_net_income]).to eq 290347
360
+ expect(summary[:prior_net_income_per_share]).to eq 91.68
361
+
362
+ expect(summary[:change_in_prior_net_sales]).to eq 0.599
363
+ # expect(summary[:change_in_prior_operating_income]).to eq -0.157
364
+ # expect(summary[:change_in_prior_ordinary_income]).to eq -0.122
365
+ # expect(summary[:change_in_prior_net_income]).to eq 0.076
366
+
367
+ expect(results_forecast[:forecast_net_sales]).to eq(24000000)
368
+ expect(results_forecast[:forecast_operating_income]).to eq(1940000)
369
+ expect(results_forecast[:forecast_ordinary_income]).to eq(2030000)
370
+ expect(results_forecast[:forecast_net_income]).to eq(1480000)
371
+ expect(results_forecast[:forecast_net_income_per_share]).to eq(467.09)
372
+
373
+ expect(results_forecast[:change_in_forecast_net_sales]).to eq 0.088
374
+ expect(results_forecast[:change_in_forecast_operating_income]).to eq 0.469
375
+ expect(results_forecast[:change_in_forecast_ordinary_income]).to eq 0.446
376
+ expect(results_forecast[:change_in_forecast_net_income]).to eq 0.538
377
+ end
378
+ end
379
+
380
+ context '売上高:OperatingRevenues' do
381
+ let(:xbrl) { Summary.read doc("#{dir}/us-oprv-cons-2014-q1.xbrl") }
382
+ let(:summary) { xbrl[:summary] }
383
+
384
+ it do
385
+ expect(summary[:code]).to eq('9432')
386
+ expect(summary[:year]).to eq(2014)
387
+ expect(summary[:month]).to eq(3)
388
+ expect(summary[:quarter]).to eq(1)
389
+
390
+ expect(summary[:net_sales]).to eq(2609117)
391
+ expect(summary[:operating_income]).to eq(348926)
392
+ expect(summary[:ordinary_income]).to eq(356084)
393
+ expect(summary[:net_income]).to eq(166717)
394
+ expect(summary[:net_income_per_share]).to eq(141.29)
395
+ end
396
+ end
397
+
398
+ context '売上高:NetSalesAndOperatingRevenuesUS' do
399
+ let(:xbrl) { Summary.read doc("#{dir}/us-nsoprv-cons-2014-q1.xbrl") }
400
+ let(:summary) { xbrl[:summary] }
401
+
402
+ it do
403
+ expect(summary[:code]).to eq('6758')
404
+ expect(summary[:year]).to eq(2014)
405
+ expect(summary[:month]).to eq(3)
406
+ expect(summary[:quarter]).to eq(1)
407
+
408
+ expect(summary[:net_sales]).to eq(1712712)
409
+ expect(summary[:operating_income]).to eq(36357)
410
+ expect(summary[:ordinary_income]).to eq(46253)
411
+ expect(summary[:net_income]).to eq(3480)
412
+ expect(summary[:net_income_per_share]).to eq(3.44)
413
+ end
414
+ end
415
+
416
+ context '売上高:TotalRevenuesUS' do
417
+ let(:xbrl) { Summary.read doc("#{dir}/us-tr-ibit-cons-2013-q4.xbrl") }
418
+ let(:summary) { xbrl[:summary] }
419
+
420
+ it do
421
+ expect(summary[:code]).to eq('8604')
422
+ expect(summary[:year]).to eq(2013)
423
+ expect(summary[:month]).to eq(3)
424
+ expect(summary[:quarter]).to eq(4)
425
+
426
+ expect(summary[:net_sales]).to eq(2079943)
427
+ expect(summary[:operating_income]).to eq(237730)
428
+ expect(summary[:ordinary_income]).to eq(237730)
429
+ expect(summary[:net_income]).to eq(107234)
430
+ expect(summary[:net_income_per_share]).to eq(29.04)
431
+ end
432
+ end
433
+
434
+ context '営業利益:OperatingIncome' do
435
+ let(:xbrl) { Summary.read doc("#{dir}/us-oi-cons-2014-q1.xbrl") }
436
+ let(:summary) { xbrl[:summary] }
437
+
438
+ it do
439
+ expect(summary[:code]).to eq('6752')
440
+ expect(summary[:year]).to eq(2014)
441
+ expect(summary[:month]).to eq(3)
442
+ expect(summary[:quarter]).to eq(1)
443
+
444
+ expect(summary[:net_sales]).to eq(1824515)
445
+ expect(summary[:operating_income]).to eq(64201)
446
+ expect(summary[:ordinary_income]).to eq(122612)
447
+ expect(summary[:net_income]).to eq(107831)
448
+ expect(summary[:net_income_per_share]).to eq(46.65)
449
+ end
450
+ end
451
+
452
+ context '営業利益:BasicNetIncomePerShareUS' do
453
+ let(:xbrl) { Summary.read doc("#{dir}/us-bnip-cons-2014-q1.xbrl") }
454
+ let(:summary) { xbrl[:summary] }
455
+
456
+ it do
457
+ expect(summary[:code]).to eq('7267')
458
+ expect(summary[:year]).to eq(2014)
459
+ expect(summary[:month]).to eq(3)
460
+ expect(summary[:quarter]).to eq(1)
461
+
462
+ expect(summary[:net_sales]).to eq(2834095)
463
+ expect(summary[:operating_income]).to eq(184963)
464
+ expect(summary[:ordinary_income]).to eq(172035)
465
+ expect(summary[:net_income]).to eq(122499)
466
+ expect(summary[:net_income_per_share]).to eq(67.97)
467
+ end
468
+ end
469
+
470
+ context '営業利益:IncomeBeforeIncomeTaxesUS' do
471
+ let(:xbrl) { Summary.read doc("#{dir}/us-tr-ibit-cons-2013-q4.xbrl") }
472
+ let(:summary) { xbrl[:summary] }
473
+
474
+ it do
475
+ expect(summary[:code]).to eq('8604')
476
+ expect(summary[:year]).to eq(2013)
477
+ expect(summary[:month]).to eq(3)
478
+ expect(summary[:quarter]).to eq(4)
479
+
480
+ expect(summary[:net_sales]).to eq(2079943)
481
+ expect(summary[:operating_income]).to eq(237730)
482
+ expect(summary[:ordinary_income]).to eq(237730)
483
+ expect(summary[:net_income]).to eq(107234)
484
+ expect(summary[:net_income_per_share]).to eq(29.04)
485
+ end
486
+ end
487
+
488
+ context '経常利益:IncomeFromContinuingOperationsBeforeIncomeTaxesUS' do
489
+ let(:xbrl) { Summary.read doc("#{dir}/us-ifco-cons-2013-q4.xbrl") }
490
+ let(:summary) { xbrl[:summary] }
491
+
492
+ it do
493
+ expect(summary[:code]).to eq('6502')
494
+ expect(summary[:year]).to eq(2013)
495
+ expect(summary[:month]).to eq(3)
496
+ expect(summary[:quarter]).to eq(4)
497
+
498
+ expect(summary[:net_sales]).to eq(5800281)
499
+ expect(summary[:operating_income]).to eq(194316)
500
+ expect(summary[:ordinary_income]).to eq(155553)
501
+ expect(summary[:net_income]).to eq(77533)
502
+ expect(summary[:net_income_per_share]).to eq(18.31)
503
+ end
504
+ end
505
+
506
+ context '純利益:IncomeBeforeMinorityInterestUS' do
507
+ let(:xbrl) { Summary.read doc("#{dir}/us-ibmi-cons-2013-q4.xbrl") }
508
+ let(:summary) { xbrl[:summary] }
509
+
510
+ it do
511
+ expect(summary[:code]).to eq('6981')
512
+ expect(summary[:year]).to eq(2013)
513
+ expect(summary[:month]).to eq(3)
514
+ expect(summary[:quarter]).to eq(4)
515
+
516
+ expect(summary[:net_sales]).to eq(681021)
517
+ expect(summary[:operating_income]).to eq(58636)
518
+ expect(summary[:ordinary_income]).to eq(59534)
519
+ expect(summary[:net_income]).to eq(42386)
520
+ expect(summary[:net_income_per_share]).to eq(200.81)
521
+ end
119
522
  end
120
523
  end
121
- end
122
524
 
123
- describe ".parse_string" do
124
- let(:xbrl) { Summary.parse_string(File.read("#{dir}/ja-cons-2013-q1.xbrl")) }
525
+ context 'IFRS' do
526
+ context '売上高:NetSalesIFRS' do
527
+ let(:xbrl) { Summary.read doc("#{dir}/ifrs-cons-2014-q1.xbrl") }
528
+ let(:summary) { xbrl[:summary] }
529
+ let(:results_forecast) { xbrl[:results_forecast].first }
530
+
531
+ it do
532
+ expect(summary[:code]).to eq('5202')
533
+ expect(summary[:year]).to eq(2014)
534
+ expect(summary[:month]).to eq(3)
535
+ expect(summary[:quarter]).to eq(1)
536
+
537
+ expect(summary[:net_sales]).to eq(150690)
538
+ expect(summary[:operating_income]).to eq(-398)
539
+ expect(summary[:ordinary_income]).to eq(-5364)
540
+ expect(summary[:net_income]).to eq(-7112)
541
+ expect(summary[:net_income_per_share]).to eq(-7.88)
125
542
 
126
- it do
127
- expect(xbrl.year).to eq(2013)
543
+ expect(summary[:change_in_net_sales]).to eq 0.148
544
+ # expect(summary[:change_in_operating_income]).to eq 0.879
545
+ # expect(summary[:change_in_ordinary_income]).to eq 0.744
546
+ # expect(summary[:change_in_net_income]).to eq 0.936
547
+
548
+ expect(summary[:prior_net_sales]).to eq 131221
549
+ expect(summary[:prior_operating_income]).to eq -8509
550
+ expect(summary[:prior_ordinary_income]).to eq -12181
551
+ expect(summary[:prior_net_income]).to eq -11123
552
+ expect(summary[:prior_net_income_per_share]).to eq -12.33
553
+
554
+ expect(summary[:change_in_prior_net_sales]).to eq -0.096
555
+ # expect(summary[:change_in_prior_operating_income]).to eq -0.157
556
+ # expect(summary[:change_in_prior_ordinary_income]).to eq -0.122
557
+ # expect(summary[:change_in_prior_net_income]).to eq 0.076
558
+
559
+ expect(results_forecast[:forecast_net_sales]).to eq(600000)
560
+ expect(results_forecast[:forecast_operating_income]).to eq(3000)
561
+ expect(results_forecast[:forecast_ordinary_income]).to eq(-15000) # ForecastProfitBeforeIncomeTaxIFRS
562
+ expect(results_forecast[:forecast_net_income]).to eq(-21000)
563
+ expect(results_forecast[:forecast_net_income_per_share]).to eq(-23.27) # ForecastBasicEarningPerShareIFRS
564
+
565
+ expect(results_forecast[:change_in_forecast_net_sales]).to eq 0.151
566
+ # expect(results_forecast[:change_in_forecast_operating_income]).to eq 0.469
567
+ # expect(results_forecast[:change_in_forecast_ordinary_income]).to eq 0.446
568
+ # expect(results_forecast[:change_in_forecast_net_income]).to eq 0.538
569
+ end
570
+ end
571
+
572
+ context '売上高:OperatingRevenuesIFRS、営業利益:ProfitBeforeTaxIFRS' do
573
+ let(:xbrl) { Summary.read doc("#{dir}/ifrs-or-cons-2014-q1.xbrl") }
574
+ let(:summary) { xbrl[:summary] }
575
+
576
+ it do
577
+ expect(summary[:code]).to eq('8698')
578
+ expect(summary[:year]).to eq(2014)
579
+ expect(summary[:month]).to eq(3)
580
+ expect(summary[:quarter]).to eq(1)
581
+
582
+ expect(summary[:net_sales]).to eq(16866)
583
+ expect(summary[:operating_income]).to eq(8407)
584
+ expect(summary[:ordinary_income]).to eq(8407)
585
+ expect(summary[:net_income]).to eq(5144)
586
+ expect(summary[:net_income_per_share]).to eq(1751.61)
587
+ # TODO 業績予想のテスト追加
588
+ end
589
+ end
590
+
591
+ context '売上高:SalesIFRS' do
592
+ let(:xbrl) { Summary.read doc("#{dir}/ifrs-sa-cons-2014-q1.xbrl") }
593
+ let(:summary) { xbrl[:summary] }
594
+
595
+ it do
596
+ expect(summary[:code]).to eq('7741')
597
+ expect(summary[:year]).to eq(2014)
598
+ expect(summary[:month]).to eq(3)
599
+ expect(summary[:quarter]).to eq(1)
600
+
601
+ expect(summary[:net_sales]).to eq(100425)
602
+ expect(summary[:operating_income]).to eq(20123)
603
+ expect(summary[:ordinary_income]).to eq(20123)
604
+ expect(summary[:net_income]).to eq(12302)
605
+ expect(summary[:net_income_per_share]).to eq(28.51)
606
+ # TODO 業績予想のテスト追加
607
+ end
608
+ end
128
609
  end
129
610
  end
130
611