diff --git a/vasl_templates/webapp/data/ordnance/finnish.json b/vasl_templates/webapp/data/ordnance/finnish.json
new file mode 100644
index 0000000..b4ff087
--- /dev/null
+++ b/vasl_templates/webapp/data/ordnance/finnish.json
@@ -0,0 +1,226 @@
+[
+
+{ "name": "47 Krh/41",
+ "capabilities_other": [ "2PP" ],
+ "note_number": "1",
+ "notes": [ "A" ]
+},
+{ "name": "50 Krh/39(r)",
+ "capabilities": [ "4PP" ],
+ "capabilities2": { "B": [ [12,"3+"], "\u2020" ] },
+ "note_number": "2\u2020",
+ "notes": [ "A", "B" ]
+},
+{ "name": "81 Krh/32",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "s": [ [8,"N1"], "\u2020" ], "IR": [ [null,"3+"], "\u2020" ] },
+ "capabilities_other": [ "5PP dm" ],
+ "note_number": "3\u2020",
+ "notes": [ "A" ]
+},
+{ "name": "81 Savunheitin M/42",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities_other": [ "s\u2020", "4PP dm" ],
+ "note_number": "4\u2020",
+ "notes": [ "A" ]
+},
+{ "name": "120 Krh/40",
+ "capabilities": [ "NT", "QSU" ],
+ "note_number": "5\u2020"
+},
+{ "name": "Boys ATR(b)",
+ "capabilities_other": [ "1PP", "\"British\"\u2020" ],
+ "note_number": "6\u2020"
+},
+{ "name": "Lahti ATR",
+ "capabilities_other": [ "4PP", "Light AA fire in 44+\u2020", "B30.35\u2020" ],
+ "note_number": "7\u2020",
+ "notes": [ "A" ]
+},
+{ "name": "20 PstK/40",
+ "capabilities": [ "NT", "QSU", "Towing NA\u20201" ],
+ "capabilities_other": [ "R2", "IFE=B10" ],
+ "note_number": "8\u2020",
+ "notes": [ "C\u20201" ]
+},
+{ "name": "25 PstK/37(f)",
+ "capabilities": [ "NT", "QSU" ],
+ "note_number": "9\u2020",
+ "notes": [ "B", "D" ]
+},
+{ "name": "37 PstK/36(s)",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "HE": [ [null,"1+"], "\u2020" ] },
+ "note_number": "10\u2020",
+ "notes": [ "A", "B" ]
+},
+{ "name": "37 PstK/37(g)",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "H": [ ["6[9]","3+"], "\u2020" ] },
+ "note_number": "11\u2020",
+ "notes": [ "B", "D" ]
+},
+{ "name": "45 PstK/32(r)",
+ "capabilities": [ "NT", "QSU" ],
+ "note_number": "12\u2020",
+ "notes": [ "B" ]
+},
+{ "name": "50 PstK/38(g)",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "A": 4 },
+ "note_number": "13",
+ "notes": [ "B" ]
+},
+{ "name": "75 PstK/97-38(g)",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "H": 8 },
+ "capabilities_other": [ "H=B12" ],
+ "note_number": "14\u2020",
+ "notes": [ "B" ]
+},
+{ "name": "75 PstK/40(g)",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "A": 3, "H": 4, "s": 7 },
+ "note_number": "15",
+ "notes": [ "B" ]
+},
+{ "name": "76 RK/27(r)",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "H": [ ["6","J4+"], "\u2020" ], "s": 6 },
+ "note_number": "16\u2020",
+ "notes": [ "A", "B" ]
+},
+{ "name": "75 K/02",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "s": 6 },
+ "note_number": "17\u2020"
+},
+{ "name": "76 LK/13",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "s": 6 },
+ "note_number": "18"
+},
+{ "name": "76 K/02(r)",
+ "capabilities": [ "NT", "QSU", "h-d" ],
+ "capabilities2": { "s": 6 },
+ "note_number": "19\u2020",
+ "notes": [ "B" ]
+},
+{ "name": "76 K/36(r)",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "s": 6 },
+ "note_number": "20\u2020",
+ "notes": [ "B", "E\u20201" ]
+},
+{ "name": "87 K/95",
+ "capabilities": [ "NT", "QSU", "no IF", "h-d" ],
+ "capabilities_other": [ "Acq. NA\u2020" ],
+ "note_number": "21",
+ "notes": [ "F\u2020" ]
+},
+{ "name": "90 K/77",
+ "capabilities": [ "NT", "QSU", "no IF", "Acq. NA\u20201", "h-d" ],
+ "note_number": "22\u2020",
+ "notes": [ "F\u20201" ]
+},
+{ "name": "105 H/33(g)",
+ "capabilities": [ "NT", "h-d" ],
+ "capabilities2": { "H": [ [6,"A4+"], "\u2020" ], "s": 8 },
+ "note_number": "23\u2020",
+ "notes": [ "B" ]
+},
+{ "name": "105 H/37",
+ "capabilities": [ "NT" ],
+ "capabilities2": { "s": 6 },
+ "note_number": "24\u2020"
+},
+{ "name": "105 H/41(t)",
+ "capabilities": [ "NT" ],
+ "capabilities2": { "H": [ [6,"A4+"], "\u2020" ], "s": 8 },
+ "note_number": "25\u2020",
+ "notes": [ "B" ]
+},
+{ "name": "107 K 10/13",
+ "capabilities": [ "NT" ],
+ "capabilities2": { "s": 5 },
+ "note_number": "26\u2020"
+},
+{ "name": "107 K/77(r)",
+ "capabilities": [ "NT", "no IF", "Acq. NA\u20201", "h-d" ],
+ "note_number": "27\u2020",
+ "notes": [ "B", "F\u20201" ]
+},
+{ "name": "114 H/18(b)",
+ "capabilities": [ "NT" ],
+ "capabilities2": { "H": [ [4,"4+"] ], "s": 8, "WP": [ [6,"4+"] ] },
+ "note_number": "28\u2020"
+},
+{ "name": "122 H/10(r)",
+ "capabilities": [ "NT", "h-d" ],
+ "capabilities2": { "s": 6, "WP": [ [6,"4+"] ] },
+ "note_number": "29\u2020",
+ "notes": [ "B" ]
+},
+{ "name": "150 H/40(g)",
+ "capabilities": [ "NT", "NM" ],
+ "capabilities2": { "H": 6, "s": 8 },
+ "note_number": "30",
+ "notes": [ "B" ]
+},
+{ "name": "155 H/17(f)",
+ "capabilities": [ "NT" ],
+ "capabilities2": { "s": 6 },
+ "note_number": "31",
+ "notes": [ "B" ]
+},
+{ "name": "7.62 ItKK/31-40",
+ "capabilities": [ "T", "QSU", "Towing NA\u20201" ],
+ "capabilities_other": [ "2 TK DR\u2020" ],
+ "note_number": "32\u2020",
+ "notes": [ "C\u20201" ]
+},
+{ "name": "20 ItK/30 BSW(g)",
+ "capabilities": [ "T" ],
+ "capabilities2": { "LF": [ "NT", "20\u2020", "2 ROF", "B10" ] },
+ "note_number": "33",
+ "notes": [ "B", "G\u2020" ]
+},
+{ "name": "20 ItK/38 BSW(g)",
+ "capabilities": [ "T" ],
+ "capabilities2": { "LF": [ "NT", "20\u20201", "2 ROF", "B11" ] },
+ "note_number": "34\u2020",
+ "notes": [ "B", "G\u20201" ]
+},
+{ "name": "20 ItK/35 Br",
+ "capabilities": [ "T" ],
+ "capabilities2": { "LF": [ "NT", "20\u20201", "2 ROF" ] },
+ "capabilities_other": [ "Road MP = 1\u2020" ],
+ "note_number": "35\u2020",
+ "notes": [ "A", "D", "G\u20201" ]
+},
+{ "name": "20 ItK/40 VKT",
+ "capabilities": [ "T" ],
+ "capabilities2": { "LF": [ "NT", "20\u20201", "2 ROF", "8 IFE", "B11" ] },
+ "capabilities_other": [ "2 TK DR\u2020", "Unhooking risk\u2020" ],
+ "note_number": "36\u2020",
+ "notes": [ "D", "G\u20201" ]
+},
+{ "name": "40 ItK/35-39 B(s)",
+ "capabilities": [ "T" ],
+ "capabilities2": { "LF": [ "40\u20201", "2 ROF" ] },
+ "note_number": "37\u2020",
+ "notes": [ "B", "G\u20201" ]
+},
+{ "name": "76 ItK/28 B(s)",
+ "capabilities": [ "T" ],
+ "capabilities2": { "LF": [ "NT", "76\u2020", "1 ROF" ] },
+ "note_number": "38",
+ "notes": [ "B", "G\u2020" ]
+},
+{ "name": "76 ItK/31(r)",
+ "capabilities": [ "T" ],
+ "note_number": "39",
+ "notes": [ "B", "E\u2020" ]
+}
+
+]
diff --git a/vasl_templates/webapp/data/vehicles/finnish.json b/vasl_templates/webapp/data/vehicles/finnish.json
new file mode 100644
index 0000000..3b5faa5
--- /dev/null
+++ b/vasl_templates/webapp/data/vehicles/finnish.json
@@ -0,0 +1,182 @@
+[
+
+{ "name": "T-37(r)",
+ "no_radio": "\u00ae",
+ "CS#": 2,
+ "note_number": "1\u2020",
+ "notes": [ "D", "M" ]
+},
+{ "name": "T-50(r)",
+ "CS#": 4,
+ "note_number": "2\u2020",
+ "notes": [ "D" ]
+},
+{ "name": "Vikkersi(b)",
+ "no_radio": "\u00ae",
+ "CS#": 3,
+ "note_number": "3\u2020",
+ "notes": [ "B\u20201", "D" ]
+},
+{ "name": "T-26E(b)",
+ "no_radio": "\u00ae",
+ "CS#": 3,
+ "note_number": "4",
+ "notes": [ "B\u2020", "D" ]
+},
+{ "name": "T-26A(r)",
+ "no_radio": "\u00ae",
+ "CS#": 3,
+ "note_number": "5\u2020",
+ "notes": [ "D", "M" ]
+},
+{ "name": "T-26B(r)",
+ "no_radio": "\u00ae",
+ "CS#": 3,
+ "note_number": "6",
+ "notes": [ "C\u2020", "D", "M" ]
+},
+{ "name": "T-26C(r)",
+ "no_radio": "\u00ae",
+ "CS#": 3,
+ "note_number": "7",
+ "notes": [ "C\u2020", "D", "M" ]
+},
+{ "name": "OT-133(r)",
+ "no_radio": "\u00ae",
+ "CS#": 3,
+ "note_number": "8",
+ "notes": [ "D", "M" ]
+},
+{ "name": "BT-5(r)",
+ "no_radio": "\u00ae",
+ "CS#": 3,
+ "note_number": "9",
+ "notes": [ "D", "M" ]
+},
+{ "name": "BT-7(r)",
+ "no_radio": "\u00ae",
+ "CS#": 3,
+ "note_number": "9",
+ "notes": [ "D", "M" ]
+},
+{ "name": "Postijuna(r)",
+ "no_radio": "\u00ae",
+ "CS#": 5,
+ "capabilities2": { "s": 8 },
+ "note_number": "10",
+ "notes": [ "D", "F\u2020", "M" ]
+},
+{ "name": "Postijuna(L)(r)",
+ "no_radio": "\u00ae",
+ "CS#": 6,
+ "capabilities2": { "s": 8 },
+ "note_number": "11",
+ "notes": [ "D", "F\u2020", "M" ]
+},
+{ "name": "Sotka(r)",
+ "CS#": 5,
+ "capabilities2": { "A": [ [3,"2+"] ] },
+ "note_number": "12\u2020",
+ "notes": [ "D", "E", "M" ]
+},
+{ "name": "Sotka(L)(r)",
+ "CS#": 5,
+ "capabilities2": { "A": 3 },
+ "note_number": "13\u2020",
+ "notes": [ "D", "E" ]
+},
+{ "name": "Pitk\u00e4putkinen Sotka(r)",
+ "CS#": 6,
+ "capabilities2": { "A": 3, "sD": "6\u2020" },
+ "note_number": "14\u2020",
+ "notes": [ "D" ]
+},
+{ "name": "KV-1E(r)",
+ "CS#": 6,
+ "note_number": "15\u2020",
+ "notes": [ "D", "E", "M" ]
+},
+{ "name": "KV-1 M42(r)",
+ "CS#": 6,
+ "capabilities2": { "A": 3 },
+ "note_number": "15\u2020",
+ "notes": [ "D", "E", "M" ]
+},
+{ "name": "BT-42(r)",
+ "no_radio": "\u00ae",
+ "CS#": "3:brewup",
+ "no_if": true,
+ "capabilities": [ "H\u2020" ],
+ "capabilities2": { "s": 6 },
+ "note_number": "16\u2020",
+ "notes": [ "D", "M" ]
+},
+{ "name": "Sturmi(g)",
+ "CS#": 4,
+ "capabilities2": { "A": 3, "H": 4, "s": 8 },
+ "note_number": "17\u2020",
+ "notes": [ "D" ]
+},
+{ "name": "Landsverk Anti II(s)",
+ "no_radio": "\u00ae",
+ "CS#": 6,
+ "note_number": "18",
+ "notes": [ "A\u2020", "D" ]
+},
+{ "name": "L182(s)",
+ "CS#": 5,
+ "note_number": "19\u2020"
+},
+{ "name": "L182(L)(s)",
+ "CS#": 5,
+ "note_number": "19\u2020"
+},
+{ "name": "BA-20(r)",
+ "no_radio": "\u00ae",
+ "CS#": 3,
+ "note_number": "20\u2020"
+},
+{ "name": "BA-6(r)",
+ "no_radio": "\u00ae",
+ "CS#": 4,
+ "note_number": "21",
+ "notes": [ "D" ]
+},
+{ "name": "GAZ-4M-AA(r)",
+ "CS#": 4,
+ "note_number": "22\u2020",
+ "notes": [ "A\u20201" ]
+},
+{ "name": "T-20(r)",
+ "CS#": "2\u2020",
+ "note_number": "23\u2020",
+ "notes": [ "D" ]
+},
+{ "name": "RSO(g)",
+ "cs#": 5,
+ "note_number": "24",
+ "notes": [ "D" ]
+},
+{ "name": "STZ-3(r)",
+ "cs#": 4,
+ "note_number": "25",
+ "notes": [ "D" ]
+},
+{ "name": "Tempo G1200",
+ "cs#": 2,
+ "note_number": "26\u2020"
+},
+{ "name": "Light Truck",
+ "cs#": 6,
+ "note_number": "27\u2020"
+},
+{ "name": "Medium Truck",
+ "cs#": 7,
+ "note_number": "27\u2020"
+},
+{ "name": "Heavy Truck",
+ "cs#": 7,
+ "note_number": "27"
+}
+
+]
diff --git a/vasl_templates/webapp/static/snippets.js b/vasl_templates/webapp/static/snippets.js
index 171f7c0..5e74d3a 100644
--- a/vasl_templates/webapp/static/snippets.js
+++ b/vasl_templates/webapp/static/snippets.js
@@ -304,7 +304,7 @@ function make_capabilities( entry, nat, scenario_theater, scenario_year, scenari
capabilities[ capabilities.length-1 ] += " [" + caps.join(", ") + "]" ;
continue ;
}
- if ( $.inArray( key, ["HE","AP","A","D","C","H","s","sM","sD","sN","WP","IR","Towed"] ) === -1 ) {
+ if ( $.inArray( key, ["HE","AP","A","D","C","H","B","s","sM","sD","sN","WP","IR","Towed"] ) === -1 ) {
unexpected_caps.push( key ) ;
continue ;
}
@@ -423,7 +423,7 @@ function _select_capability_by_date( capabilities, nat, scenario_theater, scenar
function _check_capability_timestamp( capabilities, timestamp, nat, scenario_theater, scenario_year, scenario_month )
{
- var MONTH_NAMES = { F:2, J:6, A:8, S:9 } ;
+ var MONTH_NAMES = { F:2, J:6, A:8, S:9, N:11 } ;
// check for a theater flag
if ( timestamp.substring( timestamp.length-1 ) === "E" ) {
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1940.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1940.txt
new file mode 100644
index 0000000..990c000
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1940.txt
@@ -0,0 +1,43 @@
+=== ordnance/finnish/1940 ===
+
+Name Capabilities (effective) # Notes
+------------------- ------------------------------------------------------------- ------------------------------------------------------------- --- ------------------
+47 Krh/41 2PP 2PP 1 A
+50 Krh/39(r) 4PP B12[3+]† 4PP 2† A B
+81 Krh/32 NT QSU IR[3+]† s8[N1]† 5PP dm NT QSU 5PP dm 3† A
+81 Savunheitin M/42 NT QSU s† 4PP dm NT QSU s† 4PP dm 4† A
+120 Krh/40 NT QSU NT QSU 5† n/a
+Boys ATR(b) 1PP "British"† 1PP "British"† 6† n/a
+Lahti ATR 4PP Light AA fire in 44+† B30.35† 4PP Light AA fire in 44+† B30.35† 7† A
+20 PstK/40 NT QSU Towing NA†[1] R2 IFE=B10 NT QSU Towing NA†[1] R2 IFE=B10 8† C†1
+25 PstK/37(f) NT QSU NT QSU 9† B D
+37 PstK/36(s) NT QSU HE[1+]† NT QSU 10† A B
+37 PstK/37(g) NT QSU H6[9][3+]† NT QSU 11† B D
+45 PstK/32(r) NT QSU NT QSU 12† B
+50 PstK/38(g) NT QSU A4 NT QSU A4 13 B
+75 PstK/97-38(g) NT QSU H8 H=B12 NT QSU H8 H=B12 14† B
+75 PstK/40(g) NT QSU A3 H4 s7 NT QSU A3 H4 s7 15 B
+76 RK/27(r) NT QSU H6[J4+]† s6 NT QSU s6 16† A B
+75 K/02 NT QSU s6 NT QSU s6 17† n/a
+76 LK/13 NT QSU s6 NT QSU s6 18 n/a
+76 K/02(r) NT QSU h-d s6 NT QSU h-d s6 19† B
+76 K/36(r) NT QSU s6 NT QSU s6 20† B E†1
+87 K/95 NT QSU no IF h-d Acq. NA† NT QSU no IF h-d Acq. NA† 21 F†
+90 K/77 NT QSU no IF Acq. NA†[1] h-d NT QSU no IF Acq. NA†[1] h-d 22† F†1
+105 H/33(g) NT h-d H6[A4+]† s8 NT h-d s8 23† B
+105 H/37 NT s6 NT s6 24† n/a
+105 H/41(t) NT H6[A4+]† s8 NT s8 25† B
+107 K 10/13 NT s5 NT s5 26† n/a
+107 K/77(r) NT no IF Acq. NA†[1] h-d NT no IF Acq. NA†[1] h-d 27† B F†1
+114 H/18(b) NT H4[4+] WP6[4+] s8 NT s8 28† n/a
+122 H/10(r) NT h-d WP6[4+] s6 NT h-d s6 29† B
+150 H/40(g) NT NM H6 s8 NT NM H6 s8 30 B
+155 H/17(f) NT s6 NT s6 31 B
+7.62 ItKK/31-40 T QSU Towing NA†[1] 2 TK DR† T QSU Towing NA†[1] 2 TK DR† 32† C†1
+20 ItK/30 BSW(g) T LF [NT, 20†, 2 ROF, B10] T LF [NT, 20†, 2 ROF, B10] 33 B G†
+20 ItK/38 BSW(g) T LF [NT, 20†[1], 2 ROF, B11] T LF [NT, 20†[1], 2 ROF, B11] 34† B G†1
+20 ItK/35 Br T LF [NT, 20†[1], 2 ROF] Road MP = 1† T LF [NT, 20†[1], 2 ROF] Road MP = 1† 35† A D G†1
+20 ItK/40 VKT T LF [NT, 20†[1], 2 ROF, 8 IFE, B11] 2 TK DR† Unhooking risk† T LF [NT, 20†[1], 2 ROF, 8 IFE, B11] 2 TK DR† Unhooking risk† 36† D G†1
+40 ItK/35-39 B(s) T LF [40†[1], 2 ROF] T LF [40†[1], 2 ROF] 37† B G†1
+76 ItK/28 B(s) T LF [NT, 76†, 1 ROF] T LF [NT, 76†, 1 ROF] 38 B G†
+76 ItK/31(r) T T 39 B E†
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1941.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1941.txt
new file mode 100644
index 0000000..0e314cb
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1941.txt
@@ -0,0 +1,43 @@
+=== ordnance/finnish/1941 ===
+
+Name Capabilities (effective) # Notes
+------------------- ------------------------------------------------------------- ------------------------------------------------------------- --- ------------------
+47 Krh/41 2PP 2PP 1 A
+50 Krh/39(r) 4PP B12[3+]† 4PP 2† A B
+81 Krh/32 NT QSU IR[3+]† s8[N1]† 5PP dm NT QSU 5PP dm 3† A
+81 Savunheitin M/42 NT QSU s† 4PP dm NT QSU s† 4PP dm 4† A
+120 Krh/40 NT QSU NT QSU 5† n/a
+Boys ATR(b) 1PP "British"† 1PP "British"† 6† n/a
+Lahti ATR 4PP Light AA fire in 44+† B30.35† 4PP Light AA fire in 44+† B30.35† 7† A
+20 PstK/40 NT QSU Towing NA†[1] R2 IFE=B10 NT QSU Towing NA†[1] R2 IFE=B10 8† C†1
+25 PstK/37(f) NT QSU NT QSU 9† B D
+37 PstK/36(s) NT QSU HE[1+]† NT QSU HE† 10† A B
+37 PstK/37(g) NT QSU H6[9][3+]† NT QSU 11† B D
+45 PstK/32(r) NT QSU NT QSU 12† B
+50 PstK/38(g) NT QSU A4 NT QSU A4 13 B
+75 PstK/97-38(g) NT QSU H8 H=B12 NT QSU H8 H=B12 14† B
+75 PstK/40(g) NT QSU A3 H4 s7 NT QSU A3 H4 s7 15 B
+76 RK/27(r) NT QSU H6[J4+]† s6 NT QSU s6 16† A B
+75 K/02 NT QSU s6 NT QSU s6 17† n/a
+76 LK/13 NT QSU s6 NT QSU s6 18 n/a
+76 K/02(r) NT QSU h-d s6 NT QSU h-d s6 19† B
+76 K/36(r) NT QSU s6 NT QSU s6 20† B E†1
+87 K/95 NT QSU no IF h-d Acq. NA† NT QSU no IF h-d Acq. NA† 21 F†
+90 K/77 NT QSU no IF Acq. NA†[1] h-d NT QSU no IF Acq. NA†[1] h-d 22† F†1
+105 H/33(g) NT h-d H6[A4+]† s8 NT h-d s8 23† B
+105 H/37 NT s6 NT s6 24† n/a
+105 H/41(t) NT H6[A4+]† s8 NT s8 25† B
+107 K 10/13 NT s5 NT s5 26† n/a
+107 K/77(r) NT no IF Acq. NA†[1] h-d NT no IF Acq. NA†[1] h-d 27† B F†1
+114 H/18(b) NT H4[4+] WP6[4+] s8 NT s8 28† n/a
+122 H/10(r) NT h-d WP6[4+] s6 NT h-d s6 29† B
+150 H/40(g) NT NM H6 s8 NT NM H6 s8 30 B
+155 H/17(f) NT s6 NT s6 31 B
+7.62 ItKK/31-40 T QSU Towing NA†[1] 2 TK DR† T QSU Towing NA†[1] 2 TK DR† 32† C†1
+20 ItK/30 BSW(g) T LF [NT, 20†, 2 ROF, B10] T LF [NT, 20†, 2 ROF, B10] 33 B G†
+20 ItK/38 BSW(g) T LF [NT, 20†[1], 2 ROF, B11] T LF [NT, 20†[1], 2 ROF, B11] 34† B G†1
+20 ItK/35 Br T LF [NT, 20†[1], 2 ROF] Road MP = 1† T LF [NT, 20†[1], 2 ROF] Road MP = 1† 35† A D G†1
+20 ItK/40 VKT T LF [NT, 20†[1], 2 ROF, 8 IFE, B11] 2 TK DR† Unhooking risk† T LF [NT, 20†[1], 2 ROF, 8 IFE, B11] 2 TK DR† Unhooking risk† 36† D G†1
+40 ItK/35-39 B(s) T LF [40†[1], 2 ROF] T LF [40†[1], 2 ROF] 37† B G†1
+76 ItK/28 B(s) T LF [NT, 76†, 1 ROF] T LF [NT, 76†, 1 ROF] 38 B G†
+76 ItK/31(r) T T 39 B E†
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1942.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1942.txt
new file mode 100644
index 0000000..e59020b
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1942.txt
@@ -0,0 +1,43 @@
+=== ordnance/finnish/1942 ===
+
+Name Capabilities (effective) # Notes
+------------------- ------------------------------------------------------------- ------------------------------------------------------------- --- ------------------
+47 Krh/41 2PP 2PP 1 A
+50 Krh/39(r) 4PP B12[3+]† 4PP 2† A B
+81 Krh/32 NT QSU IR[3+]† s8[N1]† 5PP dm NT QSU s8† 5PP dm 3† A
+81 Savunheitin M/42 NT QSU s† 4PP dm NT QSU s† 4PP dm 4† A
+120 Krh/40 NT QSU NT QSU 5† n/a
+Boys ATR(b) 1PP "British"† 1PP "British"† 6† n/a
+Lahti ATR 4PP Light AA fire in 44+† B30.35† 4PP Light AA fire in 44+† B30.35† 7† A
+20 PstK/40 NT QSU Towing NA†[1] R2 IFE=B10 NT QSU Towing NA†[1] R2 IFE=B10 8† C†1
+25 PstK/37(f) NT QSU NT QSU 9† B D
+37 PstK/36(s) NT QSU HE[1+]† NT QSU HE† 10† A B
+37 PstK/37(g) NT QSU H6[9][3+]† NT QSU 11† B D
+45 PstK/32(r) NT QSU NT QSU 12† B
+50 PstK/38(g) NT QSU A4 NT QSU A4 13 B
+75 PstK/97-38(g) NT QSU H8 H=B12 NT QSU H8 H=B12 14† B
+75 PstK/40(g) NT QSU A3 H4 s7 NT QSU A3 H4 s7 15 B
+76 RK/27(r) NT QSU H6[J4+]† s6 NT QSU s6 16† A B
+75 K/02 NT QSU s6 NT QSU s6 17† n/a
+76 LK/13 NT QSU s6 NT QSU s6 18 n/a
+76 K/02(r) NT QSU h-d s6 NT QSU h-d s6 19† B
+76 K/36(r) NT QSU s6 NT QSU s6 20† B E†1
+87 K/95 NT QSU no IF h-d Acq. NA† NT QSU no IF h-d Acq. NA† 21 F†
+90 K/77 NT QSU no IF Acq. NA†[1] h-d NT QSU no IF Acq. NA†[1] h-d 22† F†1
+105 H/33(g) NT h-d H6[A4+]† s8 NT h-d s8 23† B
+105 H/37 NT s6 NT s6 24† n/a
+105 H/41(t) NT H6[A4+]† s8 NT s8 25† B
+107 K 10/13 NT s5 NT s5 26† n/a
+107 K/77(r) NT no IF Acq. NA†[1] h-d NT no IF Acq. NA†[1] h-d 27† B F†1
+114 H/18(b) NT H4[4+] WP6[4+] s8 NT s8 28† n/a
+122 H/10(r) NT h-d WP6[4+] s6 NT h-d s6 29† B
+150 H/40(g) NT NM H6 s8 NT NM H6 s8 30 B
+155 H/17(f) NT s6 NT s6 31 B
+7.62 ItKK/31-40 T QSU Towing NA†[1] 2 TK DR† T QSU Towing NA†[1] 2 TK DR† 32† C†1
+20 ItK/30 BSW(g) T LF [NT, 20†, 2 ROF, B10] T LF [NT, 20†, 2 ROF, B10] 33 B G†
+20 ItK/38 BSW(g) T LF [NT, 20†[1], 2 ROF, B11] T LF [NT, 20†[1], 2 ROF, B11] 34† B G†1
+20 ItK/35 Br T LF [NT, 20†[1], 2 ROF] Road MP = 1† T LF [NT, 20†[1], 2 ROF] Road MP = 1† 35† A D G†1
+20 ItK/40 VKT T LF [NT, 20†[1], 2 ROF, 8 IFE, B11] 2 TK DR† Unhooking risk† T LF [NT, 20†[1], 2 ROF, 8 IFE, B11] 2 TK DR† Unhooking risk† 36† D G†1
+40 ItK/35-39 B(s) T LF [40†[1], 2 ROF] T LF [40†[1], 2 ROF] 37† B G†1
+76 ItK/28 B(s) T LF [NT, 76†, 1 ROF] T LF [NT, 76†, 1 ROF] 38 B G†
+76 ItK/31(r) T T 39 B E†
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1943.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1943.txt
new file mode 100644
index 0000000..1943c80
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1943.txt
@@ -0,0 +1,43 @@
+=== ordnance/finnish/1943 ===
+
+Name Capabilities (effective) # Notes
+------------------- ------------------------------------------------------------- ------------------------------------------------------------- --- ------------------
+47 Krh/41 2PP 2PP 1 A
+50 Krh/39(r) 4PP B12[3+]† 4PP B12† 2† A B
+81 Krh/32 NT QSU IR[3+]† s8[N1]† 5PP dm NT QSU IR† s8† 5PP dm 3† A
+81 Savunheitin M/42 NT QSU s† 4PP dm NT QSU s† 4PP dm 4† A
+120 Krh/40 NT QSU NT QSU 5† n/a
+Boys ATR(b) 1PP "British"† 1PP "British"† 6† n/a
+Lahti ATR 4PP Light AA fire in 44+† B30.35† 4PP Light AA fire in 44+† B30.35† 7† A
+20 PstK/40 NT QSU Towing NA†[1] R2 IFE=B10 NT QSU Towing NA†[1] R2 IFE=B10 8† C†1
+25 PstK/37(f) NT QSU NT QSU 9† B D
+37 PstK/36(s) NT QSU HE[1+]† NT QSU HE† 10† A B
+37 PstK/37(g) NT QSU H6[9][3+]† NT QSU H6[9]† 11† B D
+45 PstK/32(r) NT QSU NT QSU 12† B
+50 PstK/38(g) NT QSU A4 NT QSU A4 13 B
+75 PstK/97-38(g) NT QSU H8 H=B12 NT QSU H8 H=B12 14† B
+75 PstK/40(g) NT QSU A3 H4 s7 NT QSU A3 H4 s7 15 B
+76 RK/27(r) NT QSU H6[J4+]† s6 NT QSU s6 16† A B
+75 K/02 NT QSU s6 NT QSU s6 17† n/a
+76 LK/13 NT QSU s6 NT QSU s6 18 n/a
+76 K/02(r) NT QSU h-d s6 NT QSU h-d s6 19† B
+76 K/36(r) NT QSU s6 NT QSU s6 20† B E†1
+87 K/95 NT QSU no IF h-d Acq. NA† NT QSU no IF h-d Acq. NA† 21 F†
+90 K/77 NT QSU no IF Acq. NA†[1] h-d NT QSU no IF Acq. NA†[1] h-d 22† F†1
+105 H/33(g) NT h-d H6[A4+]† s8 NT h-d s8 23† B
+105 H/37 NT s6 NT s6 24† n/a
+105 H/41(t) NT H6[A4+]† s8 NT s8 25† B
+107 K 10/13 NT s5 NT s5 26† n/a
+107 K/77(r) NT no IF Acq. NA†[1] h-d NT no IF Acq. NA†[1] h-d 27† B F†1
+114 H/18(b) NT H4[4+] WP6[4+] s8 NT s8 28† n/a
+122 H/10(r) NT h-d WP6[4+] s6 NT h-d s6 29† B
+150 H/40(g) NT NM H6 s8 NT NM H6 s8 30 B
+155 H/17(f) NT s6 NT s6 31 B
+7.62 ItKK/31-40 T QSU Towing NA†[1] 2 TK DR† T QSU Towing NA†[1] 2 TK DR† 32† C†1
+20 ItK/30 BSW(g) T LF [NT, 20†, 2 ROF, B10] T LF [NT, 20†, 2 ROF, B10] 33 B G†
+20 ItK/38 BSW(g) T LF [NT, 20†[1], 2 ROF, B11] T LF [NT, 20†[1], 2 ROF, B11] 34† B G†1
+20 ItK/35 Br T LF [NT, 20†[1], 2 ROF] Road MP = 1† T LF [NT, 20†[1], 2 ROF] Road MP = 1† 35† A D G†1
+20 ItK/40 VKT T LF [NT, 20†[1], 2 ROF, 8 IFE, B11] 2 TK DR† Unhooking risk† T LF [NT, 20†[1], 2 ROF, 8 IFE, B11] 2 TK DR† Unhooking risk† 36† D G†1
+40 ItK/35-39 B(s) T LF [40†[1], 2 ROF] T LF [40†[1], 2 ROF] 37† B G†1
+76 ItK/28 B(s) T LF [NT, 76†, 1 ROF] T LF [NT, 76†, 1 ROF] 38 B G†
+76 ItK/31(r) T T 39 B E†
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1944.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1944.txt
new file mode 100644
index 0000000..78c1dc5
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1944.txt
@@ -0,0 +1,43 @@
+=== ordnance/finnish/1944 ===
+
+Name Capabilities (effective) # Notes
+------------------- ------------------------------------------------------------- ------------------------------------------------------------- --- ------------------
+47 Krh/41 2PP 2PP 1 A
+50 Krh/39(r) 4PP B12[3+]† 4PP B12† 2† A B
+81 Krh/32 NT QSU IR[3+]† s8[N1]† 5PP dm NT QSU IR† s8† 5PP dm 3† A
+81 Savunheitin M/42 NT QSU s† 4PP dm NT QSU s† 4PP dm 4† A
+120 Krh/40 NT QSU NT QSU 5† n/a
+Boys ATR(b) 1PP "British"† 1PP "British"† 6† n/a
+Lahti ATR 4PP Light AA fire in 44+† B30.35† 4PP Light AA fire in 44+† B30.35† 7† A
+20 PstK/40 NT QSU Towing NA†[1] R2 IFE=B10 NT QSU Towing NA†[1] R2 IFE=B10 8† C†1
+25 PstK/37(f) NT QSU NT QSU 9† B D
+37 PstK/36(s) NT QSU HE[1+]† NT QSU HE† 10† A B
+37 PstK/37(g) NT QSU H6[9][3+]† NT QSU H6[9]† 11† B D
+45 PstK/32(r) NT QSU NT QSU 12† B
+50 PstK/38(g) NT QSU A4 NT QSU A4 13 B
+75 PstK/97-38(g) NT QSU H8 H=B12 NT QSU H8 H=B12 14† B
+75 PstK/40(g) NT QSU A3 H4 s7 NT QSU A3 H4 s7 15 B
+76 RK/27(r) NT QSU H6[J4+]† s6 NT QSU s6 16† A B
+75 K/02 NT QSU s6 NT QSU s6 17† n/a
+76 LK/13 NT QSU s6 NT QSU s6 18 n/a
+76 K/02(r) NT QSU h-d s6 NT QSU h-d s6 19† B
+76 K/36(r) NT QSU s6 NT QSU s6 20† B E†1
+87 K/95 NT QSU no IF h-d Acq. NA† NT QSU no IF h-d Acq. NA† 21 F†
+90 K/77 NT QSU no IF Acq. NA†[1] h-d NT QSU no IF Acq. NA†[1] h-d 22† F†1
+105 H/33(g) NT h-d H6[A4+]† s8 NT h-d s8 23† B
+105 H/37 NT s6 NT s6 24† n/a
+105 H/41(t) NT H6[A4+]† s8 NT s8 25† B
+107 K 10/13 NT s5 NT s5 26† n/a
+107 K/77(r) NT no IF Acq. NA†[1] h-d NT no IF Acq. NA†[1] h-d 27† B F†1
+114 H/18(b) NT H4[4+] WP6[4+] s8 NT H4 WP6 s8 28† n/a
+122 H/10(r) NT h-d WP6[4+] s6 NT h-d WP6 s6 29† B
+150 H/40(g) NT NM H6 s8 NT NM H6 s8 30 B
+155 H/17(f) NT s6 NT s6 31 B
+7.62 ItKK/31-40 T QSU Towing NA†[1] 2 TK DR† T QSU Towing NA†[1] 2 TK DR† 32† C†1
+20 ItK/30 BSW(g) T LF [NT, 20†, 2 ROF, B10] T LF [NT, 20†, 2 ROF, B10] 33 B G†
+20 ItK/38 BSW(g) T LF [NT, 20†[1], 2 ROF, B11] T LF [NT, 20†[1], 2 ROF, B11] 34† B G†1
+20 ItK/35 Br T LF [NT, 20†[1], 2 ROF] Road MP = 1† T LF [NT, 20†[1], 2 ROF] Road MP = 1† 35† A D G†1
+20 ItK/40 VKT T LF [NT, 20†[1], 2 ROF, 8 IFE, B11] 2 TK DR† Unhooking risk† T LF [NT, 20†[1], 2 ROF, 8 IFE, B11] 2 TK DR† Unhooking risk† 36† D G†1
+40 ItK/35-39 B(s) T LF [40†[1], 2 ROF] T LF [40†[1], 2 ROF] 37† B G†1
+76 ItK/28 B(s) T LF [NT, 76†, 1 ROF] T LF [NT, 76†, 1 ROF] 38 B G†
+76 ItK/31(r) T T 39 B E†
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1945.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1945.txt
new file mode 100644
index 0000000..d0a4cec
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/finnish/1945.txt
@@ -0,0 +1,43 @@
+=== ordnance/finnish/1945 ===
+
+Name Capabilities (effective) # Notes
+------------------- ------------------------------------------------------------- ------------------------------------------------------------- --- ------------------
+47 Krh/41 2PP 2PP 1 A
+50 Krh/39(r) 4PP B12[3+]† 4PP B12† 2† A B
+81 Krh/32 NT QSU IR[3+]† s8[N1]† 5PP dm NT QSU IR† s8† 5PP dm 3† A
+81 Savunheitin M/42 NT QSU s† 4PP dm NT QSU s† 4PP dm 4† A
+120 Krh/40 NT QSU NT QSU 5† n/a
+Boys ATR(b) 1PP "British"† 1PP "British"† 6† n/a
+Lahti ATR 4PP Light AA fire in 44+† B30.35† 4PP Light AA fire in 44+† B30.35† 7† A
+20 PstK/40 NT QSU Towing NA†[1] R2 IFE=B10 NT QSU Towing NA†[1] R2 IFE=B10 8† C†1
+25 PstK/37(f) NT QSU NT QSU 9† B D
+37 PstK/36(s) NT QSU HE[1+]† NT QSU HE† 10† A B
+37 PstK/37(g) NT QSU H6[9][3+]† NT QSU H6[9]† 11† B D
+45 PstK/32(r) NT QSU NT QSU 12† B
+50 PstK/38(g) NT QSU A4 NT QSU A4 13 B
+75 PstK/97-38(g) NT QSU H8 H=B12 NT QSU H8 H=B12 14† B
+75 PstK/40(g) NT QSU A3 H4 s7 NT QSU A3 H4 s7 15 B
+76 RK/27(r) NT QSU H6[J4+]† s6 NT QSU H6† s6 16† A B
+75 K/02 NT QSU s6 NT QSU s6 17† n/a
+76 LK/13 NT QSU s6 NT QSU s6 18 n/a
+76 K/02(r) NT QSU h-d s6 NT QSU h-d s6 19† B
+76 K/36(r) NT QSU s6 NT QSU s6 20† B E†1
+87 K/95 NT QSU no IF h-d Acq. NA† NT QSU no IF h-d Acq. NA† 21 F†
+90 K/77 NT QSU no IF Acq. NA†[1] h-d NT QSU no IF Acq. NA†[1] h-d 22† F†1
+105 H/33(g) NT h-d H6[A4+]† s8 NT h-d H6† s8 23† B
+105 H/37 NT s6 NT s6 24† n/a
+105 H/41(t) NT H6[A4+]† s8 NT H6† s8 25† B
+107 K 10/13 NT s5 NT s5 26† n/a
+107 K/77(r) NT no IF Acq. NA†[1] h-d NT no IF Acq. NA†[1] h-d 27† B F†1
+114 H/18(b) NT H4[4+] WP6[4+] s8 NT H4 WP6 s8 28† n/a
+122 H/10(r) NT h-d WP6[4+] s6 NT h-d WP6 s6 29† B
+150 H/40(g) NT NM H6 s8 NT NM H6 s8 30 B
+155 H/17(f) NT s6 NT s6 31 B
+7.62 ItKK/31-40 T QSU Towing NA†[1] 2 TK DR† T QSU Towing NA†[1] 2 TK DR† 32† C†1
+20 ItK/30 BSW(g) T LF [NT, 20†, 2 ROF, B10] T LF [NT, 20†, 2 ROF, B10] 33 B G†
+20 ItK/38 BSW(g) T LF [NT, 20†[1], 2 ROF, B11] T LF [NT, 20†[1], 2 ROF, B11] 34† B G†1
+20 ItK/35 Br T LF [NT, 20†[1], 2 ROF] Road MP = 1† T LF [NT, 20†[1], 2 ROF] Road MP = 1† 35† A D G†1
+20 ItK/40 VKT T LF [NT, 20†[1], 2 ROF, 8 IFE, B11] 2 TK DR† Unhooking risk† T LF [NT, 20†[1], 2 ROF, 8 IFE, B11] 2 TK DR† Unhooking risk† 36† D G†1
+40 ItK/35-39 B(s) T LF [40†[1], 2 ROF] T LF [40†[1], 2 ROF] 37† B G†1
+76 ItK/28 B(s) T LF [NT, 76†, 1 ROF] T LF [NT, 76†, 1 ROF] 38 B G†
+76 ItK/31(r) T T 39 B E†
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1940.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1940.txt
new file mode 100644
index 0000000..d7f5085
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1940.txt
@@ -0,0 +1,36 @@
+=== vehicles/finnish/1940 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+--------------------------- ------- ---- ------------------------------------ -------------- ------------- --- ----------------
+T-37(r) ® yes CS 2 n/a n/a 1† D M
+T-50(r) n/a yes CS 4 n/a n/a 2† D
+Vikkersi(b) ® yes CS 3 n/a n/a 3† B†1 D
+T-26E(b) ® yes CS 3 n/a n/a 4 B† D
+T-26A(r) ® yes CS 3 n/a n/a 5† D M
+T-26B(r) ® yes CS 3 n/a n/a 6 C† D M
+T-26C(r) ® yes CS 3 n/a n/a 7 C† D M
+OT-133(r) ® yes CS 3 n/a n/a 8 D M
+BT-5(r) ® yes CS 3 n/a n/a 9 D M
+BT-7(r) ® yes CS 3 n/a n/a 9 D M
+Postijuna(r) ® yes CS 5 s8 s8 10 D F† M
+Postijuna(L)(r) ® yes CS 6 s8 s8 11 D F† M
+Sotka(r) n/a yes CS 5 A3[2+] n/a 12† D E M
+Sotka(L)(r) n/a yes CS 5 A3 A3 13† D E
+Pitkäputkinen Sotka(r) n/a yes CS 6 A3 sD6† A3 sD6† 14† D
+KV-1E(r) n/a yes CS 6 n/a n/a 15† D E M
+KV-1 M42(r) n/a yes CS 6 A3 A3 15† D E M
+BT-42(r) ® n/a CS 3 (brew up) H† s6 H† s6 16† D M
+Sturmi(g) n/a yes CS 4 A3 H4 s8 A3 H4 s8 17† D
+Landsverk Anti II(s) ® yes CS 6 n/a n/a 18 A† D
+L182(s) n/a yes CS 5 n/a n/a 19† n/a
+L182(L)(s) n/a yes CS 5 n/a n/a 19† n/a
+BA-20(r) ® yes CS 3 n/a n/a 20† n/a
+BA-6(r) ® yes CS 4 n/a n/a 21 D
+GAZ-4M-AA(r) n/a yes CS 4 n/a n/a 22† A†1
+T-20(r) n/a yes CS 2† n/a n/a 23† D
+RSO(g) n/a yes cs 5 n/a n/a 24 D
+STZ-3(r) n/a yes cs 4 n/a n/a 25 D
+Tempo G1200 n/a yes cs 2 n/a n/a 26† n/a
+Light Truck n/a yes cs 6 n/a n/a 27† n/a
+Medium Truck n/a yes cs 7 n/a n/a 27† n/a
+Heavy Truck n/a yes cs 7 n/a n/a 27 n/a
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1941.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1941.txt
new file mode 100644
index 0000000..36dfacd
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1941.txt
@@ -0,0 +1,36 @@
+=== vehicles/finnish/1941 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+--------------------------- ------- ---- ------------------------------------ -------------- ------------- --- ----------------
+T-37(r) ® yes CS 2 n/a n/a 1† D M
+T-50(r) n/a yes CS 4 n/a n/a 2† D
+Vikkersi(b) ® yes CS 3 n/a n/a 3† B†1 D
+T-26E(b) ® yes CS 3 n/a n/a 4 B† D
+T-26A(r) ® yes CS 3 n/a n/a 5† D M
+T-26B(r) ® yes CS 3 n/a n/a 6 C† D M
+T-26C(r) ® yes CS 3 n/a n/a 7 C† D M
+OT-133(r) ® yes CS 3 n/a n/a 8 D M
+BT-5(r) ® yes CS 3 n/a n/a 9 D M
+BT-7(r) ® yes CS 3 n/a n/a 9 D M
+Postijuna(r) ® yes CS 5 s8 s8 10 D F† M
+Postijuna(L)(r) ® yes CS 6 s8 s8 11 D F† M
+Sotka(r) n/a yes CS 5 A3[2+] n/a 12† D E M
+Sotka(L)(r) n/a yes CS 5 A3 A3 13† D E
+Pitkäputkinen Sotka(r) n/a yes CS 6 A3 sD6† A3 sD6† 14† D
+KV-1E(r) n/a yes CS 6 n/a n/a 15† D E M
+KV-1 M42(r) n/a yes CS 6 A3 A3 15† D E M
+BT-42(r) ® n/a CS 3 (brew up) H† s6 H† s6 16† D M
+Sturmi(g) n/a yes CS 4 A3 H4 s8 A3 H4 s8 17† D
+Landsverk Anti II(s) ® yes CS 6 n/a n/a 18 A† D
+L182(s) n/a yes CS 5 n/a n/a 19† n/a
+L182(L)(s) n/a yes CS 5 n/a n/a 19† n/a
+BA-20(r) ® yes CS 3 n/a n/a 20† n/a
+BA-6(r) ® yes CS 4 n/a n/a 21 D
+GAZ-4M-AA(r) n/a yes CS 4 n/a n/a 22† A†1
+T-20(r) n/a yes CS 2† n/a n/a 23† D
+RSO(g) n/a yes cs 5 n/a n/a 24 D
+STZ-3(r) n/a yes cs 4 n/a n/a 25 D
+Tempo G1200 n/a yes cs 2 n/a n/a 26† n/a
+Light Truck n/a yes cs 6 n/a n/a 27† n/a
+Medium Truck n/a yes cs 7 n/a n/a 27† n/a
+Heavy Truck n/a yes cs 7 n/a n/a 27 n/a
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1942.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1942.txt
new file mode 100644
index 0000000..77d5a33
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1942.txt
@@ -0,0 +1,36 @@
+=== vehicles/finnish/1942 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+--------------------------- ------- ---- ------------------------------------ -------------- ------------- --- ----------------
+T-37(r) ® yes CS 2 n/a n/a 1† D M
+T-50(r) n/a yes CS 4 n/a n/a 2† D
+Vikkersi(b) ® yes CS 3 n/a n/a 3† B†1 D
+T-26E(b) ® yes CS 3 n/a n/a 4 B† D
+T-26A(r) ® yes CS 3 n/a n/a 5† D M
+T-26B(r) ® yes CS 3 n/a n/a 6 C† D M
+T-26C(r) ® yes CS 3 n/a n/a 7 C† D M
+OT-133(r) ® yes CS 3 n/a n/a 8 D M
+BT-5(r) ® yes CS 3 n/a n/a 9 D M
+BT-7(r) ® yes CS 3 n/a n/a 9 D M
+Postijuna(r) ® yes CS 5 s8 s8 10 D F† M
+Postijuna(L)(r) ® yes CS 6 s8 s8 11 D F† M
+Sotka(r) n/a yes CS 5 A3[2+] A3 12† D E M
+Sotka(L)(r) n/a yes CS 5 A3 A3 13† D E
+Pitkäputkinen Sotka(r) n/a yes CS 6 A3 sD6† A3 sD6† 14† D
+KV-1E(r) n/a yes CS 6 n/a n/a 15† D E M
+KV-1 M42(r) n/a yes CS 6 A3 A3 15† D E M
+BT-42(r) ® n/a CS 3 (brew up) H† s6 H† s6 16† D M
+Sturmi(g) n/a yes CS 4 A3 H4 s8 A3 H4 s8 17† D
+Landsverk Anti II(s) ® yes CS 6 n/a n/a 18 A† D
+L182(s) n/a yes CS 5 n/a n/a 19† n/a
+L182(L)(s) n/a yes CS 5 n/a n/a 19† n/a
+BA-20(r) ® yes CS 3 n/a n/a 20† n/a
+BA-6(r) ® yes CS 4 n/a n/a 21 D
+GAZ-4M-AA(r) n/a yes CS 4 n/a n/a 22† A†1
+T-20(r) n/a yes CS 2† n/a n/a 23† D
+RSO(g) n/a yes cs 5 n/a n/a 24 D
+STZ-3(r) n/a yes cs 4 n/a n/a 25 D
+Tempo G1200 n/a yes cs 2 n/a n/a 26† n/a
+Light Truck n/a yes cs 6 n/a n/a 27† n/a
+Medium Truck n/a yes cs 7 n/a n/a 27† n/a
+Heavy Truck n/a yes cs 7 n/a n/a 27 n/a
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1943.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1943.txt
new file mode 100644
index 0000000..c9b8193
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1943.txt
@@ -0,0 +1,36 @@
+=== vehicles/finnish/1943 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+--------------------------- ------- ---- ------------------------------------ -------------- ------------- --- ----------------
+T-37(r) ® yes CS 2 n/a n/a 1† D M
+T-50(r) n/a yes CS 4 n/a n/a 2† D
+Vikkersi(b) ® yes CS 3 n/a n/a 3† B†1 D
+T-26E(b) ® yes CS 3 n/a n/a 4 B† D
+T-26A(r) ® yes CS 3 n/a n/a 5† D M
+T-26B(r) ® yes CS 3 n/a n/a 6 C† D M
+T-26C(r) ® yes CS 3 n/a n/a 7 C† D M
+OT-133(r) ® yes CS 3 n/a n/a 8 D M
+BT-5(r) ® yes CS 3 n/a n/a 9 D M
+BT-7(r) ® yes CS 3 n/a n/a 9 D M
+Postijuna(r) ® yes CS 5 s8 s8 10 D F† M
+Postijuna(L)(r) ® yes CS 6 s8 s8 11 D F† M
+Sotka(r) n/a yes CS 5 A3[2+] A3 12† D E M
+Sotka(L)(r) n/a yes CS 5 A3 A3 13† D E
+Pitkäputkinen Sotka(r) n/a yes CS 6 A3 sD6† A3 sD6† 14† D
+KV-1E(r) n/a yes CS 6 n/a n/a 15† D E M
+KV-1 M42(r) n/a yes CS 6 A3 A3 15† D E M
+BT-42(r) ® n/a CS 3 (brew up) H† s6 H† s6 16† D M
+Sturmi(g) n/a yes CS 4 A3 H4 s8 A3 H4 s8 17† D
+Landsverk Anti II(s) ® yes CS 6 n/a n/a 18 A† D
+L182(s) n/a yes CS 5 n/a n/a 19† n/a
+L182(L)(s) n/a yes CS 5 n/a n/a 19† n/a
+BA-20(r) ® yes CS 3 n/a n/a 20† n/a
+BA-6(r) ® yes CS 4 n/a n/a 21 D
+GAZ-4M-AA(r) n/a yes CS 4 n/a n/a 22† A†1
+T-20(r) n/a yes CS 2† n/a n/a 23† D
+RSO(g) n/a yes cs 5 n/a n/a 24 D
+STZ-3(r) n/a yes cs 4 n/a n/a 25 D
+Tempo G1200 n/a yes cs 2 n/a n/a 26† n/a
+Light Truck n/a yes cs 6 n/a n/a 27† n/a
+Medium Truck n/a yes cs 7 n/a n/a 27† n/a
+Heavy Truck n/a yes cs 7 n/a n/a 27 n/a
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1944.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1944.txt
new file mode 100644
index 0000000..02fa14a
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1944.txt
@@ -0,0 +1,36 @@
+=== vehicles/finnish/1944 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+--------------------------- ------- ---- ------------------------------------ -------------- ------------- --- ----------------
+T-37(r) ® yes CS 2 n/a n/a 1† D M
+T-50(r) n/a yes CS 4 n/a n/a 2† D
+Vikkersi(b) ® yes CS 3 n/a n/a 3† B†1 D
+T-26E(b) ® yes CS 3 n/a n/a 4 B† D
+T-26A(r) ® yes CS 3 n/a n/a 5† D M
+T-26B(r) ® yes CS 3 n/a n/a 6 C† D M
+T-26C(r) ® yes CS 3 n/a n/a 7 C† D M
+OT-133(r) ® yes CS 3 n/a n/a 8 D M
+BT-5(r) ® yes CS 3 n/a n/a 9 D M
+BT-7(r) ® yes CS 3 n/a n/a 9 D M
+Postijuna(r) ® yes CS 5 s8 s8 10 D F† M
+Postijuna(L)(r) ® yes CS 6 s8 s8 11 D F† M
+Sotka(r) n/a yes CS 5 A3[2+] A3 12† D E M
+Sotka(L)(r) n/a yes CS 5 A3 A3 13† D E
+Pitkäputkinen Sotka(r) n/a yes CS 6 A3 sD6† A3 sD6† 14† D
+KV-1E(r) n/a yes CS 6 n/a n/a 15† D E M
+KV-1 M42(r) n/a yes CS 6 A3 A3 15† D E M
+BT-42(r) ® n/a CS 3 (brew up) H† s6 H† s6 16† D M
+Sturmi(g) n/a yes CS 4 A3 H4 s8 A3 H4 s8 17† D
+Landsverk Anti II(s) ® yes CS 6 n/a n/a 18 A† D
+L182(s) n/a yes CS 5 n/a n/a 19† n/a
+L182(L)(s) n/a yes CS 5 n/a n/a 19† n/a
+BA-20(r) ® yes CS 3 n/a n/a 20† n/a
+BA-6(r) ® yes CS 4 n/a n/a 21 D
+GAZ-4M-AA(r) n/a yes CS 4 n/a n/a 22† A†1
+T-20(r) n/a yes CS 2† n/a n/a 23† D
+RSO(g) n/a yes cs 5 n/a n/a 24 D
+STZ-3(r) n/a yes cs 4 n/a n/a 25 D
+Tempo G1200 n/a yes cs 2 n/a n/a 26† n/a
+Light Truck n/a yes cs 6 n/a n/a 27† n/a
+Medium Truck n/a yes cs 7 n/a n/a 27† n/a
+Heavy Truck n/a yes cs 7 n/a n/a 27 n/a
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1945.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1945.txt
new file mode 100644
index 0000000..3ad6505
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/finnish/1945.txt
@@ -0,0 +1,36 @@
+=== vehicles/finnish/1945 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+--------------------------- ------- ---- ------------------------------------ -------------- ------------- --- ----------------
+T-37(r) ® yes CS 2 n/a n/a 1† D M
+T-50(r) n/a yes CS 4 n/a n/a 2† D
+Vikkersi(b) ® yes CS 3 n/a n/a 3† B†1 D
+T-26E(b) ® yes CS 3 n/a n/a 4 B† D
+T-26A(r) ® yes CS 3 n/a n/a 5† D M
+T-26B(r) ® yes CS 3 n/a n/a 6 C† D M
+T-26C(r) ® yes CS 3 n/a n/a 7 C† D M
+OT-133(r) ® yes CS 3 n/a n/a 8 D M
+BT-5(r) ® yes CS 3 n/a n/a 9 D M
+BT-7(r) ® yes CS 3 n/a n/a 9 D M
+Postijuna(r) ® yes CS 5 s8 s8 10 D F† M
+Postijuna(L)(r) ® yes CS 6 s8 s8 11 D F† M
+Sotka(r) n/a yes CS 5 A3[2+] A3 12† D E M
+Sotka(L)(r) n/a yes CS 5 A3 A3 13† D E
+Pitkäputkinen Sotka(r) n/a yes CS 6 A3 sD6† A3 sD6† 14† D
+KV-1E(r) n/a yes CS 6 n/a n/a 15† D E M
+KV-1 M42(r) n/a yes CS 6 A3 A3 15† D E M
+BT-42(r) ® n/a CS 3 (brew up) H† s6 H† s6 16† D M
+Sturmi(g) n/a yes CS 4 A3 H4 s8 A3 H4 s8 17† D
+Landsverk Anti II(s) ® yes CS 6 n/a n/a 18 A† D
+L182(s) n/a yes CS 5 n/a n/a 19† n/a
+L182(L)(s) n/a yes CS 5 n/a n/a 19† n/a
+BA-20(r) ® yes CS 3 n/a n/a 20† n/a
+BA-6(r) ® yes CS 4 n/a n/a 21 D
+GAZ-4M-AA(r) n/a yes CS 4 n/a n/a 22† A†1
+T-20(r) n/a yes CS 2† n/a n/a 23† D
+RSO(g) n/a yes cs 5 n/a n/a 24 D
+STZ-3(r) n/a yes cs 4 n/a n/a 25 D
+Tempo G1200 n/a yes cs 2 n/a n/a 26† n/a
+Light Truck n/a yes cs 6 n/a n/a 27† n/a
+Medium Truck n/a yes cs 7 n/a n/a 27† n/a
+Heavy Truck n/a yes cs 7 n/a n/a 27 n/a
diff --git a/vasl_templates/webapp/tests/test_capabilities.py b/vasl_templates/webapp/tests/test_capabilities.py
index 65a67c8..d3797c8 100644
--- a/vasl_templates/webapp/tests/test_capabilities.py
+++ b/vasl_templates/webapp/tests/test_capabilities.py
@@ -264,6 +264,31 @@ def test_month_capabilities( webapp, webdriver ):
_check_capabilities( webdriver, webapp, *vehicle, "ETO", "06/1944", "WP7\u2020 s8" )
_check_capabilities( webdriver, webapp, *vehicle, "ETO", "01/1945", "WP7\u2020 s8" )
+ # 81 Krh/32: s8(N1)†
+ ordnance = [ "finnish", "ordnance", "81 Krh/32" ]
+ _check_capabilities( webdriver, webapp, *ordnance, "ETO", "12/1940", "NT QSU 5PP dm" )
+ _check_capabilities( webdriver, webapp, *ordnance, "ETO", "10/1941", "NT QSU 5PP dm" )
+ _check_capabilities( webdriver, webapp, *ordnance, "ETO", "11/1941", "NT QSU s8\u2020 5PP dm" )
+ _check_capabilities( webdriver, webapp, *ordnance, "ETO", "01/1942", "NT QSU s8\u2020 5PP dm" )
+
+ # 76 RK/27(r): H6J4+†
+ ordnance = [ "finnish", "ordnance", "76 RK/27(r)" ]
+ _check_capabilities( webdriver, webapp, *ordnance, "ETO", "12/1943", "NT QSU s6" )
+ _check_capabilities( webdriver, webapp, *ordnance, "ETO", "05/1944", "NT QSU s6" )
+ _check_capabilities( webdriver, webapp, *ordnance, "ETO", "06/1944", "NT QSU H6\u2020 s6" )
+ _check_capabilities( webdriver, webapp, *ordnance, "ETO", "01/1945", "NT QSU H6\u2020 s6" )
+
+ # 105 H/33(g) ; 105 H/41(t): H6A4+†
+ for vo_name in ("105 H/33(g)","105 H/41(t)"):
+ ordnance = [ "finnish", "ordnance", vo_name ]
+ val = _get_capabilities( webdriver, webapp, *ordnance, "ETO", "12/1943" )
+ assert "H6" not in val
+ assert _get_capabilities( webdriver, webapp, *ordnance, "ETO", "07/1944" ) == val
+ val = _get_capabilities( webdriver, webapp, *ordnance, "ETO", "08/1944" )
+ print(vo_name)
+ assert "H6\u2020" in val
+ assert _get_capabilities( webdriver, webapp, *ordnance, "ETO", "01/1945" ) == val
+
# ---------------------------------------------------------------------
@pytest.mark.skipif(
diff --git a/vasl_templates/webapp/tests/test_vo_reports.py b/vasl_templates/webapp/tests/test_vo_reports.py
index 422243f..a7509a6 100644
--- a/vasl_templates/webapp/tests/test_vo_reports.py
+++ b/vasl_templates/webapp/tests/test_vo_reports.py
@@ -37,7 +37,7 @@ def test_vo_reports( webapp, webdriver ):
# check each vehicle/ordnance report
nationalities = [
- "german", "russian", "american", "british", "italian", "japanese", "chinese", "french",
+ "german", "russian", "american", "british", "italian", "japanese", "chinese", "french", "finnish",
"polish", "belgian","yugoslavian","danish","dutch","greek", "allied-minor-common",
"romanian", "hungarian","slovakian","croatian","bulgarian", "axis-minor-common"
]