From c6d1219cfc6f7bbcec88c080ca3c9a59e9183d7d Mon Sep 17 00:00:00 2001
From: "VKMTHD\\franzjosefkober" <franz.josef.kober@ivt.tugraz.at>
Date: Wed, 24 Mar 2021 13:33:07 +0100
Subject: [PATCH] make component entries nullable of multistage bus xml

---
 .../BusHVACSystemConfiguration.cs             |  10 +-
 .../InputData/DeclarationInputData.cs         |  26 +--
 .../InputData/FileIO/JSON/JSONSubComponent.cs |  26 +--
 ...MLDeclarationBusAuxiliariesDataProvider.cs | 207 ++++++++++++++----
 .../XMLDeclarationComponentsDataProvider.cs   |  14 ++
 .../XMLDeclarationVehicleDataProvider.cs      |   8 +-
 ...larationDataAdapterCompletedBusSpecific.cs |  12 +-
 .../Reader/Impl/CombinedBusAuxiliaries.cs     |  26 +--
 .../Models/Declaration/DeclarationData.cs     |   2 +-
 .../Models/Declaration/HVACCoolingPower.cs    |   6 +-
 .../VectoCore/Models/Declaration/Mission.cs   |   4 +-
 .../CompletedBusSanityCheckTests.cs           |   2 +-
 ..._input_only_component_nullable_entries.xml |   2 +-
 VectoCore/VectoCoreTest/VectoCoreTest.csproj  |   3 +
 .../XML/XMLMultistageBusInputDataTest.cs      |  58 +++++
 15 files changed, 306 insertions(+), 100 deletions(-)

diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/BusHVACSystemConfiguration.cs b/VectoCommon/VectoCommon/BusAuxiliaries/BusHVACSystemConfiguration.cs
index 025ac25c87..d40626c700 100644
--- a/VectoCommon/VectoCommon/BusAuxiliaries/BusHVACSystemConfiguration.cs
+++ b/VectoCommon/VectoCommon/BusAuxiliaries/BusHVACSystemConfiguration.cs
@@ -23,12 +23,12 @@ namespace TUGraz.VectoCommon.BusAuxiliaries {
 	{
 		private const string Prefix = "Configuration";
 
-		public static BusHVACSystemConfiguration Parse(string text)
+		public static BusHVACSystemConfiguration? Parse(string text)
 		{
 			return (Prefix + text).ParseEnum<BusHVACSystemConfiguration>();
 		}
 
-		public static string GetLabel(this BusHVACSystemConfiguration hvacConfiguration)
+		public static string GetLabel(this BusHVACSystemConfiguration? hvacConfiguration)
 		{
 			if (hvacConfiguration == BusHVACSystemConfiguration.Unknown) { 
 					return BusHVACSystemConfiguration.Unknown.ToString();
@@ -37,7 +37,7 @@ namespace TUGraz.VectoCommon.BusAuxiliaries {
 			return Prefix + " " + hvacConfiguration.ToString().Replace(Prefix, "");
 		}
 
-		public static string GetName(this BusHVACSystemConfiguration hvacConfig)
+		public static string GetName(this BusHVACSystemConfiguration? hvacConfig)
 		{
 			if (hvacConfig == BusHVACSystemConfiguration.Unknown) {
 				return "Unknown";
@@ -46,7 +46,7 @@ namespace TUGraz.VectoCommon.BusAuxiliaries {
 			return hvacConfig.ToString().Replace(Prefix, "");
 		}
 
-		public static string GetXmlFormat(this BusHVACSystemConfiguration hvacConfiguration)
+		public static string GetXmlFormat(this BusHVACSystemConfiguration? hvacConfiguration)
 		{
 			if (hvacConfiguration == BusHVACSystemConfiguration.Unknown) {
 				return "0";
@@ -55,7 +55,7 @@ namespace TUGraz.VectoCommon.BusAuxiliaries {
 			return GetName(hvacConfiguration);
 		}
 
-		public static bool RequiresDriverAC(this BusHVACSystemConfiguration hvacConfig)
+		public static bool RequiresDriverAC(this BusHVACSystemConfiguration? hvacConfig)
 		{
 			switch (hvacConfig) {
 				case BusHVACSystemConfiguration.Configuration2: 
diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
index 2bbb9e9e29..354b0a60cc 100644
--- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
@@ -821,15 +821,15 @@ namespace TUGraz.VectoCommon.InputData
 
 	public interface IElectricConsumersDeclarationData
 	{
-		bool InteriorLightsLED { get; }
+		bool? InteriorLightsLED { get; }
 
-		bool DayrunninglightsLED { get; }
+		bool? DayrunninglightsLED { get; }
 
-		bool PositionlightsLED { get; }
+		bool? PositionlightsLED { get; }
 
-		bool HeadlightsLED { get; }
+		bool? HeadlightsLED { get; }
 
-		bool BrakelightsLED { get; }
+		bool? BrakelightsLED { get; }
 	}
 
 	public interface IAlternatorDeclarationInputData
@@ -860,7 +860,7 @@ namespace TUGraz.VectoCommon.InputData
 
 	public interface IHVACBusAuxiliariesDeclarationData
 	{
-		BusHVACSystemConfiguration SystemConfiguration { get; }
+		BusHVACSystemConfiguration? SystemConfiguration { get; }
 
 		HeatPumpType? HeatPumpTypeDriverCompartment { get; }
 		
@@ -872,19 +872,19 @@ namespace TUGraz.VectoCommon.InputData
 
 		Watt AuxHeaterPower { get; }
 
-		bool DoubleGlazing { get; }
+		bool? DoubleGlazing { get; }
 
-		bool AdjustableAuxiliaryHeater { get; }
+		bool? AdjustableAuxiliaryHeater { get; }
 
-		bool SeparateAirDistributionDucts { get; }
+		bool? SeparateAirDistributionDucts { get; }
 
-		bool WaterElectricHeater { get; }
+		bool? WaterElectricHeater { get; }
 
-		bool AirElectricHeater { get; }
+		bool? AirElectricHeater { get; }
 
-		bool OtherHeatingTechnology { get; }
+		bool? OtherHeatingTechnology { get; }
 
-		bool AdjustableCoolantThermostat { get; }
+		bool? AdjustableCoolantThermostat { get; }
 	
 		bool EngineWasteGasHeatExchanger { get; }
 	}
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs
index fe721e9a55..3de7b5a374 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs
@@ -548,27 +548,27 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
         #region Implementation of IElectricConsumersDeclarationData
 
-        public virtual bool InteriorLightsLED
+        public virtual bool? InteriorLightsLED
         {
             get { return false; }
         }
 
-        public virtual bool DayrunninglightsLED
+        public virtual bool? DayrunninglightsLED
         {
             get { return false; }
         }
 
-        public virtual bool PositionlightsLED
+        public virtual bool? PositionlightsLED
         {
             get { return false; }
         }
 
-        public virtual bool HeadlightsLED
+        public virtual bool? HeadlightsLED
         {
             get { return false; }
         }
 
-        public virtual bool BrakelightsLED
+        public virtual bool? BrakelightsLED
         {
             get { return false; }
         }
@@ -630,7 +630,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
         #region Implementation of IHVACBusAuxiliariesDeclarationData
 
-        public virtual BusHVACSystemConfiguration SystemConfiguration { get; set; }
+        public virtual BusHVACSystemConfiguration? SystemConfiguration { get; set; }
 		public virtual HeatPumpType? HeatPumpTypeDriverCompartment { get { return null; } }
 		public virtual HeatPumpMode? HeatPumpModeDriverCompartment { get { return null; } }
 		public virtual HeatPumpType? HeatPumpTypePassengerCompartment { get{ return null; } }
@@ -638,15 +638,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 		public virtual ACCompressorType CompressorTypeDriver { get { return ACCompressorType.Unknown; } }
         public virtual ACCompressorType CompressorTypePassenger { get { return ACCompressorType.Unknown; } }
         public virtual Watt AuxHeaterPower { get { return null; } }
-        public virtual bool DoubleGlazing { get { return false; } }
+        public virtual bool? DoubleGlazing { get { return false; } }
         public virtual bool HeatPump { get { return false; } }
-		public bool OtherHeatingTechnology { get; }
-		public virtual bool AdjustableCoolantThermostat { get { return Body["Aux"]?["HVAC"]?.GetEx<bool>("AdjustableCoolantThermostat") ?? false; } }
-        public virtual bool AdjustableAuxiliaryHeater { get { return false; } }
+		public bool? OtherHeatingTechnology { get; }
+		public virtual bool? AdjustableCoolantThermostat { get { return Body["Aux"]?["HVAC"]?.GetEx<bool>("AdjustableCoolantThermostat") ?? false; } }
+        public virtual bool? AdjustableAuxiliaryHeater { get { return false; } }
         public virtual bool EngineWasteGasHeatExchanger { get { return Body["Aux"]?["HVAC"]?.GetEx<bool>("EngineWasteGasHeatExchanger") ?? false; } }
-        public virtual bool SeparateAirDistributionDucts { get { return false; } }
-		public virtual bool WaterElectricHeater { get; }
-		public virtual bool AirElectricHeater { get; }
+        public virtual bool? SeparateAirDistributionDucts { get { return false; } }
+		public virtual bool? WaterElectricHeater { get; }
+		public virtual bool? AirElectricHeater { get; }
 
 		#endregion
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs
index 3bc719b2a5..c454b9f7ea 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs
@@ -25,7 +25,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE);
 
-		
+
 		public XMLDeclarationPrimaryBusAuxiliariesDataProviderV26(
 			IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) : base(componentNode) { }
 
@@ -43,7 +43,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		public virtual IList<string> SteeringPumpTechnology
 		{
-			get {
+			get
+			{
 				return GetNodes(new[] { "SteeringPump", XMLNames.Auxiliaries_Auxiliary_Technology })
 					.Cast<XmlNode>().Select(x => x.InnerText).ToList();
 			}
@@ -80,7 +81,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		public virtual IList<IAlternatorDeclarationInputData> Alternators
 		{
-			get {
+			get
+			{
 				return GetNodes(new[] { XMLNames.BusAux_ElectricSystem, XMLNames.BusAux_ElectricSystem_AlternatorTechnology })
 					.Cast<XmlNode>().Select(x => new AlternatorInputData(x.InnerText))
 					.Cast<IAlternatorDeclarationInputData>().ToList();
@@ -99,7 +101,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		public virtual WattSecond ElectricStorageCapacity
 		{
-			get {
+			get
+			{
 				return ElementExists("ElectricStorageCapacity")
 					? GetDouble("ElectricStorageCapacity").SI(Unit.SI.Watt.Hour).Cast<WattSecond>()
 					: null;
@@ -113,7 +116,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		public virtual ConsumerTechnology AirsuspensionControl
 		{
-			get {
+			get
+			{
 				return ConsumerTechnologyHelper.Parse(
 					GetString(new[] { XMLNames.BusAux_PneumaticSystem, XMLNames.BusAux_PneumaticSystem_AirsuspensionControl }));
 			}
@@ -121,7 +125,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		public virtual ConsumerTechnology AdBlueDosing
 		{
-			get {
+			get
+			{
 				return GetBool(
 					new[] { XMLNames.BusAux_PneumaticSystem, XMLNames.BusAux_PneumaticSystem_AdBlueDosing })
 					? ConsumerTechnology.Pneumatically
@@ -147,14 +152,16 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		public virtual bool SmartAirCompression
 		{
-			get {
+			get
+			{
 				return GetBool(new[] { XMLNames.BusAux_PneumaticSystem, XMLNames.BusAux_PneumaticSystem_SmartcompressionSystem });
 			}
 		}
 
 		public virtual bool SmartRegeneration
 		{
-			get {
+			get
+			{
 				return GetBool(new[] { XMLNames.BusAux_PneumaticSystem, XMLNames.BusAux_PneumaticSystem_SmartRegenerationSystem });
 			}
 		}
@@ -163,7 +170,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IHVACBusAuxiliariesDeclarationData
 
-		public virtual BusHVACSystemConfiguration SystemConfiguration
+		public virtual BusHVACSystemConfiguration? SystemConfiguration
 		{
 			get { return BusHVACSystemConfiguration.Unknown; }
 		}
@@ -188,7 +195,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			get { return 0.SI<Watt>(); }
 		}
 
-		public virtual bool DoubleGlazing
+		public virtual bool? DoubleGlazing
 		{
 			get { return false; }
 		}
@@ -198,17 +205,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			get { return false; }
 		}
 
-		public virtual bool OtherHeatingTechnology
+		public virtual bool? OtherHeatingTechnology
 		{
 			get { return false; }
 		}
 
-		public virtual bool AdjustableCoolantThermostat
+		public virtual bool? AdjustableCoolantThermostat
 		{
 			get { return GetBool(new[] { "HVAC", "AdjustableCoolantThermostat" }); }
 		}
 
-		public virtual bool AdjustableAuxiliaryHeater
+		public virtual bool? AdjustableAuxiliaryHeater
 		{
 			get { return false; }
 		}
@@ -218,16 +225,16 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			get { return GetBool(new[] { "HVAC", "EngineWasteGasHeatExchanger" }); }
 		}
 
-		public virtual bool SeparateAirDistributionDucts
+		public virtual bool? SeparateAirDistributionDucts
 		{
 			get { return false; }
 		}
 
-		public virtual bool WaterElectricHeater
+		public virtual bool? WaterElectricHeater
 		{
 			get { return false; }
 		}
-		public virtual bool AirElectricHeater
+		public virtual bool? AirElectricHeater
 		{
 			get { return false; }
 		}
@@ -248,14 +255,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IBusAuxiliariesDeclarationData
 
-		
+
 
 		public override IList<string> SteeringPumpTechnology { get { return null; } }
 
 
 		public override IElectricConsumersDeclarationData ElectricConsumers
 		{
-			get {
+			get
+			{
 				return this;
 			}
 		}
@@ -264,7 +272,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		//public override IPneumaticConsumersDeclarationData PneumaticConsumers { get { return null; } }
 
-		public override BusHVACSystemConfiguration SystemConfiguration
+		public override BusHVACSystemConfiguration? SystemConfiguration
 		{
 			get { return BusHVACSystemConfigurationHelper.Parse(GetString(XMLNames.Bus_SystemConfiguration)); }
 		}
@@ -284,7 +292,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			get { return GetDouble(XMLNames.Bus_AuxiliaryHeaterPower).SI<Watt>(); }
 		}
 
-		public override bool DoubleGlazing
+		public override bool? DoubleGlazing
 		{
 			get { return GetBool(XMLNames.Bus_DoubleGlazing); }
 		}
@@ -294,12 +302,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			get { return GetBool(XMLNames.Bus_HeatPump); }
 		}
 
-		public override bool AdjustableCoolantThermostat
+		public override bool? AdjustableCoolantThermostat
 		{
 			get { return GetBool(new[] { "HVAC", XMLNames.Bus_AdjustableCoolantThermostat }); }
 		}
 
-		public override bool AdjustableAuxiliaryHeater
+		public override bool? AdjustableAuxiliaryHeater
 		{
 			get { return GetBool(XMLNames.Bus_AdjustableAuxiliaryHeater); }
 		}
@@ -309,7 +317,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			get { return false; }
 		}
 
-		public override bool SeparateAirDistributionDucts
+		public override bool? SeparateAirDistributionDucts
 		{
 			get { return GetBool(XMLNames.Bus_SeparateAirDistributionDucts); }
 		}
@@ -318,15 +326,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IElectricConsumersDeclarationData
 
-		public virtual bool InteriorLightsLED { get { return GetBool(new[] { "LEDLights", XMLNames.Bus_Interiorlights }); } }
+		public virtual bool? InteriorLightsLED { get { return GetBool(new[] { "LEDLights", XMLNames.Bus_Interiorlights }); } }
 
-		public virtual bool DayrunninglightsLED { get { return GetBool(new[] { "LEDLights", XMLNames.Bus_Dayrunninglights }); } }
+		public virtual bool? DayrunninglightsLED { get { return GetBool(new[] { "LEDLights", XMLNames.Bus_Dayrunninglights }); } }
 
-		public virtual bool PositionlightsLED { get { return GetBool(new[] { "LEDLights", XMLNames.Bus_Positionlights }); } }
+		public virtual bool? PositionlightsLED { get { return GetBool(new[] { "LEDLights", XMLNames.Bus_Positionlights }); } }
 
-		public virtual bool HeadlightsLED { get { return GetBool(new[] { "LEDLights", XMLNames.Bus_Headlights }); } }
+		public virtual bool? HeadlightsLED { get { return GetBool(new[] { "LEDLights", XMLNames.Bus_Headlights }); } }
 
-		public virtual bool BrakelightsLED { get { return GetBool(new[] { "LEDLights", XMLNames.Bus_Brakelights }); } }
+		public virtual bool? BrakelightsLED { get { return GetBool(new[] { "LEDLights", XMLNames.Bus_Brakelights }); } }
 
 		#endregion
 	}
@@ -344,39 +352,162 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			: base(vehicle, componentNode, sourceFile) { }
 
 
+		public override BusHVACSystemConfiguration? SystemConfiguration
+		{
+			get { return ElementExists(XMLNames.Bus_SystemConfiguration) 
+				? BusHVACSystemConfigurationHelper.Parse(GetString(XMLNames.Bus_SystemConfiguration)) : null; }
+		}
+
 		public override HeatPumpType? HeatPumpTypeDriverCompartment
 		{
-			get { return HeatPumpTypeHelper.Parse(GetString(XMLNames.Bus_HeatPumpTypeDriver)); }
+			get
+			{
+				return ElementExists(XMLNames.Bus_HeatPumpTypeDriver)
+					? HeatPumpTypeHelper.Parse(GetString(XMLNames.Bus_HeatPumpTypeDriver)) : null;
+			}
 		}
 
 		public override HeatPumpMode? HeatPumpModeDriverCompartment
 		{
-			get { return HeatPumpModeHelper.Parse(GetString(XMLNames.Bus_HeatPumpModeDriver)); }
+			get
+			{
+				return ElementExists(XMLNames.Bus_HeatPumpModeDriver)
+					? HeatPumpModeHelper.Parse(GetString(XMLNames.Bus_HeatPumpModeDriver)) : null;
+			}
 		}
 
 		public override HeatPumpType? HeatPumpTypePassengerCompartment
 		{
-			get { return HeatPumpTypeHelper.Parse(GetString(XMLNames.Bus_HeatPumpTypePassenger)); }
+			get
+			{
+				return ElementExists(XMLNames.Bus_HeatPumpTypePassenger)
+					? HeatPumpTypeHelper.Parse(GetString(XMLNames.Bus_HeatPumpTypePassenger)) : null;
+			}
 		}
 
 		public override HeatPumpMode? HeatPumpModePassengerCompartment
 		{
-			get { return HeatPumpModeHelper.Parse(GetString(XMLNames.Bus_HeatPumpModePassenger)); }
+			get
+			{
+				return ElementExists(XMLNames.Bus_HeatPumpModePassenger)
+					? HeatPumpModeHelper.Parse(GetString(XMLNames.Bus_HeatPumpModePassenger)) : null;
+			}
+		}
+
+		public override Watt AuxHeaterPower
+		{
+			get
+			{
+				return ElementExists(XMLNames.Bus_AuxiliaryHeaterPower)
+					? GetDouble(XMLNames.Bus_AuxiliaryHeaterPower).SI<Watt>() : null;
+			}
+		}
+
+		public override bool? DoubleGlazing
+		{
+			get
+			{
+				return ElementExists(XMLNames.Bus_DoubleGlazing)
+					? GetBool(XMLNames.Bus_DoubleGlazing) : (bool?)null;
+			}
+		}
+
+		public override bool? AdjustableAuxiliaryHeater
+		{
+			get
+			{
+				return ElementExists(XMLNames.Bus_AdjustableAuxiliaryHeater)
+					? GetBool(XMLNames.Bus_AdjustableAuxiliaryHeater) : (bool?)null;
+			}
+		}
+
+		public override bool? SeparateAirDistributionDucts
+		{
+			get
+			{
+				return ElementExists(XMLNames.Bus_SeparateAirDistributionDucts)
+					? GetBool(XMLNames.Bus_SeparateAirDistributionDucts) : (bool?)null;
+			}
+		}
+
+
+		public override bool? WaterElectricHeater
+		{
+			get
+			{
+				return ElementExists(XMLNames.Bus_WaterElectricHeater)
+					? GetBool(XMLNames.Bus_WaterElectricHeater) : (bool?)null;
+			}
+		}
+
+		public override bool? AirElectricHeater
+		{
+			get
+			{
+				return ElementExists(XMLNames.Bus_AirElectricHeater)
+					? GetBool(XMLNames.Bus_AirElectricHeater) : (bool?)null;
+			}
+		}
+
+		public override bool? OtherHeatingTechnology
+		{
+			get
+			{
+				return ElementExists(XMLNames.Bus_OtherHeatingTechnology)
+				  ? GetBool(XMLNames.Bus_OtherHeatingTechnology) : (bool?)null;
+			}
+		}
+
+
+		public override bool? InteriorLightsLED
+		{
+			get
+			{
+				if (!ElementExists(XMLNames.Bus_Interiorlights))
+					return null;
+				return GetBool(new[] { "LEDLights", XMLNames.Bus_Interiorlights });
+			}
 		}
 
-		public override bool WaterElectricHeater
+		public override bool? DayrunninglightsLED
 		{
-			get { return GetBool(XMLNames.Bus_WaterElectricHeater); }
+			get
+			{
+				if (!ElementExists(XMLNames.Bus_Dayrunninglights))
+					return null;
+				return GetBool(new[] { "LEDLights", XMLNames.Bus_Dayrunninglights });
+			}
 		}
 
-		public override bool AirElectricHeater
+		public override bool? PositionlightsLED
 		{
-			get { return GetBool(XMLNames.Bus_AirElectricHeater); }
+			get
+			{
+				if (!ElementExists(XMLNames.Bus_Positionlights))
+					return null;
+				return GetBool(new[] { "LEDLights", XMLNames.Bus_Positionlights });
+			}
 		}
 
-		public override bool OtherHeatingTechnology
+		public override bool? HeadlightsLED
 		{
-			get { return GetBool(XMLNames.Bus_OtherHeatingTechnology); }
+			get
+			{
+				if (!ElementExists(XMLNames.Bus_Headlights))
+					return null;
+				return GetBool(new[] { "LEDLights", XMLNames.Bus_Headlights });
+			}
+		}
+
+		public override bool? BrakelightsLED
+		{
+			get
+			{
+				if (!ElementExists(XMLNames.Bus_Brakelights))
+					return null;
+				return GetBool(new[] { "LEDLights", XMLNames.Bus_Brakelights });
+			}
 		}
+
 	}
 }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs
index d504f3488f..7ce1448b37 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs
@@ -3,6 +3,7 @@ using System.Xml;
 using System.Xml.Linq;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader;
 using TUGraz.VectoCore.Utils;
@@ -310,6 +311,19 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 		public XMLDeclarationInterimStageBusComponentsDataProviderV28(IXMLDeclarationVehicleData vehicle,
 				XmlNode componentNode, string sourceFile) : base(vehicle, componentNode, sourceFile) { }
 
+
+		public override IAirdragDeclarationInputData AirdragInputData
+		{
+			get
+			{
+				if (!ElementExists(XMLNames.Component_AirDrag))
+					return null;
+				
+				return _airdragInputData ?? (_airdragInputData = ComponentReader.AirdragInputData);
+			}
+		}
+
+
 		public override IGearboxDeclarationInputData GearboxInputData
 		{
 			get { return null; }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
index a96c2b49b3..612adc0efc 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
@@ -1323,11 +1323,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		public override IAdvancedDriverAssistantSystemDeclarationInputData ADAS
 		{
-			get 
+			get
 			{
-				if(ADASNode != null)
-					return _adas ?? (_adas = ADASReader.ADASInputData);
-				return null;
+				if (ADASNode == null)
+					return null;
+				return _adas ?? (_adas = ADASReader.ADASInputData);
 			}
 		}
 
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusSpecific.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusSpecific.cs
index 7ee50889ef..781d75afc3 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusSpecific.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusSpecific.cs
@@ -184,7 +184,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			var busAux = completedVehicle.Components.BusAuxiliaries.HVACAux;
 
 			if (mission.BusParameter.SeparateAirDistributionDuctsHVACCfg.Contains(hvacConfiguration) &&
-				!completedVehicle.Components.BusAuxiliaries.HVACAux.SeparateAirDistributionDucts) {
+				!(bool)completedVehicle.Components.BusAuxiliaries.HVACAux.SeparateAirDistributionDucts) {
 				throw new VectoException("Input parameter 'separate air distribution ducts' has to be set to 'true' for vehicle group '{0}' and HVAC configuration '{1}'",
 					mission.BusParameter.BusGroup.GetClassNumber(), hvacConfiguration.GetName());
 			}
@@ -301,15 +301,15 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 
 		protected override bool VehicleHasElectricalConsumer(string consumerName, IBusAuxiliariesDeclarationData busAux)
 		{
-			if (consumerName == "Day running lights LED bonus" && busAux.ElectricConsumers.DayrunninglightsLED)
+			if (consumerName == "Day running lights LED bonus" && (bool)busAux.ElectricConsumers.DayrunninglightsLED)
 				return true;
-			if (consumerName == "Position lights LED bonus" && busAux.ElectricConsumers.PositionlightsLED)
+			if (consumerName == "Position lights LED bonus" && (bool)busAux.ElectricConsumers.PositionlightsLED)
 				return true;
-			if (consumerName == "Brake lights LED bonus" && busAux.ElectricConsumers.BrakelightsLED)
+			if (consumerName == "Brake lights LED bonus" && (bool)busAux.ElectricConsumers.BrakelightsLED)
 				return true;
-			if (consumerName == "Interior lights LED bonus" && busAux.ElectricConsumers.InteriorLightsLED)
+			if (consumerName == "Interior lights LED bonus" && (bool)busAux.ElectricConsumers.InteriorLightsLED)
 				return true;
-			if (consumerName == "Headlights LED bonus" && busAux.ElectricConsumers.HeadlightsLED)
+			if (consumerName == "Headlights LED bonus" && (bool)busAux.ElectricConsumers.HeadlightsLED)
 				return true;
 
 			return false;
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/CombinedBusAuxiliaries.cs b/VectoCore/VectoCore/InputData/Reader/Impl/CombinedBusAuxiliaries.cs
index ae858ca918..43fefb4958 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/CombinedBusAuxiliaries.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/CombinedBusAuxiliaries.cs
@@ -55,11 +55,11 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl {
 
 		#region Implementation of IElectricConsumersDeclarationData
 
-		public bool InteriorLightsLED { get; }
-		public bool DayrunninglightsLED { get; }
-		public bool PositionlightsLED { get; }
-		public bool HeadlightsLED { get; }
-		public bool BrakelightsLED { get; }
+		public bool? InteriorLightsLED { get; }
+		public bool? DayrunninglightsLED { get; }
+		public bool? PositionlightsLED { get; }
+		public bool? HeadlightsLED { get; }
+		public bool? BrakelightsLED { get; }
 
 		#endregion
 
@@ -73,7 +73,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl {
 
 		#region Implementation of IHVACBusAuxiliariesDeclarationData
 
-		public BusHVACSystemConfiguration SystemConfiguration { get; }
+		public BusHVACSystemConfiguration? SystemConfiguration { get; }
 		public HeatPumpType? HeatPumpTypeDriverCompartment { get; }
 		public HeatPumpMode? HeatPumpModeDriverCompartment { get; }
 		public HeatPumpType? HeatPumpTypePassengerCompartment { get; }
@@ -81,15 +81,15 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl {
 		public ACCompressorType CompressorTypeDriver { get; }
 		public ACCompressorType CompressorTypePassenger { get; }
 		public Watt AuxHeaterPower { get; }
-		public bool DoubleGlazing { get; }
+		public bool? DoubleGlazing { get; }
 		public bool HeatPump { get; }
-		public bool OtherHeatingTechnology { get; }
-		public bool AdjustableCoolantThermostat { get; }
-		public bool AdjustableAuxiliaryHeater { get; }
+		public bool? OtherHeatingTechnology { get; }
+		public bool? AdjustableCoolantThermostat { get; }
+		public bool? AdjustableAuxiliaryHeater { get; }
 		public bool EngineWasteGasHeatExchanger { get; }
-		public bool SeparateAirDistributionDucts { get; }
-		public bool WaterElectricHeater { get; }
-		public bool AirElectricHeater { get; }
+		public bool? SeparateAirDistributionDucts { get; }
+		public bool? WaterElectricHeater { get; }
+		public bool? AirElectricHeater { get; }
 
 		#endregion
 	}
diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
index 1a19121b3c..a801af87d5 100644
--- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
@@ -240,7 +240,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 				get { return hvacMaxCoolingPower ?? (hvacMaxCoolingPower = new HVACCoolingPower()); }
 			}
 
-			public static PerSecond VentilationRate(BusHVACSystemConfiguration hvacSystemConfig, bool heating)
+			public static PerSecond VentilationRate(BusHVACSystemConfiguration? hvacSystemConfig, bool heating)
 			{
 
 				switch (hvacSystemConfig) {
diff --git a/VectoCore/VectoCore/Models/Declaration/HVACCoolingPower.cs b/VectoCore/VectoCore/Models/Declaration/HVACCoolingPower.cs
index 3ad906a673..f320d5cf9b 100644
--- a/VectoCore/VectoCore/Models/Declaration/HVACCoolingPower.cs
+++ b/VectoCore/VectoCore/Models/Declaration/HVACCoolingPower.cs
@@ -12,18 +12,18 @@ namespace TUGraz.VectoCore.Models.Declaration {
 		private static HVACLookup DriverCoolingPower = new HVACLookup(".Buses.HVACCoolingPowerDriver.csv");
 		private static HVACLookup PassengerCoolingPower = new HVACLookup(".Buses.HVACCoolingPowerPassenger.csv");
 
-		public Watt DriverMaxCoolingPower(BusHVACSystemConfiguration configuration, MissionType mission)
+		public Watt DriverMaxCoolingPower(BusHVACSystemConfiguration? configuration, MissionType mission)
 		{
 			return DriverCoolingPower.Lookup(configuration, mission).SI<Watt>();
 		}
 
-		public Watt PassengerMaxCoolingPower(BusHVACSystemConfiguration configuration, MissionType mission, CubicMeter volume)
+		public Watt PassengerMaxCoolingPower(BusHVACSystemConfiguration? configuration, MissionType mission, CubicMeter volume)
 		{
 			return PassengerCoolingPower.Lookup(configuration, mission).SI<WattPerCubicMeter>() * volume;
 		}
 
 
-		private class HVACLookup : LookupData<BusHVACSystemConfiguration, MissionType, double>{
+		private class HVACLookup : LookupData<BusHVACSystemConfiguration?, MissionType, double>{
 			public HVACLookup(string resource)
 			{
 				ResourceId = DeclarationData.DeclarationDataResourcePrefix + resource;
diff --git a/VectoCore/VectoCore/Models/Declaration/Mission.cs b/VectoCore/VectoCore/Models/Declaration/Mission.cs
index 3b45a86d40..59dee51957 100644
--- a/VectoCore/VectoCore/Models/Declaration/Mission.cs
+++ b/VectoCore/VectoCore/Models/Declaration/Mission.cs
@@ -119,7 +119,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 
 		// #### HVAC Model Parameters
 
-		public BusHVACSystemConfiguration HVACConfiguration { get; internal set; }
+		public BusHVACSystemConfiguration? HVACConfiguration { get; internal set; }
 
 		public Watt HVACAuxHeaterPower { get; internal set; }
 
@@ -157,7 +157,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 		public Meter EntranceHeight { get; set; }
 		public VehicleCode? VehicleCode { get; set; }
 		public FloorType FloorType { get; set; }
-		public IList<BusHVACSystemConfiguration> SeparateAirDistributionDuctsHVACCfg { get; set; }
+		public IList<BusHVACSystemConfiguration?> SeparateAirDistributionDuctsHVACCfg { get; set; }
 	}
 
 	
diff --git a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusSanityCheckTests.cs b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusSanityCheckTests.cs
index 872c091075..1f2bc9e3c0 100644
--- a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusSanityCheckTests.cs
+++ b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusSanityCheckTests.cs
@@ -112,7 +112,7 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
             //}, messageContains: "Input parameter 'separate air distribution ducts' has to be set to 'true' for vehicle group ");
         }
 
-        private static XmlReader GetModifiedXML(string completedJob, BusHVACSystemConfiguration hvacConfig, bool separateDucts)
+        private static XmlReader GetModifiedXML(string completedJob, BusHVACSystemConfiguration? hvacConfig, bool separateDucts)
 		{
 			var completedXML = new XmlDocument();
 			completedXML.Load(completedJob);
diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.8/vecto_vehicle-stage_input_only_component_nullable_entries.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.8/vecto_vehicle-stage_input_only_component_nullable_entries.xml
index 8bceb88f42..554834a7ac 100644
--- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.8/vecto_vehicle-stage_input_only_component_nullable_entries.xml
+++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.8/vecto_vehicle-stage_input_only_component_nullable_entries.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8"?>
<tns:VectoInputDeclaration schemaVersion="2.8" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" 
xmlns:v2.3="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3"
xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0"
xmlns:di="http://www.w3.org/2000/09/xmldsig#" 
xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationJob E:\VECTO_DEV\fk_vecto-dev\VectoCore\VectoCore\Resources\XSD/VectoDeclarationJob.xsd">
	<v2.0:Vehicle id="VEH-1234567890" xsi:type="InterimStageInputType" >
		<Manufacturer>Some Manufacturer 3</Manufacturer>
		<ManufacturerAddress>Some Manufacturer Address 3</ManufacturerAddress>
		<VIN>VEH-1234567890</VIN>
		<Date>2020-01-09T11:00:00Z</Date>
		<StateOfCompletion>incomplete</StateOfCompletion>
		<ADAS>
			<v2.3:EngineStopStart>true</v2.3:EngineStopStart>
			<v2.3:EcoRollWithoutEngineStop>false</v2.3:EcoRollWithoutEngineStop>
			<v2.3:EcoRollWithEngineStop>true</v2.3:EcoRollWithEngineStop>
			<v2.3:PredictiveCruiseControl>1,2,3</v2.3:PredictiveCruiseControl>			
		</ADAS>
		<Components xsi:type="CompletedVehicleComponentsDeclarationType">
			<Auxiliaries>
				<Data xsi:type="CompletedVehicleAuxiliaryDataDeclarationType">
					<ElectricSystem>
						<LEDLights>
							<Headlights>true</Headlights>
						</LEDLights>
					</ElectricSystem>				
					<HVAC>
						<AuxiliaryHeaterPower>20</AuxiliaryHeaterPower>					
					</HVAC>
				</Data>			
			</Auxiliaries>			
		</Components>
	</v2.0:Vehicle>
</tns:VectoInputDeclaration>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
<tns:VectoInputDeclaration schemaVersion="2.8" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" 
xmlns:v2.3="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3"
xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0"
xmlns:di="http://www.w3.org/2000/09/xmldsig#" 
xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationJob E:\VECTO_DEV\fk_vecto-dev\VectoCore\VectoCore\Resources\XSD/VectoDeclarationJob.xsd">
	<v2.0:Vehicle id="VEH-1234567890" xsi:type="InterimStageInputType" >
		<Manufacturer>Some Manufacturer 4</Manufacturer>
		<ManufacturerAddress>Some Manufacturer Address 4</ManufacturerAddress>
		<VIN>VEH-1234567894</VIN>
		<Date>2022-01-09T11:00:00Z</Date>
		<StateOfCompletion>incomplete</StateOfCompletion>
		<ADAS>
			<v2.3:EngineStopStart>true</v2.3:EngineStopStart>
			<v2.3:EcoRollWithoutEngineStop>false</v2.3:EcoRollWithoutEngineStop>
			<v2.3:EcoRollWithEngineStop>true</v2.3:EcoRollWithEngineStop>
			<v2.3:PredictiveCruiseControl>1,2,3</v2.3:PredictiveCruiseControl>
		</ADAS>
		<Components xsi:type="CompletedVehicleComponentsDeclarationType">
			<Auxiliaries>
				<Data xsi:type="CompletedVehicleAuxiliaryDataDeclarationType">
					<ElectricSystem>
						<LEDLights>
						</LEDLights>
					</ElectricSystem>				
					<HVAC>
					</HVAC>
				</Data>			
			</Auxiliaries>			
		</Components>
	</v2.0:Vehicle>
</tns:VectoInputDeclaration>
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index 3d826534af..92a912c391 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -4669,6 +4669,9 @@
     <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\vecto_vehicle-stage_input_only_certain_entries02-sample.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\vecto_vehicle-stage_input_only_component_nullable_entries.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\vecto_vehicle-stage_input_only_mandatory_entries.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
diff --git a/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs b/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs
index e36d08f925..ef53b49fc6 100644
--- a/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs
@@ -19,6 +19,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		const string VehicleInterimStageInput = DirPath + "vecto_vehicle-stage_input_full-sample.xml";
 		const string VehicleExemptedInterimStageInput = DirPath + "vecto_vehicle-exempted_input_full-sample.xml";
 		const string VehicleExemptedMandatoryOnly = DirPath + "vecto_vehicle-exempted_input_only_mandatory_entries.xml";
+		const string VehicleComponentsEntriesNullable = DirPath + "vecto_vehicle-stage_input_only_component_nullable_entries.xml";
 
 
 		[OneTimeSetUp]
@@ -156,6 +157,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			Assert.AreEqual("Some Manufacturer Address 3", vehicle.ManufacturerAddress);
 			Assert.AreEqual("VEH-1234567891", vehicle.VIN);
 			Assert.AreEqual(DateTime.Parse("2021-01-09T11:00:00Z").ToUniversalTime(), vehicle.Date);
+			Assert.AreEqual(StateOfCompletion.incomplete, vehicle.StateOfCompletion);
 
 			Assert.AreEqual(null, vehicle.Model);
 			Assert.AreEqual(null, vehicle.LegislativeClass);
@@ -169,5 +171,61 @@ namespace TUGraz.VectoCore.Tests.XML
 			Assert.AreEqual(null, vehicle.Height);
 			Assert.AreEqual(null, vehicle.Components);
 		}
+
+		[TestCase]
+		public void TestNullableComponentEntriesInput()
+		{
+			var reader = XmlReader.Create(VehicleComponentsEntriesNullable);
+			var inputDataProvider = xmlInputReader.CreateDeclaration(reader);
+			var vehicle = inputDataProvider.JobInputData.Vehicle;
+
+
+			Assert.AreEqual("VEH-1234567890", vehicle.Identifier);
+			Assert.AreEqual("Some Manufacturer 4", vehicle.Manufacturer);
+			Assert.AreEqual("Some Manufacturer Address 4", vehicle.ManufacturerAddress);
+			Assert.AreEqual("VEH-1234567894", vehicle.VIN);
+			Assert.AreEqual(DateTime.Parse("2022-01-09T11:00:00Z").ToUniversalTime(), vehicle.Date);
+			Assert.AreEqual(StateOfCompletion.incomplete, vehicle.StateOfCompletion);
+
+			Assert.AreEqual(null, vehicle.Model);
+			Assert.AreEqual(null, vehicle.LegislativeClass);
+			Assert.AreEqual(null, vehicle.CurbMassChassis);
+			Assert.AreEqual(null, vehicle.GrossVehicleMassRating);
+			Assert.AreEqual(null, vehicle.RegisteredClass);
+			Assert.AreEqual(null, vehicle.NumberOfPassengersLowerDeck);
+			Assert.AreEqual(null, vehicle.NumberOfPassengersUpperDeck);
+			Assert.AreEqual(null, vehicle.VehicleCode);
+			Assert.AreEqual(null, vehicle.LowEntry);
+			Assert.AreEqual(null, vehicle.Height);
+	
+			Assert.AreEqual(true, vehicle.ADAS.EngineStopStart);
+			Assert.AreEqual(EcoRollType.WithEngineStop, vehicle.ADAS.EcoRoll);
+			Assert.AreEqual(PredictiveCruiseControlType.Option_1_2_3, vehicle.ADAS.PredictiveCruiseControl);
+			Assert.AreEqual(null, vehicle.ADAS.ATEcoRollReleaseLockupClutch);
+			
+			Assert.AreEqual(null, vehicle.Components.AirdragInputData);
+			
+			var electricConsumer = vehicle.Components.BusAuxiliaries.ElectricConsumers;
+			Assert.AreEqual(null, electricConsumer.InteriorLightsLED);
+			Assert.AreEqual(null, electricConsumer.DayrunninglightsLED);
+			Assert.AreEqual(null, electricConsumer.PositionlightsLED);
+			Assert.AreEqual(null, electricConsumer.BrakelightsLED);
+			Assert.AreEqual(null, electricConsumer.HeadlightsLED);
+
+			var hvacAux = vehicle.Components.BusAuxiliaries.HVACAux;
+			Assert.AreEqual(null, hvacAux.SystemConfiguration);
+			Assert.AreEqual(null, hvacAux.HeatPumpTypeDriverCompartment);
+			Assert.AreEqual(null, hvacAux.HeatPumpModeDriverCompartment);
+			Assert.AreEqual(null, hvacAux.HeatPumpTypePassengerCompartment);
+			Assert.AreEqual(null, hvacAux.HeatPumpModePassengerCompartment);
+			
+			Assert.AreEqual(null, hvacAux.AuxHeaterPower);
+			Assert.AreEqual(null, hvacAux.DoubleGlazing);
+			Assert.AreEqual(null, hvacAux.AdjustableAuxiliaryHeater);
+			Assert.AreEqual(null, hvacAux.SeparateAirDistributionDucts);
+			Assert.AreEqual(null, hvacAux.WaterElectricHeater);
+			Assert.AreEqual(null, hvacAux.AirElectricHeater);
+			Assert.AreEqual(null, hvacAux.OtherHeatingTechnology);
+		}
 	}
 }
-- 
GitLab