import datetime
import numpy as np
from numpy import nan
from pandas import Timestamp

measures_to_optimise = [
    [{'phase': 0, 'parts': [{'id': 2466, 'type': 'external_wall_insulation',
                             'description': 'EWI Pro EPS external wall insulation system with '
                                            'Brick Slip finish',
                             'depth': 150.0, 'depth_unit': 'mm', 'cost': None,
                             'cost_unit': 'gbp_per_m2', 'r_value_per_mm': 0.02631579,
                             'r_value_unit': 'square_meter_kelvin_per_watt',
                             'thermal_conductivity': 0.038,
                             'thermal_conductivity_unit': 'watt_per_meter_kelvin', 'link': 'SCIS',
                             'created_at': Timestamp('2025-03-16 15:26:22.379496'),
                             'is_active': True, 'prime_material_cost': None, 'material_cost': 0.0,
                             'labour_cost': 0.0, 'labour_hours_per_unit': 0.0, 'plant_cost': 0.0,
                             'total_cost': 298.35, 'notes': 'This is the quoted value from SCIS',
                             'is_installer_quote': True, 'quantity': 63.98796761892035,
                             'quantity_unit': 'm2', 'total': 19090.810139104888,
                             'labour_hours': 0.0, 'labour_days': 0.0}],
      'type': 'external_wall_insulation', 'measure_type': 'external_wall_insulation',
      'description': 'Install 150mm EWI Pro EPS external wall insulation system with Brick Slip '
                     'finish on external walls',
      'starting_u_value': 1.7, 'new_u_value': 0.32, 'already_installed': False,
      'sap_points': np.float64(9.6),
      'simulation_config': {'is_as_built_ending': False, 'walls_is_assumed_ending': False,
                            'walls_insulation_thickness_ending': 'average',
                            'external_insulation_ending': True, 'walls_energy_eff_ending': 'Good',
                            'walls_thermal_transmittance_ending': 0.23},
      'description_simulation': {'walls-description': 'Solid brick, with external insulation',
                                 'walls-energy-eff': 'Good'}, 'total': 19090.810139104888,
      'labour_hours': 0.0, 'labour_days': 0.0, 'survey': False, 'recommendation_id': '0_phase=0',
      'efficiency': 11229.568317120522, 'co2_equivalent_savings': np.float64(0.5),
      'heat_demand': np.float64(37.099999999999994), 'kwh_savings': np.float64(1813.199999999999),
      'energy_cost_savings': np.float64(135.03007058823516)}, {'phase': 0, 'parts': [
        {'id': 2373, 'type': 'internal_wall_insulation', 'description': 'SWIP EcoBatt & Plastered finish',
         'depth': 95.0,
         'depth_unit': 'mm', 'cost': None, 'cost_unit': 'gbp_per_m2', 'r_value_per_mm': 0.03125,
         'r_value_unit': 'square_meter_kelvin_per_watt', 'thermal_conductivity': 0.032,
         'thermal_conductivity_unit': None,
         'link': 'SCIS', 'created_at': Timestamp('2025-03-16 15:26:22.379496'), 'is_active': True,
         'prime_material_cost': None, 'material_cost': 0.0, 'labour_cost': 0.0, 'labour_hours_per_unit': 2.1,
         'plant_cost': 0.0, 'total_cost': 89.0, 'notes': None, 'is_installer_quote': True,
         'quantity': 63.98796761892035,
         'quantity_unit': 'm2', 'total': 5694.929118083911, 'labour_hours': 134.37473199973275,
         'labour_days': 4.199210374991648}], 'type': 'internal_wall_insulation',
                                                               'measure_type': 'internal_wall_insulation',
                                                               'description': 'Install 95mm SWIP '
                                                                              'EcoBatt & '
                                                                              'Plastered finish '
                                                                              'on internal walls',
                                                               'starting_u_value': 1.7,
                                                               'new_u_value': 0.32,
                                                               'already_installed': False,
                                                               'sap_points': 6,
                                                               'simulation_config': {
                                                                   'is_as_built_ending': False,
                                                                   'walls_is_assumed_ending': False,
                                                                   'walls_insulation_thickness_ending': 'average',
                                                                   'internal_insulation_ending':
                                                                       True,
                                                                   'walls_energy_eff_ending':
                                                                       'Good',
                                                                   'walls_thermal_transmittance_ending': 0.29},
                                                               'description_simulation': {
                                                                   'walls-description': 'Solid '
                                                                                        'brick, '
                                                                                        'with '
                                                                                        'internal '
                                                                                        'insulation',
                                                                   'walls-energy-eff': 'Good'},
                                                               'total': 5694.929118083911,
                                                               'labour_hours': 134.37473199973275,
                                                               'labour_days': 4.199210374991648,
                                                               'survey': True,
                                                               'recommendation_id': '1_phase=0',
                                                               'efficiency': 3349.6383047552417,
                                                               'co2_equivalent_savings': np.float64(
                                                                   0.5), 'heat_demand': np.float64(
            35.30000000000001), 'kwh_savings': np.float64(1424.699999999999), 'energy_cost_savings': np.float64(
            106.09824705882352)}], [{'phase': 1, 'parts': [
        {'id': 2351, 'type': 'loft_insulation', 'description': 'Knauf Loft Roll 44 glass fibre roll', 'depth': 300.0,
         'depth_unit': 'mm', 'cost': None, 'cost_unit': 'gbp_per_m2', 'r_value_per_mm': 0.022727273,
         'r_value_unit': 'square_meter_kelvin_per_watt', 'thermal_conductivity': 0.044,
         'thermal_conductivity_unit': 'watt_per_meter_kelvin', 'link': 'SCIS',
         'created_at': Timestamp('2025-03-16 15:26:22.379496'), 'is_active': True, 'prime_material_cost': None,
         'material_cost': 0.0, 'labour_cost': 0.0, 'labour_hours_per_unit': 0.11, 'plant_cost': 0.0, 'total_cost': 15.0,
         'notes': 'This is the cost if there is less than 100mm existing insulation', 'is_installer_quote': True,
         'quantity': 63.98796761892035, 'quantity_unit': 'm2', 'total': 645.0, 'labour_hours': 8, 'labour_days': 1}],
                                     'type': 'loft_insulation', 'measure_type': 'loft_insulation',
                                     'description': 'Install 300mm of Knauf Loft Roll 44 glass fibre roll in your loft',
                                     'starting_u_value': 2.3, 'new_u_value': 2.3, 'sap_points': np.float64(2.4),
                                     'already_installed': False,
                                     'simulation_config': {'is_loft_ending': True, 'roof_is_assumed_ending': False,
                                                           'roof_insulation_thickness_ending': '300',
                                                           'roof_thermal_transmittance_ending': 2.3,
                                                           'roof_energy_eff_ending': 'Very Good'},
                                     'description_simulation': {'roof-description': 'Pitched, 300mm loft insulation',
                                                                'roof-energy-eff': 'Very Good'}, 'total': 645.0,
                                     'labour_hours': 8, 'labour_days': 1, 'survey': False,
                                     'recommendation_id': '2_phase=1',
                                     'efficiency': 278.1347826086957,
                                     'co2_equivalent_savings': np.float64(0.10000000000000009),
                                     'heat_demand': np.float64(1.5), 'kwh_savings': np.float64(572.5500000000002),
                                     'energy_cost_savings': np.float64(42.638135294117774)}], [{'phase': 2, 'parts': [
        {'id': 2329, 'type': 'mechanical_ventilation', 'description': 'Mechanical Extract Ventilation', 'depth': 0.0,
         'depth_unit': None, 'cost': None, 'cost_unit': 'gbp_per_unit', 'r_value_per_mm': nan,
         'r_value_unit': 'square_meter_kelvin_per_watt', 'thermal_conductivity': None,
         'thermal_conductivity_unit': None,
         'link': 'SCIS', 'created_at': datetime.datetime(2025, 3, 16, 15, 26, 22, 379496), 'is_active': True,
         'prime_material_cost': None, 'material_cost': 0.0, 'labour_cost': 0.0, 'labour_hours_per_unit': 0.0,
         'plant_cost': 0.0, 'total_cost': 350.0, 'notes': None, 'is_installer_quote': True, 'total': 700.0,
         'quantity': 2,
         'quantity_unit': 'part'}
    ], 'type': 'mechanical_ventilation', 'measure_type': 'mechanical_ventilation',
                                                                                                'description':
                                                                                                    'Install 2 '
                                                                                                    'Mechanical '
                                                                                                    'Extract '
                                                                                                    'Ventilation units',
                                                                                                'starting_u_value': None,
                                                                                                'new_u_value': None,
                                                                                                'already_installed': False,
                                                                                                'sap_points': np.float64(
                                                                                                    -0.10000000000000142),
                                                                                                'heat_demand': np.float64(
                                                                                                    -3.3999999999999773),
                                                                                                'kwh_savings': np.float64(
                                                                                                    -45.899999999999636),
                                                                                                'co2_equivalent_savings': np.float64(
                                                                                                    0.0),
                                                                                                'energy_cost_savings': np.float64(
                                                                                                    -3.4181999999999846),
                                                                                                'total': 700.0,
                                                                                                'labour_hours': 8,
                                                                                                'labour_days': 1.0,
                                                                                                'simulation_config': {
                                                                                                    'mechanical_ventilation_ending': 'mechanical, extract only'},
                                                                                                'description_simulation': {
                                                                                                    'mechanical-ventilation': 'mechanical, extract only'},
                                                                                                'recommendation_id': '3_phase=2',
                                                                                                'efficiency': 0}
                                                                                               ], [
        {'phase': 3, 'parts': [{'id': 2409, 'type': 'suspended_floor_insulation',
                                'description': 'Q-bot underfloor insulation', 'depth': 75.0,
                                'depth_unit': 'mm', 'cost': None, 'cost_unit': 'gbp_per_m2',
                                'r_value_per_mm': 0.045454547,
                                'r_value_unit': 'square_meter_kelvin_per_watt',
                                'thermal_conductivity': 0.022,
                                'thermal_conductivity_unit': 'watt_per_meter_kelvin',
                                'link': 'SCIS',
                                'created_at': Timestamp('2025-03-16 15:26:22.379496'),
                                'is_active': True, 'prime_material_cost': None,
                                'material_cost': 0.0, 'labour_cost': 0.0,
                                'labour_hours_per_unit': 1.63, 'plant_cost': 0.0,
                                'total_cost': 93.75,
                                'notes': 'Linearly interpolated based on Qbot costs',
                                'is_installer_quote': True, 'quantity': 43.0, 'quantity_unit': 'm2',
                                'total': 4031.25, 'labour_hours': 70.08999999999999,
                                'labour_days': 2.920416666666666}],
         'type': 'suspended_floor_insulation', 'measure_type': 'suspended_floor_insulation',
         'description': 'Install 75mm Q-bot underfloor insulation insulation in suspended floor',
         'starting_u_value': 0.83, 'new_u_value': 0.22, 'sap_points': 2, 'survey': True,
         'already_installed': False, 'simulation_config': {'floor_is_assumed_ending': False,
                                                           'floor_insulation_thickness_ending':
                                                               'average',
                                                           'floor_thermal_transmittance_ending':
                                                               0.685593},
         'description_simulation': {'floor-description': 'Suspended, insulated'}, 'total': 4031.25,
         'labour_hours': 70.08999999999999, 'labour_days': 2.920416666666666,
         'recommendation_id': '4_phase=3', 'efficiency': 4856.707710843373,
         'co2_equivalent_savings': np.float64(0.20000000000000018), 'heat_demand': np.float64(33.5),
         'kwh_savings': np.float64(1018.0999999999995),
         'energy_cost_savings': np.float64(75.8185058823529)}], [
        {'phase': 4, 'parts': [], 'type': 'low_energy_lighting',
         'measure_type': 'low_energy_lighting',
         'description': 'Install low energy lighting in 14 outlets', 'starting_u_value': None,
         'new_u_value': None, 'already_installed': False, 'sap_points': 2, 'kwh_savings': 766.5,
         'energy_cost_savings': 197.22044999999997,
         'co2_equivalent_savings': np.float64(0.09999999999999964),
         'description_simulation': {'lighting-energy-eff': 'Very Good',
                                    'lighting-description': 'Low energy lighting in all fixed '
                                                            'outlets',
                                    'low-energy-lighting': 100}, 'total': 58.8, 'labour_hours': 1,
         'labour_days': 0.125, 'survey': True, 'recommendation_id': '5_phase=4', 'efficiency': 29.4,
         'heat_demand': np.float64(5.099999999999994)}], [
        {'type': 'heating', 'phase': 5, 'measure_type': 'time_temperature_zone_control',
         'parts': [],
         'description': 'Upgrade heating controls to Smart Thermostats, room sensors and smart '
                        'radiator valves (time & temperature zone control)',
         'total': 739.576, 'subtotal': 700.48, 'vat': 39.096000000000004,
         'labour_hours': 3.6199999999999997, 'labour_days': np.float64(1.0),
         'starting_u_value': None, 'new_u_value': None, 'sap_points': np.float64(2.9),
         'already_installed': False,
         'simulation_config': {'thermostatic_control_ending': 'time and temperature zone control',
                               'switch_system_ending': None, 'trvs_ending': None,
                               'mainheatc_energy_eff_ending': 'Very Good'},
         'description_simulation': {'mainheatcont-description': 'Time and temperature zone control',
                                    'mainheatc-energy-eff': 'Very Good'},
         'recommendation_id': '6_phase=5', 'efficiency': 739.576,
         'co2_equivalent_savings': np.float64(0.30000000000000027),
         'heat_demand': np.float64(6.599999999999994), 'kwh_savings': np.float64(853.6999999999998),
         'energy_cost_savings': np.float64(63.57554117647055)}], [
        {'phase': 6, 'parts': [], 'type': 'secondary_heating', 'measure_type': 'secondary_heating',
         'description': 'Remove the secondary heating system', 'starting_u_value': None,
         'new_u_value': None, 'sap_points': np.float64(3.6), 'already_installed': False,
         'total': 30.0, 'subtotal': 25.0, 'vat': 5.0, 'labour_hours': 3.0,
         'labour_days': np.float64(1.0),
         'simulation_config': {'secondheat_description_ending': 'None'},
         'description_simulation': {'secondheat-description': 'None'},
         'recommendation_id': '7_phase=6', 'efficiency': 30.0,
         'co2_equivalent_savings': np.float64(0.10000000000000009),
         'heat_demand': np.float64(15.400000000000006),
         'kwh_savings': np.float64(202.30000000000018),
         'energy_cost_savings': np.float64(15.065400000000011)}], [
        {'phase': 7, 'parts': [{"type": "solar_pv", "size": 4}], 'type': 'solar_pv', 'measure_type': 'solar_pv',
         'description': 'Install a 4.0 kilowatt-peak (kWp) solar panel system.',
         'starting_u_value': None, 'new_u_value': None, 'sap_points': np.float64(13.0),
         'already_installed': False, 'total': 6013.139999999999, 'subtotal': 5010.95, 'vat': 0,
         'labour_hours': 48, 'labour_days': 2, 'photo_supply': np.float64(65.0),
         'has_battery': False, 'initial_ac_kwh_per_year': np.float64(4081.7132614999996),
         'description_simulation': {'photo-supply': np.float64(65.0)},
         'recommendation_id': '8_phase=7', 'efficiency': np.float64(462.54923076923075),
         'co2_equivalent_savings': np.float64(0.47347873833399995),
         'heat_demand': np.float64(88.69999999999999),
         'kwh_savings': np.float64(2040.8566307499998),
         'energy_cost_savings': np.float64(525.1124110919749)},
        {'phase': 7, 'parts': [{"type": "solar_pv", "size": 4}], 'type': 'solar_pv', 'measure_type': 'solar_pv',
         'description': 'Install a 4.0 kilowatt-peak (kWp) solar panel system, with a battery.',
         'starting_u_value': None, 'new_u_value': None, 'sap_points': np.float64(13.0),
         'already_installed': False, 'total': 10537.008, 'subtotal': 8780.84, 'vat': 0,
         'labour_hours': 48, 'labour_days': 2, 'photo_supply': np.float64(65.0),
         'has_battery': True, 'initial_ac_kwh_per_year': np.float64(4081.7132614999996),
         'description_simulation': {'photo-supply': np.float64(65.0)},
         'recommendation_id': '9_phase=7', 'efficiency': np.float64(810.5390769230769),
         'co2_equivalent_savings': np.float64(0.6628702336675999),
         'heat_demand': np.float64(88.69999999999999),
         'kwh_savings': np.float64(2857.1992830499994),
         'energy_cost_savings': np.float64(735.1573755287648)},
        {'phase': 7, 'parts': [{"type": "solar_pv", "size": 3.6}], 'type': 'solar_pv', 'measure_type': 'solar_pv',
         'description': 'Install a 3.6 kilowatt-peak (kWp) solar panel system.',
         'starting_u_value': None, 'new_u_value': None, 'sap_points': np.float64(12.0),
         'already_installed': False, 'total': 5826.491999999999, 'subtotal': 4855.41, 'vat': 0,
         'labour_hours': 48, 'labour_days': 2, 'photo_supply': np.float64(60.0),
         'has_battery': False, 'initial_ac_kwh_per_year': np.float64(3692.66794),
         'description_simulation': {'photo-supply': np.float64(60.0)},
         'recommendation_id': '10_phase=7', 'efficiency': np.float64(485.54099999999994),
         'co2_equivalent_savings': np.float64(0.42834948104),
         'heat_demand': np.float64(83.69999999999999), 'kwh_savings': np.float64(1846.33397),
         'energy_cost_savings': np.float64(475.0617304809999)},
        {'phase': 7, 'parts': [{"type": "solar_pv", "size": 3.6}], 'type': 'solar_pv', 'measure_type': 'solar_pv',
         'description': 'Install a 3.6 kilowatt-peak (kWp) solar panel system, with a battery.',
         'starting_u_value': None, 'new_u_value': None, 'sap_points': np.float64(12.0),
         'already_installed': False, 'total': 10350.359999999999, 'subtotal': 8625.3, 'vat': 0,
         'labour_hours': 48, 'labour_days': 2, 'photo_supply': np.float64(60.0),
         'has_battery': True, 'initial_ac_kwh_per_year': np.float64(3692.66794),
         'description_simulation': {'photo-supply': np.float64(60.0)},
         'recommendation_id': '11_phase=7', 'efficiency': np.float64(862.5299999999999),
         'co2_equivalent_savings': np.float64(0.599689273456),
         'heat_demand': np.float64(83.69999999999999), 'kwh_savings': np.float64(2584.867558),
         'energy_cost_savings': np.float64(665.0864226734)},
        {'phase': 7, 'parts': [{"type": "solar_pv", "size": 3.2}], 'type': 'solar_pv', 'measure_type': 'solar_pv',
         'description': 'Install a 3.2 kilowatt-peak (kWp) solar panel system.',
         'starting_u_value': None, 'new_u_value': None, 'sap_points': np.float64(11.0),
         'already_installed': False, 'total': 5642.604, 'subtotal': 4702.17, 'vat': 0,
         'labour_hours': 48, 'labour_days': 2, 'photo_supply': np.float64(55.0),
         'has_battery': False, 'initial_ac_kwh_per_year': np.float64(3300.5416548),
         'description_simulation': {'photo-supply': np.float64(55.0)},
         'recommendation_id': '12_phase=7', 'efficiency': np.float64(512.964),
         'co2_equivalent_savings': np.float64(0.3828628319568), 'heat_demand': np.float64(78.3),
         'kwh_savings': np.float64(1650.2708274),
         'energy_cost_savings': np.float64(424.61468389001993)},
        {'phase': 7, 'parts': [{"type": "solar_pv", "size": 3.2}], 'type': 'solar_pv', 'measure_type': 'solar_pv',
         'description': 'Install a 3.2 kilowatt-peak (kWp) solar panel system, with a battery.',
         'starting_u_value': None, 'new_u_value': None, 'sap_points': np.float64(11.0),
         'already_installed': False, 'total': 10166.472, 'subtotal': 8472.06, 'vat': 0,
         'labour_hours': 48, 'labour_days': 2, 'photo_supply': np.float64(55.0),
         'has_battery': True, 'initial_ac_kwh_per_year': np.float64(3300.5416548),
         'description_simulation': {'photo-supply': np.float64(55.0)},
         'recommendation_id': '13_phase=7', 'efficiency': np.float64(924.2247272727273),
         'co2_equivalent_savings': np.float64(0.53600796473952), 'heat_demand': np.float64(78.3),
         'kwh_savings': np.float64(2310.3791583599996),
         'energy_cost_savings': np.float64(594.4605574460278)},
        {'phase': 7, 'parts': [{"type": "solar_pv", "size": 2.8}], 'type': 'solar_pv', 'measure_type': 'solar_pv',
         'description': 'Install a 2.8 kilowatt-peak (kWp) solar panel system.',
         'starting_u_value': None, 'new_u_value': None, 'sap_points': np.float64(9.0),
         'already_installed': False, 'total': 5458.727999999999, 'subtotal': 4548.94, 'vat': 0,
         'labour_hours': 48, 'labour_days': 2, 'photo_supply': np.float64(45.0),
         'has_battery': False, 'initial_ac_kwh_per_year': np.float64(2907.1867812),
         'description_simulation': {'photo-supply': np.float64(45.0)},
         'recommendation_id': '14_phase=7', 'efficiency': np.float64(606.5253333333333),
         'co2_equivalent_savings': np.float64(0.3372336666192), 'heat_demand': np.float64(64.0),
         'kwh_savings': np.float64(1453.5933906),
         'energy_cost_savings': np.float64(374.00957940138)},
        {'phase': 7, 'parts': [{"type": "solar_pv", "size": 2.8}], 'type': 'solar_pv', 'measure_type': 'solar_pv',
         'description': 'Install a 2.8 kilowatt-peak (kWp) solar panel system, with a battery.',
         'starting_u_value': None, 'new_u_value': None, 'sap_points': np.float64(9.0),
         'already_installed': False, 'total': 9982.596, 'subtotal': 8318.83, 'vat': 0,
         'labour_hours': 48, 'labour_days': 2, 'photo_supply': np.float64(45.0),
         'has_battery': True, 'initial_ac_kwh_per_year': np.float64(2907.1867812),
         'description_simulation': {'photo-supply': np.float64(45.0)},
         'recommendation_id': '15_phase=7', 'efficiency': np.float64(1109.1773333333333),
         'co2_equivalent_savings': np.float64(0.47212713326688), 'heat_demand': np.float64(64.0),
         'kwh_savings': np.float64(2035.03074684),
         'energy_cost_savings': np.float64(523.6134111619319)},
        {'phase': 7, 'parts': [{"type": "solar_pv", "size": 2.4}], 'type': 'solar_pv', 'measure_type': 'solar_pv',
         'description': 'Install a 2.4 kilowatt-peak (kWp) solar panel system.',
         'starting_u_value': None, 'new_u_value': None, 'sap_points': np.float64(8.0),
         'already_installed': False, 'total': 5274.852, 'subtotal': 4395.71, 'vat': 0,
         'labour_hours': 48, 'labour_days': 2, 'photo_supply': np.float64(40.0),
         'has_battery': False, 'initial_ac_kwh_per_year': np.float64(2510.25188),
         'description_simulation': {'photo-supply': np.float64(40.0)},
         'recommendation_id': '16_phase=7', 'efficiency': np.float64(659.3565),
         'co2_equivalent_savings': np.float64(0.29118921808), 'heat_demand': np.float64(54.3),
         'kwh_savings': np.float64(1255.12594),
         'energy_cost_savings': np.float64(322.94390436199996)},
        {'phase': 7, 'parts': [{"type": "solar_pv", "size": 2.4}], 'type': 'solar_pv', 'measure_type': 'solar_pv',
         'description': 'Install a 2.4 kilowatt-peak (kWp) solar panel system, with a battery.',
         'starting_u_value': None, 'new_u_value': None, 'sap_points': np.float64(8.0),
         'already_installed': False, 'total': 9798.72, 'subtotal': 8165.6, 'vat': 0,
         'labour_hours': 48, 'labour_days': 2, 'photo_supply': np.float64(40.0),
         'has_battery': True, 'initial_ac_kwh_per_year': np.float64(2510.25188),
         'description_simulation': {'photo-supply': np.float64(40.0)},
         'recommendation_id': '17_phase=7', 'efficiency': np.float64(1224.84),
         'co2_equivalent_savings': np.float64(0.40766490531199995), 'heat_demand': np.float64(54.3),
         'kwh_savings': np.float64(1757.1763159999998),
         'energy_cost_savings': np.float64(452.1214661067999)},
        {'phase': 7, 'parts': [{"type": "solar_pv", "size": 2}], 'type': 'solar_pv', 'measure_type': 'solar_pv',
         'description': 'Install a 2.0 kilowatt-peak (kWp) solar panel system.',
         'starting_u_value': None, 'new_u_value': None, 'sap_points': np.float64(7.0),
         'already_installed': False, 'total': 5090.976, 'subtotal': 4242.48, 'vat': 0,
         'labour_hours': 48, 'labour_days': 2, 'photo_supply': np.float64(35.0),
         'has_battery': False, 'initial_ac_kwh_per_year': np.float64(2096.682636),
         'description_simulation': {'photo-supply': np.float64(35.0)},
         'recommendation_id': '18_phase=7', 'efficiency': np.float64(727.2822857142856),
         'co2_equivalent_savings': np.float64(0.243215185776), 'heat_demand': np.float64(48.5),
         'kwh_savings': np.float64(1048.341318), 'energy_cost_savings': np.float64(269.7382211214)},
        {'phase': 7, 'parts': [{"type": "solar_pv", "size": 2}], 'type': 'solar_pv', 'measure_type': 'solar_pv',
         'description': 'Install a 2.0 kilowatt-peak (kWp) solar panel system, with a battery.',
         'starting_u_value': None, 'new_u_value': None, 'sap_points': np.float64(7.0),
         'already_installed': False, 'total': 9614.844, 'subtotal': 8012.369999999999, 'vat': 0,
         'labour_hours': 48, 'labour_days': 2, 'photo_supply': np.float64(35.0),
         'has_battery': True, 'initial_ac_kwh_per_year': np.float64(2096.682636),
         'description_simulation': {'photo-supply': np.float64(35.0)},
         'recommendation_id': '19_phase=7', 'efficiency': np.float64(1373.5491428571427),
         'co2_equivalent_savings': np.float64(0.3405012600864), 'heat_demand': np.float64(48.5),
         'kwh_savings': np.float64(1467.6778451999999),
         'energy_cost_savings': np.float64(377.6335095699599)}]
]
