purchase 0.1.8 → 1.0.0

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.
@@ -1,101 +1,92 @@
1
1
  Feature: Purchase Committee Calculations
2
2
  The purchase model should generate correct committee calculations
3
3
 
4
- Scenario Outline: Cost committee from purchase amount
5
- Given a purchase emitter
6
- And a characteristic "purchase_amount" of "<amount>"
4
+ Scenario: Cost committee from purchase amount
5
+ Given a purchase emitter
6
+ And a characteristic "purchase_amount" of "107.11"
7
7
  When the "cost" committee is calculated
8
- Then the conclusion of the committee should be "<cost>"
9
- Examples:
10
- | amount | cost |
11
- | 831.23 | 748.107 |
12
- | 11.00 | 9.9 |
8
+ Then the committee should have used quorum "from purchase amount"
9
+ And the conclusion of the committee should be "100"
13
10
 
14
11
  Scenario Outline: Cost committee from purchase amount and tax
15
12
  Given a purchase emitter
16
13
  And a characteristic "purchase_amount" of "<amount>"
17
14
  And a characteristic "tax" of "<tax>"
18
15
  When the "cost" committee is calculated
19
- Then the conclusion of the committee should be "<cost>"
16
+ Then the committee should have used quorum "from purchase amount and tax"
17
+ And the conclusion of the committee should be "<cost>"
20
18
  Examples:
21
19
  | amount | tax | cost |
22
20
  | 10.00 | 1.00 | 9.00 |
23
21
 
24
- Scenario Outline: Adjusted cost committee from cost and date
25
- Given a purchase emitter
22
+ Scenario: Cost committee from default
23
+ Given a purchase emitter
24
+ When the "cost" committee is calculated
25
+ Then the conclusion of the committee should be "100"
26
+
27
+ Scenario Outline: Adjusted cost committee
28
+ Given a purchase emitter
26
29
  And a characteristic "cost" of "<cost>"
27
30
  And characteristic "date" of "<date>"
28
31
  When the "adjusted_cost" committee is calculated
29
- Then the committee should have used quorum "from cost and date"
30
- And the conclusion of the committee should be "<adjusted_cost>"
32
+ Then the conclusion of the committee should be "<adjusted_cost>"
31
33
  Examples:
32
34
  | cost | date | adjusted_cost |
33
35
  | 831.23 | 2010-08-01 | 688.67439 |
34
36
  | 11.00 | 2005-07-14 | 9.11350 |
35
37
 
36
- Scenario Outline: Merchant category committee from merchant
37
- Given a purchase emitter
38
+ Scenario Outline: Merchant category committee
39
+ Given a purchase emitter
38
40
  And a characteristic "merchant.id" of "<id>"
39
41
  When the "merchant_category" committee is calculated
40
42
  Then the conclusion of the committee should have "mcc" of "<mcc>"
41
43
  Examples:
42
44
  | id | mcc |
43
- | 1 | 5111 |
44
- | 2 | 5732 |
45
+ | 3 | 5812 |
46
+ | 9 | 9999 |
45
47
 
46
- Scenario Outline: Merchant categories industries committee from merchant category
47
- Given a purchase emitter
48
+ Scenario: Merchant category committee from default
49
+ Given a purchase emitter
50
+ When the "merchant_category" committee is calculated
51
+ Then the conclusion of the committee should have "mcc" of "5111"
52
+
53
+ Scenario Outline: Merchant categories industries committee
54
+ Given a purchase emitter
48
55
  And a characteristic "merchant_category.mcc" of "<mcc>"
49
56
  When the "merchant_categories_industries" committee is calculated
50
57
  Then the conclusion of the committee should have a record identified with "naics_code" of "<naics>" and having "ratio" of "<ratio>"
51
58
  Examples:
52
59
  | mcc | naics | ratio |
53
- | 3504 | 72111 | 1 |
54
- | 5111 | 45321 | 1 |
55
- | 5172 | 32411 | 0.8 |
56
- | 5172 | 324121 | 0.05 |
57
- | 5172 | 324122 | 0.05 |
58
- | 5172 | 324191 | 0.05 |
59
- | 5172 | 324199 | 0.05 |
60
- | 5732 | 443112 | 1 |
61
60
  | 5812 | 72211 | 1 |
62
- | 8225 | 6623 | 0.5 |
63
-
64
- Scenario Outline: Merchant categories industries committee from industry
65
- Given a purchase emitter
66
- And a characteristic "naics_code" of "<naics>"
67
- When the "merchant_categories_industries" committee is calculated
68
- Then the conclusion of the committee should have a record identified with "naics_code" of "<naics>" and having "ratio" of "<ratio>"
69
- Examples:
70
- | naics | ratio |
71
- | 72111 | 1 |
72
- | 45321 | 1 |
73
- | 32411 | 0.8 |
74
- | 324121 | 0.05 |
75
- | 324122 | 0.05 |
76
- | 324191 | 0.05 |
77
- | 324199 | 0.05 |
78
- | 443112 | 1 |
79
- | 72211 | 1 |
80
- | 6623 | 0.5 |
61
+ | 9999 | 999991 | 0.5 |
62
+ | 9999 | 999992 | 0.5 |
81
63
 
82
- Scenario Outline: Industry shares committee from merchant categories industries
83
- Given a purchase emitter
64
+ Scenario Outline: Industry shares committee
65
+ Given a purchase emitter
84
66
  And a characteristic "merchant_category.mcc" of "<mcc>"
85
67
  When the "merchant_categories_industries" committee is calculated
86
68
  And the "industry_shares" committee is calculated
87
69
  Then the conclusion of the committee should have a record identified with "naics_code" of "<naics>" and having "ratio" of "<share>"
88
70
  Examples:
89
71
  | mcc | naics | share |
90
- | 5111 | 45321 | 1.0 |
91
- | 5172 | 32411 | 0.8 |
92
- | 5172 | 324121 | 0.05 |
93
- | 5172 | 324122 | 0.05 |
94
- | 5172 | 324191 | 0.05 |
95
- | 5172 | 324199 | 0.05 |
72
+ | 5812 | 72211 | 1.0 |
73
+ | 9999 | 999991 | 0.5 |
74
+ | 9999 | 999992 | 0.5 |
75
+
76
+ Scenario Outline: Product line shares committee from industry
77
+ Given a purchase emitter
78
+ And a characteristic "naics_code" of "<naics>"
79
+ When the "product_line_shares" committee is calculated
80
+ Then the committee should have used quorum "from industry"
81
+ And the conclusion of the committee should have a record identified with "ps_code" of "<ps_code>" and having "ratio" of "<share>"
82
+ Examples:
83
+ | naics | ps_code | share |
84
+ | 72211 | | |
85
+ | 999992 | 99992 | 0.75 |
86
+ | 999992 | 99993 | 0.25 |
96
87
 
97
88
  Scenario Outline: Product line shares committee from merchant category
98
- Given a purchase emitter
89
+ Given a purchase emitter
99
90
  And a characteristic "merchant_category.mcc" of "<mcc>"
100
91
  When the "merchant_categories_industries" committee is calculated
101
92
  And the "industry_shares" committee is calculated
@@ -103,162 +94,103 @@ Feature: Purchase Committee Calculations
103
94
  Then the conclusion of the committee should have a record identified with "ps_code" of "<ps_code>" and having "ratio" of "<share>"
104
95
  Examples:
105
96
  | mcc | ps_code | share |
106
- | 5111 | 20340 | 0.084 |
107
- | 5111 | 20370 | 0.283 |
108
- | 5111 | 20440 | 0.006 |
109
- | 5111 | 20851 | 0.122 |
110
- | 5111 | 20852 | 0.145 |
111
- | 5111 | 20853 | 0.265 |
112
- | 5111 | 20854 | 0.071 |
113
- | 5111 | 29938 | 0.011 |
114
- | 5111 | 29979 | 0.013 |
97
+ | 5812 | | |
98
+ | 9999 | 99992 | 0.375 |
99
+ | 9999 | 99993 | 0.125 |
115
100
 
116
- Scenario Outline: Product line shares committee from industry
117
- Given a purchase emitter
118
- And a characteristic "naics_code" of "<naics>"
119
- When the "product_line_shares" committee is calculated
120
- Then the conclusion of the committee should have a record identified with "ps_code" of "<ps_code>" and having "ratio" of "<share>"
121
- Examples:
122
- | naics | ps_code | share |
123
- | 45321 | 20340 | 0.084 |
124
- | 45321 | 20370 | 0.283 |
125
- | 45321 | 20440 | 0.006 |
126
- | 45321 | 20851 | 0.122 |
127
- | 45321 | 20852 | 0.145 |
128
- | 45321 | 20853 | 0.265 |
129
- | 45321 | 20854 | 0.071 |
130
- | 45321 | 29938 | 0.011 |
131
- | 45321 | 29979 | 0.013 |
132
- | 443112 | 20375 | 0.5 |
133
- | 443112 | 20321 | 0.25 |
134
- | 443112 | 20865 | 0.2 |
101
+ Scenario Outline: Industries sectors committee from industry
102
+ Given a purchase emitter
103
+ And a characteristic "naics_code" of "<naics>"
104
+ When the "industries_sectors" committee is calculated
105
+ Then the committee should have used quorum "from industry"
106
+ And the conclusion of the committee should have a record identified with "io_code" of "<io_code>" and having "ratio" of "<share>"
107
+ Examples:
108
+ | naics | io_code | share |
109
+ | 45321 | 4A0000 | 1.0 |
110
+ | 443112 | 4A0000 | 1.0 |
111
+ | 72211 | 26 | 1.0 |
112
+ | 999991 | A | 0.75 |
113
+ | 999991 | B | 0.25 |
114
+ | 999992 | 4A0000 | 1.0 |
135
115
 
136
- Scenario Outline: Sector shares committee from industry and product line shares
116
+ Scenario Outline: Industries sectors committee from merchant category
137
117
  Given a purchase emitter
138
118
  And a characteristic "merchant_category.mcc" of "<mcc>"
119
+ And a characteristic "cost" of "100"
120
+ And a characteristic "date" of "2010-08-01"
121
+ When the "adjusted_cost" committee is calculated
122
+ And the "merchant_categories_industries" committee is calculated
123
+ And the "industry_shares" committee is calculated
124
+ And the "industries_sectors" committee is calculated
125
+ Then the committee should have used quorum "from industry shares"
126
+ And the conclusion of the committee should have a record identified with "io_code" of "<io_code>" and having "ratio" of "<share>"
127
+ Examples:
128
+ | mcc | io_code | share |
129
+ | 5812 | 26 | 1.0 |
130
+ | 9999 | A | 0.375 |
131
+ | 9999 | B | 0.125 |
132
+
133
+ Scenario Outline: Sector shares committee from industry and product line shares
134
+ Given a purchase emitter
135
+ And a characteristic "merchant_category.mcc" of "<mcc>"
139
136
  When the "merchant_categories_industries" committee is calculated
140
137
  And the "industry_shares" committee is calculated
141
138
  And the "product_line_shares" committee is calculated
139
+ And the "industries_sectors" committee is calculated
142
140
  And the "sector_shares" committee is calculated
143
- Then the conclusion of the committee should be a vector with value "<share>" and position for key "<io_code>"
141
+ Then the conclusion of the committee should be a vector with values "<26>,<A>,<B>,<C>,<D>"
144
142
  Examples:
145
- | mcc | io_code | share |
146
- | 3504 | 19 | 0.559 |
147
- | 5111 | 1 | 0.27916245 |
148
- | 5111 | 3 | 0.00573573 |
149
- | 5111 | 4 | 0.041823625 |
150
- | 5111 | 5 | 0.000650412 |
151
- | 5111 | 6 | 0.002021635 |
152
- | 5111 | 7 | 0.131016 |
153
- | 5111 | 8 | 0.016074 |
154
- | 5111 | 9 | 0.005444 |
155
- | 5111 | 10 | 0.006146 |
156
- | 5111 | 11 | 0.001041495 |
157
- | 5111 | 12 | 0.00452952 |
158
- | 5111 | 13 | 0.045696 |
159
- | 5111 | 14 | 0.06289245 |
160
- | 5111 | 15 | 0.00614676 |
161
- | 5111 | 16 | 0.00017721 |
162
- | 5111 | 17 | 0.00035178 |
163
- | 5111 | 18 | 0.00040365 |
164
- | 5172 | 20 | 1.6 |
165
- | 5172 | 21 | 0.065 |
166
- | 5172 | 22 | 0.045 |
167
- | 5172 | 23 | 0.01 |
168
- | 5172 | 24 | 0.06 |
169
- | 5732 | 10 | 0.181 |
170
- | 5732 | 12 | 0.13725 |
171
- | 5732 | 25 | 0.32 |
172
- | 5812 | 26 | 0.8 |
143
+ |mcc | 26 | A | B | C | D |
144
+ |5218| 1.0 | 0 | 0 | 0 | 0 |
145
+ |9999| 0 | 0.5625| 0.3125| 0.0625| 0.0625|
173
146
 
174
- Scenario Outline: Economic flows from merchant category code
175
- Given a purchase emitter
147
+ Scenario: Sector direct requirements
148
+ Given a purchase emitter
149
+ When the "sector_direct_requirements" committee is calculated
150
+ Then the conclusion of the committee should be a square matrix with "32" rows and columns
151
+
152
+ Scenario Outline: Economic flows from merchant category
153
+ Given a purchase emitter
176
154
  And a characteristic "merchant_category.mcc" of "<mcc>"
177
- When the "industry_shares" committee is calculated
155
+ And a characteristic "date" of "2010-08-01"
156
+ And a characteristic "cost" of "100"
157
+ When the "adjusted_cost" committee is calculated
158
+ And the "merchant_categories_industries" committee is calculated
159
+ And the "industry_shares" committee is calculated
178
160
  And the "product_line_shares" committee is calculated
161
+ And the "industries_sectors" committee is calculated
179
162
  And the "sector_shares" committee is calculated
180
- And the "emission_factors" committee is calculated
181
- Then the conclusion of the committee should have a record identified with "io_code" of "<io_code>" and having "factor" of "<emission_factor_share>"
163
+ And the "sector_direct_requirements" committee is calculated
164
+ And the "economic_flows" committee is calculated
165
+ Then the conclusion of the committee should be a vector with values "<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>,<15>,<16>,<17>,<18>,<19>,<20>,<21>,<22>,<23>,<24>,<25>,<26>,<44100>,<44101>,<44102>,<44103>,<44104>,<44105>"
182
166
  Examples:
183
- | mcc | io_code | emission_factor_share |
184
- | 3504 | 19 | 0.559 |
185
- | 5111 | 1 | 0.06289245 |
186
- | 5111 | 3 | 0.00017721 |
187
- | 5111 | 4 | 0.131016 |
188
- | 5111 | 5 | 0.01052952 |
189
- | 5111 | 6 | 0.000650412 |
190
- | 5111 | 6 | 0.001371223 |
191
- | 5111 | 7 | 0.001449252 |
192
- | 5111 | 8 | 0.0120984 |
193
- | 5111 | 8 | 0.0160744 |
194
- | 5111 | 9 | 0.00407185 |
195
- | 5111 | 9 | 0.00544492 |
196
- | 5111 | 10 | 0.004574956 |
197
- | 5111 | 10 | 0.00614676 |
198
- | 5111 | 11 | 0.00035178 |
199
- | 5111 | 12 | 0.000418338 |
200
- | 5111 | 13 | 0.045696 |
201
- | 5111 | 14 | 0.041823625 |
202
- | 5111 | 15 | 0.019665104 |
203
- | 5111 | 16 | 0.001041495 |
204
- | 5111 | 17 | 0.00040365 |
205
- | 5111 | 18 | 0.00100347 |
206
- | 5172 | 20 | 1.6 |
207
- | 5172 | 21 | 0.065 |
208
- | 5172 | 22 | 0.045 |
209
- | 5172 | 23 | 0.01 |
210
- | 5172 | 24 | 0.06 |
211
- | 5732 | 10 | 0.181 |
212
- | 5732 | 12 | 0.13725 |
213
- | 5732 | 25 | 0.32 |
214
- | 5812 | 26 | 0.8 |
167
+ |mcc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 20| 21| 22| 23| 24| 25| 26| 44100| 44101| 44102| 44103| 44104| 44105|
168
+ |3504|192.42878|190.54222|245.14686|242.78968|295.60384|292.81512|346.78566|404.30912|400.59986|465.29127|528.62004|482.35635|466.74323|468.52286|501.11032|468.42401|424.06313|393.05155|506.82714|413.31948|408.00708|380.41657|307.66401|449.85893|372.82038|836.30767|931.90473|897.58914|713.25686|712.54645|62108.49751|64007.92880|
169
+ |5111|217.60851|188.33439|240.23898|246.58722|289.15336|286.35133|338.69552|401.57566|392.30640|454.36248|510.67639|465.48678|453.29908|452.07535|479.07926|433.58397|390.81556|366.40189|414.39616|398.88015|410.43100|392.65385|319.38796|469.25412|389.47876|878.05118|979.36178|943.33243|749.79844|749.05163|65344.72371|67343.77541|
170
+ |5172|183.87087|182.06822|234.24153|231.98921|282.45806|279.79336|331.44594|386.67305|383.12559|443.95827|505.08363|460.93482|446.66308|449.71238|471.64803|451.80455|409.65115|384.25908|428.91553|462.17754|412.89024|378.40441|304.83450|439.98234|360.24151|801.81579|892.45620|859.55691|682.82806|682.14796|59460.87972|61279.36469|
171
+ |5732|183.11569|181.32043|231.15559|228.93294|278.83247|276.20197|324.59174|375.74672|372.29950|465.95439|483.12194|455.69859|419.53135|417.80920|435.45569|407.12840|367.62744|345.95575|392.16116|378.09709|388.34638|373.09854|303.76218|440.33643|377.80083|806.53673|894.12118|861.03177|683.26595|682.58541|59509.68769|61329.79292|
172
+ |5812|171.55784|169.87590|218.54218|216.44081|263.51360|261.02763|309.15838|360.69762|357.38846|414.47227|471.13666|429.92363|416.23221|419.67110|442.44048|419.01368|379.60402|362.16497|413.97706|402.64335|419.92739|407.41210|332.40488|496.30587|413.33528|951.16340|982.78937|943.83794|734.26687|733.53553|64092.82756|66054.79463|
215
173
 
216
- Scenario Outline: Sector emissions from merchant id, cost, and date
174
+ Scenario Outline: Impacts committee from economic flows
217
175
  Given a purchase emitter
218
- And a characteristic "merchant.id" of "<merchant>"
219
- And a characteristic "cost" of "<cost>"
220
- And a characteristic "date" of "<date>"
176
+ And a characteristic "merchant_category.mcc" of "<mcc>"
177
+ And a characteristic "date" of "2010-08-01"
178
+ And a characteristic "cost" of "100"
221
179
  When the "adjusted_cost" committee is calculated
222
- And the "merchant_category" committee is calculated
180
+ And the "merchant_categories_industries" committee is calculated
223
181
  And the "industry_shares" committee is calculated
224
182
  And the "product_line_shares" committee is calculated
183
+ And the "industries_sectors" committee is calculated
225
184
  And the "sector_shares" committee is calculated
226
- And the "emission_factors" committee is calculated
227
- And the "sector_emissions" committee is calculated
228
- Then the conclusion of the committee should include "<emission>"
185
+ And the "sector_direct_requirements" committee is calculated
186
+ And the "economic_flows" committee is calculated
187
+ And the "impact_vectors" committee is calculated
188
+ And the "impacts" committee is calculated
189
+ Then the conclusion of the committee should be a vector with values "<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>,<15>,<16>,<17>,<18>,<19>,<20>,<21>,<22>,<23>,<24>,<25>,<26>,<44100>,<44101>,<44102>,<44103>,<44104>,<44105>"
229
190
  Examples:
230
- | merchant | io_code | cost | date | emission |
231
- | 1 | 1 | 100.00 | 2010-07-28 | 0.48 |
232
- | 1 | 1 | 100.00 | 2010-07-28 | 5.21 |
233
- | 1 | 1 | 100.00 | 2010-07-28 | 8.19 |
234
- | 1 | 1 | 100.00 | 2010-07-28 | 9.73 |
235
- | 1 | 3 | 100.00 | 2010-07-28 | 0.01 |
236
- | 1 | 4 | 100.00 | 2010-07-28 | 10.85 |
237
- | 1 | 5 | 100.00 | 2010-07-28 | 0.38 |
238
- | 1 | 6 | 100.00 | 2010-07-28 | 0.05 |
239
- | 1 | 6 | 100.00 | 2010-07-28 | 0.11 |
240
- | 1 | 7 | 100.00 | 2010-07-28 | 0.12 |
241
- | 1 | 8 | 100.00 | 2010-07-28 | 1.00 |
242
- | 1 | 8 | 100.00 | 2010-07-28 | 1.33 |
243
- | 1 | 9 | 100.00 | 2010-07-28 | 0.34 |
244
- | 1 | 9 | 100.00 | 2010-07-28 | 0.45 |
245
- | 1 | 10 | 100.00 | 2010-07-28 | 0.38 |
246
- | 1 | 10 | 100.00 | 2010-07-28 | 0.51 |
247
- | 1 | 11 | 100.00 | 2010-07-28 | 0.03 |
248
- | 1 | 12 | 100.00 | 2010-07-28 | 0.03 |
249
- | 1 | 13 | 100.00 | 2010-07-28 | 3.79 |
250
- | 1 | 14 | 100.00 | 2010-07-28 | 3.47 |
251
- | 1 | 15 | 100.00 | 2010-07-28 | 1.63 |
252
- | 1 | 16 | 100.00 | 2010-07-28 | 0.09 |
253
- | 1 | 17 | 100.00 | 2010-07-28 | 0.03 |
254
- | 1 | 18 | 100.00 | 2010-07-28 | 0.08 |
255
- | 2 | 10 | 100.00 | 2010-07-28 | 15.00 |
256
- | 2 | 12 | 100.00 | 2010-07-28 | 11.37 |
257
- | 2 | 25 | 100.00 | 2010-07-28 | 26.51 |
258
- | 3 | 26 | 100.00 | 2010-07-28 | 66.28 |
259
- | 4 | 19 | 100.00 | 2010-07-28 | 46.31 |
260
- | 5 | 20 | 100.00 | 2010-07-28 | 132.56 |
261
- | 5 | 21 | 100.00 | 2010-07-28 | 5.39 |
262
- | 5 | 22 | 100.00 | 2010-07-28 | 3.73 |
263
- | 5 | 23 | 100.00 | 2010-07-28 | 0.83 |
264
- | 5 | 24 | 100.00 | 2010-07-28 | 4.97 |
191
+ |mcc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 20| 21| 22| 23| 24| 25| 26| 44100| 44101| 44102| 44103| 44104| 44105|
192
+ |3504|155.86731|104.03605|87.76257|291.34762|319.25215|182.42382|196.62746|114.82379|148.22195|168.43544|116.29640|264.81364|253.90832|250.65973|50.61214|114.76388|97.53452|73.10758|283.31637|826.63897|530.40921|342.37491|61.53280|539.83071|596.51261|669.04614|652.33331|89.75891|499.27980|855.05574|86951.89652|19202.37864|
193
+ |5111|176.26289|102.83058|86.00555|295.90467|312.28563|178.39687|192.04036|114.04748|145.15336|164.47922|112.34880|255.55224|246.59470|241.86031|48.38700|106.22807|89.88757|68.15075|231.64745|797.76030|533.56031|353.38847|63.87759|563.10495|623.16602|702.44095|685.55325|94.33324|524.85891|898.86196|91482.61320|20203.13262|
194
+ |5172|148.93540| 99.40924|83.85847|278.38705|305.05470|174.31126|187.92985|109.81514|141.75647|160.71289|111.11839|253.05321|242.98472|240.59612|47.63645|110.69211|94.21976|71.47218|239.76378|924.35508|536.75732|340.56397|60.96690|527.97880|576.38642|641.45263|624.71934|85.95569|477.97964|818.57755|83245.23160|18383.80940|
195
+ |5732|148.32370| 99.00095|82.75370|274.71953|301.13906|172.07383|184.04352|106.71206|137.75081|168.67549|106.28682|250.17853|228.22505|223.52792|43.98102| 99.74646|84.55431|64.34777|219.21809|756.19418|504.85029|335.78869|60.75243|528.40372|604.48133|645.22938|625.88482|86.10317|478.28616|819.10249|83313.56277|18398.93787|
196
+ |5812|138.96185| 92.75224|78.23810|259.72898|284.59469|162.62021|175.29280|102.43812|132.23373|150.03896|103.65006|236.02807|226.43032|224.52403|44.68648|102.65835|87.30892|67.36268|231.41317|805.28671|545.90561|366.67089|66.48097|595.56705|661.33645|760.93072|687.95256|94.38379|513.98681|880.24264|89729.95858|19816.43838|
@@ -1,88 +1,103 @@
1
1
  Feature: Purchase Emissions Calculations
2
2
  The purchase model should generate correct emission calculations
3
-
3
+
4
+ Scenario: Calculations starting from nothing
5
+ Given a purchase has nothing
6
+ When emissions are calculated
7
+ Then the emission value should be within "0.001" kgs of "120694.715"
8
+
9
+ Scenario: Calculations starting from purchase amount
10
+ Given a purchase has "purchase_amount" of "107.11"
11
+ When emissions are calculated
12
+ Then the emission value should be within "0.001" kgs of "120694.715"
13
+
14
+ Scenario: Calculations starting from date
15
+ Given a purchase has "date" of "2010-07-28"
16
+ When emissions are calculated
17
+ Then the emission value should be within "0.001" kgs of "120694.715"
18
+
4
19
  Scenario Outline: Calculations starting from a merchant
5
20
  Given a purchase has "merchant.id" of "<id>"
6
- And it has "cost" of "<cost>"
7
- And it has "date" of "<date>"
8
21
  When emissions are calculated
9
- Then the emission value should be within 1 kgs of <emission>
22
+ Then the emission value should be within "0.001" kgs of "<emission>"
10
23
  Examples:
11
- | id | cost | date | emission |
12
- | 1 | 100.00 | 2010-07-28 | 48.29 |
13
- | 2 | 100.00 | 2010-07-28 | 52.88 |
14
- | 3 | 100.00 | 2010-07-28 | 66.28 |
15
- | 4 | 100.00 | 2010-07-28 | 46.31 |
16
- | 5 | 100.00 | 2010-07-28 | 147.47 |
24
+ | id | emission |
25
+ | 1 | 120694.715|
26
+ | 2 | 110152.836|
27
+ | 3 | 118426.103|
28
+ | 4 | 115090.859|
29
+ | 5 | 110346.441|
17
30
 
18
31
  Scenario Outline: Calculations starting from a merchant with purchase amount
19
32
  Given a purchase has "merchant.id" of "<id>"
20
33
  And it has "purchase_amount" of "<amount>"
21
- And it has "date" of "<date>"
22
34
  When emissions are calculated
23
- Then the emission value should be within 1 kgs of <emission>
35
+ Then the emission value should be within "0.001" kgs of "<emission>"
24
36
  Examples:
25
- | id | amount | date | emission |
26
- | 1 | 100.00 | 2010-07-28 | 43.46 |
27
- | 2 | 100.00 | 2010-07-28 | 47.59 |
28
- | 3 | 100.00 | 2010-07-28 | 59.65 |
29
- | 4 | 100.00 | 2010-07-28 | 41.68 |
30
- | 5 | 100.00 | 2010-07-28 | 132.72 |
37
+ | id | amount | emission |
38
+ | 1 | 107.11 | 120694.715|
39
+ | 2 | 107.11 | 110152.836|
40
+ | 3 | 107.11 | 118426.103|
41
+ | 4 | 107.11 | 115090.859|
42
+ | 5 | 107.11 | 110346.441|
31
43
 
32
- Scenario Outline: Calculations starting from a merchant with purchase amount and tax
44
+ Scenario Outline: Calculations starting from a merchant with purchase amount and date
45
+ Given a purchase has "merchant.id" of "<id>"
46
+ And it has "purchase_amount" of "<amount>"
47
+ And it has "date" of "<date>"
48
+ When emissions are calculated
49
+ Then the emission value should be within "0.001" kgs of "<emission>"
50
+ Examples:
51
+ | id | amount | date | emission |
52
+ | 1 | 107.11 | 2010-07-28 | 120694.715|
53
+ | 2 | 107.11 | 2010-07-28 | 110152.836|
54
+ | 3 | 107.11 | 2010-07-28 | 118426.103|
55
+ | 4 | 107.11 | 2010-07-28 | 115090.859|
56
+ | 5 | 107.11 | 2010-07-28 | 110346.441|
57
+
58
+ Scenario Outline: Calculations starting from a merchant with purchase amount, date, and tax
33
59
  Given a purchase has "merchant.id" of "<id>"
34
60
  And it has "purchase_amount" of "<amount>"
35
61
  And it has "tax" of "<tax>"
36
62
  And it has "date" of "<date>"
37
63
  When emissions are calculated
38
- Then the emission value should be within 1 kgs of <emission>
64
+ Then the emission value should be within "0.001" kgs of "<emission>"
39
65
  Examples:
40
- | id | amount | tax | date | emission |
41
- | 1 | 100.00 | 8.00 | 2010-07-28 | 44.43 |
42
- | 2 | 100.00 | 8.00 | 2010-07-28 | 48.65 |
43
- | 3 | 100.00 | 8.00 | 2010-07-28 | 60.98 |
44
- | 4 | 100.00 | 8.00 | 2010-07-28 | 42.61 |
45
- | 5 | 100.00 | 8.00 | 2010-07-28 | 135.68 |
66
+ | id | amount | tax | date | emission |
67
+ | 1 | 108.00 | 8.00 | 2010-07-28 | 120694.715|
68
+ | 2 | 108.00 | 8.00 | 2010-07-28 | 110152.836|
69
+ | 3 | 108.00 | 8.00 | 2010-07-28 | 118426.103|
70
+ | 4 | 108.00 | 8.00 | 2010-07-28 | 115090.859|
71
+ | 5 | 108.00 | 8.00 | 2010-07-28 | 110346.441|
46
72
 
47
73
  Scenario Outline: Calculations starting from a merchant category
48
74
  Given a purchase has "merchant_category.mcc" of "<mcc>"
49
75
  And it has "cost" of "<cost>"
50
76
  And it has "date" of "<date>"
51
77
  When emissions are calculated
52
- Then the emission value should be within 0.1 kgs of <emission>
78
+ Then the emission value should be within "0.001" kgs of "<emission>"
53
79
  Examples:
54
- | mcc | cost | date | emission |
55
- | 5111 | 100.00 | 2010-07-28 | 48.29 |
56
- | 5732 | 100.00 | 2010-07-28 | 52.88 |
57
- | 5812 | 100.00 | 2010-07-28 | 66.28 |
58
- | 3504 | 100.00 | 2010-07-28 | 46.31 |
59
- | 5172 | 100.00 | 2010-07-28 | 147.47 |
80
+ | mcc | cost | date | emission |
81
+ | 5111 | 100.00 | 2010-07-28 | 120694.715|
82
+ | 5732 | 100.00 | 2010-07-28 | 110152.836|
83
+ | 5812 | 100.00 | 2010-07-28 | 118426.103|
84
+ | 3504 | 100.00 | 2010-07-28 | 115090.859|
85
+ | 5172 | 100.00 | 2010-07-28 | 110346.441|
60
86
 
61
87
  Scenario Outline: Calculations starting from industry
62
88
  Given a purchase has "naics_code" of "<naics>"
63
89
  And it has "cost" of "<cost>"
64
90
  And it has "date" of "<date>"
65
91
  When emissions are calculated
66
- Then the emission value should be within 0.1 kgs of <emission>
92
+ Then the emission value should be within "0.001" kgs of "<emission>"
67
93
  Examples:
68
94
  | naics | cost | date | emission |
69
- | 45321 | 100.00 | 2010-07-28 | 48.29 |
70
- | 443112 | 100.00 | 2010-07-28 | 52.88 |
71
- | 72211 | 100.00 | 2010-07-28 | 66.28 |
72
- | 72111 | 100.00 | 2010-07-28 | 46.31 |
73
- | 32411 | 100.00 | 2010-07-28 | 132.56 |
74
- | 324121 | 100.00 | 2010-07-28 | 5.39 |
75
- | 324122 | 100.00 | 2010-07-28 | 3.73 |
76
- | 324191 | 100.00 | 2010-07-28 | 0.83 |
77
- | 324199 | 100.00 | 2010-07-28 | 4.97 |
78
-
79
- Scenario Outline: Calculations without merchant, merchant category, or industry
80
- Given a purchase has "cost" of "<cost>"
81
- And it has "date" of "<date>"
82
- When emissions are calculated
83
- Then the emission value should be within 0.1 kgs of <emission>
84
- Examples:
85
- | cost | date | emission |
86
- | 100.00 | 2010-07-28 | 82.85 |
87
- | 100.00 | 2010-08-28 | 82.85 |
88
- | 120.00 | 2010-08-28 | 99.42 |
95
+ | 45321 | 100.00 | 2010-07-28 |120694.715|
96
+ | 443112 | 100.00 | 2010-07-28 |110152.836|
97
+ | 72211 | 100.00 | 2010-07-28 |118426.103|
98
+ | 72111 | 100.00 | 2010-07-28 |115090.859|
99
+ | 32411 | 100.00 | 2010-07-28 |112285.552|
100
+ | 324121 | 100.00 | 2010-07-28 | 94684.359|
101
+ | 324122 | 100.00 | 2010-07-28 |106509.038|
102
+ | 324191 | 100.00 | 2010-07-28 |104811.125|
103
+ | 324199 | 100.00 | 2010-07-28 |104355.468|
@@ -0,0 +1,21 @@
1
+ Then /^the conclusion of the committee should be a vector with value "(.*)" and position for key "(.*)"$/ do |value, key|
2
+ vector = @report.conclusion
3
+ position = BrighterPlanet::Purchase.key_map.index key
4
+ compare_values vector[position], value
5
+ end
6
+
7
+ Then /^the conclusion of the committee should be a square matrix with "(\d+)" rows and columns$/ do |num|
8
+ matrix = @report.conclusion
9
+ matrix.row_size.should == num.to_i
10
+ matrix.should be_square
11
+ end
12
+
13
+ Then /^the conclusion of the committee should be a vector with values "(.*)"$/ do |column_values|
14
+ column_values = column_values.split(/,/).map(&:to_f)
15
+ vector = @report.conclusion
16
+ vector = vector.row(0) if vector.is_a? Matrix #some vectors are single-row matrices
17
+
18
+ BrighterPlanet::Purchase.key_map.each_with_index do |key, index|
19
+ vector[index].should be_close(column_values[index].to_f, 0.00001)
20
+ end
21
+ end
@@ -0,0 +1,38 @@
1
+ class MatrixVectorHelper
2
+ def self.column_width(rows)
3
+ rows.map(&:to_s).map(&:length).max + 2
4
+ end
5
+ end
6
+
7
+ class Matrix
8
+ def inspect
9
+ keys = BrighterPlanet::Purchase.key_map
10
+ paddings = {}
11
+ keys.each_with_index do |key, i|
12
+ paddings[key] = MatrixVectorHelper.column_width(column(i).to_a + [key])
13
+ end
14
+ str = "Matrix: (#{row_size}x#{column_size})\n"
15
+ str += '|' + (['X'.center(5)] + keys.map { |k| k.center(paddings[k]) }).join('|') + "|\n"
16
+ @rows.each_with_index do |row, i|
17
+ items = [keys[i].center(5)]
18
+ row.each_with_index { |i, col| items << i.to_s.center(paddings[keys[col]]) }
19
+ str += '|' + items.join('|') + "|\n"
20
+ end
21
+ str
22
+ end
23
+ end
24
+ class Vector
25
+ def inspect
26
+ keys = BrighterPlanet::Purchase.key_map
27
+ paddings = {}
28
+ keys.each_with_index do |key, i|
29
+ paddings[key] = MatrixVectorHelper.column_width([to_a[i],key])
30
+ end
31
+ str = "Vector: (#{size})\n"
32
+ str += '|' + (keys.map { |k| k.center(paddings[k]) }).join('|') + "|\n"
33
+ items = []
34
+ to_a.each_with_index { |r, i| items << r.to_s.center(paddings[keys[i]]) }
35
+ str += '|' + items.join('|') + "|\n"
36
+ str
37
+ end
38
+ end