moss_generator 0.4.0 → 0.5.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/.rubocop.yml +4 -1
- data/Gemfile.lock +15 -14
- data/config/vat_rates.json +1 -15
- data/config/vat_rates_2020_4.json +383 -0
- data/lib/moss_generator/stripe.rb +16 -12
- data/lib/moss_generator/stripe_charge_row.rb +12 -1
- data/lib/moss_generator/version.rb +1 -1
- data/moss_generator.gemspec +2 -2
- metadata +8 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 19a3aed8d3c19657e6aece4428a384803ff7121622ac25b1c9933c599b63bb36
|
|
4
|
+
data.tar.gz: 704bb07f3da892945cdcd224bf87df9cfd907c3d2ae02069e0a73582fc4e524b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 94a32082eb92e052b12e7c0b8402ebf669581c95598e78e445aca20d1a76726f5917d33ad544431fc44512ca3d3247ab82772789c1b3036ab40a9dc8329cc905
|
|
7
|
+
data.tar.gz: 7e3bed7e7ac91a4c46500d60a3f65585076ce26f8c07b0a895a06fac7c2bfef71f9c8a60869bd4bbd1f331fe7ec4ea050f97fd4f9ccf4d7eb40b6e1ba5d2e2eb
|
data/.rubocop.yml
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
moss_generator (0.
|
|
5
|
-
countries (~>
|
|
4
|
+
moss_generator (0.5.1)
|
|
5
|
+
countries (~> 4.0)
|
|
6
6
|
money (~> 6.14)
|
|
7
7
|
valvat (~> 1.1)
|
|
8
8
|
|
|
9
9
|
GEM
|
|
10
10
|
remote: https://rubygems.org/
|
|
11
11
|
specs:
|
|
12
|
-
addressable (2.
|
|
12
|
+
addressable (2.8.0)
|
|
13
13
|
public_suffix (>= 2.0.2, < 5.0)
|
|
14
14
|
akami (1.3.1)
|
|
15
15
|
gyoku (>= 0.4.0)
|
|
@@ -18,24 +18,25 @@ GEM
|
|
|
18
18
|
builder (3.2.4)
|
|
19
19
|
byebug (11.1.3)
|
|
20
20
|
coderay (1.1.3)
|
|
21
|
-
concurrent-ruby (1.1.
|
|
22
|
-
countries (
|
|
23
|
-
i18n_data (~> 0.
|
|
21
|
+
concurrent-ruby (1.1.9)
|
|
22
|
+
countries (4.0.1)
|
|
23
|
+
i18n_data (~> 0.13.0)
|
|
24
24
|
sixarm_ruby_unaccent (~> 1.1)
|
|
25
|
-
unicode_utils (~> 1.4)
|
|
26
25
|
diff-lcs (1.4.4)
|
|
27
26
|
gyoku (1.3.1)
|
|
28
27
|
builder (>= 2.1.2)
|
|
29
|
-
httpi (2.
|
|
28
|
+
httpi (2.5.0)
|
|
30
29
|
rack
|
|
31
30
|
socksify
|
|
32
31
|
i18n (1.8.10)
|
|
33
32
|
concurrent-ruby (~> 1.0)
|
|
34
|
-
i18n_data (0.
|
|
33
|
+
i18n_data (0.13.0)
|
|
35
34
|
method_source (1.0.0)
|
|
36
|
-
|
|
35
|
+
mini_portile2 (2.6.1)
|
|
36
|
+
money (6.16.0)
|
|
37
37
|
i18n (>= 0.6.4, <= 2)
|
|
38
|
-
nokogiri (1.
|
|
38
|
+
nokogiri (1.12.5)
|
|
39
|
+
mini_portile2 (~> 2.6.1)
|
|
39
40
|
racc (~> 1.4)
|
|
40
41
|
nori (2.6.0)
|
|
41
42
|
parallel (1.20.1)
|
|
@@ -48,7 +49,7 @@ GEM
|
|
|
48
49
|
byebug (~> 11.0)
|
|
49
50
|
pry (~> 0.13.0)
|
|
50
51
|
public_suffix (4.0.6)
|
|
51
|
-
racc (1.
|
|
52
|
+
racc (1.6.0)
|
|
52
53
|
rack (2.2.3)
|
|
53
54
|
rainbow (3.0.0)
|
|
54
55
|
rake (13.0.3)
|
|
@@ -98,8 +99,7 @@ GEM
|
|
|
98
99
|
sixarm_ruby_unaccent (1.2.0)
|
|
99
100
|
socksify (1.7.1)
|
|
100
101
|
unicode-display_width (1.7.0)
|
|
101
|
-
|
|
102
|
-
valvat (1.1.0)
|
|
102
|
+
valvat (1.1.2)
|
|
103
103
|
savon (>= 2.3.0)
|
|
104
104
|
wasabi (3.6.1)
|
|
105
105
|
addressable
|
|
@@ -107,6 +107,7 @@ GEM
|
|
|
107
107
|
nokogiri (>= 1.4.2)
|
|
108
108
|
|
|
109
109
|
PLATFORMS
|
|
110
|
+
ruby
|
|
110
111
|
x86_64-darwin-19
|
|
111
112
|
|
|
112
113
|
DEPENDENCIES
|
data/config/vat_rates.json
CHANGED
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
},
|
|
131
131
|
"DE": {
|
|
132
132
|
"country_name": "Germany",
|
|
133
|
-
"standard_rate":
|
|
133
|
+
"standard_rate": 19,
|
|
134
134
|
"reduced_rates": {
|
|
135
135
|
"foodstuffs": 7,
|
|
136
136
|
"books": 7,
|
|
@@ -365,19 +365,5 @@
|
|
|
365
365
|
"foodstuffs": 12,
|
|
366
366
|
"books": 6
|
|
367
367
|
}
|
|
368
|
-
},
|
|
369
|
-
"GB": {
|
|
370
|
-
"country_name": "United Kingdom",
|
|
371
|
-
"standard_rate": 20,
|
|
372
|
-
"reduced_rates": {
|
|
373
|
-
"property renovations": 5,
|
|
374
|
-
"foodstuffs": 0,
|
|
375
|
-
"books": 0,
|
|
376
|
-
"pharmaceuticals": 0,
|
|
377
|
-
"medical": 0,
|
|
378
|
-
"passenger transport": 0,
|
|
379
|
-
"newspapers": 0,
|
|
380
|
-
"childrens clothing": 0
|
|
381
|
-
}
|
|
382
368
|
}
|
|
383
369
|
}
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
{
|
|
2
|
+
"AT": {
|
|
3
|
+
"country_name": "Austria",
|
|
4
|
+
"standard_rate": 20,
|
|
5
|
+
"reduced_rates": {
|
|
6
|
+
"foodstuffs": 10,
|
|
7
|
+
"books": 5,
|
|
8
|
+
"pharmaceuticals": 10,
|
|
9
|
+
"passenger transport": 10,
|
|
10
|
+
"newspapers": 5,
|
|
11
|
+
"admission to cultural events": 5,
|
|
12
|
+
"hotels": 5,
|
|
13
|
+
"admission to entertainment events": 5
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"BE": {
|
|
17
|
+
"country_name": "Belgium",
|
|
18
|
+
"standard_rate": 21,
|
|
19
|
+
"reduced_rates": {
|
|
20
|
+
"restaurants": 12,
|
|
21
|
+
"foodstuffs": 6,
|
|
22
|
+
"water": 6,
|
|
23
|
+
"pharmaceuticals": 6,
|
|
24
|
+
"medical": 6,
|
|
25
|
+
"books": 6,
|
|
26
|
+
"newspapers": 6,
|
|
27
|
+
"hotels": 6,
|
|
28
|
+
"admission to cultural events": 6,
|
|
29
|
+
"admission to entertainment events": 6
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"BG": {
|
|
33
|
+
"country_name": "Bulgaria",
|
|
34
|
+
"standard_rate": 20,
|
|
35
|
+
"reduced_rates": {
|
|
36
|
+
"hotels": 9
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"HR": {
|
|
40
|
+
"country_name": "Croatia",
|
|
41
|
+
"standard_rate": 25,
|
|
42
|
+
"reduced_rates": {
|
|
43
|
+
"hotels": 13,
|
|
44
|
+
"newspapers": 13
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"CY": {
|
|
48
|
+
"country_name": "Cyprus",
|
|
49
|
+
"standard_rate": 19,
|
|
50
|
+
"reduced_rates": {
|
|
51
|
+
"hotels": 9,
|
|
52
|
+
"restaurants": 9,
|
|
53
|
+
"foodstuffs": 5,
|
|
54
|
+
"books": 5,
|
|
55
|
+
"pharmaceuticals": 5,
|
|
56
|
+
"medical": 5,
|
|
57
|
+
"passenger transport": 5,
|
|
58
|
+
"newspapers": 5,
|
|
59
|
+
"admission to cultural events": 5,
|
|
60
|
+
"admission to entertainment events": 5,
|
|
61
|
+
"admission to sporting events": 5
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"CZ": {
|
|
65
|
+
"country_name": "Czech Republic",
|
|
66
|
+
"standard_rate": 21,
|
|
67
|
+
"reduced_rates": {
|
|
68
|
+
"foodstuffs": 15,
|
|
69
|
+
"medical": 10,
|
|
70
|
+
"pharmaceuticals": 10,
|
|
71
|
+
"passenger transport": 15,
|
|
72
|
+
"newspapers": 15,
|
|
73
|
+
"admission to cultural events": 15,
|
|
74
|
+
"admission to sporting events": 15,
|
|
75
|
+
"admission to entertainment events": 15,
|
|
76
|
+
"hotels": 15,
|
|
77
|
+
"books": 10,
|
|
78
|
+
"baby foodstuffs": 10
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"DK": {
|
|
82
|
+
"country_name": "Denmark",
|
|
83
|
+
"standard_rate": 25,
|
|
84
|
+
"reduced_rates": null
|
|
85
|
+
},
|
|
86
|
+
"EE": {
|
|
87
|
+
"country_name": "Estonia",
|
|
88
|
+
"standard_rate": 20,
|
|
89
|
+
"reduced_rates": {
|
|
90
|
+
"books": 9,
|
|
91
|
+
"pharmaceuticals": 9,
|
|
92
|
+
"medical": 9,
|
|
93
|
+
"hotels": 9
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"FI": {
|
|
97
|
+
"country_name": "Finland",
|
|
98
|
+
"standard_rate": 24,
|
|
99
|
+
"reduced_rates": {
|
|
100
|
+
"foodstuffs": 14,
|
|
101
|
+
"restaurants": 14,
|
|
102
|
+
"books": 10,
|
|
103
|
+
"pharmaceuticals": 10,
|
|
104
|
+
"passenger transport": 10,
|
|
105
|
+
"newspapers": 10,
|
|
106
|
+
"admission to cultural events": 10,
|
|
107
|
+
"admission to sporting events": 10,
|
|
108
|
+
"admission to entertainment events": 10,
|
|
109
|
+
"hotels": 10
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
"FR": {
|
|
113
|
+
"country_name": "France",
|
|
114
|
+
"standard_rate": 20,
|
|
115
|
+
"reduced_rates": {
|
|
116
|
+
"pharmaceuticals": 2.1,
|
|
117
|
+
"passenger transport": 10,
|
|
118
|
+
"admission to cultural events": 10,
|
|
119
|
+
"admission to sporting events": 10,
|
|
120
|
+
"admission to entertainment events": 10,
|
|
121
|
+
"hotels": 10,
|
|
122
|
+
"accommodation": 10,
|
|
123
|
+
"restaurants": 10,
|
|
124
|
+
"medical": 5.5,
|
|
125
|
+
"foodstuffs": 5.5,
|
|
126
|
+
"e-books": 5.5,
|
|
127
|
+
"books": 5.5,
|
|
128
|
+
"newspapers": 2.1
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"DE": {
|
|
132
|
+
"country_name": "Germany",
|
|
133
|
+
"standard_rate": 16,
|
|
134
|
+
"reduced_rates": {
|
|
135
|
+
"foodstuffs": 7,
|
|
136
|
+
"books": 7,
|
|
137
|
+
"medical": 7,
|
|
138
|
+
"passenger transport": 7,
|
|
139
|
+
"newspapers": 7,
|
|
140
|
+
"admission to cultural events": 7,
|
|
141
|
+
"admission to entertainment events": 7,
|
|
142
|
+
"hotels": 7
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"GR": {
|
|
146
|
+
"country_name": "Greece",
|
|
147
|
+
"standard_rate": 24,
|
|
148
|
+
"reduced_rates": {
|
|
149
|
+
"foodstuffs": 13,
|
|
150
|
+
"pharmaceuticals": 13,
|
|
151
|
+
"medical": 13,
|
|
152
|
+
"admission to cultural events": 13,
|
|
153
|
+
"admission to sporting events": 13,
|
|
154
|
+
"admission to entertainment events": 13,
|
|
155
|
+
"books": 6.5,
|
|
156
|
+
"newspapers": 6.5,
|
|
157
|
+
"hotels": 6.5
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
"HU": {
|
|
161
|
+
"country_name": "Hungary",
|
|
162
|
+
"standard_rate": 27,
|
|
163
|
+
"reduced_rates": {
|
|
164
|
+
"foodstuffs": 18,
|
|
165
|
+
"hotels": 18,
|
|
166
|
+
"books": 5,
|
|
167
|
+
"pharmaceuticals": 5,
|
|
168
|
+
"medical": 5
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
"IE": {
|
|
172
|
+
"country_name": "Ireland",
|
|
173
|
+
"standard_rate": 21,
|
|
174
|
+
"reduced_rates": {
|
|
175
|
+
"medical": 13.5,
|
|
176
|
+
"newspapers": 9,
|
|
177
|
+
"admission to cultural events": 13.5,
|
|
178
|
+
"admission to sporting events": 0,
|
|
179
|
+
"admission to entertainment events": 13.5,
|
|
180
|
+
"hotels": 13.5,
|
|
181
|
+
"restaurants": 13.5,
|
|
182
|
+
"foodstuffs": 4.8,
|
|
183
|
+
"books": 0,
|
|
184
|
+
"childrens clothing": 0
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
"IT": {
|
|
188
|
+
"country_name": "Italy",
|
|
189
|
+
"standard_rate": 22,
|
|
190
|
+
"reduced_rates": {
|
|
191
|
+
"pharmaceuticals": 10,
|
|
192
|
+
"passenger transport": 10,
|
|
193
|
+
"admission to cultural events": 10,
|
|
194
|
+
"admission to entertainment events": 10,
|
|
195
|
+
"hotels": 10,
|
|
196
|
+
"restaurants": 10,
|
|
197
|
+
"foodstuffs": 4,
|
|
198
|
+
"medical": 4,
|
|
199
|
+
"books": 4,
|
|
200
|
+
"e-books": 4
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
"LV": {
|
|
204
|
+
"country_name": "Latvia",
|
|
205
|
+
"standard_rate": 21,
|
|
206
|
+
"reduced_rates": {
|
|
207
|
+
"books": 12,
|
|
208
|
+
"pharmaceuticals": 12,
|
|
209
|
+
"medical": 12,
|
|
210
|
+
"newspapers": 12,
|
|
211
|
+
"hotels": 12
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
"LT": {
|
|
215
|
+
"country_name": "Lithuania",
|
|
216
|
+
"standard_rate": 21,
|
|
217
|
+
"reduced_rates": {
|
|
218
|
+
"books": 9,
|
|
219
|
+
"pharmaceuticals": 5,
|
|
220
|
+
"medical": 5
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
"LU": {
|
|
224
|
+
"country_name": "Luxembourg",
|
|
225
|
+
"standard_rate": 17,
|
|
226
|
+
"reduced_rates": {
|
|
227
|
+
"wine": 14,
|
|
228
|
+
"domestic fuel": 14,
|
|
229
|
+
"advertising": 14,
|
|
230
|
+
"bikes": 8,
|
|
231
|
+
"domestic services": 8,
|
|
232
|
+
"books": 3,
|
|
233
|
+
"foodstuffs": 3,
|
|
234
|
+
"pharmaceuticals": 3,
|
|
235
|
+
"medical": 3,
|
|
236
|
+
"passenger transport": 3,
|
|
237
|
+
"newspapers": 3,
|
|
238
|
+
"admission to cultural events": 3,
|
|
239
|
+
"admission to sporting events": 3,
|
|
240
|
+
"admission to entertainment events": 3,
|
|
241
|
+
"hotels": 3,
|
|
242
|
+
"restaurants": 3,
|
|
243
|
+
"e-books": 3
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
"MT": {
|
|
247
|
+
"country_name": "Malta",
|
|
248
|
+
"standard_rate": 18,
|
|
249
|
+
"reduced_rates": {
|
|
250
|
+
"hotels": 7,
|
|
251
|
+
"books": 5,
|
|
252
|
+
"medical": 5,
|
|
253
|
+
"newspapers": 5,
|
|
254
|
+
"admission to cultural events": 5,
|
|
255
|
+
"e-books": 5,
|
|
256
|
+
"foodstuffs": 0,
|
|
257
|
+
"pharmaceuticals": 0
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
"NL": {
|
|
261
|
+
"country_name": "Netherlands",
|
|
262
|
+
"standard_rate": 21,
|
|
263
|
+
"reduced_rates": {
|
|
264
|
+
"foodstuffs": 9,
|
|
265
|
+
"books": 9,
|
|
266
|
+
"pharmaceuticals": 9,
|
|
267
|
+
"medical": 9,
|
|
268
|
+
"passenger transport": 9,
|
|
269
|
+
"admission to cultural events": 9,
|
|
270
|
+
"admission to entertainment events": 9,
|
|
271
|
+
"hotels": 9,
|
|
272
|
+
"accommodation": 9
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
"PL": {
|
|
276
|
+
"country_name": "Poland",
|
|
277
|
+
"standard_rate": 23,
|
|
278
|
+
"reduced_rates": {
|
|
279
|
+
"pharmaceuticals": 8,
|
|
280
|
+
"medical": 8,
|
|
281
|
+
"passenger transport": 8,
|
|
282
|
+
"newspapers": 8,
|
|
283
|
+
"hotels": 8,
|
|
284
|
+
"restaurants": 8,
|
|
285
|
+
"admission to cultural events": 8,
|
|
286
|
+
"admission to sporting events": 8,
|
|
287
|
+
"admission to entertainment events": 8,
|
|
288
|
+
"foodstuffs": 5
|
|
289
|
+
}
|
|
290
|
+
},
|
|
291
|
+
"PT": {
|
|
292
|
+
"country_name": "Portugal",
|
|
293
|
+
"standard_rate": 23,
|
|
294
|
+
"reduced_rates": {
|
|
295
|
+
"foodstuffs": 6,
|
|
296
|
+
"agricultural supplies": 13,
|
|
297
|
+
"books": 6,
|
|
298
|
+
"pharmaceuticals": 6,
|
|
299
|
+
"medical": 6,
|
|
300
|
+
"newspapers": 6,
|
|
301
|
+
"hotels": 6,
|
|
302
|
+
"passenger transport": 6
|
|
303
|
+
}
|
|
304
|
+
},
|
|
305
|
+
"RO": {
|
|
306
|
+
"country_name": "Romania",
|
|
307
|
+
"standard_rate": 19,
|
|
308
|
+
"reduced_rates": {
|
|
309
|
+
"books": 9,
|
|
310
|
+
"pharmaceuticals": 9,
|
|
311
|
+
"medical": 9,
|
|
312
|
+
"newspapers": 9,
|
|
313
|
+
"admission to cultural events": 9,
|
|
314
|
+
"admission to entertainment events": 9,
|
|
315
|
+
"hotels": 9,
|
|
316
|
+
"foodstuffs": 9,
|
|
317
|
+
"social housing": 5
|
|
318
|
+
}
|
|
319
|
+
},
|
|
320
|
+
"SK": {
|
|
321
|
+
"country_name": "Slovakia",
|
|
322
|
+
"standard_rate": 20,
|
|
323
|
+
"reduced_rates": {
|
|
324
|
+
"books": 10,
|
|
325
|
+
"foodstuffs": 10,
|
|
326
|
+
"medical": 10,
|
|
327
|
+
"pharmaceuticals": 10,
|
|
328
|
+
"admission to cultural events": 10,
|
|
329
|
+
"admission to entertainment events": 10
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
"SI": {
|
|
333
|
+
"country_name": "Slovenia",
|
|
334
|
+
"standard_rate": 22,
|
|
335
|
+
"reduced_rates": {
|
|
336
|
+
"foodstuffs": 9.5,
|
|
337
|
+
"books": 9.5,
|
|
338
|
+
"pharmaceuticals": 9.5,
|
|
339
|
+
"medical": 9.5,
|
|
340
|
+
"newspapers": 9.5,
|
|
341
|
+
"admission to sporting events": 9.5,
|
|
342
|
+
"admission to cultural events": 9.5,
|
|
343
|
+
"admission to entertainment events": 9.5,
|
|
344
|
+
"hotels": 9.5
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
"ES": {
|
|
348
|
+
"country_name": "Spain",
|
|
349
|
+
"standard_rate": 21,
|
|
350
|
+
"reduced_rates": {
|
|
351
|
+
"medical": 10,
|
|
352
|
+
"pharmaceuticals": 10,
|
|
353
|
+
"passenger transport": 10,
|
|
354
|
+
"admission to cultural events": 10,
|
|
355
|
+
"admission to sporting events": 10,
|
|
356
|
+
"admission to entertainment events": 10,
|
|
357
|
+
"foodstuffs": 4,
|
|
358
|
+
"newspapers": 4
|
|
359
|
+
}
|
|
360
|
+
},
|
|
361
|
+
"SE": {
|
|
362
|
+
"country_name": "Sweden",
|
|
363
|
+
"standard_rate": 25,
|
|
364
|
+
"reduced_rates": {
|
|
365
|
+
"foodstuffs": 12,
|
|
366
|
+
"books": 6
|
|
367
|
+
}
|
|
368
|
+
},
|
|
369
|
+
"GB": {
|
|
370
|
+
"country_name": "United Kingdom",
|
|
371
|
+
"standard_rate": 20,
|
|
372
|
+
"reduced_rates": {
|
|
373
|
+
"property renovations": 5,
|
|
374
|
+
"foodstuffs": 0,
|
|
375
|
+
"books": 0,
|
|
376
|
+
"pharmaceuticals": 0,
|
|
377
|
+
"medical": 0,
|
|
378
|
+
"passenger transport": 0,
|
|
379
|
+
"newspapers": 0,
|
|
380
|
+
"childrens clothing": 0
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
@@ -8,18 +8,19 @@ module MossGenerator
|
|
|
8
8
|
class Stripe
|
|
9
9
|
class NoTurnoverCountryError < StandardError; end
|
|
10
10
|
|
|
11
|
-
attr_reader :charges, :vat_number, :period, :year, :rates
|
|
11
|
+
attr_reader :charges, :vat_number, :period, :year, :rates, :sale_type
|
|
12
12
|
|
|
13
|
-
def initialize(charges, vat_number, period, year, rates)
|
|
13
|
+
def initialize(charges, vat_number, period, year, rates, sale_type)
|
|
14
14
|
@charges = charges
|
|
15
15
|
@vat_number = vat_number
|
|
16
16
|
@period = period
|
|
17
17
|
@year = year
|
|
18
18
|
@rates = rates
|
|
19
|
+
@sale_type = sale_type
|
|
19
20
|
end
|
|
20
21
|
|
|
21
|
-
def self.call(charges, vat_number, period, year, rates)
|
|
22
|
-
new(charges, vat_number, period, year, rates).call
|
|
22
|
+
def self.call(charges, vat_number, period, year, rates, sale_type)
|
|
23
|
+
new(charges, vat_number, period, year, rates, sale_type).call
|
|
23
24
|
end
|
|
24
25
|
|
|
25
26
|
def call
|
|
@@ -33,7 +34,7 @@ module MossGenerator
|
|
|
33
34
|
private
|
|
34
35
|
|
|
35
36
|
def first_row
|
|
36
|
-
['
|
|
37
|
+
['OSS_001']
|
|
37
38
|
end
|
|
38
39
|
|
|
39
40
|
def second_row
|
|
@@ -51,24 +52,27 @@ module MossGenerator
|
|
|
51
52
|
|
|
52
53
|
charge_row
|
|
53
54
|
end.compact
|
|
54
|
-
charges_rows.group_by
|
|
55
|
+
charges_rows.group_by do |row|
|
|
56
|
+
[row.country_code, row.vat_rate]
|
|
57
|
+
end
|
|
55
58
|
end
|
|
56
59
|
|
|
57
60
|
def build_charges_rows
|
|
58
|
-
group_charges_rows.map do |country, charges|
|
|
61
|
+
group_charges_rows.map do |(country, vat), charges|
|
|
59
62
|
next if country == 'SE' && turnover_country == 'SE'
|
|
60
|
-
next if
|
|
63
|
+
next if vat.nil?
|
|
61
64
|
|
|
62
|
-
country_row(country, charges)
|
|
65
|
+
country_row(country, charges, vat)
|
|
63
66
|
end.compact
|
|
64
67
|
end
|
|
65
68
|
|
|
66
|
-
def country_row(country, charges)
|
|
69
|
+
def country_row(country, charges, vat)
|
|
67
70
|
[turnover_country,
|
|
68
71
|
country,
|
|
69
|
-
format_to_two_decimals(
|
|
72
|
+
format_to_two_decimals(vat),
|
|
70
73
|
format_to_two_decimals(charges.sum(&:amount_without_vat)),
|
|
71
|
-
format_to_two_decimals(charges.sum(&:vat_amount))
|
|
74
|
+
format_to_two_decimals(charges.sum(&:vat_amount)),
|
|
75
|
+
sale_type]
|
|
72
76
|
end
|
|
73
77
|
|
|
74
78
|
def csv_options
|
|
@@ -36,7 +36,7 @@ module MossGenerator
|
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
def vat_rate
|
|
39
|
-
@vat_rate =
|
|
39
|
+
@vat_rate = special_vat_rate_for_2021_quarter_one
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
def vat_amount
|
|
@@ -56,6 +56,17 @@ module MossGenerator
|
|
|
56
56
|
|
|
57
57
|
private
|
|
58
58
|
|
|
59
|
+
def special_vat_rate_for_2021_quarter_one
|
|
60
|
+
if fetch_country_code.casecmp?('IE')
|
|
61
|
+
changeover_day = Date.parse('2021-03-01').to_time
|
|
62
|
+
return 23 if Time.at(charge['created']) >= changeover_day
|
|
63
|
+
|
|
64
|
+
21
|
|
65
|
+
else
|
|
66
|
+
MossGenerator::VatRate.for(country_code)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
59
70
|
def company?
|
|
60
71
|
return false if charge.dig('metadata', 'vat_number').nil?
|
|
61
72
|
|
data/moss_generator.gemspec
CHANGED
|
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
|
8
8
|
spec.authors = ['frdrkolsson']
|
|
9
9
|
spec.email = ['fredrik.olsson@standout.se']
|
|
10
10
|
|
|
11
|
-
spec.summary = 'Skatteverket
|
|
11
|
+
spec.summary = 'Skatteverket One Stop Shop (OSS) generator.'
|
|
12
12
|
spec.description = spec.summary
|
|
13
13
|
spec.homepage = 'https://github.com/standout/moss_generator'
|
|
14
14
|
spec.license = 'MIT'
|
|
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
|
|
|
31
31
|
spec.require_paths = ['lib']
|
|
32
32
|
|
|
33
33
|
# spec.add_dependency to register a new dependency of your gem
|
|
34
|
-
spec.add_dependency 'countries', '~>
|
|
34
|
+
spec.add_dependency 'countries', '~> 4.0'
|
|
35
35
|
spec.add_dependency 'money', '~> 6.14'
|
|
36
36
|
spec.add_dependency 'valvat', '~> 1.1'
|
|
37
37
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: moss_generator
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- frdrkolsson
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-
|
|
11
|
+
date: 2021-11-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: countries
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
19
|
+
version: '4.0'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
26
|
+
version: '4.0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: money
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -66,7 +66,7 @@ dependencies:
|
|
|
66
66
|
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '0'
|
|
69
|
-
description: Skatteverket
|
|
69
|
+
description: Skatteverket One Stop Shop (OSS) generator.
|
|
70
70
|
email:
|
|
71
71
|
- fredrik.olsson@standout.se
|
|
72
72
|
executables: []
|
|
@@ -86,6 +86,7 @@ files:
|
|
|
86
86
|
- bin/console
|
|
87
87
|
- bin/setup
|
|
88
88
|
- config/vat_rates.json
|
|
89
|
+
- config/vat_rates_2020_4.json
|
|
89
90
|
- lib/moss_generator.rb
|
|
90
91
|
- lib/moss_generator/stripe.rb
|
|
91
92
|
- lib/moss_generator/stripe_charge_row.rb
|
|
@@ -114,8 +115,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
114
115
|
- !ruby/object:Gem::Version
|
|
115
116
|
version: '0'
|
|
116
117
|
requirements: []
|
|
117
|
-
rubygems_version: 3.2.
|
|
118
|
+
rubygems_version: 3.2.22
|
|
118
119
|
signing_key:
|
|
119
120
|
specification_version: 4
|
|
120
|
-
summary: Skatteverket
|
|
121
|
+
summary: Skatteverket One Stop Shop (OSS) generator.
|
|
121
122
|
test_files: []
|