diff --git a/vasl_templates/webapp/data/vehicles/chinese.json b/vasl_templates/webapp/data/vehicles/chinese.json
new file mode 100644
index 0000000..9cfb8de
--- /dev/null
+++ b/vasl_templates/webapp/data/vehicles/chinese.json
@@ -0,0 +1,119 @@
+[
+
+{ "name": "VCL M1931(b)",
+ "no_radio": "\u00ae",
+ "CS#": 2,
+ "note_number": "1\u2020",
+ "notes": [ "A", "B" ]
+},
+{ "name": "L3/35(i)",
+ "no_radio": "\u00ae",
+ "CS#": "2\u2020",
+ "note_number": "2\u2020",
+ "notes": [ "A", "B", "D\u20201" ]
+},
+{ "name": "PzKpfw IA(g)",
+ "no_radio": "\u00ae",
+ "CS#": 2,
+ "note_number": "3\u2020",
+ "notes": [ "A", "B", "D\u20201" ]
+},
+{ "name": "Vickers 6-Ton Mk E(b)",
+ "no_radio": "\u00ae",
+ "CS#": 3,
+ "capabilities2": { "C": "5\u20202" },
+ "note_number": "4\u2020",
+ "notes": [ "A", "B", "C\u20202", "E\u20201" ]
+},
+{ "name": "T-26TU M33(r)",
+ "CS#": 3,
+ "note_number": "5\u2020",
+ "notes": [ "A", "E\u20201" ]
+},
+{ "name": "M3A3(a)",
+ "CS#": 4,
+ "capabilities2": { "C": "9\u20201" },
+ "note_number": "6\u2020",
+ "notes": [ "A", "B", "C\u20201", "E\u20202", "G" ]
+},
+{ "name": "M4A4(a)",
+ "CS#": "5:brewup",
+ "capabilities2": { "s": 8, "WP": [ [7,"J4+"], "\u2020" ] },
+ "note_number": "7\u2020",
+ "notes": [ "A", "B", "E\u20201", "G" ]
+},
+{ "name": "M3A1(a)",
+ "CS#": 4,
+ "note_number": "8\u2020",
+ "notes": [ "A", "B", "E\u20201" ]
+},
+{ "name": "Stuart Recon(a)",
+ "CS#": 5,
+ "note_number": "9\u2020",
+ "notes": [ "A", "B", "D\u20201", "E\u20202" ]
+},
+{ "name": "Type 22",
+ "no_radio": "\u00ae",
+ "CS#": 4,
+ "note_number": "10\u20201",
+ "notes": [ "B", "E\u20202", "F\u2020" ]
+},
+{ "name": "PSW 221(g)",
+ "CS#": 2,
+ "note_number": "11\u2020",
+ "notes": [ "A", "B", "F\u2020" ]
+},
+{ "name": "PSW 222(g)",
+ "CS#": 3,
+ "note_number": "11\u2020",
+ "notes": [ "A", "B", "E\u20201", "F\u2020" ]
+},
+{ "name": "BA-20(r)",
+ "no_radio": "\u00ae",
+ "CS#": 3,
+ "note_number": "12",
+ "notes": [ "A", "B", "F\u2020" ]
+},
+{ "name": "BA-6(r)",
+ "no_radio": "\u00ae",
+ "CS#": 4,
+ "note_number": "12",
+ "notes": [ "A", "B", "E\u20201", "F\u2020" ]
+},
+{ "name": "VCL Mk VI Carrier(b)",
+ "CS#": "2\u2020",
+ "note_number": "13\u2020",
+ "notes": [ "A", "B", "H\u20201" ]
+},
+{ "name": "Carrier A(b)",
+ "CS#": 3,
+ "note_number": "14\u2020",
+ "notes": [ "A" ]
+},
+{ "name": "Carrier B(b)",
+ "CS#": 3,
+ "note_number": "14\u2020",
+ "notes": [ "A", "E\u20201" ]
+},
+{ "name": "Carrier C(b)",
+ "CS#": 3,
+ "note_number": "14\u2020",
+ "notes": [ "A", "E\u20201" ]
+},
+{ "name": "Henschel 33(g)",
+ "cs#": 7,
+ "note_number": "15\u20201",
+ "notes": [ "A", "F\u2020" ]
+},
+{ "name": "Jeep(a)",
+ "cs#": "2\u2020",
+ "note_number": "16\u2020",
+ "notes": [ "A", "H\u20201" ]
+},
+{ "name": "2\u00bd-Ton(a)",
+ "cs#": 7,
+ "note_number": "16\u2020",
+ "notes": [ "A" ]
+}
+
+]
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1940.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1940.txt
new file mode 100644
index 0000000..45a929d
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1940.txt
@@ -0,0 +1,25 @@
+=== vehicles/chinese/1940 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+--------------------- ------- ---- ------------------------------------ -------------- ------------- ------ ----------------------------------------
+VCL M1931(b) ® yes CS 2 n/a n/a 1† A B
+L3/35(i) ® yes CS 2† n/a n/a 2† A B D†1
+PzKpfw IA(g) ® yes CS 2 n/a n/a 3† A B D†1
+Vickers 6-Ton Mk E(b) ® yes CS 3 C5†[2] C5†[2] 4† A B C†2 E†1
+T-26TU M33(r) n/a yes CS 3 n/a n/a 5† A E†1
+M3A3(a) n/a yes CS 4 C9†[1] C9†[1] 6† A B C†1 E†2 G
+M4A4(a) n/a yes CS 5 (brew up) WP7[J4+]† s8 s8 7† A B E†1 G
+M3A1(a) n/a yes CS 4 n/a n/a 8† A B E†1
+Stuart Recon(a) n/a yes CS 5 n/a n/a 9† A B D†1 E†2
+Type 22 ® yes CS 4 n/a n/a 10†[1] B E†2 F†
+PSW 221(g) n/a yes CS 2 n/a n/a 11† A B F†
+PSW 222(g) n/a yes CS 3 n/a n/a 11† A B E†1 F†
+BA-20(r) ® yes CS 3 n/a n/a 12 A B F†
+BA-6(r) ® yes CS 4 n/a n/a 12 A B E†1 F†
+VCL Mk VI Carrier(b) n/a yes CS 2† n/a n/a 13† A B H†1
+Carrier A(b) n/a yes CS 3 n/a n/a 14† A
+Carrier B(b) n/a yes CS 3 n/a n/a 14† A E†1
+Carrier C(b) n/a yes CS 3 n/a n/a 14† A E†1
+Henschel 33(g) n/a yes cs 7 n/a n/a 15†[1] A F†
+Jeep(a) n/a yes cs 2† n/a n/a 16† A H†1
+2½-Ton(a) n/a yes cs 7 n/a n/a 16† A
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1941.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1941.txt
new file mode 100644
index 0000000..de9fd36
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1941.txt
@@ -0,0 +1,25 @@
+=== vehicles/chinese/1941 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+--------------------- ------- ---- ------------------------------------ -------------- ------------- ------ ----------------------------------------
+VCL M1931(b) ® yes CS 2 n/a n/a 1† A B
+L3/35(i) ® yes CS 2† n/a n/a 2† A B D†1
+PzKpfw IA(g) ® yes CS 2 n/a n/a 3† A B D†1
+Vickers 6-Ton Mk E(b) ® yes CS 3 C5†[2] C5†[2] 4† A B C†2 E†1
+T-26TU M33(r) n/a yes CS 3 n/a n/a 5† A E†1
+M3A3(a) n/a yes CS 4 C9†[1] C9†[1] 6† A B C†1 E†2 G
+M4A4(a) n/a yes CS 5 (brew up) WP7[J4+]† s8 s8 7† A B E†1 G
+M3A1(a) n/a yes CS 4 n/a n/a 8† A B E†1
+Stuart Recon(a) n/a yes CS 5 n/a n/a 9† A B D†1 E†2
+Type 22 ® yes CS 4 n/a n/a 10†[1] B E†2 F†
+PSW 221(g) n/a yes CS 2 n/a n/a 11† A B F†
+PSW 222(g) n/a yes CS 3 n/a n/a 11† A B E†1 F†
+BA-20(r) ® yes CS 3 n/a n/a 12 A B F†
+BA-6(r) ® yes CS 4 n/a n/a 12 A B E†1 F†
+VCL Mk VI Carrier(b) n/a yes CS 2† n/a n/a 13† A B H†1
+Carrier A(b) n/a yes CS 3 n/a n/a 14† A
+Carrier B(b) n/a yes CS 3 n/a n/a 14† A E†1
+Carrier C(b) n/a yes CS 3 n/a n/a 14† A E†1
+Henschel 33(g) n/a yes cs 7 n/a n/a 15†[1] A F†
+Jeep(a) n/a yes cs 2† n/a n/a 16† A H†1
+2½-Ton(a) n/a yes cs 7 n/a n/a 16† A
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1942.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1942.txt
new file mode 100644
index 0000000..91f87cc
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1942.txt
@@ -0,0 +1,25 @@
+=== vehicles/chinese/1942 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+--------------------- ------- ---- ------------------------------------ -------------- ------------- ------ ----------------------------------------
+VCL M1931(b) ® yes CS 2 n/a n/a 1† A B
+L3/35(i) ® yes CS 2† n/a n/a 2† A B D†1
+PzKpfw IA(g) ® yes CS 2 n/a n/a 3† A B D†1
+Vickers 6-Ton Mk E(b) ® yes CS 3 C5†[2] C5†[2] 4† A B C†2 E†1
+T-26TU M33(r) n/a yes CS 3 n/a n/a 5† A E†1
+M3A3(a) n/a yes CS 4 C9†[1] C9†[1] 6† A B C†1 E†2 G
+M4A4(a) n/a yes CS 5 (brew up) WP7[J4+]† s8 s8 7† A B E†1 G
+M3A1(a) n/a yes CS 4 n/a n/a 8† A B E†1
+Stuart Recon(a) n/a yes CS 5 n/a n/a 9† A B D†1 E†2
+Type 22 ® yes CS 4 n/a n/a 10†[1] B E†2 F†
+PSW 221(g) n/a yes CS 2 n/a n/a 11† A B F†
+PSW 222(g) n/a yes CS 3 n/a n/a 11† A B E†1 F†
+BA-20(r) ® yes CS 3 n/a n/a 12 A B F†
+BA-6(r) ® yes CS 4 n/a n/a 12 A B E†1 F†
+VCL Mk VI Carrier(b) n/a yes CS 2† n/a n/a 13† A B H†1
+Carrier A(b) n/a yes CS 3 n/a n/a 14† A
+Carrier B(b) n/a yes CS 3 n/a n/a 14† A E†1
+Carrier C(b) n/a yes CS 3 n/a n/a 14† A E†1
+Henschel 33(g) n/a yes cs 7 n/a n/a 15†[1] A F†
+Jeep(a) n/a yes cs 2† n/a n/a 16† A H†1
+2½-Ton(a) n/a yes cs 7 n/a n/a 16† A
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1943.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1943.txt
new file mode 100644
index 0000000..4f460f6
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1943.txt
@@ -0,0 +1,25 @@
+=== vehicles/chinese/1943 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+--------------------- ------- ---- ------------------------------------ -------------- ------------- ------ ----------------------------------------
+VCL M1931(b) ® yes CS 2 n/a n/a 1† A B
+L3/35(i) ® yes CS 2† n/a n/a 2† A B D†1
+PzKpfw IA(g) ® yes CS 2 n/a n/a 3† A B D†1
+Vickers 6-Ton Mk E(b) ® yes CS 3 C5†[2] C5†[2] 4† A B C†2 E†1
+T-26TU M33(r) n/a yes CS 3 n/a n/a 5† A E†1
+M3A3(a) n/a yes CS 4 C9†[1] C9†[1] 6† A B C†1 E†2 G
+M4A4(a) n/a yes CS 5 (brew up) WP7[J4+]† s8 s8 7† A B E†1 G
+M3A1(a) n/a yes CS 4 n/a n/a 8† A B E†1
+Stuart Recon(a) n/a yes CS 5 n/a n/a 9† A B D†1 E†2
+Type 22 ® yes CS 4 n/a n/a 10†[1] B E†2 F†
+PSW 221(g) n/a yes CS 2 n/a n/a 11† A B F†
+PSW 222(g) n/a yes CS 3 n/a n/a 11† A B E†1 F†
+BA-20(r) ® yes CS 3 n/a n/a 12 A B F†
+BA-6(r) ® yes CS 4 n/a n/a 12 A B E†1 F†
+VCL Mk VI Carrier(b) n/a yes CS 2† n/a n/a 13† A B H†1
+Carrier A(b) n/a yes CS 3 n/a n/a 14† A
+Carrier B(b) n/a yes CS 3 n/a n/a 14† A E†1
+Carrier C(b) n/a yes CS 3 n/a n/a 14† A E†1
+Henschel 33(g) n/a yes cs 7 n/a n/a 15†[1] A F†
+Jeep(a) n/a yes cs 2† n/a n/a 16† A H†1
+2½-Ton(a) n/a yes cs 7 n/a n/a 16† A
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1944.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1944.txt
new file mode 100644
index 0000000..080db50
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1944.txt
@@ -0,0 +1,25 @@
+=== vehicles/chinese/1944 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+--------------------- ------- ---- ------------------------------------ -------------- ------------- ------ ----------------------------------------
+VCL M1931(b) ® yes CS 2 n/a n/a 1† A B
+L3/35(i) ® yes CS 2† n/a n/a 2† A B D†1
+PzKpfw IA(g) ® yes CS 2 n/a n/a 3† A B D†1
+Vickers 6-Ton Mk E(b) ® yes CS 3 C5†[2] C5†[2] 4† A B C†2 E†1
+T-26TU M33(r) n/a yes CS 3 n/a n/a 5† A E†1
+M3A3(a) n/a yes CS 4 C9†[1] C9†[1] 6† A B C†1 E†2 G
+M4A4(a) n/a yes CS 5 (brew up) WP7[J4+]† s8 s8 7† A B E†1 G
+M3A1(a) n/a yes CS 4 n/a n/a 8† A B E†1
+Stuart Recon(a) n/a yes CS 5 n/a n/a 9† A B D†1 E†2
+Type 22 ® yes CS 4 n/a n/a 10†[1] B E†2 F†
+PSW 221(g) n/a yes CS 2 n/a n/a 11† A B F†
+PSW 222(g) n/a yes CS 3 n/a n/a 11† A B E†1 F†
+BA-20(r) ® yes CS 3 n/a n/a 12 A B F†
+BA-6(r) ® yes CS 4 n/a n/a 12 A B E†1 F†
+VCL Mk VI Carrier(b) n/a yes CS 2† n/a n/a 13† A B H†1
+Carrier A(b) n/a yes CS 3 n/a n/a 14† A
+Carrier B(b) n/a yes CS 3 n/a n/a 14† A E†1
+Carrier C(b) n/a yes CS 3 n/a n/a 14† A E†1
+Henschel 33(g) n/a yes cs 7 n/a n/a 15†[1] A F†
+Jeep(a) n/a yes cs 2† n/a n/a 16† A H†1
+2½-Ton(a) n/a yes cs 7 n/a n/a 16† A
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1945.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1945.txt
new file mode 100644
index 0000000..1bd40ba
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/chinese/1945.txt
@@ -0,0 +1,25 @@
+=== vehicles/chinese/1945 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+--------------------- ------- ---- ------------------------------------ -------------- ------------- ------ ----------------------------------------
+VCL M1931(b) ® yes CS 2 n/a n/a 1† A B
+L3/35(i) ® yes CS 2† n/a n/a 2† A B D†1
+PzKpfw IA(g) ® yes CS 2 n/a n/a 3† A B D†1
+Vickers 6-Ton Mk E(b) ® yes CS 3 C5†[2] C5†[2] 4† A B C†2 E†1
+T-26TU M33(r) n/a yes CS 3 n/a n/a 5† A E†1
+M3A3(a) n/a yes CS 4 C9†[1] C9†[1] 6† A B C†1 E†2 G
+M4A4(a) n/a yes CS 5 (brew up) WP7[J4+]† s8 WP7† s8 7† A B E†1 G
+M3A1(a) n/a yes CS 4 n/a n/a 8† A B E†1
+Stuart Recon(a) n/a yes CS 5 n/a n/a 9† A B D†1 E†2
+Type 22 ® yes CS 4 n/a n/a 10†[1] B E†2 F†
+PSW 221(g) n/a yes CS 2 n/a n/a 11† A B F†
+PSW 222(g) n/a yes CS 3 n/a n/a 11† A B E†1 F†
+BA-20(r) ® yes CS 3 n/a n/a 12 A B F†
+BA-6(r) ® yes CS 4 n/a n/a 12 A B E†1 F†
+VCL Mk VI Carrier(b) n/a yes CS 2† n/a n/a 13† A B H†1
+Carrier A(b) n/a yes CS 3 n/a n/a 14† A
+Carrier B(b) n/a yes CS 3 n/a n/a 14† A E†1
+Carrier C(b) n/a yes CS 3 n/a n/a 14† A E†1
+Henschel 33(g) n/a yes cs 7 n/a n/a 15†[1] A F†
+Jeep(a) n/a yes cs 2† n/a n/a 16† A H†1
+2½-Ton(a) n/a yes cs 7 n/a n/a 16† A
diff --git a/vasl_templates/webapp/tests/test_capabilities.py b/vasl_templates/webapp/tests/test_capabilities.py
index f79d197..d77d51a 100644
--- a/vasl_templates/webapp/tests/test_capabilities.py
+++ b/vasl_templates/webapp/tests/test_capabilities.py
@@ -255,6 +255,13 @@ def test_month_capabilities( webapp, webdriver ):
assert "H7\u20202" in val2
assert _get_capabilities( webdriver, webapp, *vehicle, "ETO", "01/1943" ) == val2
+ # M4A4(a): WP7(J4+)†
+ vehicle = [ "chinese", "vehicles", "M4A4(a)" ]
+ _check_capabilities( webdriver, webapp, *vehicle, "ETO", "12/1943", "s8" )
+ _check_capabilities( webdriver, webapp, *vehicle, "ETO", "05/1944", "s8" )
+ _check_capabilities( webdriver, webapp, *vehicle, "ETO", "06/1944", "WP7\u2020 s8" )
+ _check_capabilities( webdriver, webapp, *vehicle, "ETO", "01/1945", "WP7\u2020 s8" )
+
# ---------------------------------------------------------------------
@pytest.mark.skipif(
diff --git a/vasl_templates/webapp/tests/test_vo_reports.py b/vasl_templates/webapp/tests/test_vo_reports.py
index da86521..2497efa 100644
--- a/vasl_templates/webapp/tests/test_vo_reports.py
+++ b/vasl_templates/webapp/tests/test_vo_reports.py
@@ -36,7 +36,7 @@ def test_vo_reports( webapp, webdriver ):
)
# check each vehicle/ordnance report
- for nat in ["german","russian","american","british","italian","japanese"]:
+ for nat in ["german","russian","american","british","italian","japanese","chinese"]:
for vo_type in ["vehicles","ordnance"]:
for year in range(1940,1945+1):