protected override void RunActualProcess()
        {
            SqlConnection.RecreateTable <HeatingSystemEntry>(Stage.Houses, Constants.PresentSlice);
            var dbHouses    = SqlConnection.GetDatabaseConnection(Stage.Houses, Constants.PresentSlice).Database;
            var dbRaw       = SqlConnection.GetDatabaseConnection(Stage.Raw, Constants.PresentSlice).Database;
            var dbComplexes = SqlConnection.GetDatabaseConnection(Stage.Complexes, Constants.PresentSlice).Database;
            var rnd         = new Random();
            var houses      = dbHouses.Fetch <House>();

            var houseHeatingMethods = dbHouses.Fetch <HouseHeating>();
            var feuerungsstättenRaw = dbRaw.Fetch <FeuerungsStaette>();
            var complexes           = dbComplexes.Fetch <BuildingComplex>();
            Dictionary <string, BuildingComplex> buildingComplexesByName = new Dictionary <string, BuildingComplex>();

            foreach (BuildingComplex complex in complexes)
            {
                buildingComplexesByName.Add(complex.ComplexName, complex);
            }
            var potentialHeatingSystems = dbHouses.Fetch <PotentialHeatingSystemEntry>();

            dbHouses.BeginTransaction();
            OverrideRepository overrideRepository = new OverrideRepository();
            double             totalFernwärme     = potentialHeatingSystems.Sum(x => x.YearlyFernwärmeDemand);
            var overrideEntries = overrideRepository.ReadEntries();
            var houseNames      = houses.Select(x => x.ComplexName).ToHashSet();

            foreach (OverrideEntry entry in overrideEntries)
            {
                if (!houseNames.Contains(entry.ComplexName))
                {
                    throw new FlaException("Kein Haus für Override Entry " + entry.ComplexName + ". Vermutlich vertippt?");
                }
            }
            List <HeatingSystemEntry> hses = new List <HeatingSystemEntry>();

            foreach (var house in houses)
            {
                var complex = buildingComplexesByName[house.ComplexName];
                var feuerungsStättenForHouse = feuerungsstättenRaw.Where(x => {
                    Debug.Assert(x.EGID != null, "x.EGID != null");
                    return(complex.EGids.Contains((long)x.EGID));
                }).ToList();
                //set the age of the heating system, randomly up to 30 years old


                var feuerungsstättenType = string.Join(",", feuerungsStättenForHouse.Select(x => x.Brennstoff?.ToString()));
                var hausanschluss        = house.Hausanschluss[0];
                var hse = new HeatingSystemEntry(house.HouseGuid, Guid.NewGuid().ToString(), feuerungsstättenType,
                                                 hausanschluss.HausanschlussGuid, hausanschluss.Adress);

                var oldestYear = feuerungsStättenForHouse.Min(x => x.KesselBaujahr);
                if (oldestYear == null)
                {
                    hse.Age = rnd.Next(30);
                }
                else
                {
                    hse.Age = 2019 - oldestYear.Value;
                }

                hse.FeuerungsstättenPower = feuerungsStättenForHouse.Sum(x => {
                    if (x.KesselLeistung == null)
                    {
                        throw new FlaException("Kesselleistung was null");
                    }
                    return((double)x.KesselLeistung);
                });
                hse.EstimatedMinimumEnergyFromFeuerungsStätten = hse.FeuerungsstättenPower * 1500;
                hse.EstimatedMaximumEnergyFromFeuerungsStätten = hse.FeuerungsstättenPower * 2200;
                //this is a localnet heating system, so use the localnet information
                var potentialHouseHeatingSystems = potentialHeatingSystems.Where(x => x.HouseGuid == house.HouseGuid).ToList();
                var houseHeatingMethod           = houseHeatingMethods.Single(x => x.HouseGuid == house.HouseGuid);
                hse.AverageHeatingEnergyDemandDensity = houseHeatingMethod.MergedHeatingEnergyDensity;
                OverrideEntry ore = overrideEntries.FirstOrDefault(x => x.ComplexName == house.ComplexName);
                if (ore != null)
                {
                    Info("Override Entry for " + house.ComplexName);
                }
                if (potentialHouseHeatingSystems.Count > 0)
                {
                    var totalGas   = potentialHouseHeatingSystems.Sum(x => x.YearlyGasDemand);
                    var totalWärme = potentialHouseHeatingSystems.Sum(x => x.YearlyFernwärmeDemand);
                    if (totalGas > 0)
                    {
                        //localnet heizung
                        hse.YearlyEnergyDemand           = totalGas;
                        hse.OriginalHeatingSystemType    = HeatingSystemType.GasheatingLocalnet;
                        hse.SynthesizedHeatingSystemType = HeatingSystemType.Gas;
                        if (totalWärme > 0)
                        {
                            throw new Exception("Both wärme and gas");
                        }

                        if (ore != null)
                        {
                            throw new FlaException("Overrride Entry für Localnet Gas Gebäude: " + house.ComplexName + ", but that doesn't make sense");
                        }
                    }

                    if (totalWärme > 0)
                    {
                        hse.YearlyEnergyDemand           = totalWärme;
                        hse.OriginalHeatingSystemType    = HeatingSystemType.FernwärmeLocalnet;
                        hse.SynthesizedHeatingSystemType = HeatingSystemType.Fernwärme;
                        if (ore != null)
                        {
                            throw new FlaException("Overrride Entry für Localnet Gebäude: " + house.ComplexName);
                        }
                    }
                } // no data, so use feuerungsstätten
                else if (ore != null)
                {
                    //kanton heizung
                    hse.OriginalHeatingSystemType    = HeatingSystemType.None;
                    hse.SynthesizedHeatingSystemType = ore.HeatingSystemType;
                    hse.YearlyEnergyDemand           = ore.Amount;
                }
                else if (feuerungsStättenForHouse.Count > 0)
                {
                    var fs = feuerungsStättenForHouse[0];
                    if (fs.Brennstoff == "Oel")
                    {
                        hse.OriginalHeatingSystemType    = HeatingSystemType.FeuerungsstättenOil;
                        hse.SynthesizedHeatingSystemType = HeatingSystemType.Öl;
                        hse.YearlyEnergyDemand           = houseHeatingMethod.KantonTotalEnergyDemand;
                    }
                    else if (fs.Brennstoff == "Gas")
                    {
                        hse.OriginalHeatingSystemType = HeatingSystemType.FeuerungsstättenGas;
                        //beco says gas, but can't be, because localnet says no
                        hse.SynthesizedHeatingSystemType = HeatingSystemType.Öl;
                        hse.YearlyEnergyDemand           = houseHeatingMethod.KantonTotalEnergyDemand;
                    }
                    else
                    {
                        throw new Exception("invalid heating system");
                    }
                } // no beco, so use ebbe daten
                else if (houseHeatingMethod.KantonHeatingMethods.Count > 0)
                {
                    //kanton heizung
                    var kantonHeatingMethod = houseHeatingMethod.KantonHeatingMethods[0];
                    GetKantonHeatingSystem(kantonHeatingMethod, hse, houseHeatingMethod);
                }
                else if (feuerungsStättenForHouse.Count > 0)
                {
                    var fs = feuerungsStättenForHouse[0];
                    if (fs.Brennstoff == "Oel")
                    {
                        hse.OriginalHeatingSystemType    = HeatingSystemType.FeuerungsstättenOil;
                        hse.SynthesizedHeatingSystemType = HeatingSystemType.Öl;
                        hse.YearlyEnergyDemand           = houseHeatingMethod.KantonTotalEnergyDemand;
                    }
                    else if (fs.Brennstoff == "Gas")
                    {
                        hse.OriginalHeatingSystemType = HeatingSystemType.FeuerungsstättenGas;
                        //beco says gas, but can't be, because localnet says no
                        hse.SynthesizedHeatingSystemType = HeatingSystemType.Öl;
                        hse.YearlyEnergyDemand           = houseHeatingMethod.KantonTotalEnergyDemand;
                    }
                    else
                    {
                        throw new Exception("invalid heating system");
                    }
                } // no beco, so use ebbe daten
                else if (houseHeatingMethod.KantonHeatingMethods.Count > 0)
                {
                    //kanton heizung
                    var kantonHeatingMethod = houseHeatingMethod.KantonHeatingMethods[0];
                    GetKantonHeatingSystem(kantonHeatingMethod, hse, houseHeatingMethod);
                }
                else
                {
                    hse.OriginalHeatingSystemType    = HeatingSystemType.None;
                    hse.SynthesizedHeatingSystemType = HeatingSystemType.None;
                    hse.YearlyEnergyDemand           = 0;
                }


                dbHouses.Save(hse);
                hses.Add(hse);
            }
            dbHouses.CompleteTransaction();
            double finalFernwärme = hses.Where(x => x.SynthesizedHeatingSystemType == HeatingSystemType.Fernwärme).Sum(x => x.YearlyEnergyDemand);

            if (Math.Abs(finalFernwärme - totalFernwärme) > 1)
            {
                throw new FlaException("Fernwärme changed: Nach allem:" + finalFernwärme + " davor: " + totalFernwärme);
            }
        }
        // ReSharper disable once FunctionComplexityOverflow
        private void WriteOneLine([NotNull] ExcelWorksheet ws, int row, [NotNull] Dictionary <Columns, int> columnNumbers, [NotNull] House house, [ItemNotNull][NotNull] List <GwrData> gwr,
                                  [ItemNotNull][NotNull] List <EnergiebedarfsdatenBern> kanton, [ItemNotNull][NotNull] List <MonthlyElectricityUsePerStandort> complexEnergy,
                                  [NotNull] BuildingComplex mycomplex, [NotNull] HeatingSystemEntry heatingSystem, [NotNull][ItemNotNull] List <Occupant> occupants, [NotNull][ItemNotNull] List <BusinessEntry> businessEntries,
                                  [CanBeNull] PvSystemEntry pvsystem, [NotNull][ItemNotNull] List <Household> households, [NotNull][ItemNotNull] List <CarDistanceEntry> carDistances)
        {
            ws.Cells[row, columnNumbers[Columns.ComplexName]].Value    = house.ComplexName;
            ws.Cells[row, columnNumbers[Columns.Adressen]].Value       = mycomplex.AdressesAsJson;
            ws.Cells[row, columnNumbers[Columns.EGids]].Value          = CleanJson(mycomplex.EGIDsAsJson);
            ws.Cells[row, columnNumbers[Columns.LocalnetISNIds]].Value = CleanJson(mycomplex.GebäudeObjectIDsAsJson);
            ws.Cells[row, columnNumbers[Columns.GeoKoordinaten]].Value = CleanJson(mycomplex.GeoCoordsAsJson);
            var gwrs = gwr.Where(x => {
                Debug.Assert(x.EidgGebaeudeidentifikator_EGID != null, "x.EidgGebaeudeidentifikator_EGID != null");
                return(mycomplex.EGids.Contains((long)x.EidgGebaeudeidentifikator_EGID));
            }).ToList();

            ws.Cells[row, columnNumbers[Columns.WG_GWR_GebäudeAnzahl]].Value = gwrs.Count;

            var ebbes = kanton.Where(x => mycomplex.EGids.Contains(x.egid)).ToList();

            ws.Cells[row, columnNumbers[Columns.WG_GEAK_Anzahl]].Value      = ebbes.Sum(x => x.has_geak);
            ws.Cells[row, columnNumbers[Columns.EBBE_GebäudeTyp]].Value     = CollapseList(ebbes.Select(x => x.upd_gtyp));
            ws.Cells[row, columnNumbers[Columns.EBBE_GebäudeTyp]].Value     = ws.Cells[row, columnNumbers[Columns.GWR_WG]].Value = gwrs.Sum(x => x.AnzahlWohnungen_GANZWHG);
            ws.Cells[row, columnNumbers[Columns.EBBE_GArea]].Value          = ebbes.Sum(x => x.garea);
            ws.Cells[row, columnNumbers[Columns.EBBE_EBF_HZ_Updated]].Value = ebbes.Sum(x => x.upd_ebf);
            ws.Cells[row, columnNumbers[Columns.EBBE_calc_ehzww]].Value     = ebbes.Sum(x => x.calc_ehzww);
            ws.Cells[row, columnNumbers[Columns.EBBE_calc_ehz]].Value       = ebbes.Sum(x => x.calc_ehz);
            ws.Cells[row, columnNumbers[Columns.EBBE_calc_eww]].Value       = ebbes.Sum(x => x.calc_eww);

            //energieträger aus ebbe
            var  heizträgerlst = ebbes.Select(x => x.upd_genhz).ToList();
            long heizträger    = 0;

            if (heizträgerlst.Count > 0)
            {
                heizträger = heizträgerlst[0];
            }

            switch (heizträger)
            {
            case 0:
                break;

            case 7200:
                break;

            case 7201:
                ws.Cells[row, columnNumbers[Columns.EBHZ_OL]].Value = ebbes.Sum(x => x.calc_ehz);
                break;

            case 7202:
                ws.Cells[row, columnNumbers[Columns.EBHZ_KO]].Value = ebbes.Sum(x => x.calc_ehz);
                break;

            case 7203:
                ws.Cells[row, columnNumbers[Columns.EBHZ_GZ]].Value = ebbes.Sum(x => x.calc_ehz);
                break;

            case 7204:
                ws.Cells[row, columnNumbers[Columns.EBHZ_EL]].Value = ebbes.Sum(x => x.calc_ehz);
                break;

            case 7205:
                ws.Cells[row, columnNumbers[Columns.EBHZ_HO]].Value = ebbes.Sum(x => x.calc_ehz);
                break;

            case 7206:
                ws.Cells[row, columnNumbers[Columns.EBHZ_WP]].Value = ebbes.Sum(x => x.calc_ehz);
                break;

            case 7207:
                ws.Cells[row, columnNumbers[Columns.EBHZ_SO]].Value = ebbes.Sum(x => x.calc_ehz);
                break;

            case 7208:
                ws.Cells[row, columnNumbers[Columns.EBHZ_FW]].Value = ebbes.Sum(x => x.calc_ehz);
                break;

            case 7209:
                ws.Cells[row, columnNumbers[Columns.EBHZ_A]].Value = ebbes.Sum(x => x.calc_ehz);
                break;

            default: throw new Exception("Unknown Heizungsträger: " + heizträger);
            }

            //warmwasser aus Ebbe
            var  wwträgerlst = ebbes.Select(x => x.upd_genww).ToList();
            long wwträger    = 0;

            if (wwträgerlst.Count > 0)
            {
                wwträger = wwträgerlst[0];
            }

            switch (wwträger)
            {
            case 0:
                break;

            case 7200:
                break;

            case 7201:
                ws.Cells[row, columnNumbers[Columns.EBWW_OL]].Value = ebbes.Sum(x => x.calc_eww);
                break;

            case 7202:
                ws.Cells[row, columnNumbers[Columns.EBWW_KO]].Value = ebbes.Sum(x => x.calc_eww);
                break;

            case 7203:
                ws.Cells[row, columnNumbers[Columns.EBWW_GZ]].Value = ebbes.Sum(x => x.calc_eww);
                break;

            case 7204:
                ws.Cells[row, columnNumbers[Columns.EBWW_EL]].Value = ebbes.Sum(x => x.calc_eww);
                break;

            case 7205:
                ws.Cells[row, columnNumbers[Columns.EBWW_HO]].Value = ebbes.Sum(x => x.calc_eww);
                break;

            case 7206:
                ws.Cells[row, columnNumbers[Columns.EBWW_WP]].Value = ebbes.Sum(x => x.calc_eww);
                break;

            case 7207:
                ws.Cells[row, columnNumbers[Columns.EBWW_SO]].Value = ebbes.Sum(x => x.calc_eww);
                break;

            case 7208:
                ws.Cells[row, columnNumbers[Columns.EBWW_FW]].Value = ebbes.Sum(x => x.calc_eww);
                break;

            case 7209:
                ws.Cells[row, columnNumbers[Columns.EBWW_A]].Value = ebbes.Sum(x => x.calc_eww);
                break;

            default: throw new Exception("Unknown Heizungsträger: " + heizträger);
            }

            /*
             *
             *
             * ,
             * EBWW_U,
             * EBWW_OL,
             * EBWW_KO,
             * EBWW_GZ,
             * EBWW_EL,
             * EBWW_HO,
             * EBWW_WP,
             * EBWW_SO,
             * EBWW_FW,
             * EBWW_A,
             *
             */
            ws.Cells[row, columnNumbers[Columns.EBBE_EnergieträgerHz]].Value = CollapseList(ebbes.Select(x => x.upd_genhz.ToString()));
            ws.Cells[row, columnNumbers[Columns.EBBE_EnergieträgerWW]].Value = CollapseList(ebbes.Select(x => x.upd_genww.ToString()));
            //entries from localnet
            var monthlies = complexEnergy.Where(x => mycomplex.CleanedStandorte.Contains(x.CleanedStandort)).ToList();

            ws.Cells[row, columnNumbers[Columns.Localnet_Strom]].Value           = monthlies.Sum(x => x.YearlyElectricityUseNetz);
            ws.Cells[row, columnNumbers[Columns.Localnet_Gas]].Value             = monthlies.Sum(x => x.YearlyGasUse);
            ws.Cells[row, columnNumbers[Columns.Localnet_Wärme]].Value           = monthlies.Sum(x => x.YearlyFernwaermeUse);
            ws.Cells[row, columnNumbers[Columns.BFH_EnergieträgerHeizung]].Value = heatingSystem.SynthesizedHeatingSystemType.ToString();
            ws.Cells[row, columnNumbers[Columns.BFH_EnergieBedarfHeizung]].Value = heatingSystem.YearlyEnergyDemand;
            ws.Cells[row, columnNumbers[Columns.BFH_Einwohner]].Value            = occupants.Count;
            var businessTypes   = businessEntries.Select(x => x.BusinessType.ToString()).Distinct().ToList();
            var businessTypeStr = string.Join(",", businessTypes);

            ws.Cells[row, columnNumbers[Columns.BFH_Geschäfte]].Value = businessTypeStr;
            if (pvsystem != null)
            {
                ws.Cells[row, columnNumbers[Columns.BFH_PVSystemGrösseInKWh]].Value = pvsystem.YearlyPotential;
            }

            ws.Cells[row, columnNumbers[Columns.BFH_Geschäfte]].Value         = businessTypeStr;
            ws.Cells[row, columnNumbers[Columns.BFH_StromHaushalteLow]].Value =
                households.Sum(x => x.LowVoltageYearlyTotalElectricityUse);
            ws.Cells[row, columnNumbers[Columns.BFH_StromHaushalteLow]].Value =
                households.Sum(x => x.HighVoltageYearlyTotalElectricityUse);
            ws.Cells[row, columnNumbers[Columns.BFH_StromGewerbeLow]].Value  = businessEntries.Sum(x => x.LowVoltageYearlyTotalElectricityUse);
            ws.Cells[row, columnNumbers[Columns.BFH_StromGewerbeHigh]].Value = businessEntries.Sum(x => x.HighVoltageYearlyTotalElectricityUse);
            //ws.Cells[row, columnNumbers[Columns.BFH_GasGewerbe]].Value = businessEntries.Sum(x => x.YearlyGasUse);
            ws.Cells[row, columnNumbers[Columns.FeuerungsstättenArt]].Value            = heatingSystem.FeuerungsstättenType;
            ws.Cells[row, columnNumbers[Columns.FeuerungsstättenKesselLeistung]].Value = heatingSystem.FeuerungsstättenPower;
            if (heatingSystem.FeuerungsstättenType == "Gas")
            {
                ws.Cells[row, columnNumbers[Columns.FeuerungsstättenJahresEnergie1500hGas]].Value = heatingSystem.EstimatedMinimumEnergyFromFeuerungsStätten;
                ws.Cells[row, columnNumbers[Columns.FeuerungsstättenJahresEnergie2200hGas]].Value = heatingSystem.EstimatedMaximumEnergyFromFeuerungsStätten;
            }
            if (heatingSystem.FeuerungsstättenType == "Oel")
            {
                ws.Cells[row, columnNumbers[Columns.FeuerungsstättenJahresEnergie1500hOel]].Value = heatingSystem.EstimatedMinimumEnergyFromFeuerungsStätten;
                ws.Cells[row, columnNumbers[Columns.FeuerungsstättenJahresEnergie2200hOel]].Value = heatingSystem.EstimatedMaximumEnergyFromFeuerungsStätten;
            }
            ws.Cells[row, columnNumbers[Columns.BFH_AnzahlFahrzeuge]].Value         = carDistances.Count;
            ws.Cells[row, columnNumbers[Columns.BFH_SummeAutoPendlerdistanz]].Value = carDistances.Sum(x => x.CommutingDistance) * 365;
            ws.Cells[row, columnNumbers[Columns.BFH_SummeAutoGesamtdistanz]].Value  = carDistances.Sum(x => x.TotalDistance) * 365;
            ws.Cells[row, columnNumbers[Columns.BFH_SonnendachPotential]].Value     = heatingSystem.FeuerungsstättenPower;
            ws.Cells[row, columnNumbers[Columns.TrafoKreis]].Value = string.Join(";", house.Hausanschluss.Select(x => x.Trafokreis));
        }
        private static void GetKantonHeatingSystem(HeatingSystemType kantonHeatingMethod, [NotNull] HeatingSystemEntry hse, [NotNull] HouseHeating houseHeatingData)
        {
            switch (kantonHeatingMethod)
            {
            case HeatingSystemType.Electricity:
                hse.OriginalHeatingSystemType    = HeatingSystemType.Electricity;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Electricity;
                // change this to consider the canton values and leave some electricty rest
                hse.YearlyEnergyDemand = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.Heatpump:
                hse.OriginalHeatingSystemType    = HeatingSystemType.Heatpump;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Heatpump;
                // change this to consider the canton values and leave some electricty rest
                hse.YearlyEnergyDemand = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.SolarThermal:
                hse.OriginalHeatingSystemType    = HeatingSystemType.SolarThermal;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Other;
                hse.YearlyEnergyDemand           = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.Gas:
                //can't be gas, since localnet says it is not gas
                hse.OriginalHeatingSystemType    = HeatingSystemType.Gas;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Öl;
                hse.YearlyEnergyDemand           = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.Fernwärme:
                hse.OriginalHeatingSystemType    = HeatingSystemType.Fernwärme;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Öl;
                hse.YearlyEnergyDemand           = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.Öl:
                hse.OriginalHeatingSystemType    = HeatingSystemType.Öl;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Öl;
                //: change this to consider the canton values and leave some electricty rest
                hse.YearlyEnergyDemand = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.Kohle:
                hse.OriginalHeatingSystemType    = HeatingSystemType.Kohle;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Other;
                hse.YearlyEnergyDemand           = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.None:
                hse.OriginalHeatingSystemType    = HeatingSystemType.None;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.None;
                if (houseHeatingData.KantonTotalEnergyDemand > 1)
                {
                    throw new Exception("No heating method but energy demand");
                }

                break;

            case HeatingSystemType.Other:
                hse.OriginalHeatingSystemType    = HeatingSystemType.Other;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Other;
                hse.YearlyEnergyDemand           = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.Holz:
                hse.OriginalHeatingSystemType    = HeatingSystemType.Holz;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Other;
                hse.YearlyEnergyDemand           = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.Unbekannt:
                break;

            case HeatingSystemType.GasheatingLocalnet:
                hse.OriginalHeatingSystemType    = HeatingSystemType.GasheatingLocalnet;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Gas;
                hse.YearlyEnergyDemand           = houseHeatingData.LocalnetGasEnergyUse;
                break;

            case HeatingSystemType.FernwärmeLocalnet:
                hse.OriginalHeatingSystemType    = HeatingSystemType.FernwärmeLocalnet;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Fernwärme;
                hse.YearlyEnergyDemand           = houseHeatingData.LocalnetFernwärmeEnergyUse;
                break;

            case HeatingSystemType.FeuerungsstättenOil:
                hse.YearlyEnergyDemand           = houseHeatingData.KantonTotalEnergyDemand;
                hse.OriginalHeatingSystemType    = HeatingSystemType.FeuerungsstättenOil;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Öl;
                break;

            case HeatingSystemType.FeuerungsstättenGas:
                hse.YearlyEnergyDemand           = houseHeatingData.KantonTotalEnergyDemand;
                hse.OriginalHeatingSystemType    = HeatingSystemType.FeuerungsstättenGas;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Öl;
                break;

            default: throw new Exception("Unknown heating method: " + kantonHeatingMethod);
            }
        }