1use serde::Serialize;
2
3use crate::{
4 County, TaxReductions, Taxes,
5 constants::{DEFAULT_SE_TAX_REDUCTIONS, DEFAULT_SE_TAXES, REDUCED_SE_TAXES},
6};
7use County::*;
8
9#[derive(Debug, Clone, Serialize)]
10pub struct Municipality {
11 pub code: u16,
12 pub name: &'static str,
13 pub county: County,
14 pub taxes: Taxes,
15 pub tax_reductions: TaxReductions,
16}
17
18impl Municipality {
19 const fn new(
20 code: u16,
21 name: &'static str,
22 county: County,
23 taxes: Taxes,
24 tax_reductions: TaxReductions,
25 ) -> Self {
26 Self {
27 code,
28 name,
29 county,
30 taxes,
31 tax_reductions,
32 }
33 }
34
35 const fn new_default_se(code: u16, name: &'static str, county: County) -> Self {
36 Self::new(
37 code,
38 name,
39 county,
40 DEFAULT_SE_TAXES,
41 DEFAULT_SE_TAX_REDUCTIONS,
42 )
43 }
44
45 const fn new_reduced_se(code: u16, name: &'static str, county: County) -> Self {
46 Self::new(
47 code,
48 name,
49 county,
50 REDUCED_SE_TAXES,
51 DEFAULT_SE_TAX_REDUCTIONS,
52 )
53 }
54
55 pub const fn get_by_code(code: u16) -> Option<&'static Municipality> {
57 let mut i = 0;
58 while i < MUNICIPALITIES.len() {
59 let m = &MUNICIPALITIES[i];
60 if m.code == code {
61 return Some(m);
62 }
63 i += 1;
64 }
65 None
66 }
67
68 pub const fn get_by_name(name: &str) -> Option<&'static Municipality> {
70 let mut i = 0;
71 while i < MUNICIPALITIES.len() {
72 let m = &MUNICIPALITIES[i];
73 if m.name.eq_ignore_ascii_case(name) {
74 return Some(m);
75 }
76 i += 1;
77 }
78 None
79 }
80
81 pub const fn taxes(&self) -> Taxes {
82 self.taxes
83 }
84
85 pub const fn tax_reductions(&self) -> TaxReductions {
86 self.tax_reductions
87 }
88
89 pub fn with_current_taxes(mut self) -> Self {
90 self.taxes = self.taxes.with_current_only();
91 self
92 }
93
94 pub fn with_current_tax_reductions(mut self) -> Self {
95 self.tax_reductions = self.tax_reductions.with_current_only();
96 self
97 }
98}
99
100pub const MUNICIPALITIES: &[Municipality] = &[
101 Municipality::new_default_se(1440, "Ale kommun", VästraGötalandsLän),
102 Municipality::new_default_se(1489, "Alingsås kommun", VästraGötalandsLän),
103 Municipality::new_default_se(764, "Alvesta kommun", KronobergsLän),
104 Municipality::new_default_se(604, "Aneby kommun", JönköpingsLän),
105 Municipality::new_default_se(1984, "Arboga kommun", VästmanlandsLän),
106 Municipality::new_reduced_se(2506, "Arjeplogs kommun", NorrbottensLän),
107 Municipality::new_reduced_se(2505, "Arvidsjaurs kommun", NorrbottensLän),
108 Municipality::new_default_se(1784, "Arvika kommun", VärmlandsLän),
109 Municipality::new_default_se(1882, "Askersunds kommun", ÖrebroLän),
110 Municipality::new_default_se(2084, "Avesta kommun", DalarnasLän),
111 Municipality::new_default_se(1460, "Bengtsfors kommun", VästraGötalandsLän),
112 Municipality::new_reduced_se(2326, "Bergs kommun", JämtlandsLän),
113 Municipality::new_reduced_se(2403, "Bjurholms kommun", VästerbottensLän),
114 Municipality::new_default_se(1260, "Bjuvs kommun", SkåneLän),
115 Municipality::new_reduced_se(2582, "Bodens kommun", NorrbottensLän),
116 Municipality::new_default_se(1443, "Bollebygds kommun", VästraGötalandsLän),
117 Municipality::new_default_se(2183, "Bollnäs kommun", GävleborgsLän),
118 Municipality::new_default_se(885, "Borgholms kommun", KalmarLän),
119 Municipality::new_default_se(2081, "Borlänge kommun", DalarnasLän),
120 Municipality::new_default_se(1490, "Borås kommun", VästraGötalandsLän),
121 Municipality::new_default_se(127, "Botkyrka kommun", StockholmsLän),
122 Municipality::new_default_se(560, "Boxholms kommun", ÖstergötlandsLän),
123 Municipality::new_default_se(1272, "Bromölla kommun", SkåneLän),
124 Municipality::new_reduced_se(2305, "Bräcke kommun", JämtlandsLän),
125 Municipality::new_default_se(1231, "Burlövs kommun", SkåneLän),
126 Municipality::new_default_se(1278, "Båstads kommun", SkåneLän),
127 Municipality::new_default_se(1438, "Dals-Eds kommun", VästraGötalandsLän),
128 Municipality::new_default_se(162, "Danderyds kommun", StockholmsLän),
129 Municipality::new_default_se(1862, "Degerfors kommun", ÖrebroLän),
130 Municipality::new_reduced_se(2425, "Dorotea kommun", VästerbottensLän),
131 Municipality::new_default_se(1730, "Eda kommun", VärmlandsLän),
132 Municipality::new_default_se(125, "Ekerö kommun", StockholmsLän),
133 Municipality::new_default_se(686, "Eksjö kommun", JönköpingsLän),
134 Municipality::new_default_se(862, "Emmaboda kommun", KalmarLän),
135 Municipality::new_default_se(381, "Enköpings kommun", UppsalaLän),
136 Municipality::new_default_se(484, "Eskilstuna kommun", SödermanlandsLän),
137 Municipality::new_default_se(1285, "Eslövs kommun", SkåneLän),
138 Municipality::new_default_se(1445, "Essunga kommun", VästraGötalandsLän),
139 Municipality::new_default_se(1982, "Fagersta kommun", VästmanlandsLän),
140 Municipality::new_default_se(1382, "Falkenbergs kommun", HallandsLän),
141 Municipality::new_default_se(1499, "Falköpings kommun", VästraGötalandsLän),
142 Municipality::new_default_se(2080, "Falu kommun", DalarnasLän),
143 Municipality::new_default_se(1782, "Filipstads kommun", VärmlandsLän),
144 Municipality::new_default_se(562, "Finspångs kommun", ÖstergötlandsLän),
145 Municipality::new_default_se(482, "Flens kommun", SödermanlandsLän),
146 Municipality::new_default_se(1763, "Forshaga kommun", VärmlandsLän),
147 Municipality::new_default_se(1439, "Färgelanda kommun", VästraGötalandsLän),
148 Municipality::new_default_se(2026, "Gagnefs kommun", DalarnasLän),
149 Municipality::new_default_se(662, "Gislaveds kommun", JönköpingsLän),
150 Municipality::new_default_se(461, "Gnesta kommun", SödermanlandsLän),
151 Municipality::new_default_se(617, "Gnosjö kommun", JönköpingsLän),
152 Municipality::new_default_se(980, "Gotlands kommun", GotlandsLän),
153 Municipality::new_default_se(1764, "Grums kommun", VärmlandsLän),
154 Municipality::new_default_se(1444, "Grästorps kommun", VästraGötalandsLän),
155 Municipality::new_default_se(1447, "Gullspångs kommun", VästraGötalandsLän),
156 Municipality::new_reduced_se(2523, "Gällivare kommun", NorrbottensLän),
157 Municipality::new_default_se(2180, "Gävle kommun", GävleborgsLän),
158 Municipality::new_default_se(1480, "Göteborgs kommun", VästraGötalandsLän),
159 Municipality::new_default_se(1471, "Götene kommun", VästraGötalandsLän),
160 Municipality::new_default_se(643, "Habo kommun", JönköpingsLän),
161 Municipality::new_default_se(1783, "Hagfors kommun", VärmlandsLän),
162 Municipality::new_default_se(1861, "Hallsbergs kommun", ÖrebroLän),
163 Municipality::new_default_se(1961, "Hallstahammars kommun", VästmanlandsLän),
164 Municipality::new_default_se(1380, "Halmstads kommun", HallandsLän),
165 Municipality::new_default_se(1761, "Hammarö kommun", VärmlandsLän),
166 Municipality::new_default_se(136, "Haninge kommun", StockholmsLän),
167 Municipality::new_reduced_se(2583, "Haparanda kommun", NorrbottensLän),
168 Municipality::new_default_se(331, "Heby kommun", UppsalaLän),
169 Municipality::new_default_se(2083, "Hedemora kommun", DalarnasLän),
170 Municipality::new_default_se(1283, "Helsingborgs kommun", SkåneLän),
171 Municipality::new_default_se(1466, "Herrljunga kommun", VästraGötalandsLän),
172 Municipality::new_default_se(1497, "Hjo kommun", VästraGötalandsLän),
173 Municipality::new_default_se(2104, "Hofors kommun", GävleborgsLän),
174 Municipality::new_default_se(126, "Huddinge kommun", StockholmsLän),
175 Municipality::new_default_se(2184, "Hudiksvalls kommun", GävleborgsLän),
176 Municipality::new_default_se(860, "Hultsfreds kommun", KalmarLän),
177 Municipality::new_default_se(1315, "Hylte kommun", HallandsLän),
178 Municipality::new_default_se(305, "Håbo kommun", UppsalaLän),
179 Municipality::new_default_se(1863, "Hällefors kommun", ÖrebroLän),
180 Municipality::new_reduced_se(2361, "Härjedalens kommun", JämtlandsLän),
181 Municipality::new_default_se(2280, "Härnösands kommun", VästernorrlandsLän),
182 Municipality::new_default_se(1401, "Härryda kommun", VästraGötalandsLän),
183 Municipality::new_default_se(1293, "Hässleholms kommun", SkåneLän),
184 Municipality::new_default_se(1284, "Höganäs kommun", SkåneLän),
185 Municipality::new_default_se(821, "Högsby kommun", KalmarLän),
186 Municipality::new_default_se(1266, "Hörby kommun", SkåneLän),
187 Municipality::new_default_se(1267, "Höörs kommun", SkåneLän),
188 Municipality::new_reduced_se(2510, "Jokkmokks kommun", NorrbottensLän),
189 Municipality::new_default_se(123, "Järfälla kommun", StockholmsLän),
190 Municipality::new_default_se(680, "Jönköpings kommun", JönköpingsLän),
191 Municipality::new_reduced_se(2514, "Kalix kommun", NorrbottensLän),
192 Municipality::new_default_se(880, "Kalmar kommun", KalmarLän),
193 Municipality::new_default_se(1446, "Karlsborgs kommun", VästraGötalandsLän),
194 Municipality::new_default_se(1082, "Karlshamns kommun", BlekingeLän),
195 Municipality::new_default_se(1883, "Karlskoga kommun", ÖrebroLän),
196 Municipality::new_default_se(1080, "Karlskrona kommun", BlekingeLän),
197 Municipality::new_default_se(1780, "Karlstads kommun", VärmlandsLän),
198 Municipality::new_default_se(483, "Katrineholms kommun", SödermanlandsLän),
199 Municipality::new_default_se(1715, "Kils kommun", VärmlandsLän),
200 Municipality::new_default_se(513, "Kinda kommun", ÖstergötlandsLän),
201 Municipality::new_reduced_se(2584, "Kiruna kommun", NorrbottensLän),
202 Municipality::new_default_se(1276, "Klippans kommun", SkåneLän),
203 Municipality::new_default_se(330, "Knivsta kommun", UppsalaLän),
204 Municipality::new_default_se(2282, "Kramfors kommun", VästernorrlandsLän),
205 Municipality::new_default_se(1290, "Kristianstads kommun", SkåneLän),
206 Municipality::new_default_se(1781, "Kristinehamns kommun", VärmlandsLän),
207 Municipality::new_reduced_se(2309, "Krokoms kommun", JämtlandsLän),
208 Municipality::new_default_se(1881, "Kumla kommun", ÖrebroLän),
209 Municipality::new_default_se(1384, "Kungsbacka kommun", HallandsLän),
210 Municipality::new_default_se(1960, "Kungsörs kommun", VästmanlandsLän),
211 Municipality::new_default_se(1482, "Kungälvs kommun", VästraGötalandsLän),
212 Municipality::new_default_se(1261, "Kävlinge kommun", SkåneLän),
213 Municipality::new_default_se(1983, "Köpings kommun", VästmanlandsLän),
214 Municipality::new_default_se(1381, "Laholms kommun", HallandsLän),
215 Municipality::new_default_se(1282, "Landskrona kommun", SkåneLän),
216 Municipality::new_default_se(1860, "Laxå kommun", ÖrebroLän),
217 Municipality::new_default_se(1814, "Lekebergs kommun", ÖrebroLän),
218 Municipality::new_default_se(2029, "Leksands kommun", DalarnasLän),
219 Municipality::new_default_se(1441, "Lerums kommun", VästraGötalandsLän),
220 Municipality::new_default_se(761, "Lessebo kommun", KronobergsLän),
221 Municipality::new_default_se(186, "Lidingö kommun", StockholmsLän),
222 Municipality::new_default_se(1494, "Lidköpings kommun", VästraGötalandsLän),
223 Municipality::new_default_se(1462, "Lilla Edets kommun", VästraGötalandsLän),
224 Municipality::new_default_se(1885, "Lindesbergs kommun", ÖrebroLän),
225 Municipality::new_default_se(580, "Linköpings kommun", ÖstergötlandsLän),
226 Municipality::new_default_se(781, "Ljungby kommun", KronobergsLän),
227 Municipality::new_reduced_se(2161, "Ljusdals kommun", GävleborgsLän),
228 Municipality::new_default_se(1864, "Ljusnarsbergs kommun", ÖrebroLän),
229 Municipality::new_default_se(1262, "Lomma kommun", SkåneLän),
230 Municipality::new_default_se(2085, "Ludvika kommun", DalarnasLän),
231 Municipality::new_reduced_se(2580, "Luleå kommun", NorrbottensLän),
232 Municipality::new_default_se(1281, "Lunds kommun", SkåneLän),
233 Municipality::new_reduced_se(2481, "Lycksele kommun", VästerbottensLän),
234 Municipality::new_default_se(1484, "Lysekils kommun", VästraGötalandsLän),
235 Municipality::new_default_se(1280, "Malmö kommun", SkåneLän),
236 Municipality::new_reduced_se(2023, "Malung-Sälens kommun", DalarnasLän),
237 Municipality::new_reduced_se(2418, "Malå kommun", VästerbottensLän),
238 Municipality::new_default_se(1493, "Mariestads kommun", VästraGötalandsLän),
239 Municipality::new_default_se(1463, "Marks kommun", VästraGötalandsLän),
240 Municipality::new_default_se(767, "Markaryds kommun", KronobergsLän),
241 Municipality::new_default_se(1461, "Melleruds kommun", VästraGötalandsLän),
242 Municipality::new_default_se(586, "Mjölby kommun", ÖstergötlandsLän),
243 Municipality::new_reduced_se(2062, "Mora kommun", DalarnasLän),
244 Municipality::new_default_se(583, "Motala kommun", ÖstergötlandsLän),
245 Municipality::new_default_se(642, "Mullsjö kommun", JönköpingsLän),
246 Municipality::new_default_se(1430, "Munkedals kommun", VästraGötalandsLän),
247 Municipality::new_default_se(1762, "Munkfors kommun", VärmlandsLän),
248 Municipality::new_default_se(1481, "Mölndals kommun", VästraGötalandsLän),
249 Municipality::new_default_se(861, "Mönsterås kommun", KalmarLän),
250 Municipality::new_default_se(840, "Mörbylånga kommun", KalmarLän),
251 Municipality::new_default_se(182, "Nacka kommun", StockholmsLän),
252 Municipality::new_default_se(1884, "Nora kommun", ÖrebroLän),
253 Municipality::new_default_se(1962, "Norbergs kommun", VästmanlandsLän),
254 Municipality::new_default_se(2132, "Nordanstigs kommun", GävleborgsLän),
255 Municipality::new_reduced_se(2401, "Nordmalings kommun", VästerbottensLän),
256 Municipality::new_default_se(581, "Norrköpings kommun", ÖstergötlandsLän),
257 Municipality::new_default_se(188, "Norrtälje kommun", StockholmsLän),
258 Municipality::new_reduced_se(2417, "Norsjö kommun", VästerbottensLän),
259 Municipality::new_default_se(881, "Nybro kommun", KalmarLän),
260 Municipality::new_default_se(140, "Nykvarns kommun", StockholmsLän),
261 Municipality::new_default_se(480, "Nyköpings kommun", SödermanlandsLän),
262 Municipality::new_default_se(192, "Nynäshamns kommun", StockholmsLän),
263 Municipality::new_default_se(682, "Nässjö kommun", JönköpingsLän),
264 Municipality::new_default_se(2101, "Ockelbo kommun", GävleborgsLän),
265 Municipality::new_default_se(1060, "Olofströms kommun", BlekingeLän),
266 Municipality::new_reduced_se(2034, "Orsa kommun", DalarnasLän),
267 Municipality::new_default_se(1421, "Orusts kommun", VästraGötalandsLän),
268 Municipality::new_default_se(1273, "Osby kommun", SkåneLän),
269 Municipality::new_default_se(882, "Oskarshamns kommun", KalmarLän),
270 Municipality::new_default_se(2121, "Ovanåkers kommun", GävleborgsLän),
271 Municipality::new_default_se(481, "Oxelösunds kommun", SödermanlandsLän),
272 Municipality::new_reduced_se(2521, "Pajala kommun", NorrbottensLän),
273 Municipality::new_default_se(1402, "Partille kommun", VästraGötalandsLän),
274 Municipality::new_default_se(1275, "Perstorps kommun", SkåneLän),
275 Municipality::new_reduced_se(2581, "Piteå kommun", NorrbottensLän),
276 Municipality::new_reduced_se(2303, "Ragunda kommun", JämtlandsLän),
277 Municipality::new_reduced_se(2409, "Robertsfors kommun", VästerbottensLän),
278 Municipality::new_default_se(1081, "Ronneby kommun", BlekingeLän),
279 Municipality::new_default_se(2031, "Rättviks kommun", DalarnasLän),
280 Municipality::new_default_se(1981, "Sala kommun", VästmanlandsLän),
281 Municipality::new_default_se(128, "Salems kommun", StockholmsLän),
282 Municipality::new_default_se(2181, "Sandvikens kommun", GävleborgsLän),
283 Municipality::new_default_se(191, "Sigtuna kommun", StockholmsLän),
284 Municipality::new_default_se(1291, "Simrishamns kommun", SkåneLän),
285 Municipality::new_default_se(1265, "Sjöbo kommun", SkåneLän),
286 Municipality::new_default_se(1495, "Skara kommun", VästraGötalandsLän),
287 Municipality::new_reduced_se(2482, "Skellefteå kommun", VästerbottensLän),
288 Municipality::new_default_se(1904, "Skinnskattebergs kommun", VästmanlandsLän),
289 Municipality::new_default_se(1264, "Skurups kommun", SkåneLän),
290 Municipality::new_default_se(1496, "Skövde kommun", VästraGötalandsLän),
291 Municipality::new_default_se(2061, "Smedjebackens kommun", DalarnasLän),
292 Municipality::new_reduced_se(2283, "Sollefteå kommun", VästernorrlandsLän),
293 Municipality::new_default_se(163, "Sollentuna kommun", StockholmsLän),
294 Municipality::new_default_se(184, "Solna kommun", StockholmsLän),
295 Municipality::new_reduced_se(2422, "Sorsele kommun", VästerbottensLän),
296 Municipality::new_default_se(1427, "Sotenäs kommun", VästraGötalandsLän),
297 Municipality::new_default_se(1230, "Staffanstorps kommun", SkåneLän),
298 Municipality::new_default_se(1415, "Stenungsunds kommun", VästraGötalandsLän),
299 Municipality::new_default_se(180, "Stockholms kommun", StockholmsLän),
300 Municipality::new_default_se(1760, "Storfors kommun", VärmlandsLän),
301 Municipality::new_reduced_se(2421, "Storumans kommun", VästerbottensLän),
302 Municipality::new_default_se(486, "Strängnäs kommun", SödermanlandsLän),
303 Municipality::new_default_se(1486, "Strömstads kommun", VästraGötalandsLän),
304 Municipality::new_reduced_se(2313, "Strömsunds kommun", JämtlandsLän),
305 Municipality::new_default_se(183, "Sundbybergs kommun", StockholmsLän),
306 Municipality::new_default_se(2281, "Sundsvalls kommun", VästernorrlandsLän),
307 Municipality::new_default_se(1766, "Sunne kommun", VärmlandsLän),
308 Municipality::new_default_se(1907, "Surahammars kommun", VästmanlandsLän),
309 Municipality::new_default_se(1214, "Svalövs kommun", SkåneLän),
310 Municipality::new_default_se(1263, "Svedala kommun", SkåneLän),
311 Municipality::new_default_se(1465, "Svenljunga kommun", VästraGötalandsLän),
312 Municipality::new_default_se(1785, "Säffle kommun", VärmlandsLän),
313 Municipality::new_default_se(2082, "Säters kommun", DalarnasLän),
314 Municipality::new_default_se(684, "Sävsjö kommun", JönköpingsLän),
315 Municipality::new_default_se(2182, "Söderhamns kommun", GävleborgsLän),
316 Municipality::new_default_se(582, "Söderköpings kommun", ÖstergötlandsLän),
317 Municipality::new_default_se(181, "Södertälje kommun", StockholmsLän),
318 Municipality::new_default_se(1083, "Sölvesborgs kommun", BlekingeLän),
319 Municipality::new_default_se(1435, "Tanums kommun", VästraGötalandsLän),
320 Municipality::new_default_se(1472, "Tibro kommun", VästraGötalandsLän),
321 Municipality::new_default_se(1498, "Tidaholms kommun", VästraGötalandsLän),
322 Municipality::new_default_se(360, "Tierps kommun", UppsalaLän),
323 Municipality::new_default_se(2262, "Timrå kommun", VästernorrlandsLän),
324 Municipality::new_default_se(763, "Tingsryds kommun", KronobergsLän),
325 Municipality::new_default_se(1419, "Tjörns kommun", VästraGötalandsLän),
326 Municipality::new_default_se(1270, "Tomelilla kommun", SkåneLän),
327 Municipality::new_reduced_se(1737, "Torsby kommun", VärmlandsLän),
328 Municipality::new_default_se(834, "Torsås kommun", KalmarLän),
329 Municipality::new_default_se(1452, "Tranemo kommun", VästraGötalandsLän),
330 Municipality::new_default_se(687, "Tranås kommun", JönköpingsLän),
331 Municipality::new_default_se(1287, "Trelleborgs kommun", SkåneLän),
332 Municipality::new_default_se(1488, "Trollhättans kommun", VästraGötalandsLän),
333 Municipality::new_default_se(488, "Trosa kommun", SödermanlandsLän),
334 Municipality::new_default_se(138, "Tyresö kommun", StockholmsLän),
335 Municipality::new_default_se(160, "Täby kommun", StockholmsLän),
336 Municipality::new_default_se(1473, "Töreboda kommun", VästraGötalandsLän),
337 Municipality::new_default_se(1485, "Uddevalla kommun", VästraGötalandsLän),
338 Municipality::new_default_se(1491, "Ulricehamns kommun", VästraGötalandsLän),
339 Municipality::new_reduced_se(2480, "Umeå kommun", VästerbottensLän),
340 Municipality::new_default_se(114, "Upplands Väsby kommun", StockholmsLän),
341 Municipality::new_default_se(139, "Upplands-Bro kommun", StockholmsLän),
342 Municipality::new_default_se(380, "Uppsala kommun", UppsalaLän),
343 Municipality::new_default_se(760, "Uppvidinge kommun", KronobergsLän),
344 Municipality::new_default_se(584, "Vadstena kommun", ÖstergötlandsLän),
345 Municipality::new_default_se(665, "Vaggeryds kommun", JönköpingsLän),
346 Municipality::new_default_se(563, "Valdemarsviks kommun", ÖstergötlandsLän),
347 Municipality::new_default_se(115, "Vallentuna kommun", StockholmsLän),
348 Municipality::new_default_se(2021, "Vansbro kommun", DalarnasLän),
349 Municipality::new_default_se(1470, "Vara kommun", VästraGötalandsLän),
350 Municipality::new_default_se(1383, "Varbergs kommun", HallandsLän),
351 Municipality::new_default_se(187, "Vaxholms kommun", StockholmsLän),
352 Municipality::new_default_se(1233, "Vellinge kommun", SkåneLän),
353 Municipality::new_default_se(685, "Vetlanda kommun", JönköpingsLän),
354 Municipality::new_reduced_se(2462, "Vilhelmina kommun", VästerbottensLän),
355 Municipality::new_default_se(884, "Vimmerby kommun", KalmarLän),
356 Municipality::new_reduced_se(2404, "Vindelns kommun", VästerbottensLän),
357 Municipality::new_default_se(428, "Vingåkers kommun", SödermanlandsLän),
358 Municipality::new_default_se(1442, "Vårgårda kommun", VästraGötalandsLän),
359 Municipality::new_default_se(1487, "Vänersborgs kommun", VästraGötalandsLän),
360 Municipality::new_reduced_se(2460, "Vännäs kommun", VästerbottensLän),
361 Municipality::new_default_se(120, "Värmdö kommun", StockholmsLän),
362 Municipality::new_default_se(683, "Värnamo kommun", JönköpingsLän),
363 Municipality::new_default_se(883, "Västerviks kommun", KalmarLän),
364 Municipality::new_default_se(1980, "Västerås kommun", VästmanlandsLän),
365 Municipality::new_default_se(780, "Växjö kommun", KronobergsLän),
366 Municipality::new_default_se(512, "Ydre kommun", ÖstergötlandsLän),
367 Municipality::new_default_se(1286, "Ystads kommun", SkåneLän),
368 Municipality::new_default_se(1492, "Åmåls kommun", VästraGötalandsLän),
369 Municipality::new_reduced_se(2260, "Ånge kommun", VästernorrlandsLän),
370 Municipality::new_reduced_se(2321, "Åre kommun", JämtlandsLän),
371 Municipality::new_default_se(1765, "Årjängs kommun", VärmlandsLän),
372 Municipality::new_reduced_se(2463, "Åsele kommun", VästerbottensLän),
373 Municipality::new_default_se(1277, "Åstorps kommun", SkåneLän),
374 Municipality::new_default_se(561, "Åtvidabergs kommun", ÖstergötlandsLän),
375 Municipality::new_default_se(765, "Älmhults kommun", KronobergsLän),
376 Municipality::new_reduced_se(2039, "Älvdalens kommun", DalarnasLän),
377 Municipality::new_default_se(319, "Älvkarleby kommun", UppsalaLän),
378 Municipality::new_reduced_se(2560, "Älvsbyns kommun", NorrbottensLän),
379 Municipality::new_default_se(1292, "Ängelholms kommun", SkåneLän),
380 Municipality::new_default_se(1407, "Öckerö kommun", VästraGötalandsLän),
381 Municipality::new_default_se(509, "Ödeshögs kommun", ÖstergötlandsLän),
382 Municipality::new_default_se(1880, "Örebro kommun", ÖrebroLän),
383 Municipality::new_default_se(1257, "Örkelljunga kommun", SkåneLän),
384 Municipality::new_reduced_se(2284, "Örnsköldsviks kommun", VästernorrlandsLän),
385 Municipality::new_reduced_se(2380, "Östersunds kommun", JämtlandsLän),
386 Municipality::new_default_se(117, "Österåkers kommun", StockholmsLän),
387 Municipality::new_default_se(382, "Östhammars kommun", UppsalaLän),
388 Municipality::new_default_se(1256, "Östra Göinge kommun", SkåneLän),
389 Municipality::new_reduced_se(2513, "Överkalix kommun", NorrbottensLän),
390 Municipality::new_reduced_se(2518, "Övertorneå kommun", NorrbottensLän),
391];
392
393#[cfg(test)]
394mod tests {
395 use super::*;
396 use crate::Money;
397 use chrono::NaiveDate;
398
399 #[test]
400 fn debug_stockholm_taxes_structure() {
401 use crate::constants::DEFAULT_SE_TAXES;
402 let stockholm = Municipality::get_by_name("Stockholms kommun").unwrap();
403
404 eprintln!("Stockholm: {:?}", stockholm.name);
405 eprintln!("Stockholm taxes pointer: {:p}", &stockholm.taxes);
406 eprintln!("DEFAULT_SE_TAXES pointer: {:p}", &DEFAULT_SE_TAXES);
407
408 let date = NaiveDate::from_ymd_opt(2025, 1, 15).unwrap();
409 eprintln!("Testing with date: {:?}", date);
410
411 let taxes = stockholm.taxes();
412 eprintln!("Taxes object: {:?}", taxes);
413
414 let tax_list = taxes.for_date(date);
415 eprintln!("Tax list length: {}", tax_list.len());
416 eprintln!("Tax list: {:?}", tax_list);
417
418 let total = taxes.kwh_total(date);
419 eprintln!("Tax total: {:?}", total);
420 }
421
422 #[test]
423 fn stockholm_has_taxes() {
424 let stockholm = Municipality::get_by_name("Stockholms kommun").unwrap();
425 let taxes = stockholm.taxes();
426
427 let date = NaiveDate::from_ymd_opt(2025, 1, 15).unwrap();
429
430 let tax_list = taxes.for_date(date);
431
432 assert!(
433 !tax_list.is_empty(),
434 "Stockholm should have taxes for date {:?}",
435 date
436 );
437 assert!(
438 taxes.kwh_total(date) > Money::new(0, 0),
439 "Stockholm should have non-zero tax amount"
440 );
441 }
442
443 #[test]
444 fn stockholm_has_tax_reductions() {
445 let stockholm = Municipality::get_by_name("Stockholms kommun").unwrap();
446 let tax_reductions = stockholm.tax_reductions();
447 let date = NaiveDate::from_ymd_opt(2025, 6, 1).unwrap();
448
449 assert!(
450 !tax_reductions.for_date(date).is_empty(),
451 "Stockholm should have tax reductions"
452 );
453 assert!(
454 tax_reductions.kwh_total(date) > Money::new(0, 0),
455 "Stockholm should have non-zero tax reduction amount"
456 );
457 }
458
459 #[test]
460 fn goteborg_has_taxes() {
461 let goteborg = Municipality::get_by_name("Göteborgs kommun").unwrap();
462 let taxes = goteborg.taxes();
463 let date = NaiveDate::from_ymd_opt(2025, 6, 1).unwrap();
464
465 assert!(
466 !taxes.for_date(date).is_empty(),
467 "Göteborg should have taxes"
468 );
469 assert!(
470 taxes.kwh_total(date) > Money::new(0, 0),
471 "Göteborg should have non-zero tax amount"
472 );
473 }
474
475 #[test]
476 fn goteborg_has_tax_reductions() {
477 let goteborg = Municipality::get_by_name("Göteborgs kommun").unwrap();
478 let tax_reductions = goteborg.tax_reductions();
479 let date = NaiveDate::from_ymd_opt(2025, 6, 1).unwrap();
480
481 assert!(
482 !tax_reductions.for_date(date).is_empty(),
483 "Göteborg should have tax reductions"
484 );
485 assert!(
486 tax_reductions.kwh_total(date) > Money::new(0, 0),
487 "Göteborg should have non-zero tax reduction amount"
488 );
489 }
490
491 #[test]
492 fn malmo_has_taxes() {
493 let malmo = Municipality::get_by_name("Malmö kommun").unwrap();
494 let taxes = malmo.taxes();
495 let date = NaiveDate::from_ymd_opt(2025, 6, 1).unwrap();
496
497 assert!(!taxes.for_date(date).is_empty(), "Malmö should have taxes");
498 assert!(
499 taxes.kwh_total(date) > Money::new(0, 0),
500 "Malmö should have non-zero tax amount"
501 );
502 }
503
504 #[test]
505 fn malmo_has_tax_reductions() {
506 let malmo = Municipality::get_by_name("Malmö kommun").unwrap();
507 let tax_reductions = malmo.tax_reductions();
508 let date = NaiveDate::from_ymd_opt(2025, 6, 1).unwrap();
509
510 assert!(
511 !tax_reductions.for_date(date).is_empty(),
512 "Malmö should have tax reductions"
513 );
514 assert!(
515 tax_reductions.kwh_total(date) > Money::new(0, 0),
516 "Malmö should have non-zero tax reduction amount"
517 );
518 }
519
520 #[test]
521 fn kiruna_has_reduced_taxes() {
522 let kiruna = Municipality::get_by_name("Kiruna kommun").unwrap();
524 let taxes = kiruna.taxes();
525 let date = NaiveDate::from_ymd_opt(2025, 6, 1).unwrap();
526
527 assert!(!taxes.for_date(date).is_empty(), "Kiruna should have taxes");
528 assert!(
529 taxes.kwh_total(date) > Money::new(0, 0),
530 "Kiruna should have non-zero tax amount"
531 );
532 }
533
534 #[test]
535 fn kiruna_has_tax_reductions() {
536 let kiruna = Municipality::get_by_name("Kiruna kommun").unwrap();
537 let tax_reductions = kiruna.tax_reductions();
538 let date = NaiveDate::from_ymd_opt(2025, 6, 1).unwrap();
539
540 assert!(
541 !tax_reductions.for_date(date).is_empty(),
542 "Kiruna should have tax reductions"
543 );
544 assert!(
545 tax_reductions.kwh_total(date) > Money::new(0, 0),
546 "Kiruna should have non-zero tax reduction amount"
547 );
548 }
549
550 #[test]
551 fn gallivare_has_reduced_taxes() {
552 let gallivare = Municipality::get_by_name("Gällivare kommun").unwrap();
554 let taxes = gallivare.taxes();
555 let date = NaiveDate::from_ymd_opt(2025, 6, 1).unwrap();
556
557 assert!(
558 !taxes.for_date(date).is_empty(),
559 "Gällivare should have taxes"
560 );
561 assert!(
562 taxes.kwh_total(date) > Money::new(0, 0),
563 "Gällivare should have non-zero tax amount"
564 );
565 }
566
567 #[test]
568 fn gallivare_has_tax_reductions() {
569 let gallivare = Municipality::get_by_name("Gällivare kommun").unwrap();
570 let tax_reductions = gallivare.tax_reductions();
571 let date = NaiveDate::from_ymd_opt(2025, 6, 1).unwrap();
572
573 assert!(
574 !tax_reductions.for_date(date).is_empty(),
575 "Gällivare should have tax reductions"
576 );
577 assert!(
578 tax_reductions.kwh_total(date) > Money::new(0, 0),
579 "Gällivare should have non-zero tax reduction amount"
580 );
581 }
582
583 #[test]
584 fn reduced_tax_municipalities_have_lower_taxes_than_default() {
585 let kiruna = Municipality::get_by_name("Kiruna kommun").unwrap();
587 let stockholm = Municipality::get_by_name("Stockholms kommun").unwrap();
588 let date = NaiveDate::from_ymd_opt(2025, 6, 1).unwrap();
589
590 let kiruna_taxes = kiruna.taxes().kwh_total(date);
591 let stockholm_taxes = stockholm.taxes().kwh_total(date);
592
593 assert!(
594 kiruna_taxes < stockholm_taxes,
595 "Kiruna (reduced tax) should have lower taxes than Stockholm (default tax)"
596 );
597 }
598
599 #[test]
600 fn all_municipalities_have_taxes_and_reductions() {
601 let date = NaiveDate::from_ymd_opt(2025, 6, 1).unwrap();
602
603 for municipality in MUNICIPALITIES {
604 let taxes = municipality.taxes();
605 let tax_reductions = municipality.tax_reductions();
606
607 assert!(
608 !taxes.for_date(date).is_empty(),
609 "{} should have taxes",
610 municipality.name
611 );
612 assert!(
613 taxes.kwh_total(date) > Money::new(0, 0),
614 "{} should have non-zero tax amount",
615 municipality.name
616 );
617
618 assert!(
619 !tax_reductions.for_date(date).is_empty(),
620 "{} should have tax reductions",
621 municipality.name
622 );
623 assert!(
624 tax_reductions.kwh_total(date) > Money::new(0, 0),
625 "{} should have non-zero tax reduction amount",
626 municipality.name
627 );
628 }
629 }
630
631 #[test]
632 fn can_lookup_municipality_by_code() {
633 let stockholm = Municipality::get_by_code(180).unwrap();
635 assert_eq!(stockholm.name, "Stockholms kommun");
636
637 let goteborg = Municipality::get_by_code(1480).unwrap();
638 assert_eq!(goteborg.name, "Göteborgs kommun");
639
640 let malmo = Municipality::get_by_code(1280).unwrap();
641 assert_eq!(malmo.name, "Malmö kommun");
642 }
643
644 #[test]
645 fn can_lookup_municipality_by_name() {
646 let stockholm = Municipality::get_by_name("Stockholms kommun").unwrap();
647 assert_eq!(stockholm.code, 180);
648
649 let goteborg = Municipality::get_by_name("Göteborgs kommun").unwrap();
650 assert_eq!(goteborg.code, 1480);
651
652 let malmo = Municipality::get_by_name("Malmö kommun").unwrap();
653 assert_eq!(malmo.code, 1280);
654 }
655
656 #[test]
657 fn with_current_taxes_filters_to_current_date() {
658 let stockholm = Municipality::get_by_name("Stockholms kommun")
659 .unwrap()
660 .clone();
661 let stockholm_current = stockholm.with_current_taxes();
662
663 let _ = stockholm_current.taxes();
666 }
667
668 #[test]
669 fn with_current_tax_reductions_filters_to_current_date() {
670 let stockholm = Municipality::get_by_name("Stockholms kommun")
671 .unwrap()
672 .clone();
673 let stockholm_current = stockholm.with_current_tax_reductions();
674
675 let _ = stockholm_current.tax_reductions();
678 }
679}