diff --git a/vasl_templates/webapp/data/ordnance/axis-minor/common.json b/vasl_templates/webapp/data/ordnance/axis-minor/common.json
new file mode 100644
index 0000000..5cfbc9d
--- /dev/null
+++ b/vasl_templates/webapp/data/ordnance/axis-minor/common.json
@@ -0,0 +1,191 @@
+[
+
+{ "name": "5cm leGrW 36",
+ "capabilities_other": [ "5PP" ],
+ "note_number": "44",
+ "notes": [ "A", "H", "S", "C", "B" ]
+},
+{ "name": "50mm RM obr. 40",
+ "capabilities_other": [ "4PP" ],
+ "note_number": "45",
+ "notes": [ "A", "R", "H", "S", "C" ]
+},
+{ "name": "8cm GrW 34",
+ "capabilities": [ "NT", "QSU", "IR" ],
+ "capabilities2": { "s": 7 },
+ "note_number": "46\u2020",
+ "notes": [ "A", "C", "B" ]
+},
+{ "name": "Brandt M27/31",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "s": 7 },
+ "note_number": "47\u2020",
+ "notes": [ "A", "R", "H", "S" ]
+},
+{ "name": "PM obr. 38",
+ "capabilities": [ "NT", "QSU", "h-d" ],
+ "capabilities2": { "s": 8 },
+ "note_number": "48\u2020",
+ "notes": [ "R", "H" ]
+},
+{ "name": "Ur wz. 35",
+ "capabilities_other": [ "1PP" ],
+ "note_number": "49",
+ "notes": [ "R", "H", "S", "C", "B" ]
+},
+{ "name": "s18-1100",
+ "capabilities_other": [ "5PP" ],
+ "note_number": "50",
+ "notes": [ "A", "R", "H" ]
+},
+{ "name": "Kanon PUV vz. 37(t)",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "A": [ [4,"1S"] ] },
+ "note_number": "51\u2020",
+ "notes": [ "E", "H", "S", "B" ]
+},
+{ "name": "Bohler M35",
+ "capabilities": [ "NT", "QSU", "no Gunshield" ],
+ "note_number": "52\u2020",
+ "notes": [ "A", "R", "H", "S" ]
+},
+{ "name": "5cm PaK 38(g)",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "A": [ [4,3], [3,4] ] },
+ "note_number": "53\u2020",
+ "notes": [ "E", "R", "H", "S", "B" ]
+},
+{ "name": "7.5cm PaK 97/38(g)",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "H": [ [5,"3+"] ], "s": 6 },
+ "note_number": "54\u2020",
+ "notes": [ "E", "R", "B" ]
+},
+{ "name": "7.5cm PaK 40(g)",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "A": [ [4,3], [3,4] ] },
+ "note_number": "55\u2020",
+ "notes": [ "E", "R", "H", "S", "B" ]
+},
+{ "name": "Skoda M15",
+ "capabilities": [ "NT", "QSU" ],
+ "note_number": "56\u2020",
+ "notes": [ "A", "R", "H", "S", "C", "B" ]
+},
+{ "name": "Canon de 75 mle 1897",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "s": 7 },
+ "note_number": "57",
+ "notes": [ "R", "B" ]
+},
+{ "name": "Skoda M29",
+ "capabilities": [ "NT" ],
+ "capabilities2": { "AP": 6 },
+ "note_number": "58\u2020",
+ "notes": [ "A", "R", "S" ]
+},
+{ "name": "Skoda M17",
+ "capabilities": [ "NT", "QSU" ],
+ "note_number": "59\u2020",
+ "notes": [ "A", "R", "S", "C" ]
+},
+{ "name": "Skoda M28(80)",
+ "capabilities": [ "T" ],
+ "note_number": "60\u2020",
+ "notes": [ "S", "C" ]
+},
+{ "name": "Skoda M14/19",
+ "capabilities": [ "NT" ],
+ "capabilities2": { "s": 8 },
+ "note_number": "61\u2020",
+ "notes": [ "A\u2020", "R", "H", "S", "C" ]
+},
+{ "name": "leFH 18(g)",
+ "capabilities": [ "NT" ],
+ "capabilities2": { "H": [ [4,"3+"] ], "s": 5 },
+ "note_number": "62\u2020",
+ "notes": [ "E", "H", "S", "B" ]
+},
+{ "name": "Skoda M35",
+ "capabilities": [ "NT" ],
+ "capabilities2": { "AP": 7, "C": [ [7,"CS"], "\u2020" ] },
+ "note_number": "63\u2020",
+ "notes": [ "R", "S", "C" ]
+},
+{ "name": "G obr. 10/30",
+ "capabilities": [ "NT", "h-d" ],
+ "capabilities2": { "s": 7 },
+ "note_number": "64\u2020",
+ "notes": [ "R", "B" ]
+},
+{ "name": "G obr. 38",
+ "capabilities": [ "NT" ],
+ "capabilities2": { "s": [ [5,"1-2R"], "\u2020" ] },
+ "note_number": "65",
+ "notes": [ "R", "B" ]
+},
+{ "name": "Skoda M14",
+ "capabilities": [ "NT" ],
+ "note_number": "66\u2020",
+ "notes": [ "R", "H", "S" ]
+},
+{ "name": "Skoda M15/16",
+ "capabilities": [ "NT", "no IF" ],
+ "capabilities2": { "s": 6 },
+ "note_number": "67\u2020",
+ "notes": [ "S", "C" ]
+},
+{ "name": "C mle 17 S",
+ "capabilities": [ "NT" ],
+ "capabilities2": { "s": 7 },
+ "note_number": "68\u2020",
+ "notes": [ "R", "B" ]
+},
+{ "name": "Mitrailleuse de 13.2 CAJ mle 30",
+ "capabilities": [ "T" ],
+ "capabilities_other": [ "2 TK DR\u2020" ],
+ "note_number": "69\u2020",
+ "notes": [ "T\u20201", "R", "B" ]
+},
+{ "name": "Oerlikon FF",
+ "capabilities": [ "T" ],
+ "capabilities2": { "LF": [ "NT", "20\u2020", "2 ROF", "B11" ] },
+ "note_number": "70",
+ "notes": [ "G\u2020", "R", "H", "S", "C", "B" ]
+},
+{ "name": "2cm FlaK 30(g)",
+ "capabilities": [ "T" ],
+ "capabilities2": { "LF": [ "NT", "20\u20201", "2 ROF", "B9" ] },
+ "note_number": "71\u2020",
+ "notes": [ "E", "G\u20201", "R", "B" ]
+},
+{ "name": "2cm FlaK 38(g)",
+ "capabilities": [ "T" ],
+ "capabilities2": { "LF": [ "NT", "20\u20201", "2 ROF", "B10" ] },
+ "note_number": "72\u2020",
+ "notes": [ "E", "G\u20201", "R", "B" ]
+},
+{ "name": "3.7cm FlaK 36(g)",
+ "capabilities": [ "T" ],
+ "note_number": "73\u2020",
+ "notes": [ "E", "R", "B" ]
+},
+{ "name": "Bofors 40mm",
+ "capabilities": [ "T" ],
+ "capabilities2": { "LF": [ "40\u20201", "2 ROF" ] },
+ "note_number": "74\u2020",
+ "notes": [ "G\u20201", "R", "H", "S", "C" ]
+},
+{ "name": "Skoda M33",
+ "capabilities": [ "T" ],
+ "note_number": "75R",
+ "notes": [ "S" ]
+},
+{ "name": "8.8cm FlaK 18 o. 36(g)",
+ "capabilities": [ "T" ],
+ "capabilities2": { "LF": [ "88\u20201", "1 ROF", "B11" ] },
+ "note_number": "76\u2020",
+ "notes": [ "E", "G\u20201", "R", "S", "B" ]
+}
+
+]
diff --git a/vasl_templates/webapp/data/vehicles/axis-minor/common.json b/vasl_templates/webapp/data/vehicles/axis-minor/common.json
new file mode 100644
index 0000000..4731eea
--- /dev/null
+++ b/vasl_templates/webapp/data/vehicles/axis-minor/common.json
@@ -0,0 +1,194 @@
+[
+
+{ "name": "L3/35(i)",
+ "no_radio": "\u00ae",
+ "CS#": 2,
+ "note_number": "29\u2020",
+ "notes": [ "K\u20201", "E", "F", "G\u20202", "H", "C", "B" ]
+},
+{ "name": "FT-17M(f)",
+ "no_radio": "\u00ae",
+ "CS#": 2,
+ "no_if": true,
+ "note_number": "30\u2020",
+ "notes": [ "D", "R", "C" ]
+},
+{ "name": "FT-17C(f)",
+ "no_radio": "\u00ae",
+ "CS#": 2,
+ "capabilities2": { "AP": 9 },
+ "note_number": "30\u2020",
+ "notes": [ "D", "R", "C" ]
+},
+{ "name": "PzKpfw IB(g)",
+ "CS#": 2,
+ "capabilities2": { "sD": 6 },
+ "note_number": "31\u2020",
+ "notes": [ "K\u20201", "E", "H", "C" ]
+},
+{ "name": "R-35(f)",
+ "no_radio": "\u00ae",
+ "CS#": 2,
+ "capabilities2": { "AP": 10 },
+ "note_number": "32\u2020",
+ "notes": [ "A\u20201", "D", "E", "R", "H", "B" ]
+},
+{ "name": "H39(f)",
+ "no_radio": "\u00ae",
+ "CS#": 2,
+ "capabilities2": { "AP": 10 },
+ "note_number": "33\u2020",
+ "notes": [ "A\u20201", "D", "E", "H", "C", "B" ]
+},
+{ "name": "LT vz 35(g)",
+ "CS#": 4,
+ "capabilities2": { "sD": 5 },
+ "note_number": "34\u2020",
+ "notes": [ "E", "R", "S", "B" ]
+},
+{ "name": "LT vz 38(t)A",
+ "CS#": 4,
+ "capabilities2": { "A": [ [3,1], [4,2], [3,3] ], "sD": 6 },
+ "note_number": "35\u2020",
+ "notes": [ "E", "R", "H", "S" ]
+},
+{ "name": "LT vz 38(t)E",
+ "CS#": 4,
+ "capabilities2": { "A": [ [4,2], [3,3] ], "sD": 7 },
+ "note_number": "35\u2020",
+ "notes": [ "E", "H", "S", "B" ]
+},
+{ "name": "S-35(f)",
+ "CS#": 4,
+ "note_number": "36\u2020",
+ "notes": [ "A\u20201", "D", "E", "H", "S" ]
+},
+{ "name": "PzKpfw IIIL(g)",
+ "CS#": 5,
+ "capabilities2": { "A": [ [5,2], [4,3], [3,4] ], "sD": 5 },
+ "note_number": "37\u2020",
+ "notes": [ "E", "O\u20201", "Q", "R", "H", "C" ]
+},
+{ "name": "PzKpfw IIIN(g)",
+ "CS#": 5,
+ "capabilities2": { "H": [ [8,"3+"] ], "s": 8, "sD": 7 },
+ "note_number": "38\u2020",
+ "notes": [ "E", "O\u20201", "Q", "R", "S" ]
+},
+{ "name": "PzKpfw IVD(g)",
+ "CS#": 5,
+ "capabilities2": { "AP": 7, "H": [ [5,"3+"] ], "s": 8, "sD": 7 },
+ "note_number": "39\u2020",
+ "notes": [ "E", "Q", "R" ]
+},
+{ "name": "PzKpfw IVF1(g)",
+ "CS#": 6,
+ "capabilities2": { "AP": 7, "H": [ [5,"3+"] ], "s": 8, "sD": 7 },
+ "note_number": "39\u2020",
+ "notes": [ "E", "Q", "R", "H", "B" ]
+},
+{ "name": "PzKpfw IVH(g)",
+ "CS#": 6,
+ "capabilities2": { "A": [ [4,2], [3,3] ], "s": 7, "sD": 5 },
+ "note_number": "39\u2020",
+ "notes": [ "E", "O\u20201", "Q", "R", "H", "B" ]
+},
+{ "name": "StuG IIIG(g)",
+ "CS#": 4,
+ "capabilities2": { "A": [ [3,4] ], "s": 8, "sD": 7 },
+ "note_number": "40\u2020",
+ "notes": [ "E", "Q", "R", "H", "B" ]
+},
+{ "name": "JgdPz 38(t)",
+ "CS#": 4,
+ "capabilities2": { "A": [ [3,4] ], "HE": 7 },
+ "note_number": "41\u2020",
+ "notes": [ "E", "H", "B" ]
+},
+{ "name": "SPW 250/1(g)",
+ "CS#": 4,
+ "note_number": "42\u2020",
+ "notes": [ "E", "R" ]
+},
+{ "name": "SPW 251/1(g)",
+ "CS#": 5,
+ "note_number": "42\u2020",
+ "notes": [ "E", "R", "C" ]
+},
+{ "name": "SPW 251/9(g)",
+ "CS#": "4:brewup",
+ "capabilities2": { "H": 5, "s": 8 },
+ "note_number": "42\u2020",
+ "notes": [ "E", "R" ]
+},
+{ "name": "OA vz 30(t)",
+ "no_radio": "\u00ae",
+ "CS#": 2,
+ "note_number": "43\u2020",
+ "notes": [ "E", "R", "S" ]
+},
+{ "name": "AB 41(i)",
+ "CS#": 4,
+ "note_number": "44\u2020",
+ "notes": [ "E", "R", "C" ]
+},
+{ "name": "PSW 222(g)",
+ "CS#": 3,
+ "capabilities2": { "sD": 6 },
+ "note_number": "45\u2020",
+ "notes": [ "P\u20201", "E", "M\u20202", "R", "B" ]
+},
+{ "name": "PSW 222(L)(g)",
+ "CS#": 3,
+ "capabilities2": { "sD": 6 },
+ "note_number": "45\u2020",
+ "notes": [ "P\u20201", "E", "M\u20202", "R", "B" ]
+},
+{ "name": "PSW 223(g)",
+ "CS#": 3,
+ "capabilities2": { "sD": 6 },
+ "note_number": "46\u2020",
+ "notes": [ "E", "M\u20201", "P\u20202", "R", "B" ]
+},
+{ "name": "Komsomolet(r)",
+ "cs#": "2\u20201",
+ "note_number": "47\u2020",
+ "notes": [ "E", "F", "I\u20201", "J", "R", "H", "S", "C", "B" ]
+},
+{ "name": "RSO(g)",
+ "cs#": 5,
+ "note_number": "48",
+ "notes": [ "S", "B" ]
+},
+{ "name": "Light Tractor",
+ "cs#": 4,
+ "note_number": "49",
+ "notes": [ "R", "H", "S", "C", "B" ]
+},
+{ "name": "Medium Tractor",
+ "cs#": 5,
+ "note_number": "49",
+ "notes": [ "R", "H", "S", "C", "B" ]
+},
+{ "name": "Heavy Tractor",
+ "cs#": 6,
+ "note_number": "49",
+ "notes": [ "R", "H", "S", "C", "B" ]
+},
+{ "name": "Light Truck",
+ "cs#": 4,
+ "note_number": "50",
+ "notes": [ "R", "H", "S", "C", "B" ]
+},
+{ "name": "Medium Truck",
+ "cs#": 5,
+ "note_number": "50",
+ "notes": [ "R", "H", "S", "C", "B" ]
+},
+{ "name": "Heavy Truck",
+ "cs#": 7,
+ "note_number": "50",
+ "notes": [ "R", "H", "S", "C", "B" ]
+}
+
+]
diff --git a/vasl_templates/webapp/static/snippets.js b/vasl_templates/webapp/static/snippets.js
index 8da5d7f..06ecfc8 100644
--- a/vasl_templates/webapp/static/snippets.js
+++ b/vasl_templates/webapp/static/snippets.js
@@ -438,6 +438,18 @@ function _check_capability_timestamp( capabilities, timestamp, scenario_theater,
return "" ;
timestamp = timestamp.substring( 0, timestamp.length-1 ) ;
}
+ if ( timestamp.substring( timestamp.length-1 ) === "R" ) {
+ // FIXME! What does a "R" superscript mean?
+ timestamp = timestamp.substring( 0, timestamp.length-1 ) ;
+ }
+ if ( timestamp.substring( timestamp.length-1 ) === "S" ) {
+ // FIXME! What does a "S" superscript mean?
+ timestamp = timestamp.substring( 0, timestamp.length-1 ) ;
+ }
+ if ( timestamp.substring( timestamp.length-1 ) === "C" ) {
+ // FIXME! What does a "C" superscript mean?
+ timestamp = timestamp.substring( 0, timestamp.length-1 ) ;
+ }
// remove any trailing "+" (FIXME! What does it even mean? Doesn't make sense :-/)
if ( timestamp.substring( timestamp.length-1 ) == "+" )
@@ -453,17 +465,26 @@ function _check_capability_timestamp( capabilities, timestamp, scenario_theater,
var month = MONTH_NAMES[ timestamp.substring(0,1) ] ;
if ( month )
timestamp = timestamp.substring( 1 ) ;
- if ( ! /^\d$/.test( timestamp ) )
- return "" ;
- timestamp = parseInt( timestamp ) ;
-
- // check if the capabilitity is available
- if ( scenario_year > 1940 + timestamp )
- return capabilities[0] ;
- else if ( scenario_year == 1940 + timestamp ) {
- if( !month || scenario_month >= month )
+ if ( /^\d$/.test( timestamp ) ) {
+ // this is a single year
+ timestamp = parseInt( timestamp ) ;
+ // check if the capabilitity is available
+ if ( scenario_year > 1940 + timestamp )
+ return capabilities[0] ;
+ else if ( scenario_year == 1940 + timestamp ) {
+ if( !month || scenario_month >= month )
+ return capabilities[0] ;
+ }
+ } else if ( /^\d-\d$/.test( timestamp ) ) {
+ // this is a range of years
+ var timestamp1 = parseInt( timestamp[0] ) ;
+ var timestamp2 = parseInt( timestamp[timestamp.length-1] ) ;
+ // check if the capabilitity is available
+ if ( 1940+timestamp1 <= scenario_year && scenario_year <= 1940+timestamp2 )
return capabilities[0] ;
}
+ else
+ return "" ;
return "" ;
}
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1940.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1940.txt
new file mode 100644
index 0000000..0a50bde
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1940.txt
@@ -0,0 +1,37 @@
+=== ordnance/axis-minor-common/1940 ===
+
+Name Capabilities (effective) # Notes
+------------------------------- ----------------------------- ----------------------------- --- ----------------------
+5cm leGrW 36 5PP 5PP 44 A H S C B
+50mm RM obr. 40 4PP 4PP 45 A R H S C
+8cm GrW 34 NT QSU IR s7 NT QSU IR s7 46† A C B
+Brandt M27/31 NT QSU s7 NT QSU s7 47† A R H S
+PM obr. 38 NT QSU h-d s8 NT QSU h-d s8 48† R H
+Ur wz. 35 1PP 1PP 49 R H S C B
+s18-1100 5PP 5PP 50 A R H
+Kanon PUV vz. 37(t) NT QSU A4[1S] NT QSU 51† E H S B
+Bohler M35 NT QSU no Gunshield NT QSU no Gunshield 52† A R H S
+5cm PaK 38(g) NT QSU A4[3]3[4] NT QSU 53† E R H S B
+7.5cm PaK 97/38(g) NT QSU H5[3+] s6 NT QSU s6 54† E R B
+7.5cm PaK 40(g) NT QSU A4[3]3[4] NT QSU 55† E R H S B
+Skoda M15 NT QSU NT QSU 56† A R H S C B
+Canon de 75 mle 1897 NT QSU s7 NT QSU s7 57 R B
+Skoda M29 NT AP6 NT AP6 58† A R S
+Skoda M17 NT QSU NT QSU 59† A R S C
+Skoda M28(80) T T 60† S C
+Skoda M14/19 NT s8 NT s8 61† A† R H S C
+leFH 18(g) NT H4[3+] s5 NT s5 62† E H S B
+Skoda M35 NT AP7 C7[CS]† NT AP7 C7† 63† R S C
+G obr. 10/30 NT h-d s7 NT h-d s7 64† R B
+G obr. 38 NT s5[1-2R]† NT 65 R B
+Skoda M14 NT NT 66† R H S
+Skoda M15/16 NT no IF s6 NT no IF s6 67† S C
+C mle 17 S NT s7 NT s7 68† R B
+Mitrailleuse de 13.2 CAJ mle 30 T 2 TK DR† T 2 TK DR† 69† T†1 R B
+Oerlikon FF T LF [NT, 20†, 2 ROF, B11] T LF [NT, 20†, 2 ROF, B11] 70 G† R H S C B
+2cm FlaK 30(g) T LF [NT, 20†[1], 2 ROF, B9] T LF [NT, 20†[1], 2 ROF, B9] 71† E G†1 R B
+2cm FlaK 38(g) T LF [NT, 20†[1], 2 ROF, B10] T LF [NT, 20†[1], 2 ROF, B10] 72† E G†1 R B
+3.7cm FlaK 36(g) T T 73† E R B
+Bofors 40mm T LF [40†[1], 2 ROF] T LF [40†[1], 2 ROF] 74† G†1 R H S C
+Skoda M33 T T 75R S
+8.8cm FlaK 18 o. 36(g) T LF [88†[1], 1 ROF, B11] T LF [88†[1], 1 ROF, B11] 76† E G†1 R S B
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1941.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1941.txt
new file mode 100644
index 0000000..95f26da
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1941.txt
@@ -0,0 +1,37 @@
+=== ordnance/axis-minor-common/1941 ===
+
+Name Capabilities (effective) # Notes
+------------------------------- ----------------------------- ----------------------------- --- ----------------------
+5cm leGrW 36 5PP 5PP 44 A H S C B
+50mm RM obr. 40 4PP 4PP 45 A R H S C
+8cm GrW 34 NT QSU IR s7 NT QSU IR s7 46† A C B
+Brandt M27/31 NT QSU s7 NT QSU s7 47† A R H S
+PM obr. 38 NT QSU h-d s8 NT QSU h-d s8 48† R H
+Ur wz. 35 1PP 1PP 49 R H S C B
+s18-1100 5PP 5PP 50 A R H
+Kanon PUV vz. 37(t) NT QSU A4[1S] NT QSU A4 51† E H S B
+Bohler M35 NT QSU no Gunshield NT QSU no Gunshield 52† A R H S
+5cm PaK 38(g) NT QSU A4[3]3[4] NT QSU 53† E R H S B
+7.5cm PaK 97/38(g) NT QSU H5[3+] s6 NT QSU s6 54† E R B
+7.5cm PaK 40(g) NT QSU A4[3]3[4] NT QSU 55† E R H S B
+Skoda M15 NT QSU NT QSU 56† A R H S C B
+Canon de 75 mle 1897 NT QSU s7 NT QSU s7 57 R B
+Skoda M29 NT AP6 NT AP6 58† A R S
+Skoda M17 NT QSU NT QSU 59† A R S C
+Skoda M28(80) T T 60† S C
+Skoda M14/19 NT s8 NT s8 61† A† R H S C
+leFH 18(g) NT H4[3+] s5 NT s5 62† E H S B
+Skoda M35 NT AP7 C7[CS]† NT AP7 C7† 63† R S C
+G obr. 10/30 NT h-d s7 NT h-d s7 64† R B
+G obr. 38 NT s5[1-2R]† NT s5† 65 R B
+Skoda M14 NT NT 66† R H S
+Skoda M15/16 NT no IF s6 NT no IF s6 67† S C
+C mle 17 S NT s7 NT s7 68† R B
+Mitrailleuse de 13.2 CAJ mle 30 T 2 TK DR† T 2 TK DR† 69† T†1 R B
+Oerlikon FF T LF [NT, 20†, 2 ROF, B11] T LF [NT, 20†, 2 ROF, B11] 70 G† R H S C B
+2cm FlaK 30(g) T LF [NT, 20†[1], 2 ROF, B9] T LF [NT, 20†[1], 2 ROF, B9] 71† E G†1 R B
+2cm FlaK 38(g) T LF [NT, 20†[1], 2 ROF, B10] T LF [NT, 20†[1], 2 ROF, B10] 72† E G†1 R B
+3.7cm FlaK 36(g) T T 73† E R B
+Bofors 40mm T LF [40†[1], 2 ROF] T LF [40†[1], 2 ROF] 74† G†1 R H S C
+Skoda M33 T T 75R S
+8.8cm FlaK 18 o. 36(g) T LF [88†[1], 1 ROF, B11] T LF [88†[1], 1 ROF, B11] 76† E G†1 R S B
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1942.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1942.txt
new file mode 100644
index 0000000..708e259
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1942.txt
@@ -0,0 +1,37 @@
+=== ordnance/axis-minor-common/1942 ===
+
+Name Capabilities (effective) # Notes
+------------------------------- ----------------------------- ----------------------------- --- ----------------------
+5cm leGrW 36 5PP 5PP 44 A H S C B
+50mm RM obr. 40 4PP 4PP 45 A R H S C
+8cm GrW 34 NT QSU IR s7 NT QSU IR s7 46† A C B
+Brandt M27/31 NT QSU s7 NT QSU s7 47† A R H S
+PM obr. 38 NT QSU h-d s8 NT QSU h-d s8 48† R H
+Ur wz. 35 1PP 1PP 49 R H S C B
+s18-1100 5PP 5PP 50 A R H
+Kanon PUV vz. 37(t) NT QSU A4[1S] NT QSU A4 51† E H S B
+Bohler M35 NT QSU no Gunshield NT QSU no Gunshield 52† A R H S
+5cm PaK 38(g) NT QSU A4[3]3[4] NT QSU 53† E R H S B
+7.5cm PaK 97/38(g) NT QSU H5[3+] s6 NT QSU s6 54† E R B
+7.5cm PaK 40(g) NT QSU A4[3]3[4] NT QSU 55† E R H S B
+Skoda M15 NT QSU NT QSU 56† A R H S C B
+Canon de 75 mle 1897 NT QSU s7 NT QSU s7 57 R B
+Skoda M29 NT AP6 NT AP6 58† A R S
+Skoda M17 NT QSU NT QSU 59† A R S C
+Skoda M28(80) T T 60† S C
+Skoda M14/19 NT s8 NT s8 61† A† R H S C
+leFH 18(g) NT H4[3+] s5 NT s5 62† E H S B
+Skoda M35 NT AP7 C7[CS]† NT AP7 C7† 63† R S C
+G obr. 10/30 NT h-d s7 NT h-d s7 64† R B
+G obr. 38 NT s5[1-2R]† NT s5† 65 R B
+Skoda M14 NT NT 66† R H S
+Skoda M15/16 NT no IF s6 NT no IF s6 67† S C
+C mle 17 S NT s7 NT s7 68† R B
+Mitrailleuse de 13.2 CAJ mle 30 T 2 TK DR† T 2 TK DR† 69† T†1 R B
+Oerlikon FF T LF [NT, 20†, 2 ROF, B11] T LF [NT, 20†, 2 ROF, B11] 70 G† R H S C B
+2cm FlaK 30(g) T LF [NT, 20†[1], 2 ROF, B9] T LF [NT, 20†[1], 2 ROF, B9] 71† E G†1 R B
+2cm FlaK 38(g) T LF [NT, 20†[1], 2 ROF, B10] T LF [NT, 20†[1], 2 ROF, B10] 72† E G†1 R B
+3.7cm FlaK 36(g) T T 73† E R B
+Bofors 40mm T LF [40†[1], 2 ROF] T LF [40†[1], 2 ROF] 74† G†1 R H S C
+Skoda M33 T T 75R S
+8.8cm FlaK 18 o. 36(g) T LF [88†[1], 1 ROF, B11] T LF [88†[1], 1 ROF, B11] 76† E G†1 R S B
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1943.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1943.txt
new file mode 100644
index 0000000..9b641d4
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1943.txt
@@ -0,0 +1,37 @@
+=== ordnance/axis-minor-common/1943 ===
+
+Name Capabilities (effective) # Notes
+------------------------------- ----------------------------- ----------------------------- --- ----------------------
+5cm leGrW 36 5PP 5PP 44 A H S C B
+50mm RM obr. 40 4PP 4PP 45 A R H S C
+8cm GrW 34 NT QSU IR s7 NT QSU IR s7 46† A C B
+Brandt M27/31 NT QSU s7 NT QSU s7 47† A R H S
+PM obr. 38 NT QSU h-d s8 NT QSU h-d s8 48† R H
+Ur wz. 35 1PP 1PP 49 R H S C B
+s18-1100 5PP 5PP 50 A R H
+Kanon PUV vz. 37(t) NT QSU A4[1S] NT QSU A4 51† E H S B
+Bohler M35 NT QSU no Gunshield NT QSU no Gunshield 52† A R H S
+5cm PaK 38(g) NT QSU A4[3]3[4] NT QSU A4 53† E R H S B
+7.5cm PaK 97/38(g) NT QSU H5[3+] s6 NT QSU H5 s6 54† E R B
+7.5cm PaK 40(g) NT QSU A4[3]3[4] NT QSU A4 55† E R H S B
+Skoda M15 NT QSU NT QSU 56† A R H S C B
+Canon de 75 mle 1897 NT QSU s7 NT QSU s7 57 R B
+Skoda M29 NT AP6 NT AP6 58† A R S
+Skoda M17 NT QSU NT QSU 59† A R S C
+Skoda M28(80) T T 60† S C
+Skoda M14/19 NT s8 NT s8 61† A† R H S C
+leFH 18(g) NT H4[3+] s5 NT H4 s5 62† E H S B
+Skoda M35 NT AP7 C7[CS]† NT AP7 C7† 63† R S C
+G obr. 10/30 NT h-d s7 NT h-d s7 64† R B
+G obr. 38 NT s5[1-2R]† NT 65 R B
+Skoda M14 NT NT 66† R H S
+Skoda M15/16 NT no IF s6 NT no IF s6 67† S C
+C mle 17 S NT s7 NT s7 68† R B
+Mitrailleuse de 13.2 CAJ mle 30 T 2 TK DR† T 2 TK DR† 69† T†1 R B
+Oerlikon FF T LF [NT, 20†, 2 ROF, B11] T LF [NT, 20†, 2 ROF, B11] 70 G† R H S C B
+2cm FlaK 30(g) T LF [NT, 20†[1], 2 ROF, B9] T LF [NT, 20†[1], 2 ROF, B9] 71† E G†1 R B
+2cm FlaK 38(g) T LF [NT, 20†[1], 2 ROF, B10] T LF [NT, 20†[1], 2 ROF, B10] 72† E G†1 R B
+3.7cm FlaK 36(g) T T 73† E R B
+Bofors 40mm T LF [40†[1], 2 ROF] T LF [40†[1], 2 ROF] 74† G†1 R H S C
+Skoda M33 T T 75R S
+8.8cm FlaK 18 o. 36(g) T LF [88†[1], 1 ROF, B11] T LF [88†[1], 1 ROF, B11] 76† E G†1 R S B
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1944.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1944.txt
new file mode 100644
index 0000000..69d7f29
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1944.txt
@@ -0,0 +1,37 @@
+=== ordnance/axis-minor-common/1944 ===
+
+Name Capabilities (effective) # Notes
+------------------------------- ----------------------------- ----------------------------- --- ----------------------
+5cm leGrW 36 5PP 5PP 44 A H S C B
+50mm RM obr. 40 4PP 4PP 45 A R H S C
+8cm GrW 34 NT QSU IR s7 NT QSU IR s7 46† A C B
+Brandt M27/31 NT QSU s7 NT QSU s7 47† A R H S
+PM obr. 38 NT QSU h-d s8 NT QSU h-d s8 48† R H
+Ur wz. 35 1PP 1PP 49 R H S C B
+s18-1100 5PP 5PP 50 A R H
+Kanon PUV vz. 37(t) NT QSU A4[1S] NT QSU A4 51† E H S B
+Bohler M35 NT QSU no Gunshield NT QSU no Gunshield 52† A R H S
+5cm PaK 38(g) NT QSU A4[3]3[4] NT QSU A3 53† E R H S B
+7.5cm PaK 97/38(g) NT QSU H5[3+] s6 NT QSU H5 s6 54† E R B
+7.5cm PaK 40(g) NT QSU A4[3]3[4] NT QSU A3 55† E R H S B
+Skoda M15 NT QSU NT QSU 56† A R H S C B
+Canon de 75 mle 1897 NT QSU s7 NT QSU s7 57 R B
+Skoda M29 NT AP6 NT AP6 58† A R S
+Skoda M17 NT QSU NT QSU 59† A R S C
+Skoda M28(80) T T 60† S C
+Skoda M14/19 NT s8 NT s8 61† A† R H S C
+leFH 18(g) NT H4[3+] s5 NT H4 s5 62† E H S B
+Skoda M35 NT AP7 C7[CS]† NT AP7 C7† 63† R S C
+G obr. 10/30 NT h-d s7 NT h-d s7 64† R B
+G obr. 38 NT s5[1-2R]† NT 65 R B
+Skoda M14 NT NT 66† R H S
+Skoda M15/16 NT no IF s6 NT no IF s6 67† S C
+C mle 17 S NT s7 NT s7 68† R B
+Mitrailleuse de 13.2 CAJ mle 30 T 2 TK DR† T 2 TK DR† 69† T†1 R B
+Oerlikon FF T LF [NT, 20†, 2 ROF, B11] T LF [NT, 20†, 2 ROF, B11] 70 G† R H S C B
+2cm FlaK 30(g) T LF [NT, 20†[1], 2 ROF, B9] T LF [NT, 20†[1], 2 ROF, B9] 71† E G†1 R B
+2cm FlaK 38(g) T LF [NT, 20†[1], 2 ROF, B10] T LF [NT, 20†[1], 2 ROF, B10] 72† E G†1 R B
+3.7cm FlaK 36(g) T T 73† E R B
+Bofors 40mm T LF [40†[1], 2 ROF] T LF [40†[1], 2 ROF] 74† G†1 R H S C
+Skoda M33 T T 75R S
+8.8cm FlaK 18 o. 36(g) T LF [88†[1], 1 ROF, B11] T LF [88†[1], 1 ROF, B11] 76† E G†1 R S B
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1945.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1945.txt
new file mode 100644
index 0000000..4e5986c
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/axis-minor-common/1945.txt
@@ -0,0 +1,37 @@
+=== ordnance/axis-minor-common/1945 ===
+
+Name Capabilities (effective) # Notes
+------------------------------- ----------------------------- ----------------------------- --- ----------------------
+5cm leGrW 36 5PP 5PP 44 A H S C B
+50mm RM obr. 40 4PP 4PP 45 A R H S C
+8cm GrW 34 NT QSU IR s7 NT QSU IR s7 46† A C B
+Brandt M27/31 NT QSU s7 NT QSU s7 47† A R H S
+PM obr. 38 NT QSU h-d s8 NT QSU h-d s8 48† R H
+Ur wz. 35 1PP 1PP 49 R H S C B
+s18-1100 5PP 5PP 50 A R H
+Kanon PUV vz. 37(t) NT QSU A4[1S] NT QSU A4 51† E H S B
+Bohler M35 NT QSU no Gunshield NT QSU no Gunshield 52† A R H S
+5cm PaK 38(g) NT QSU A4[3]3[4] NT QSU A3 53† E R H S B
+7.5cm PaK 97/38(g) NT QSU H5[3+] s6 NT QSU H5 s6 54† E R B
+7.5cm PaK 40(g) NT QSU A4[3]3[4] NT QSU A3 55† E R H S B
+Skoda M15 NT QSU NT QSU 56† A R H S C B
+Canon de 75 mle 1897 NT QSU s7 NT QSU s7 57 R B
+Skoda M29 NT AP6 NT AP6 58† A R S
+Skoda M17 NT QSU NT QSU 59† A R S C
+Skoda M28(80) T T 60† S C
+Skoda M14/19 NT s8 NT s8 61† A† R H S C
+leFH 18(g) NT H4[3+] s5 NT H4 s5 62† E H S B
+Skoda M35 NT AP7 C7[CS]† NT AP7 C7† 63† R S C
+G obr. 10/30 NT h-d s7 NT h-d s7 64† R B
+G obr. 38 NT s5[1-2R]† NT 65 R B
+Skoda M14 NT NT 66† R H S
+Skoda M15/16 NT no IF s6 NT no IF s6 67† S C
+C mle 17 S NT s7 NT s7 68† R B
+Mitrailleuse de 13.2 CAJ mle 30 T 2 TK DR† T 2 TK DR† 69† T†1 R B
+Oerlikon FF T LF [NT, 20†, 2 ROF, B11] T LF [NT, 20†, 2 ROF, B11] 70 G† R H S C B
+2cm FlaK 30(g) T LF [NT, 20†[1], 2 ROF, B9] T LF [NT, 20†[1], 2 ROF, B9] 71† E G†1 R B
+2cm FlaK 38(g) T LF [NT, 20†[1], 2 ROF, B10] T LF [NT, 20†[1], 2 ROF, B10] 72† E G†1 R B
+3.7cm FlaK 36(g) T T 73† E R B
+Bofors 40mm T LF [40†[1], 2 ROF] T LF [40†[1], 2 ROF] 74† G†1 R H S C
+Skoda M33 T T 75R S
+8.8cm FlaK 18 o. 36(g) T LF [88†[1], 1 ROF, B11] T LF [88†[1], 1 ROF, B11] 76† E G†1 R S B
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1940.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1940.txt
new file mode 100644
index 0000000..0c73930
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1940.txt
@@ -0,0 +1,37 @@
+=== vehicles/axis-minor-common/1940 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+-------------- ------- ---- ------------------------------------ ----------------- ------------- --- ---------------------------------------
+L3/35(i) ® yes CS 2 n/a n/a 29† K†1 E F G†2 H C B
+FT-17M(f) ® n/a CS 2 n/a n/a 30† D R C
+FT-17C(f) ® yes CS 2 AP9 AP9 30† D R C
+PzKpfw IB(g) n/a yes CS 2 sD6 sD6 31† K†1 E H C
+R-35(f) ® yes CS 2 AP10 AP10 32† A†1 D E R H B
+H39(f) ® yes CS 2 AP10 AP10 33† A†1 D E H C B
+LT vz 35(g) n/a yes CS 4 sD5 sD5 34† E R S B
+LT vz 38(t)A n/a yes CS 4 A3[1]4[2]3[3] sD6 sD6 35† E R H S
+LT vz 38(t)E n/a yes CS 4 A4[2]3[3] sD7 sD7 35† E H S B
+S-35(f) n/a yes CS 4 n/a n/a 36† A†1 D E H S
+PzKpfw IIIL(g) n/a yes CS 5 A5[2]4[3]3[4] sD5 sD5 37† E O†1 Q R H C
+PzKpfw IIIN(g) n/a yes CS 5 H8[3+] s8 sD7 s8 sD7 38† E O†1 Q R S
+PzKpfw IVD(g) n/a yes CS 5 AP7 H5[3+] s8 sD7 AP7 s8 sD7 39† E Q R
+PzKpfw IVF1(g) n/a yes CS 6 AP7 H5[3+] s8 sD7 AP7 s8 sD7 39† E Q R H B
+PzKpfw IVH(g) n/a yes CS 6 A4[2]3[3] s7 sD5 s7 sD5 39† E O†1 Q R H B
+StuG IIIG(g) n/a yes CS 4 A3[4] s8 sD7 s8 sD7 40† E Q R H B
+JgdPz 38(t) n/a yes CS 4 A3[4] HE7 HE7 41† E H B
+SPW 250/1(g) n/a yes CS 4 n/a n/a 42† E R
+SPW 251/1(g) n/a yes CS 5 n/a n/a 42† E R C
+SPW 251/9(g) n/a yes CS 4 (brew up) H5 s8 H5 s8 42† E R
+OA vz 30(t) ® yes CS 2 n/a n/a 43† E R S
+AB 41(i) n/a yes CS 4 n/a n/a 44† E R C
+PSW 222(g) n/a yes CS 3 sD6 sD6 45† P†1 E M†2 R B
+PSW 222(L)(g) n/a yes CS 3 sD6 sD6 45† P†1 E M†2 R B
+PSW 223(g) n/a yes CS 3 sD6 sD6 46† E M†1 P†2 R B
+Komsomolet(r) n/a yes cs 2†1 n/a n/a 47† E F I†1 J R H S C B
+RSO(g) n/a yes cs 5 n/a n/a 48 S B
+Light Tractor n/a yes cs 4 n/a n/a 49 R H S C B
+Medium Tractor n/a yes cs 5 n/a n/a 49 R H S C B
+Heavy Tractor n/a yes cs 6 n/a n/a 49 R H S C B
+Light Truck n/a yes cs 4 n/a n/a 50 R H S C B
+Medium Truck n/a yes cs 5 n/a n/a 50 R H S C B
+Heavy Truck n/a yes cs 7 n/a n/a 50 R H S C B
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1941.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1941.txt
new file mode 100644
index 0000000..12a19c0
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1941.txt
@@ -0,0 +1,37 @@
+=== vehicles/axis-minor-common/1941 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+-------------- ------- ---- ------------------------------------ ----------------- ------------- --- ---------------------------------------
+L3/35(i) ® yes CS 2 n/a n/a 29† K†1 E F G†2 H C B
+FT-17M(f) ® n/a CS 2 n/a n/a 30† D R C
+FT-17C(f) ® yes CS 2 AP9 AP9 30† D R C
+PzKpfw IB(g) n/a yes CS 2 sD6 sD6 31† K†1 E H C
+R-35(f) ® yes CS 2 AP10 AP10 32† A†1 D E R H B
+H39(f) ® yes CS 2 AP10 AP10 33† A†1 D E H C B
+LT vz 35(g) n/a yes CS 4 sD5 sD5 34† E R S B
+LT vz 38(t)A n/a yes CS 4 A3[1]4[2]3[3] sD6 A3 sD6 35† E R H S
+LT vz 38(t)E n/a yes CS 4 A4[2]3[3] sD7 sD7 35† E H S B
+S-35(f) n/a yes CS 4 n/a n/a 36† A†1 D E H S
+PzKpfw IIIL(g) n/a yes CS 5 A5[2]4[3]3[4] sD5 sD5 37† E O†1 Q R H C
+PzKpfw IIIN(g) n/a yes CS 5 H8[3+] s8 sD7 s8 sD7 38† E O†1 Q R S
+PzKpfw IVD(g) n/a yes CS 5 AP7 H5[3+] s8 sD7 AP7 s8 sD7 39† E Q R
+PzKpfw IVF1(g) n/a yes CS 6 AP7 H5[3+] s8 sD7 AP7 s8 sD7 39† E Q R H B
+PzKpfw IVH(g) n/a yes CS 6 A4[2]3[3] s7 sD5 s7 sD5 39† E O†1 Q R H B
+StuG IIIG(g) n/a yes CS 4 A3[4] s8 sD7 s8 sD7 40† E Q R H B
+JgdPz 38(t) n/a yes CS 4 A3[4] HE7 HE7 41† E H B
+SPW 250/1(g) n/a yes CS 4 n/a n/a 42† E R
+SPW 251/1(g) n/a yes CS 5 n/a n/a 42† E R C
+SPW 251/9(g) n/a yes CS 4 (brew up) H5 s8 H5 s8 42† E R
+OA vz 30(t) ® yes CS 2 n/a n/a 43† E R S
+AB 41(i) n/a yes CS 4 n/a n/a 44† E R C
+PSW 222(g) n/a yes CS 3 sD6 sD6 45† P†1 E M†2 R B
+PSW 222(L)(g) n/a yes CS 3 sD6 sD6 45† P†1 E M†2 R B
+PSW 223(g) n/a yes CS 3 sD6 sD6 46† E M†1 P†2 R B
+Komsomolet(r) n/a yes cs 2†1 n/a n/a 47† E F I†1 J R H S C B
+RSO(g) n/a yes cs 5 n/a n/a 48 S B
+Light Tractor n/a yes cs 4 n/a n/a 49 R H S C B
+Medium Tractor n/a yes cs 5 n/a n/a 49 R H S C B
+Heavy Tractor n/a yes cs 6 n/a n/a 49 R H S C B
+Light Truck n/a yes cs 4 n/a n/a 50 R H S C B
+Medium Truck n/a yes cs 5 n/a n/a 50 R H S C B
+Heavy Truck n/a yes cs 7 n/a n/a 50 R H S C B
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1942.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1942.txt
new file mode 100644
index 0000000..63d8ebd
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1942.txt
@@ -0,0 +1,37 @@
+=== vehicles/axis-minor-common/1942 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+-------------- ------- ---- ------------------------------------ ----------------- ------------- --- ---------------------------------------
+L3/35(i) ® yes CS 2 n/a n/a 29† K†1 E F G†2 H C B
+FT-17M(f) ® n/a CS 2 n/a n/a 30† D R C
+FT-17C(f) ® yes CS 2 AP9 AP9 30† D R C
+PzKpfw IB(g) n/a yes CS 2 sD6 sD6 31† K†1 E H C
+R-35(f) ® yes CS 2 AP10 AP10 32† A†1 D E R H B
+H39(f) ® yes CS 2 AP10 AP10 33† A†1 D E H C B
+LT vz 35(g) n/a yes CS 4 sD5 sD5 34† E R S B
+LT vz 38(t)A n/a yes CS 4 A3[1]4[2]3[3] sD6 A4 sD6 35† E R H S
+LT vz 38(t)E n/a yes CS 4 A4[2]3[3] sD7 A4 sD7 35† E H S B
+S-35(f) n/a yes CS 4 n/a n/a 36† A†1 D E H S
+PzKpfw IIIL(g) n/a yes CS 5 A5[2]4[3]3[4] sD5 A5 sD5 37† E O†1 Q R H C
+PzKpfw IIIN(g) n/a yes CS 5 H8[3+] s8 sD7 s8 sD7 38† E O†1 Q R S
+PzKpfw IVD(g) n/a yes CS 5 AP7 H5[3+] s8 sD7 AP7 s8 sD7 39† E Q R
+PzKpfw IVF1(g) n/a yes CS 6 AP7 H5[3+] s8 sD7 AP7 s8 sD7 39† E Q R H B
+PzKpfw IVH(g) n/a yes CS 6 A4[2]3[3] s7 sD5 A4 s7 sD5 39† E O†1 Q R H B
+StuG IIIG(g) n/a yes CS 4 A3[4] s8 sD7 s8 sD7 40† E Q R H B
+JgdPz 38(t) n/a yes CS 4 A3[4] HE7 HE7 41† E H B
+SPW 250/1(g) n/a yes CS 4 n/a n/a 42† E R
+SPW 251/1(g) n/a yes CS 5 n/a n/a 42† E R C
+SPW 251/9(g) n/a yes CS 4 (brew up) H5 s8 H5 s8 42† E R
+OA vz 30(t) ® yes CS 2 n/a n/a 43† E R S
+AB 41(i) n/a yes CS 4 n/a n/a 44† E R C
+PSW 222(g) n/a yes CS 3 sD6 sD6 45† P†1 E M†2 R B
+PSW 222(L)(g) n/a yes CS 3 sD6 sD6 45† P†1 E M†2 R B
+PSW 223(g) n/a yes CS 3 sD6 sD6 46† E M†1 P†2 R B
+Komsomolet(r) n/a yes cs 2†1 n/a n/a 47† E F I†1 J R H S C B
+RSO(g) n/a yes cs 5 n/a n/a 48 S B
+Light Tractor n/a yes cs 4 n/a n/a 49 R H S C B
+Medium Tractor n/a yes cs 5 n/a n/a 49 R H S C B
+Heavy Tractor n/a yes cs 6 n/a n/a 49 R H S C B
+Light Truck n/a yes cs 4 n/a n/a 50 R H S C B
+Medium Truck n/a yes cs 5 n/a n/a 50 R H S C B
+Heavy Truck n/a yes cs 7 n/a n/a 50 R H S C B
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1943.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1943.txt
new file mode 100644
index 0000000..be15155
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1943.txt
@@ -0,0 +1,37 @@
+=== vehicles/axis-minor-common/1943 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+-------------- ------- ---- ------------------------------------ ----------------- ------------- --- ---------------------------------------
+L3/35(i) ® yes CS 2 n/a n/a 29† K†1 E F G†2 H C B
+FT-17M(f) ® n/a CS 2 n/a n/a 30† D R C
+FT-17C(f) ® yes CS 2 AP9 AP9 30† D R C
+PzKpfw IB(g) n/a yes CS 2 sD6 sD6 31† K†1 E H C
+R-35(f) ® yes CS 2 AP10 AP10 32† A†1 D E R H B
+H39(f) ® yes CS 2 AP10 AP10 33† A†1 D E H C B
+LT vz 35(g) n/a yes CS 4 sD5 sD5 34† E R S B
+LT vz 38(t)A n/a yes CS 4 A3[1]4[2]3[3] sD6 A3 sD6 35† E R H S
+LT vz 38(t)E n/a yes CS 4 A4[2]3[3] sD7 A3 sD7 35† E H S B
+S-35(f) n/a yes CS 4 n/a n/a 36† A†1 D E H S
+PzKpfw IIIL(g) n/a yes CS 5 A5[2]4[3]3[4] sD5 A4 sD5 37† E O†1 Q R H C
+PzKpfw IIIN(g) n/a yes CS 5 H8[3+] s8 sD7 H8 s8 sD7 38† E O†1 Q R S
+PzKpfw IVD(g) n/a yes CS 5 AP7 H5[3+] s8 sD7 AP7 H5 s8 sD7 39† E Q R
+PzKpfw IVF1(g) n/a yes CS 6 AP7 H5[3+] s8 sD7 AP7 H5 s8 sD7 39† E Q R H B
+PzKpfw IVH(g) n/a yes CS 6 A4[2]3[3] s7 sD5 A3 s7 sD5 39† E O†1 Q R H B
+StuG IIIG(g) n/a yes CS 4 A3[4] s8 sD7 s8 sD7 40† E Q R H B
+JgdPz 38(t) n/a yes CS 4 A3[4] HE7 HE7 41† E H B
+SPW 250/1(g) n/a yes CS 4 n/a n/a 42† E R
+SPW 251/1(g) n/a yes CS 5 n/a n/a 42† E R C
+SPW 251/9(g) n/a yes CS 4 (brew up) H5 s8 H5 s8 42† E R
+OA vz 30(t) ® yes CS 2 n/a n/a 43† E R S
+AB 41(i) n/a yes CS 4 n/a n/a 44† E R C
+PSW 222(g) n/a yes CS 3 sD6 sD6 45† P†1 E M†2 R B
+PSW 222(L)(g) n/a yes CS 3 sD6 sD6 45† P†1 E M†2 R B
+PSW 223(g) n/a yes CS 3 sD6 sD6 46† E M†1 P†2 R B
+Komsomolet(r) n/a yes cs 2†1 n/a n/a 47† E F I†1 J R H S C B
+RSO(g) n/a yes cs 5 n/a n/a 48 S B
+Light Tractor n/a yes cs 4 n/a n/a 49 R H S C B
+Medium Tractor n/a yes cs 5 n/a n/a 49 R H S C B
+Heavy Tractor n/a yes cs 6 n/a n/a 49 R H S C B
+Light Truck n/a yes cs 4 n/a n/a 50 R H S C B
+Medium Truck n/a yes cs 5 n/a n/a 50 R H S C B
+Heavy Truck n/a yes cs 7 n/a n/a 50 R H S C B
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1944.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1944.txt
new file mode 100644
index 0000000..0dfc847
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1944.txt
@@ -0,0 +1,37 @@
+=== vehicles/axis-minor-common/1944 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+-------------- ------- ---- ------------------------------------ ----------------- ------------- --- ---------------------------------------
+L3/35(i) ® yes CS 2 n/a n/a 29† K†1 E F G†2 H C B
+FT-17M(f) ® n/a CS 2 n/a n/a 30† D R C
+FT-17C(f) ® yes CS 2 AP9 AP9 30† D R C
+PzKpfw IB(g) n/a yes CS 2 sD6 sD6 31† K†1 E H C
+R-35(f) ® yes CS 2 AP10 AP10 32† A†1 D E R H B
+H39(f) ® yes CS 2 AP10 AP10 33† A†1 D E H C B
+LT vz 35(g) n/a yes CS 4 sD5 sD5 34† E R S B
+LT vz 38(t)A n/a yes CS 4 A3[1]4[2]3[3] sD6 A3 sD6 35† E R H S
+LT vz 38(t)E n/a yes CS 4 A4[2]3[3] sD7 A3 sD7 35† E H S B
+S-35(f) n/a yes CS 4 n/a n/a 36† A†1 D E H S
+PzKpfw IIIL(g) n/a yes CS 5 A5[2]4[3]3[4] sD5 A3 sD5 37† E O†1 Q R H C
+PzKpfw IIIN(g) n/a yes CS 5 H8[3+] s8 sD7 H8 s8 sD7 38† E O†1 Q R S
+PzKpfw IVD(g) n/a yes CS 5 AP7 H5[3+] s8 sD7 AP7 H5 s8 sD7 39† E Q R
+PzKpfw IVF1(g) n/a yes CS 6 AP7 H5[3+] s8 sD7 AP7 H5 s8 sD7 39† E Q R H B
+PzKpfw IVH(g) n/a yes CS 6 A4[2]3[3] s7 sD5 A3 s7 sD5 39† E O†1 Q R H B
+StuG IIIG(g) n/a yes CS 4 A3[4] s8 sD7 A3 s8 sD7 40† E Q R H B
+JgdPz 38(t) n/a yes CS 4 A3[4] HE7 A3 HE7 41† E H B
+SPW 250/1(g) n/a yes CS 4 n/a n/a 42† E R
+SPW 251/1(g) n/a yes CS 5 n/a n/a 42† E R C
+SPW 251/9(g) n/a yes CS 4 (brew up) H5 s8 H5 s8 42† E R
+OA vz 30(t) ® yes CS 2 n/a n/a 43† E R S
+AB 41(i) n/a yes CS 4 n/a n/a 44† E R C
+PSW 222(g) n/a yes CS 3 sD6 sD6 45† P†1 E M†2 R B
+PSW 222(L)(g) n/a yes CS 3 sD6 sD6 45† P†1 E M†2 R B
+PSW 223(g) n/a yes CS 3 sD6 sD6 46† E M†1 P†2 R B
+Komsomolet(r) n/a yes cs 2†1 n/a n/a 47† E F I†1 J R H S C B
+RSO(g) n/a yes cs 5 n/a n/a 48 S B
+Light Tractor n/a yes cs 4 n/a n/a 49 R H S C B
+Medium Tractor n/a yes cs 5 n/a n/a 49 R H S C B
+Heavy Tractor n/a yes cs 6 n/a n/a 49 R H S C B
+Light Truck n/a yes cs 4 n/a n/a 50 R H S C B
+Medium Truck n/a yes cs 5 n/a n/a 50 R H S C B
+Heavy Truck n/a yes cs 7 n/a n/a 50 R H S C B
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1945.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1945.txt
new file mode 100644
index 0000000..7c82a34
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/axis-minor-common/1945.txt
@@ -0,0 +1,37 @@
+=== vehicles/axis-minor-common/1945 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+-------------- ------- ---- ------------------------------------ ----------------- ------------- --- ---------------------------------------
+L3/35(i) ® yes CS 2 n/a n/a 29† K†1 E F G†2 H C B
+FT-17M(f) ® n/a CS 2 n/a n/a 30† D R C
+FT-17C(f) ® yes CS 2 AP9 AP9 30† D R C
+PzKpfw IB(g) n/a yes CS 2 sD6 sD6 31† K†1 E H C
+R-35(f) ® yes CS 2 AP10 AP10 32† A†1 D E R H B
+H39(f) ® yes CS 2 AP10 AP10 33† A†1 D E H C B
+LT vz 35(g) n/a yes CS 4 sD5 sD5 34† E R S B
+LT vz 38(t)A n/a yes CS 4 A3[1]4[2]3[3] sD6 A3 sD6 35† E R H S
+LT vz 38(t)E n/a yes CS 4 A4[2]3[3] sD7 A3 sD7 35† E H S B
+S-35(f) n/a yes CS 4 n/a n/a 36† A†1 D E H S
+PzKpfw IIIL(g) n/a yes CS 5 A5[2]4[3]3[4] sD5 A3 sD5 37† E O†1 Q R H C
+PzKpfw IIIN(g) n/a yes CS 5 H8[3+] s8 sD7 H8 s8 sD7 38† E O†1 Q R S
+PzKpfw IVD(g) n/a yes CS 5 AP7 H5[3+] s8 sD7 AP7 H5 s8 sD7 39† E Q R
+PzKpfw IVF1(g) n/a yes CS 6 AP7 H5[3+] s8 sD7 AP7 H5 s8 sD7 39† E Q R H B
+PzKpfw IVH(g) n/a yes CS 6 A4[2]3[3] s7 sD5 A3 s7 sD5 39† E O†1 Q R H B
+StuG IIIG(g) n/a yes CS 4 A3[4] s8 sD7 A3 s8 sD7 40† E Q R H B
+JgdPz 38(t) n/a yes CS 4 A3[4] HE7 A3 HE7 41† E H B
+SPW 250/1(g) n/a yes CS 4 n/a n/a 42† E R
+SPW 251/1(g) n/a yes CS 5 n/a n/a 42† E R C
+SPW 251/9(g) n/a yes CS 4 (brew up) H5 s8 H5 s8 42† E R
+OA vz 30(t) ® yes CS 2 n/a n/a 43† E R S
+AB 41(i) n/a yes CS 4 n/a n/a 44† E R C
+PSW 222(g) n/a yes CS 3 sD6 sD6 45† P†1 E M†2 R B
+PSW 222(L)(g) n/a yes CS 3 sD6 sD6 45† P†1 E M†2 R B
+PSW 223(g) n/a yes CS 3 sD6 sD6 46† E M†1 P†2 R B
+Komsomolet(r) n/a yes cs 2†1 n/a n/a 47† E F I†1 J R H S C B
+RSO(g) n/a yes cs 5 n/a n/a 48 S B
+Light Tractor n/a yes cs 4 n/a n/a 49 R H S C B
+Medium Tractor n/a yes cs 5 n/a n/a 49 R H S C B
+Heavy Tractor n/a yes cs 6 n/a n/a 49 R H S C B
+Light Truck n/a yes cs 4 n/a n/a 50 R H S C B
+Medium Truck n/a yes cs 5 n/a n/a 50 R H S C B
+Heavy Truck n/a yes cs 7 n/a n/a 50 R H S C B
diff --git a/vasl_templates/webapp/tests/test_vo_reports.py b/vasl_templates/webapp/tests/test_vo_reports.py
index f0ec328..df1f365 100644
--- a/vasl_templates/webapp/tests/test_vo_reports.py
+++ b/vasl_templates/webapp/tests/test_vo_reports.py
@@ -39,7 +39,7 @@ def test_vo_reports( webapp, webdriver ):
nationalities = [
"german", "russian", "american", "british", "italian", "japanese", "chinese", "french",
"polish", "belgian","yugoslavian","danish","dutch","greek", "allied-minor-common",
- "romanian", "hungarian","slovakian","croatian","bulgarian",
+ "romanian", "hungarian","slovakian","croatian","bulgarian", "axis-minor-common"
]
for nat in nationalities:
for vo_type in ["vehicles","ordnance"]: