From 48e13d88985600e53ae4afe4c6ced02a9e5b23e8 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Sat, 22 Feb 2020 17:29:19 +0100
Subject: [PATCH] customer and manufacturer report for fwd medium lorry,
 legislative class

---
 .../VectoCommon/Models/AxleConfiguration.cs   |  28 +-
 .../VectoCommon/Models/LegislativeClass.cs    |   3 +-
 .../XMLDeclarationVehicleDataProvider.cs      |   9 +
 .../DeclarationDataAdapterHeavyLorry.cs       |   1 +
 .../DeclarationVTPModeVectoRunDataFactory.cs  |   2 +
 .../XML/AbstractXMLManufacturerReport.cs      |  15 +
 .../OutputData/XML/XMLManufacturerReport.cs   |  14 +
 .../Resources/XSD/VectoOutputCustomer.0.8.xsd |  75 ++-
 .../XSD/VectoOutputManufacturer.0.8.xsd       | 507 ++++++++++--------
 VectoCore/VectoCoreTest/VectoCoreTest.csproj  |  15 +
 10 files changed, 393 insertions(+), 276 deletions(-)

diff --git a/VectoCommon/VectoCommon/Models/AxleConfiguration.cs b/VectoCommon/VectoCommon/Models/AxleConfiguration.cs
index 22d1988c55..3c2d563b29 100644
--- a/VectoCommon/VectoCommon/Models/AxleConfiguration.cs
+++ b/VectoCommon/VectoCommon/Models/AxleConfiguration.cs
@@ -93,18 +93,16 @@ namespace TUGraz.VectoCommon.Models
 		{
 			switch (self) {
 				case AxleConfiguration.AxleConfig_4x2:
-				case AxleConfiguration.AxleConfig_4x4:
-					return 2;
+				case AxleConfiguration.AxleConfig_4x4: return 2;
 				case AxleConfiguration.AxleConfig_6x2:
 				case AxleConfiguration.AxleConfig_6x4:
-				case AxleConfiguration.AxleConfig_6x6:
-					return 3;
+				case AxleConfiguration.AxleConfig_6x6: return 3;
 				case AxleConfiguration.AxleConfig_8x2:
 				case AxleConfiguration.AxleConfig_8x4:
 				case AxleConfiguration.AxleConfig_8x6:
-				case AxleConfiguration.AxleConfig_8x8:
-					return 4;
+				case AxleConfiguration.AxleConfig_8x8: return 4;
 			}
+
 			return 0;
 		}
 
@@ -114,19 +112,21 @@ namespace TUGraz.VectoCommon.Models
 				case AxleConfiguration.AxleConfig_4x2:
 				case AxleConfiguration.AxleConfig_4x2F:
 				case AxleConfiguration.AxleConfig_6x2:
-				case AxleConfiguration.AxleConfig_8x2:
-					return 1;
+				case AxleConfiguration.AxleConfig_8x2: return 1;
 				case AxleConfiguration.AxleConfig_4x4:
 				case AxleConfiguration.AxleConfig_6x4:
-				case AxleConfiguration.AxleConfig_8x4:
-					return 2;
+				case AxleConfiguration.AxleConfig_8x4: return 2;
 				case AxleConfiguration.AxleConfig_6x6:
-				case AxleConfiguration.AxleConfig_8x6:
-					return 3;
-				case AxleConfiguration.AxleConfig_8x8:
-					return 4;
+				case AxleConfiguration.AxleConfig_8x6: return 3;
+				case AxleConfiguration.AxleConfig_8x8: return 4;
 			}
+
 			return 0;
 		}
+
+		public static bool AxlegearIncludedInGearbox(this AxleConfiguration self)
+		{
+			return self == AxleConfiguration.AxleConfig_4x2F;
+		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCommon/VectoCommon/Models/LegislativeClass.cs b/VectoCommon/VectoCommon/Models/LegislativeClass.cs
index c2f92c682f..cf710de297 100644
--- a/VectoCommon/VectoCommon/Models/LegislativeClass.cs
+++ b/VectoCommon/VectoCommon/Models/LegislativeClass.cs
@@ -35,7 +35,8 @@ namespace TUGraz.VectoCommon.Models
 	{
 		Unknown,
 		N2,
-		N3
+		N3,
+		M3
 	}
 
 	public static class LegislativeClassHelper
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
index 91c6397f5c..1fa6d3dde5 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
@@ -672,6 +672,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			get { return null; }
 		}
 
+		#region Overrides of XMLDeclarationVehicleDataProviderV10
+
+		public override LegislativeClass LegislativeClass
+		{
+			get { return LegislativeClass.M3; }
+		}
+
+		#endregion
+
 		public override IPTOTransmissionInputData PTOTransmissionInputData
 		{
 			get { return null; }
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterHeavyLorry.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterHeavyLorry.cs
index f20bf2a436..11ecb3ad5b 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterHeavyLorry.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterHeavyLorry.cs
@@ -114,6 +114,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 		protected virtual VehicleData CreateNonExemptedVehicleData(IVehicleDeclarationInputData data, Mission mission, Kilogram loading)
 		{
 			var retVal = SetCommonVehicleData(data);
+			retVal.LegislativeClass = data.LegislativeClass;
 			retVal.AxleConfiguration = data.AxleConfiguration;
 			retVal.AirDensity = DeclarationData.AirDensity;
 			retVal.VIN = data.VIN;
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs
index 0793fb82c8..ae81e4e071 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs
@@ -183,6 +183,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 			runData.Mission = mission;
 			runData.Loading = loading.Key;
 			runData.VehicleData.VehicleClass = Segment.VehicleClass;
+			runData.VehicleData.LegislativeClass = JobInputData.Vehicle.LegislativeClass;
 			yield return runData;
 
 			// simulate the Measured cycle
@@ -204,6 +205,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 				MissionType = MissionType.VerificationTest
 			};
 			vtpRunData.VehicleData.VehicleClass = Segment.VehicleClass;
+			vtpRunData.VehicleData.LegislativeClass = JobInputData.Vehicle.LegislativeClass;
 
 			//var ncvStd = DeclarationData.FuelData.Lookup(JobInputData.Vehicle.Components.EngineInputData.FuelType).LowerHeatingValueVecto;
 			//var ncvCorrection = ncvStd / JobInputData.NetCalorificValueTestFuel;
diff --git a/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs
index 052689f019..cca2c7d746 100644
--- a/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs
@@ -328,6 +328,21 @@ namespace TUGraz.VectoCore.OutputData.XML
 			);
 		}
 
+		protected virtual XElement GetGearboxDescription(GearboxData gearboxData, AxleGearData axlegearData)
+		{
+			return new XElement(
+				tns + XMLNames.Component_Gearbox,
+				GetCommonDescription(gearboxData),
+				new XElement(tns + XMLNames.Gearbox_TransmissionType, gearboxData.Type.ToXMLFormat()),
+				new XElement(tns + XMLNames.Report_GetGearbox_GearsCount, gearboxData.Gears.Count),
+				new XElement(tns + XMLNames.Gearbox_AxlegearRatio, axlegearData.AxleGear.Ratio.ToXMLFormat(3)),
+				new XElement(
+					tns + XMLNames.Report_Gearbox_TransmissionRatioFinalGear,
+					gearboxData.Gears[gearboxData.Gears.Keys.Max()].Ratio.ToXMLFormat(3))
+			);
+		}
+
+
 		protected virtual XElement GetTorqueConverterDescription(TorqueConverterData torqueConverterData)
 		{
 			if (torqueConverterData == null) {
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs
index cf93db46a5..d14364d236 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs
@@ -77,6 +77,20 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 		protected override XElement VehicleComponents(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes)
 		{
+			if (modelData.VehicleData.AxleConfiguration.AxlegearIncludedInGearbox()) {
+				return new XElement(
+					tns + XMLNames.Vehicle_Components,
+					new XAttribute(xsi + "type", "ComponentsTruckFWDType"),
+					GetEngineDescription(modelData.EngineData, fuelModes),
+					GetGearboxDescription(modelData.GearboxData, modelData.AxleGearData),
+					GetTorqueConverterDescription(modelData.GearboxData.TorqueConverterData),
+					GetRetarderDescription(modelData.Retarder),
+					GetAngledriveDescription(modelData.AngledriveData),
+					GetAirDragDescription(modelData.AirdragData),
+					GetAxleWheelsDescription(modelData.VehicleData),
+					GetAuxiliariesDescription(modelData)
+				);
+			}
 			return new XElement(
 				tns + XMLNames.Vehicle_Components,
 				new XAttribute(xsi + "type", "ComponentsTruckType"),
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputCustomer.0.8.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputCustomer.0.8.xsd
index 544aef5674..48877f1aff 100644
--- a/VectoCore/VectoCore/Resources/XSD/VectoOutputCustomer.0.8.xsd
+++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputCustomer.0.8.xsd
@@ -18,6 +18,30 @@
 			<xs:attribute name="schemaVersion" type="xs:decimal" use="required"/>
 		</xs:complexType>
 	</xs:element>
+	<xs:complexType name="ADASType">
+		<xs:sequence>
+			<xs:element name="EngineStopStart" type="xs:boolean">
+				<xs:annotation>
+					<xs:documentation>P271 / II.1.2.11</xs:documentation>
+				</xs:annotation>
+			</xs:element>
+			<xs:element name="EcoRollWithoutEngineStop" type="xs:boolean">
+				<xs:annotation>
+					<xs:documentation>P272 / II.1.2.12</xs:documentation>
+				</xs:annotation>
+			</xs:element>
+			<xs:element name="EcoRollWithEngineStop" type="xs:boolean">
+				<xs:annotation>
+					<xs:documentation>P273 / II.1.2.13</xs:documentation>
+				</xs:annotation>
+			</xs:element>
+			<xs:element name="PredictiveCruiseControl" type="xs:boolean">
+				<xs:annotation>
+					<xs:documentation>P274 / II.1.2.14</xs:documentation>
+				</xs:annotation>
+			</xs:element>
+		</xs:sequence>
+	</xs:complexType>
 	<xs:complexType name="CO2Type">
 		<xs:simpleContent>
 			<xs:extension base="xs:double">
@@ -251,7 +275,7 @@
 			</xs:element>
 			<xs:choice>
 				<xs:sequence>
-					<xs:element name="AxleConfiguration" type="vdecdef:VehicleAxleConfigurationDeclarationType">
+					<xs:element name="AxleConfiguration" type="xs:string">
 						<xs:annotation>
 							<xs:documentation>P037 / II.1.1.3</xs:documentation>
 						</xs:annotation>
@@ -403,6 +427,11 @@
 			<xs:enumeration value="g/m³-km"/>
 		</xs:restriction>
 	</xs:simpleType>
+	<xs:simpleType name="DisplacementType">
+		<xs:restriction base="xs:string">
+			<xs:enumeration value="ltr"/>
+		</xs:restriction>
+	</xs:simpleType>
 	<xs:simpleType name="DistanceUnitType">
 		<xs:restriction base="xs:token">
 			<xs:enumeration value="km"/>
@@ -438,50 +467,20 @@
 			<xs:enumeration value="Construction"/>
 		</xs:restriction>
 	</xs:simpleType>
-	<xs:simpleType name="SpeedUnitType">
-		<xs:restriction base="xs:token">
-			<xs:enumeration value="km/h"/>
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="VehicleGroupType">
-		<xs:restriction base="xs:int">
-			<xs:minInclusive value="1"/>
-			<xs:maxInclusive value="16"/>
-		</xs:restriction>
-	</xs:simpleType>
 	<xs:simpleType name="PowerUnitType">
 		<xs:restriction base="xs:string">
 			<xs:enumeration value="kW"/>
 			<xs:enumeration value="W"/>
 		</xs:restriction>
 	</xs:simpleType>
-	<xs:simpleType name="DisplacementType">
+	<xs:simpleType name="SpeedUnitType">
+		<xs:restriction base="xs:token">
+			<xs:enumeration value="km/h"/>
+		</xs:restriction>
+	</xs:simpleType>
+	<xs:simpleType name="VehicleGroupType">
 		<xs:restriction base="xs:string">
-			<xs:enumeration value="ltr"/>
+			<xs:minLength value="1"/>
 		</xs:restriction>
 	</xs:simpleType>
-	<xs:complexType name="ADASType">
-		<xs:sequence>
-			<xs:element name="EngineStopStart" type="xs:boolean">
-				<xs:annotation>
-					<xs:documentation>P271 / II.1.2.11</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:element name="EcoRollWithoutEngineStop" type="xs:boolean">
-				<xs:annotation>
-					<xs:documentation>P272 / II.1.2.12</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:element name="EcoRollWithEngineStop" type="xs:boolean">
-				<xs:annotation>
-					<xs:documentation>P273 / II.1.2.13</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:element name="PredictiveCruiseControl" type="xs:boolean">
-				<xs:annotation>
-					<xs:documentation>P274 / II.1.2.14</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-		</xs:sequence>
-	</xs:complexType>
 </xs:schema>
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd
index 8d6b97b146..cc3f924ab6 100644
--- a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd
+++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd
@@ -8,6 +8,32 @@
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" schemaLocation="VectoDeclarationDefinitions.2.6_Buses.xsd"/>
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" schemaLocation="VectoDeclarationDefinitions.xsd"/>
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" schemaLocation="VectoOutputDefinitions.xsd"/>
+	<xs:complexType name="AbstractComponentsType" abstract="true"/>
+	<xs:complexType name="AbstractVehicleType" abstract="true"/>
+	<xs:complexType name="ADASType">
+		<xs:sequence>
+			<xs:element name="EngineStopStart" type="xs:boolean">
+				<xs:annotation>
+					<xs:documentation>P271 / I.1.12.1</xs:documentation>
+				</xs:annotation>
+			</xs:element>
+			<xs:element name="EcoRollWithoutEngineStop" type="xs:boolean">
+				<xs:annotation>
+					<xs:documentation>P272 / I.1.12.2</xs:documentation>
+				</xs:annotation>
+			</xs:element>
+			<xs:element name="EcoRollWithEngineStop" type="xs:boolean">
+				<xs:annotation>
+					<xs:documentation>P273 / I.1.12.3</xs:documentation>
+				</xs:annotation>
+			</xs:element>
+			<xs:element name="PredictiveCruiseControl" type="xs:boolean">
+				<xs:annotation>
+					<xs:documentation>P274 / I.1.12.4</xs:documentation>
+				</xs:annotation>
+			</xs:element>
+		</xs:sequence>
+	</xs:complexType>
 	<xs:complexType name="AirdragType">
 		<xs:sequence>
 			<xs:element name="Model" minOccurs="0">
@@ -190,6 +216,86 @@
 			<xs:element name="DigestValue" type="xs:token"/>
 		</xs:sequence>
 	</xs:complexType>
+	<xs:complexType name="ComponentsPrimaryBusType">
+		<xs:complexContent>
+			<xs:extension base="AbstractComponentsType">
+				<xs:sequence>
+					<xs:element name="Engine" type="EngineType"/>
+					<xs:element name="Gearbox" type="GearboxType"/>
+					<xs:element name="TorqueConverter" type="TorqueconverterType" minOccurs="0"/>
+					<xs:element name="Retarder" type="RetarderType"/>
+					<xs:element name="Angledrive" type="AngledriveType" minOccurs="0"/>
+					<xs:element name="Axlegear" type="AxlegearType"/>
+					<xs:element name="AxleWheels" type="AxleWheelsType"/>
+					<xs:element name="Auxiliaries" type="v2.6:AbstractPrimaryVehicleAuxiliaryDataDeclarationType"/>
+				</xs:sequence>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+	<xs:complexType name="ComponentsTruckType">
+		<xs:complexContent>
+			<xs:extension base="AbstractComponentsType">
+				<xs:sequence>
+					<xs:element name="Engine" type="EngineType"/>
+					<xs:element name="Gearbox" type="GearboxType"/>
+					<xs:element name="TorqueConverter" type="TorqueconverterType" minOccurs="0"/>
+					<xs:element name="Retarder" type="RetarderType"/>
+					<xs:element name="Angledrive" type="AngledriveType" minOccurs="0"/>
+					<xs:element name="Axlegear" type="AxlegearType"/>
+					<xs:element name="AirDrag" type="AirdragType"/>
+					<xs:element name="AxleWheels" type="AxleWheelsType"/>
+					<xs:element name="Auxiliaries" type="AuxiliariesTruckType"/>
+				</xs:sequence>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+	<xs:complexType name="ComponentsTruckFWDType">
+		<xs:complexContent>
+			<xs:extension base="AbstractComponentsType">
+				<xs:sequence>
+					<xs:element name="Engine" type="EngineType"/>
+					<xs:element name="Gearbox" type="GearboxFWDType"/>
+					<xs:element name="TorqueConverter" type="TorqueconverterType" minOccurs="0"/>
+					<xs:element name="Retarder" type="RetarderType"/>
+					<xs:element name="Angledrive" type="AngledriveType" minOccurs="0"/>
+					<xs:element name="AirDrag" type="AirdragType"/>
+					<xs:element name="AxleWheels" type="AxleWheelsType"/>
+					<xs:element name="Auxiliaries" type="AuxiliariesTruckType"/>
+				</xs:sequence>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+	<xs:complexType name="EngineSpeedDrivingType">
+		<xs:sequence>
+			<xs:element name="Min">
+				<xs:complexType>
+					<xs:simpleContent>
+						<xs:extension base="xs:double">
+							<xs:attribute name="unit" type="AngularVelocityUnitType" use="required"/>
+						</xs:extension>
+					</xs:simpleContent>
+				</xs:complexType>
+			</xs:element>
+			<xs:element name="Average">
+				<xs:complexType>
+					<xs:simpleContent>
+						<xs:extension base="xs:double">
+							<xs:attribute name="unit" type="AngularVelocityUnitType" use="required"/>
+						</xs:extension>
+					</xs:simpleContent>
+				</xs:complexType>
+			</xs:element>
+			<xs:element name="Max">
+				<xs:complexType>
+					<xs:simpleContent>
+						<xs:extension base="xs:double">
+							<xs:attribute name="unit" type="AngularVelocityUnitType" use="required"/>
+						</xs:extension>
+					</xs:simpleContent>
+				</xs:complexType>
+			</xs:element>
+		</xs:sequence>
+	</xs:complexType>
 	<xs:complexType name="EngineType">
 		<xs:sequence>
 			<xs:element name="Model" type="vdecdef:ModelType">
@@ -320,6 +426,51 @@
 			</xs:element>
 		</xs:sequence>
 	</xs:complexType>
+	<xs:complexType name="GearboxFWDType">
+		<xs:sequence>
+			<xs:element name="Model" type="vdecdef:ModelType">
+				<xs:annotation>
+					<xs:documentation>P205 / I.1.3.1</xs:documentation>
+				</xs:annotation>
+			</xs:element>
+			<xs:element name="CertificationMethod" type="vdecdef:GearboxCertificationOptionType">
+				<xs:annotation>
+					<xs:documentation>P154 / I.1.3.3 / #26</xs:documentation>
+				</xs:annotation>
+			</xs:element>
+			<xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0">
+				<xs:annotation>
+					<xs:documentation>P262 / I.1.3.2 / #4</xs:documentation>
+				</xs:annotation>
+			</xs:element>
+			<xs:element name="DigestValue" type="xs:token">
+				<xs:annotation>
+					<xs:documentation>? / I.1.3.9</xs:documentation>
+				</xs:annotation>
+			</xs:element>
+			<xs:element name="TransmissionType" type="vdecdef:GearboxTransmissionTypeType">
+				<xs:annotation>
+					<xs:documentation>P076 / I.1.3.4 / #27</xs:documentation>
+				</xs:annotation>
+			</xs:element>
+			<xs:element name="GearsCount">
+				<xs:annotation>
+					<xs:documentation>P199 / I.1.3.5 / #28</xs:documentation>
+				</xs:annotation>
+				<xs:simpleType>
+					<xs:restriction base="xs:int">
+						<xs:minInclusive value="1"/>
+					</xs:restriction>
+				</xs:simpleType>
+			</xs:element>
+			<xs:element name="AxlegearRatio" type="vdecdef:AxlegearRatioType"/>
+			<xs:element name="TransmissionRatioFinalGear" type="vdecdef:GearboxGearRatioType">
+				<xs:annotation>
+					<xs:documentation>P078 / I.1.3.6 / #29</xs:documentation>
+				</xs:annotation>
+			</xs:element>
+		</xs:sequence>
+	</xs:complexType>
 	<xs:complexType name="ResultType">
 		<xs:sequence>
 			<xs:element name="Mission" type="MissionTypeType">
@@ -558,6 +709,110 @@
 			</xs:extension>
 		</xs:complexContent>
 	</xs:complexType>
+	<xs:complexType name="VehicleExemptedTruckType">
+		<xs:complexContent>
+			<xs:extension base="AbstractVehicleType">
+				<xs:sequence>
+					<xs:element name="Model" type="vdecdef:ModelType">
+						<xs:annotation>
+							<xs:documentation>P236 / I.1.1.2</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="Manufacturer" type="vdecdef:ManufacturerType">
+						<xs:annotation>
+							<xs:documentation>P235 / I.1.1.1 / #14</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="ManufacturerAddress" type="vdecdef:ManufacturerAddressType">
+						<xs:annotation>
+							<xs:documentation>P252 / I.1.1.1 / #14</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="VIN" type="vdecdef:VINType">
+						<xs:annotation>
+							<xs:documentation>P238 / I.1.1.3 / #1</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="LegislativeClass" type="vdecdef:LegislativeClassDeclarationType">
+						<xs:annotation>
+							<xs:documentation>P251 / I.1.1.4 / #10</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="GrossVehicleMass">
+						<xs:annotation>
+							<xs:documentation>P041 / I.1.1.6 / #12</xs:documentation>
+						</xs:annotation>
+						<xs:complexType>
+							<xs:simpleContent>
+								<xs:extension base="xs:double">
+									<xs:attribute name="unit" type="MassUnitType" use="required"/>
+								</xs:extension>
+							</xs:simpleContent>
+						</xs:complexType>
+					</xs:element>
+					<xs:element name="CurbMassChassis">
+						<xs:annotation>
+							<xs:documentation>P038 / I.1.1.8 / #16</xs:documentation>
+							<xs:documentation>P038 / I.1.1.8 / #16</xs:documentation>
+						</xs:annotation>
+						<xs:complexType>
+							<xs:simpleContent>
+								<xs:extension base="vdecdef:VehicleCurbMassChassisType">
+									<xs:attribute name="unit" type="MassUnitType" use="required"/>
+								</xs:extension>
+							</xs:simpleContent>
+						</xs:complexType>
+					</xs:element>
+					<xs:element name="ZeroEmissionVehicle" type="xs:boolean">
+						<xs:annotation>
+							<xs:documentation>P269 / I.1.1.10</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="HybridElectricHDV" type="xs:boolean">
+						<xs:annotation>
+							<xs:documentation>P279 / I.1.1.11</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="DualFuelVehicle" type="xs:boolean">
+						<xs:annotation>
+							<xs:documentation>P280 / I.1.1.12</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:sequence>
+						<xs:element name="MaxNetPower1" minOccurs="0">
+							<xs:annotation>
+								<xs:documentation>P277</xs:documentation>
+							</xs:annotation>
+							<xs:complexType>
+								<xs:simpleContent>
+									<xs:extension base="xs:double">
+										<xs:attribute name="unit" type="PowerUnitType" use="required"/>
+									</xs:extension>
+								</xs:simpleContent>
+							</xs:complexType>
+						</xs:element>
+						<xs:element name="MaxNetPower2" minOccurs="0">
+							<xs:annotation>
+								<xs:documentation>P278</xs:documentation>
+							</xs:annotation>
+							<xs:complexType>
+								<xs:simpleContent>
+									<xs:extension base="xs:double">
+										<xs:attribute name="unit" type="PowerUnitType" use="required"/>
+									</xs:extension>
+								</xs:simpleContent>
+							</xs:complexType>
+						</xs:element>
+					</xs:sequence>
+					<xs:element name="InputDataSignature" type="vdecdef:SignatureType">
+						<xs:annotation>
+							<xs:documentation>I.3.1.3</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+				</xs:sequence>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
 	<xs:complexType name="VehiclePerformanceType">
 		<xs:sequence>
 			<xs:element name="AverageSpeed">
@@ -666,7 +921,7 @@
 			</xs:element>
 		</xs:sequence>
 	</xs:complexType>
-	<xs:complexType name="VehicleTruckType">
+	<xs:complexType name="VehiclePrimaryBusType">
 		<xs:complexContent>
 			<xs:extension base="AbstractVehicleType">
 				<xs:sequence>
@@ -690,11 +945,6 @@
 							<xs:documentation>P238 / I.1.1.3 / #1</xs:documentation>
 						</xs:annotation>
 					</xs:element>
-					<xs:element name="LegislativeClass" type="vdecdef:LegislativeClassDeclarationType">
-						<xs:annotation>
-							<xs:documentation>P251 / I.1.1.4 / #10</xs:documentation>
-						</xs:annotation>
-					</xs:element>
 					<xs:element name="GrossVehicleMass">
 						<xs:annotation>
 							<xs:documentation>P041 / I.1.1.6 / #12</xs:documentation>
@@ -745,21 +995,6 @@
 							<xs:documentation>VECTO / I.1.1.7 / #13</xs:documentation>
 						</xs:annotation>
 					</xs:element>
-					<xs:element name="VocationalVehicle" type="xs:boolean">
-						<xs:annotation>
-							<xs:documentation>P270 / I.1.1.9</xs:documentation>
-						</xs:annotation>
-					</xs:element>
-					<xs:element name="SleeperCab" type="xs:boolean">
-						<xs:annotation>
-							<xs:documentation>P276 / I.1.1.13</xs:documentation>
-						</xs:annotation>
-					</xs:element>
-					<xs:element name="PTO" type="xs:boolean">
-						<xs:annotation>
-							<xs:documentation>P247 / I.1.3.8 / #31</xs:documentation>
-						</xs:annotation>
-					</xs:element>
 					<xs:element name="ADAS" type="v2.1:AbstractAdvancedDriverAssistantSystemsType"/>
 					<xs:element name="TorqueLimits" type="TorqueLimitsType" minOccurs="0"/>
 					<xs:element name="Components" type="AbstractComponentsType"/>
@@ -772,7 +1007,7 @@
 			</xs:extension>
 		</xs:complexContent>
 	</xs:complexType>
-	<xs:complexType name="VehicleExemptedTruckType">
+	<xs:complexType name="VehicleTruckType">
 		<xs:complexContent>
 			<xs:extension base="AbstractVehicleType">
 				<xs:sequence>
@@ -841,113 +1076,29 @@
 							<xs:documentation>P280 / I.1.1.12</xs:documentation>
 						</xs:annotation>
 					</xs:element>
-					<xs:sequence>
-						<xs:element name="MaxNetPower1" minOccurs="0">
-							<xs:annotation>
-								<xs:documentation>P277</xs:documentation>
-							</xs:annotation>
-							<xs:complexType>
-								<xs:simpleContent>
-									<xs:extension base="xs:double">
-										<xs:attribute name="unit" type="PowerUnitType" use="required"/>
-									</xs:extension>
-								</xs:simpleContent>
-							</xs:complexType>
-						</xs:element>
-						<xs:element name="MaxNetPower2" minOccurs="0">
-							<xs:annotation>
-								<xs:documentation>P278</xs:documentation>
-							</xs:annotation>
-							<xs:complexType>
-								<xs:simpleContent>
-									<xs:extension base="xs:double">
-										<xs:attribute name="unit" type="PowerUnitType" use="required"/>
-									</xs:extension>
-								</xs:simpleContent>
-							</xs:complexType>
-						</xs:element>
-					</xs:sequence>
-					<xs:element name="InputDataSignature" type="vdecdef:SignatureType">
-						<xs:annotation>
-							<xs:documentation>I.3.1.3</xs:documentation>
-						</xs:annotation>
-					</xs:element>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="VehiclePrimaryBusType">
-		<xs:complexContent>
-			<xs:extension base="AbstractVehicleType">
-				<xs:sequence>
-					<xs:element name="Model" type="vdecdef:ModelType">
-						<xs:annotation>
-							<xs:documentation>P236 / I.1.1.2</xs:documentation>
-						</xs:annotation>
-					</xs:element>
-					<xs:element name="Manufacturer" type="vdecdef:ManufacturerType">
-						<xs:annotation>
-							<xs:documentation>P235 / I.1.1.1 / #14</xs:documentation>
-						</xs:annotation>
-					</xs:element>
-					<xs:element name="ManufacturerAddress" type="vdecdef:ManufacturerAddressType">
-						<xs:annotation>
-							<xs:documentation>P252 / I.1.1.1 / #14</xs:documentation>
-						</xs:annotation>
-					</xs:element>
-					<xs:element name="VIN" type="vdecdef:VINType">
-						<xs:annotation>
-							<xs:documentation>P238 / I.1.1.3 / #1</xs:documentation>
-						</xs:annotation>
-					</xs:element>
-					<xs:element name="GrossVehicleMass">
+					<xs:element name="AxleConfiguration" type="xs:string">
 						<xs:annotation>
-							<xs:documentation>P041 / I.1.1.6 / #12</xs:documentation>
-						</xs:annotation>
-						<xs:complexType>
-							<xs:simpleContent>
-								<xs:extension base="xs:double">
-									<xs:attribute name="unit" type="MassUnitType" use="required"/>
-								</xs:extension>
-							</xs:simpleContent>
-						</xs:complexType>
-					</xs:element>
-					<xs:element name="CurbMassChassis">
-						<xs:annotation>
-							<xs:documentation>P038 / I.1.1.8 / #16</xs:documentation>
-							<xs:documentation>P038 / I.1.1.8 / #16</xs:documentation>
-						</xs:annotation>
-						<xs:complexType>
-							<xs:simpleContent>
-								<xs:extension base="vdecdef:VehicleCurbMassChassisType">
-									<xs:attribute name="unit" type="MassUnitType" use="required"/>
-								</xs:extension>
-							</xs:simpleContent>
-						</xs:complexType>
-					</xs:element>
-					<xs:element name="ZeroEmissionVehicle" type="xs:boolean">
-						<xs:annotation>
-							<xs:documentation>P269 / I.1.1.10</xs:documentation>
+							<xs:documentation>P037 / I.1.1.5 / #11</xs:documentation>
 						</xs:annotation>
 					</xs:element>
-					<xs:element name="HybridElectricHDV" type="xs:boolean">
+					<xs:element name="VehicleGroup" type="VehicleGroupType">
 						<xs:annotation>
-							<xs:documentation>P279 / I.1.1.11</xs:documentation>
+							<xs:documentation>VECTO / I.1.1.7 / #13</xs:documentation>
 						</xs:annotation>
 					</xs:element>
-					<xs:element name="DualFuelVehicle" type="xs:boolean">
+					<xs:element name="VocationalVehicle" type="xs:boolean">
 						<xs:annotation>
-							<xs:documentation>P280 / I.1.1.12</xs:documentation>
+							<xs:documentation>P270 / I.1.1.9</xs:documentation>
 						</xs:annotation>
 					</xs:element>
-					<xs:element name="AxleConfiguration" type="vdecdef:VehicleAxleConfigurationDeclarationType">
+					<xs:element name="SleeperCab" type="xs:boolean">
 						<xs:annotation>
-							<xs:documentation>P037 / I.1.1.5 / #11</xs:documentation>
+							<xs:documentation>P276 / I.1.1.13</xs:documentation>
 						</xs:annotation>
 					</xs:element>
-					<xs:element name="VehicleGroup" type="VehicleGroupType">
+					<xs:element name="PTO" type="xs:boolean">
 						<xs:annotation>
-							<xs:documentation>VECTO / I.1.1.7 / #13</xs:documentation>
+							<xs:documentation>P247 / I.1.3.8 / #31</xs:documentation>
 						</xs:annotation>
 					</xs:element>
 					<xs:element name="ADAS" type="v2.1:AbstractAdvancedDriverAssistantSystemsType"/>
@@ -973,6 +1124,11 @@
 			<xs:enumeration value="Standard values"/>
 		</xs:restriction>
 	</xs:simpleType>
+	<xs:simpleType name="AngularVelocityUnitType">
+		<xs:restriction base="xs:string">
+			<xs:enumeration value="rpm"/>
+		</xs:restriction>
+	</xs:simpleType>
 	<xs:simpleType name="CO2UnitType">
 		<xs:restriction base="xs:string">
 			<xs:enumeration value="g/km"/>
@@ -981,6 +1137,11 @@
 			<xs:enumeration value="g/m³-km"/>
 		</xs:restriction>
 	</xs:simpleType>
+	<xs:simpleType name="DisplacementType">
+		<xs:restriction base="xs:string">
+			<xs:enumeration value="ltr"/>
+		</xs:restriction>
+	</xs:simpleType>
 	<xs:simpleType name="DistanceUnitType">
 		<xs:restriction base="xs:token">
 			<xs:enumeration value="km"/>
@@ -1024,19 +1185,9 @@
 			<xs:enumeration value="Interurban"/>
 		</xs:restriction>
 	</xs:simpleType>
-	<xs:simpleType name="SpeedUnitType">
-		<xs:restriction base="xs:token">
-			<xs:enumeration value="km/h"/>
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="VehicleGroupType">
-		<xs:restriction base="xs:string">
-			<xs:minLength value="1"/>
-		</xs:restriction>
-	</xs:simpleType>
-	<xs:simpleType name="AngularVelocityUnitType">
+	<xs:simpleType name="PercentType">
 		<xs:restriction base="xs:string">
-			<xs:enumeration value="rpm"/>
+			<xs:enumeration value="%"/>
 		</xs:restriction>
 	</xs:simpleType>
 	<xs:simpleType name="PowerUnitType">
@@ -1045,104 +1196,14 @@
 			<xs:enumeration value="W"/>
 		</xs:restriction>
 	</xs:simpleType>
-	<xs:simpleType name="DisplacementType">
-		<xs:restriction base="xs:string">
-			<xs:enumeration value="ltr"/>
+	<xs:simpleType name="SpeedUnitType">
+		<xs:restriction base="xs:token">
+			<xs:enumeration value="km/h"/>
 		</xs:restriction>
 	</xs:simpleType>
-	<xs:simpleType name="PercentType">
+	<xs:simpleType name="VehicleGroupType">
 		<xs:restriction base="xs:string">
-			<xs:enumeration value="%"/>
+			<xs:minLength value="1"/>
 		</xs:restriction>
 	</xs:simpleType>
-	<xs:complexType name="ADASType">
-		<xs:sequence>
-			<xs:element name="EngineStopStart" type="xs:boolean">
-				<xs:annotation>
-					<xs:documentation>P271 / I.1.12.1</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:element name="EcoRollWithoutEngineStop" type="xs:boolean">
-				<xs:annotation>
-					<xs:documentation>P272 / I.1.12.2</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:element name="EcoRollWithEngineStop" type="xs:boolean">
-				<xs:annotation>
-					<xs:documentation>P273 / I.1.12.3</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:element name="PredictiveCruiseControl" type="xs:boolean">
-				<xs:annotation>
-					<xs:documentation>P274 / I.1.12.4</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-		</xs:sequence>
-	</xs:complexType>
-	<xs:complexType name="EngineSpeedDrivingType">
-		<xs:sequence>
-			<xs:element name="Min">
-				<xs:complexType>
-					<xs:simpleContent>
-						<xs:extension base="xs:double">
-							<xs:attribute name="unit" type="AngularVelocityUnitType" use="required"/>
-						</xs:extension>
-					</xs:simpleContent>
-				</xs:complexType>
-			</xs:element>
-			<xs:element name="Average">
-				<xs:complexType>
-					<xs:simpleContent>
-						<xs:extension base="xs:double">
-							<xs:attribute name="unit" type="AngularVelocityUnitType" use="required"/>
-						</xs:extension>
-					</xs:simpleContent>
-				</xs:complexType>
-			</xs:element>
-			<xs:element name="Max">
-				<xs:complexType>
-					<xs:simpleContent>
-						<xs:extension base="xs:double">
-							<xs:attribute name="unit" type="AngularVelocityUnitType" use="required"/>
-						</xs:extension>
-					</xs:simpleContent>
-				</xs:complexType>
-			</xs:element>
-		</xs:sequence>
-	</xs:complexType>
-	<xs:complexType name="ComponentsTruckType">
-		<xs:complexContent>
-			<xs:extension base="AbstractComponentsType">
-				<xs:sequence>
-					<xs:element name="Engine" type="EngineType"/>
-					<xs:element name="Gearbox" type="GearboxType"/>
-					<xs:element name="TorqueConverter" type="TorqueconverterType" minOccurs="0"/>
-					<xs:element name="Retarder" type="RetarderType"/>
-					<xs:element name="Angledrive" type="AngledriveType" minOccurs="0"/>
-					<xs:element name="Axlegear" type="AxlegearType"/>
-					<xs:element name="AirDrag" type="AirdragType"/>
-					<xs:element name="AxleWheels" type="AxleWheelsType"/>
-					<xs:element name="Auxiliaries" type="AuxiliariesTruckType"/>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="ComponentsPrimaryBusType">
-		<xs:complexContent>
-			<xs:extension base="AbstractComponentsType">
-				<xs:sequence>
-					<xs:element name="Engine" type="EngineType"/>
-					<xs:element name="Gearbox" type="GearboxType"/>
-					<xs:element name="TorqueConverter" type="TorqueconverterType" minOccurs="0"/>
-					<xs:element name="Retarder" type="RetarderType"/>
-					<xs:element name="Angledrive" type="AngledriveType" minOccurs="0"/>
-					<xs:element name="Axlegear" type="AxlegearType"/>
-					<xs:element name="AxleWheels" type="AxleWheelsType"/>
-					<xs:element name="Auxiliaries" type="v2.6:AbstractPrimaryVehicleAuxiliaryDataDeclarationType"/>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="AbstractComponentsType" abstract="true"/>
-	<xs:complexType name="AbstractVehicleType" abstract="true"/>
 </xs:schema>
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index 0a315711e3..3267434a6b 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -2446,6 +2446,12 @@
     <None Include="TestData\Integration\VTPMode\GenericVehicle\VTP_rural_2Hz.vdri">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\Integration\VTPMode\MediumLorry\VTP Testzyklus.vdri">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="TestData\Integration\VTPMode\MediumLorry\VTP_MediumLorry.vecto">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\Jobs\12t Delivery Truck Engineering Efficiency.vecto">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
@@ -3381,6 +3387,9 @@
       <SubType>Designer</SubType>
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="TestData\Integration\Buses\vecto_vehicle-primary_heavyBus.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="TestData\Integration\Buses\vecto_vehicle-primary_heavyBus_nonSmart_ESS.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
@@ -3468,6 +3477,12 @@
     <Content Include="TestData\Integration\VTPMode\GenericVehicle\Tractor_4x2_vehicle-class-5_Generic vehicle.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="TestData\Integration\VTPMode\MediumLorry\vecto_vehicle-medium_lorry_4x2F.RSLT_MANUFACTURER.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestData\Integration\VTPMode\MediumLorry\vecto_vehicle-medium_lorry_4x2F.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="TestData\Jobs\Tractor_4x2_vehicle-class-5_Generic vehicle.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-- 
GitLab