From 4a76f403b874d0a07e507793420daec63d62b544 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Tue, 2 Aug 2022 10:24:30 +0200
Subject: [PATCH] Refactoring writing CIF for completed Buses done

---
 .../CIFNinjectModule.cs                       | 24 ++---
 .../CIFWriter/ComponentGroupWriters.cs        | 35 ++++---
 .../CIFWriter/VehicleGroups.cs                | 40 +++++++-
 .../CIFWriter/VehicleWriter.cs                | 97 ++++++++-----------
 .../ICustomerInformationFileFactory.cs        |  2 +
 .../MRFNinjectModule.cs                       | 12 ++-
 .../VIFNinjectModule.cs                       |  4 +-
 .../Resources/XSD/VectoOutputCustomer.0.9.xsd | 41 +++++++-
 .../VectoMockup/Ninject/CIFMockupModule.cs    | 12 ++-
 9 files changed, 177 insertions(+), 90 deletions(-)

diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFNinjectModule.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFNinjectModule.cs
index 0b08da1bb5..6435bfe621 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFNinjectModule.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFNinjectModule.cs
@@ -190,15 +190,6 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 					false,
 					false)));
 
-			//Bind<IXMLCustomerReport>().To<HEV_IHPC_CompletedBusCIF>().Named(nameCombinationMethod.Invoke(
-			//	ToParams(VehicleCategoryHelper.CompletedBus,
-			//		VectoSimulationJobType.ParallelHybridVehicle,
-			//		ArchitectureID.UNKNOWN,
-			//		false,
-			//		false,
-			//		true)));
-
-
 			Bind<IXMLCustomerReport>().To<HEV_S2_CompletedBusCIF>().Named(nameCombinationMethod.Invoke(
 				ToParams(VehicleCategoryHelper.CompletedBus,
 					VectoSimulationJobType.SerialHybridVehicle,
@@ -261,7 +252,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 					VectoSimulationJobType.BatteryElectricVehicle,
 					ArchitectureID.E_IEPC,
 					false,
-					false,
+					true,
 					false)));
 
 			Bind<IXMLCustomerReport>().To<Exempted_CompletedBusCIF>().Named(nameCombinationMethod.Invoke(
@@ -327,6 +318,9 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 			Bind<IXmlTypeWriter>().To<CIF_HEV_S4_CompletedBusVehicleWriter>().When(AccessedViaCIFFactory)
 				.NamedLikeFactoryMethod((ICustomerInformationFileFactory f) => f.GetHEV_S4_CompletedBusVehicleType());
 
+			Bind<IXmlTypeWriter>().To<CIF_HEV_IEPC_S_CompletedBusVehicleWriter>().When(AccessedViaCIFFactory)
+				.NamedLikeFactoryMethod((ICustomerInformationFileFactory f) => f.GetHEV_IEPC_S_CompletedBusVehicleType());
+
 			Bind<IXmlTypeWriter>().To<CIF_PEV_E2_CompletedBusVehicleWriter>().When(AccessedViaCIFFactory)
 				.NamedLikeFactoryMethod((ICustomerInformationFileFactory f) => f.GetPEV_E2_CompletedBusVehicleType());
 
@@ -339,12 +333,6 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 			Bind<IXmlTypeWriter>().To<CIF_PEV_IEPC_CompletedBusVehicleWriter>().When(AccessedViaCIFFactory)
 				.NamedLikeFactoryMethod((ICustomerInformationFileFactory f) => f.GetPEV_IEPC_CompletedBusVehicleType());
 
-			//Bind<IXmlTypeWriter>().To<CIF_HEVCompletedBusVehicleWriter>().When(AccessedViaCIFFactory)
-			//	.NamedLikeFactoryMethod((ICustomerInformationFileFactory f) => f.GetHEV_CompletedBusVehicleType());
-
-			//Bind<IXmlTypeWriter>().To<CIF_PEVCompletedBusVehicleWriter>().When(AccessedViaCIFFactory)
-			//	.NamedLikeFactoryMethod((ICustomerInformationFileFactory f) => f.GetPEV_CompletedBusVehicleType());
-
 			Bind<IXmlTypeWriter>().To<CIF_ExemptedCompletedBusVehicleWriter>().When(AccessedViaCIFFactory)
 				.NamedLikeFactoryMethod((ICustomerInformationFileFactory f) => f.GetExemptedCompletedBusVehicleType());
 			#endregion
@@ -371,6 +359,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 				.NamedLikeFactoryMethod((ICustomerInformationFileFactory f) => f.GetCompletedBusVehicleTypeGroup());
 			Bind<IReportOutputGroup>().To<PEVCompletedBusVehicleTypeGroup>().When(AccessedViaCIFFactory)
 				.NamedLikeFactoryMethod((ICustomerInformationFileFactory f) => f.GetPEVCompletedBusVehicleTypeGroup());
+			Bind<IReportOutputGroup>().To<ExemptedCompletedBusVehicleTypeGroup>().When(AccessedViaCIFFactory)
+				.NamedLikeFactoryMethod((ICustomerInformationFileFactory f) => f.GetExemptedCompletedBusVehicleTypeGroup());
 
 			Bind<IReportOutputGroup>().To<HEV_CompletedBusVehicleSequenceGroupWriter>().When(AccessedViaCIFFactory)
 				.NamedLikeFactoryMethod((ICustomerInformationFileFactory f) => f.GetHEV_CompletedBusVehicleSequenceGroupWriter());
@@ -387,6 +377,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 				.NamedLikeFactoryMethod((ICustomerInformationFileFactory f) => f.GetTransmissionGroup());
 			Bind<IReportOutputGroup>().To<TransmissionGroupWithoutGearbox>().When(AccessedViaCIFFactory)
 				.NamedLikeFactoryMethod((ICustomerInformationFileFactory f) => f.GetTransmissionGroupNoGearbox());
+			Bind<IReportOutputGroup>().To<IEPCTransmissionGroup>().When(AccessedViaCIFFactory)
+				.NamedLikeFactoryMethod((ICustomerInformationFileFactory f) => f.GetIEPCTransmissionGroup());
 			Bind<IReportOutputGroup>().To<AxleWheelsGroup>().When(AccessedViaCIFFactory)
 				.NamedLikeFactoryMethod((ICustomerInformationFileFactory f) => f.GetAxleWheelsGroup());
 			Bind<IReportOutputGroup>().To<ElectricMachineGroup>().When(AccessedViaCIFFactory)
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFWriter/ComponentGroupWriters.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFWriter/ComponentGroupWriters.cs
index d1ff5d845f..d82bad5a6d 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFWriter/ComponentGroupWriters.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFWriter/ComponentGroupWriters.cs
@@ -24,12 +24,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 		public override IList<XElement> GetElements(IDeclarationInputDataProvider inputData)
 		{
-			IEngineDeclarationInputData engine;
-			if (inputData is IMultistageBusInputDataProvider multistage) {
-				engine = multistage.JobInputData.PrimaryVehicle.Vehicle.Components.EngineInputData;
-			} else {
-				engine = inputData.JobInputData.Vehicle.Components.EngineInputData;
-			}
+			var vehicle = GetVehicle(inputData);
+			var engine = vehicle.Components.EngineInputData;
 
 			var fuelTypesXElement = new XElement(_cif + XMLNames.Report_Vehicle_FuelTypes);
 
@@ -64,12 +60,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 		public override IList<XElement> GetElements(IDeclarationInputDataProvider inputData)
 		{
-			IGearboxDeclarationInputData gearbox;
-			if (inputData is IMultistageBusInputDataProvider multistage) {
-				gearbox = multistage.JobInputData.PrimaryVehicle.Vehicle.Components.GearboxInputData;
-			} else {
-				gearbox = inputData.JobInputData.Vehicle.Components.GearboxInputData;
-			}
+			var vehicle = GetVehicle(inputData);
+			var gearbox = vehicle.Components.GearboxInputData;
 
 			return new List<XElement>() {
 				new XElement(_cif + "TransmissionValues", gearbox.CertificationMethod.ToXMLFormat()),
@@ -99,6 +91,25 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 		#endregion
 	}
 
+	public class IEPCTransmissionGroup : AbstractCIFGroupWriter
+	{
+		public IEPCTransmissionGroup(ICustomerInformationFileFactory cifFactory) : base(cifFactory) { }
+
+		#region Overrides of AbstractCIFGroupWriter
+
+		public override IList<XElement> GetElements(IDeclarationInputDataProvider inputData)
+		{
+            var vehicle = GetVehicle(inputData);
+            var iepc = vehicle.Components.IEPC;
+
+            return new List<XElement>() {
+				new XElement(_cif + "NrOfGears", iepc.Gears.Count)
+			};
+		}
+
+		#endregion
+	}
+
 	public class AxleWheelsGroup : AbstractCIFGroupWriter
 	{
 		public AxleWheelsGroup(ICustomerInformationFileFactory cifFactory) : base(cifFactory) { }
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFWriter/VehicleGroups.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFWriter/VehicleGroups.cs
index 764adb91ce..faecbb6aba 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFWriter/VehicleGroups.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFWriter/VehicleGroups.cs
@@ -332,7 +332,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 			return result;
 		}
 
-		private XElement GetManufacturers(IMultistageBusInputDataProvider completedBusData)
+		protected XElement GetManufacturers(IMultistageBusInputDataProvider completedBusData)
 		{
 			var manufacturers = new XElement(_cif + "Manufacturers",
 				GetManufacturerAndAddress(completedBusData.JobInputData.PrimaryVehicle.Vehicle.Manufacturer,
@@ -407,4 +407,42 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 		#endregion
 	}
+
+
+	public class ExemptedCompletedBusVehicleTypeGroup : CompletedBusVehicleTypeGroup
+	{
+		public ExemptedCompletedBusVehicleTypeGroup(ICustomerInformationFileFactory cifFactory) : base(cifFactory) { }
+
+		public override IList<XElement> GetElements(IDeclarationInputDataProvider inputData)
+		{
+			var completedBusData = inputData as IMultistageBusInputDataProvider;
+			if (completedBusData == null) {
+				throw new ArgumentException(
+					$"{nameof(inputData)} must implement {nameof(IMultistageBusInputDataProvider)}");
+			}
+			var result = new List<XElement>();
+			result.AddRange(
+				_cifFactory.GetGeneralVehicleSequenceGroupWriterCompletedBus().GetElements(completedBusData));
+			result.Add(GetManufacturers(completedBusData));
+
+
+
+			var consolidatedVehicle = completedBusData.JobInputData.ConsolidateManufacturingStage.Vehicle;
+			result.AddRange(new List<XElement>() {
+				new XElement(_cif + XMLNames.Component_Model, consolidatedVehicle.Model),
+				new XElement(_cif + XMLNames.CorrectedActualMass, consolidatedVehicle.CurbMassChassis.ValueAsUnit("kg", 0)),
+				new XElement(_cif + XMLNames.Vehicle_ZeroEmissionVehicle, consolidatedVehicle.ZeroEmissionVehicle),
+				new XElement(_cif + XMLNames.Vehicle_HybridElectricHDV, consolidatedVehicle.HybridElectricHDV),
+				new XElement(_cif + XMLNames.Vehicle_RegisteredClass, consolidatedVehicle.RegisteredClass.ToXMLFormat()),
+				new XElement(_cif + "TotalNumberOfPassengers", consolidatedVehicle.NumberPassengerSeatsLowerDeck
+																+ consolidatedVehicle.NumberPassengerSeatsUpperDeck
+																+ consolidatedVehicle.NumberPassengersStandingLowerDeck
+																+ consolidatedVehicle.NumberPassengersStandingUpperDeck),
+				!consolidatedVehicle.VehicleTypeApprovalNumber.IsNullOrEmpty() ? new XElement(_cif + XMLNames.VehicleTypeApprovalNumber, consolidatedVehicle.VehicleTypeApprovalNumber) : null
+			});
+
+			return result;
+		}
+
+	}
 }
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFWriter/VehicleWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFWriter/VehicleWriter.cs
index fff456c37a..a297b77091 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFWriter/VehicleWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFWriter/VehicleWriter.cs
@@ -50,13 +50,13 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 		protected XElement GetAxleRatio(IDeclarationInputDataProvider inputData, bool optional = false)
 		{
-			if (!optional || (inputData.JobInputData.Vehicle.Components.AxleGearInputData != null)) {
-				IAxleGearInputData axlegear;
-				if (inputData is IMultistageBusInputDataProvider multistage) {
-					axlegear = multistage.JobInputData.PrimaryVehicle.Vehicle.Components.AxleGearInputData;
-				} else {
-					axlegear = inputData.JobInputData.Vehicle.Components.AxleGearInputData;
-				}
+			IAxleGearInputData axlegear;
+			if (inputData is IMultistageBusInputDataProvider multistage) {
+				axlegear = multistage.JobInputData.PrimaryVehicle.Vehicle.Components.AxleGearInputData;
+			} else {
+				axlegear = inputData.JobInputData.Vehicle.Components.AxleGearInputData;
+			}
+			if (!optional || (axlegear != null)) {
 				return new XElement(_cif + "AxleRatio", axlegear.Ratio.ToXMLFormat(3));
 			} else {
 				return null;
@@ -499,6 +499,34 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 		#endregion
 	}
 
+	public class CIF_HEV_IEPC_S_CompletedBusVehicleWriter : CIF_HEV_Px_CompletedBusVehicleWriter
+	{
+		public CIF_HEV_IEPC_S_CompletedBusVehicleWriter(ICustomerInformationFileFactory cifFactory, IManufacturerReportFactory mrfFactory) : base(cifFactory, mrfFactory) { }
+
+		#region Overrides of VehicleWriter
+
+		public override XElement GetElement(IDeclarationInputDataProvider inputData)
+		{
+			return new XElement(_cif + XMLNames.Component_Vehicle,
+				new XAttribute(_xsi + XMLNames.XSIType, "HEV_S4_CompletedBusVehicleType"),
+				_cifFactory.GetCompletedBusVehicleTypeGroup().GetElements(inputData),
+				_cifFactory.GetHEV_CompletedBusVehicleSequenceGroupWriter().GetElements(inputData),
+				_cifFactory.GetHEVADASType().GetXmlType(((IMultistageBusInputDataProvider)inputData)
+					.JobInputData
+					.ConsolidateManufacturingStage.Vehicle.ADAS).WithXName(_cif + "ADAS"),
+				_cifFactory.GetEngineGroup().GetElements(inputData),
+				_cifFactory.GetElectricMachineGroup().GetElements(inputData),
+				_cifFactory.GetREESSGroup().GetElements(inputData),
+				_cifFactory.GetTransmissionGroupNoGearbox().GetElements(inputData),
+				_cifFactory.GetAxleWheelsGroup().GetElements(inputData),
+
+				_cifFactory.GetHEV_Sx_CompletedBusAuxGroup().GetElements(inputData)
+			);
+		}
+
+		#endregion
+	}
+
 	public class CIF_PEV_E2_CompletedBusVehicleWriter : CIF_HEV_Px_CompletedBusVehicleWriter
 	{
 		public CIF_PEV_E2_CompletedBusVehicleWriter(ICustomerInformationFileFactory cifFactory, IManufacturerReportFactory mrfFactory) : base(cifFactory, mrfFactory) { }
@@ -597,16 +625,16 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 			return new XElement(_cif + XMLNames.Component_Vehicle,
 				new XAttribute(_xsi + XMLNames.XSIType, "PEV_IEPC_CompletedBusVehicleType"),
 				_cifFactory.GetPEVCompletedBusVehicleTypeGroup().GetElements(inputData),
-				_cifFactory.GetHEV_CompletedBusVehicleSequenceGroupWriter().GetElements(inputData),
-				_cifFactory.GetHEVADASType().GetXmlType(((IMultistageBusInputDataProvider)inputData)
+				_cifFactory.GetPEV_CompletedBusVehicleSequenceGroupWriter().GetElements(inputData),
+				_cifFactory.GetPEVADASType().GetXmlType(((IMultistageBusInputDataProvider)inputData)
 					.JobInputData
 					.ConsolidateManufacturingStage.Vehicle.ADAS).WithXName(_cif + "ADAS"),
-				_cifFactory.GetEngineGroup().GetElements(inputData),
+				//_cifFactory.GetEngineGroup().GetElements(inputData),
 				_cifFactory.GetElectricMachineGroup().GetElements(inputData),
 				_cifFactory.GetREESSGroup().GetElements(inputData),
-				_cifFactory.GetTransmissionGroup().GetElements(inputData),
+				_cifFactory.GetIEPCTransmissionGroup().GetElements(inputData),
 				GetRetarder(inputData),
-				GetAxleRatio(inputData),
+				GetAxleRatio(inputData, true),
 				_cifFactory.GetAxleWheelsGroup().GetElements(inputData),
 
 				_cifFactory.GetPEV_CompletedBusAuxGroup().GetElements(inputData)
@@ -616,48 +644,6 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 		#endregion
 	}
 
-	//public class CIF_HEVCompletedBusVehicleWriter : VehicleWriter
-	//{
-	//	public CIF_HEVCompletedBusVehicleWriter(ICustomerInformationFileFactory cifFactory, IManufacturerReportFactory mrfFactory) : base(cifFactory, mrfFactory) { }
-
-	//	#region Overrides of VehicleWriter
-
-	//	public override XElement GetElement(IDeclarationInputDataProvider inputData)
-	//	{
-	//		return new XElement(_cif + XMLNames.Component_Vehicle,
-	//			_cifFactory.GetCompletedBusVehicleTypeGroup().GetElements(inputData),
-	//			_cifFactory.GetHEVADASType().GetXmlType(((IMultistageBusInputDataProvider)inputData)
-	//				.JobInputData
-	//				.ConsolidateManufacturingStage.Vehicle.ADAS).WithXName(_cif + "ADAS"),
-	//			_cifFactory.GetCompletedBusAuxGroup().GetElements(inputData)
-	//		);
-	//	}
-
-	//	#endregion
-	//}
-
-	//public class CIF_PEVCompletedBusVehicleWriter : VehicleWriter
-	//{
-	//	public CIF_PEVCompletedBusVehicleWriter(ICustomerInformationFileFactory cifFactory, IManufacturerReportFactory mrfFactory) : base(cifFactory, mrfFactory) { }
-
-	//	#region Overrides of VehicleWriter
-
-	//	public override XElement GetElement(IDeclarationInputDataProvider inputData)
-	//	{
-	//		return new XElement(_cif + XMLNames.Component_Vehicle,
-	//			_cifFactory.GetCompletedBusVehicleTypeGroup().GetElements(inputData),
-	//			_cifFactory.GetPEVADASType().GetXmlType(((IMultistageBusInputDataProvider)inputData)
-	//				.JobInputData
-	//				.ConsolidateManufacturingStage.Vehicle.ADAS).WithXName(_cif + "ADAS"),
-	//			_cifFactory.GetCompletedBusAuxGroup().GetElements(inputData)
-	//		);
-	//	}
-
-	//	#endregion
-	//}
-
-
-
 
 	public class CIF_ExemptedCompletedBusVehicleWriter : VehicleWriter
 	{
@@ -668,7 +654,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 		public override XElement GetElement(IDeclarationInputDataProvider inputData)
 		{
 			return new XElement(_cif + XMLNames.Component_Vehicle,
-				_cifFactory.GetCompletedBusVehicleTypeGroup().GetElements(inputData)
+				_cifFactory.GetExemptedCompletedBusVehicleTypeGroup().GetElements(inputData)
+				//_cifFactory.GetConveCompletedBusVehicleSequenceGroupWriter().GetElements(inputData),
 			);
 		}
 
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ICustomerInformationFileFactory.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ICustomerInformationFileFactory.cs
index 68a8549340..58816ff398 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ICustomerInformationFileFactory.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ICustomerInformationFileFactory.cs
@@ -73,6 +73,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 		IReportOutputGroup GetPEV_LorryVehicleSequenceGroupWriter();
 		IReportOutputGroup GetPEV_CompletedBusVehicleSequenceGroupWriter();
 		IReportOutputGroup GetCompletedBusVehicleTypeGroup();
+		IReportOutputGroup GetExemptedCompletedBusVehicleTypeGroup();
 		IReportCompletedBusOutputGroup GetGeneralVehicleSequenceGroupWriterCompletedBus();
 
 
@@ -81,5 +82,6 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 		ICIFAdasType GetPEVADASType();
 		//IReportOutputGroup GetHEV_VehicleSequenceGroup();
 		IReportOutputGroup GetPEVCompletedBusVehicleTypeGroup();
+		IReportOutputGroup GetIEPCTransmissionGroup();
 	}
 }
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/MRFNinjectModule.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/MRFNinjectModule.cs
index 4d13f84f78..99011c4508 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/MRFNinjectModule.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/MRFNinjectModule.cs
@@ -415,6 +415,14 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.
 					false,
 					false)));
 
+			Bind<IXMLManufacturerReport>().To<HEV_CompletedBusManufacturerReport>().Named(nameCombinationMethod.Invoke(
+				ToParams(VehicleCategoryHelper.CompletedBus,
+					VectoSimulationJobType.SerialHybridVehicle,
+					ArchitectureID.S_IEPC,
+					false,
+					true,
+					false)));
+
 			Bind<IXMLManufacturerReport>().To<PEV_CompletedBusManufacturerReport>().Named(nameCombinationMethod.Invoke(
 				ToParams(VehicleCategoryHelper.CompletedBus,
 					VectoSimulationJobType.BatteryElectricVehicle,
@@ -442,9 +450,9 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.
 			Bind<IXMLManufacturerReport>().To<PEV_CompletedBusManufacturerReport>().Named(nameCombinationMethod.Invoke(
 				ToParams(VehicleCategoryHelper.CompletedBus,
 					VectoSimulationJobType.BatteryElectricVehicle,
-					ArchitectureID.S_IEPC,
-					false,
+					ArchitectureID.E_IEPC,
 					false,
+					true,
 					false)));
 
 			Bind<IXMLManufacturerReport>().To<Exempted_CompletedBusManufacturerReport>().Named(nameCombinationMethod.Invoke(
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/VIFNinjectModule.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/VIFNinjectModule.cs
index f8b69dc8e8..32df889eee 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/VIFNinjectModule.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/VIFNinjectModule.cs
@@ -144,9 +144,9 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF
 			Bind<IXMLMultistepIntermediateReport>().To<HEV_CompletedBus_VIF>().Named(nameCombinationMethod.Invoke(
 				ToParams(VehicleCategoryHelper.PrimaryBus,
 					VectoSimulationJobType.SerialHybridVehicle,
-					ArchitectureID.UNKNOWN,
-					false,
+					ArchitectureID.S_IEPC,
 					false,
+					true,
 					false)));
 
 			Bind<IXMLMultistepIntermediateReport>().To<HEV_CompletedBus_VIF>().Named(nameCombinationMethod.Invoke(
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputCustomer.0.9.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputCustomer.0.9.xsd
index b86e14e43d..40fb837966 100644
--- a/VectoCore/VectoCore/Resources/XSD/VectoOutputCustomer.0.9.xsd
+++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputCustomer.0.9.xsd
@@ -829,7 +829,7 @@
 	</xs:complexType>
 	<xs:complexType name="Exempted_CompletedBusVehicleType">
 		<xs:sequence>
-			<xs:group ref="HEVCompletedBusVehicleTypeGroup"/>
+			<xs:group ref="ExemptedCompletedBusVehicleTypeGroup"/>
 		</xs:sequence>
 	</xs:complexType>
 	<xs:simpleType name="RatedPowerType">
@@ -1043,6 +1043,45 @@
 			</xs:sequence>
 		</xs:sequence>
 	</xs:group>
+	<xs:group name="ExemptedCompletedBusVehicleTypeGroup">
+		<xs:sequence>
+			<xs:group ref="GeneralVehicleSequenceGroup"/>
+			<xs:sequence>
+				<xs:element name="Manufacturers">
+					<xs:complexType>
+						<xs:sequence maxOccurs="unbounded">
+							<xs:element name="Step">
+								<xs:complexType>
+									<xs:sequence>
+										<xs:element name="Manufacturer"/>
+										<xs:element name="ManufacturerAddress"/>
+									</xs:sequence>
+									<xs:attribute name="stepCount" type="xs:int"/>
+								</xs:complexType>
+							</xs:element>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+			</xs:sequence>
+			<xs:element name="Model" type="xs:string"/>
+			<xs:sequence>
+				<xs:element name="CorrectedActualMass">
+					<xs:complexType>
+						<xs:simpleContent>
+							<xs:extension base="xs:int">
+								<xs:attribute name="unit" type="out:MassUnitType" use="required"/>
+							</xs:extension>
+						</xs:simpleContent>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="ZeroEmissionVehicle" type="xs:boolean"/>
+				<xs:element name="HybridElectricHDV" type="xs:boolean"/>
+				<xs:element name="ClassBus" type="xs:string"/>
+				<xs:element name="TotalNumberOfPassengers" type="xs:int"/>
+				<xs:element name="VehicleTypeApprovalNumber" type="xs:string" minOccurs="0"/>
+			</xs:sequence>
+		</xs:sequence>
+	</xs:group>
 	<xs:complexType name="EngineCapacityType">
 		<xs:simpleContent>
 			<xs:extension base="xs:double"/>
diff --git a/VectoMockup/VectoMockup/Ninject/CIFMockupModule.cs b/VectoMockup/VectoMockup/Ninject/CIFMockupModule.cs
index 52520d8824..80dc057331 100644
--- a/VectoMockup/VectoMockup/Ninject/CIFMockupModule.cs
+++ b/VectoMockup/VectoMockup/Ninject/CIFMockupModule.cs
@@ -269,7 +269,12 @@ namespace TUGraz.VectoMockup.Ninject
             return _cifFactory.GetCompletedBusVehicleTypeGroup();
         }
 
-        public IReportCompletedBusOutputGroup GetGeneralVehicleSequenceGroupWriterCompletedBus()
+		public IReportOutputGroup GetExemptedCompletedBusVehicleTypeGroup()
+		{
+			return _cifFactory.GetExemptedCompletedBusVehicleTypeGroup();
+		}
+
+		public IReportCompletedBusOutputGroup GetGeneralVehicleSequenceGroupWriterCompletedBus()
         {
             return _cifFactory.GetGeneralVehicleSequenceGroupWriterCompletedBus();
         }
@@ -294,6 +299,11 @@ namespace TUGraz.VectoMockup.Ninject
 			return _cifFactory.GetPEVCompletedBusVehicleTypeGroup();
 		}
 
+		public IReportOutputGroup GetIEPCTransmissionGroup()
+		{
+			return _cifFactory.GetIEPCTransmissionGroup();
+		}
+
 		#endregion
     }
 }
\ No newline at end of file
-- 
GitLab