Skip to content

Data Management Guide

Under construction

This section is under development. So the content may be incomplete and subject to change.

This guide provides comprehensive data validation schemas for all modules in the CO2 Calculator. These specifications help data managers prepare and upload data correctly.


General Notes

Data and factor files

  • module_data.csv: data uploaded by the backmanagement office. Here it is important to always have the info of the unit_institutional_id.
  • factors.csv: factors that are necessary for the calculation. (emission factors and/or other factors)
  • module_template.csv: file that has the names of the columns, and a line of example. Users can download it by clicking on "Download CSV Template".
  • module_test.csv: file that is uploaded via the button "Upload CSV". In this CSV, we have the same columns as in the CSV "template", (and there is no unit_institutional_id since the user is already inside the unit).

Important Information

  • unit_institutional_id: For institutional data where relevant, this field contains the unit identifier (e.g., for EPFL: cf_id as 4-digit numbers).
  • kg_co2eq: When this optional field is provided with a value, no calculation is performed for that line - the value is used directly.
  • note: Available across all modules to add any relevant comments or explanations for specific entries.
  • Template and Test files: Used for data entry by unit managers, while data files are typically pre-filled by the back-office.
  • Factors files: Contain emission factors and conversion coefficients required for calculations.

Data Validation

  • Order of upload from the configuration back-office: first upload factors, then references, then data. The factors.csv file needs to be uploaded before the reference.csv files, and the reference.csv file needs to be uploaded before data.csv file, this allows certain validation rules to be checked properly.
  • Rows that don't meet mandatory field requirements or value constraints will be ignored during upload.
  • Warning messages will be displayed when data doesn't match factor files.
  • Date formats must follow ISO standard (YYYY-MM-DD).
  • For research facilities only, a button 'compute missing factors' needs to be pushed in order to calculate the factors for all research facilities for which the info is not given via the .csv. This needs to be done after the rest of the modules are completed. If not done, the contribution to co2 emissions of these research facilities will be 0. The modules contributing to research facilities carbon footprint are: process emissions, buildings, equipment and purchases. If some of the input data, reference or factors for these modules is updated, the button needs to be pushed again in order to update the results for research facilities accordingly.

Headcount

headcount_data.csv
field type mandatory values constraints description
unit_institutional_id string ✅ numbers only for EPFL: cf_id (4-digits numbers only)
name string ✅ non-empty string e.g. First and second name
sius_code string ✅ within 51, 52, 53, 54, 56, 57, 58, 59 SIUS function code. Used to build the FTE-per-function chart.
user_institutional_id string ✅ numbers only for EPFL: sciper
fte float ✅ 0 ≤ float ≤ 1 Full-time equivalent e.g. 1.0, 0.8, 0.05, 0.75
note string ❌ - contains the note if needed

Note

fte can be completed directly in the table if not provided in the file, and must be filled to validate the module.

SIUS code reference
Code FR EN
51 Enseignant·e·s habilité·e·s à diriger une unité organisationnelle Professors
52 Autres enseignant·e·s Other teaching staff
53 Collaborateur·trices scientifiques Scientific collaborators
54 Assistant·e·s et/ou doctorant·e·s Scientific and doctoral assistants
56 Personnel de direction de la haute école Managerial staff
57 Personnel administratif Administrative staff
58 Personnel de soutien Support staff
59 Personnel d'exploitation Operational staff
headcount_template.csv and headcount_test.csv
field type mandatory values constraints description
name string ✅ non-empty string e.g. First and second name
sius_code string ✅ within 51, 52, 53, 54, 56, 57, 58, 59 SIUS function code. Used to build the FTE-per-function chart.
user_institutional_id string ✅ numbers only for EPFL: sciper
fte float ✅ 0 ≤ float ≤ 1 Full-time equivalent e.g. 1.0, 0.8
note string ❌ - contains the note if needed

Process Emissions

processemissions_data.csv
field type mandatory values constraints example / notes
unit_institutional_id string ✅ numbers only for EPFL: cf_id (4-digits, numbers only)
category string ✅ within processes_factors.csv e.g. Refrigerant
subcategory string ❌ within processes_factors.csv, can be None. If the category is Refrigerants the subcategory needs to be specified to choose the corresponding factor. e.g. R145
quantity_kg float ✅ in kg, float >=0 e.g. 34
note string ❌ - contains the note if needed
kg_co2eq float ❌ - if given no calculation is performed for the line
processemissions_test.csv and processemissions_template.csv
field type mandatory values constraints example / notes
category string ✅ within processes_factors.csv e.g. Refrigerant
subcategory string ❌ within processes_factors.csv, can be None. If the category is Refrigerants the subcategory needs to be specified to choose the corresponding factor. e.g. R145
quantity_kg float ✅ in kg, float >=0 e.g. 34
note string ❌ - contains the note if needed
processemissions_factors.csv
field type mandatory values constraints example / notes
category string ✅ - for EPFL: Refrigerants, CH4, N2O, CO2
subcategory string ❌ - If the category is Refrigerants the subcategory is always specified in the factors used at EPFL.
unit string ✅ - eg kg
ef_kg_co2eq_per_unit float ✅ 0 ≤ float e.g. 23'500 (kg CO2 eq / kg for SF6)
test calculation processemissions_factors
category subcategory quantity_kg kg_co2eq note expected_result
Carbon dioxide (CO2) 100 100
Methane (CH4) 50 1350
Nitrous oxide (N2O) 10 2730
Hydrofluorocarbons (HFCs) HFC-23 (CHF3) 5 73000
Hydrofluorocarbons (HFCs) HFC-125 (CHF2CF3) 10 37400
Hydrofluorocarbons (HFCs) HFC-134a (CH2FCF3) 2 3060
Sulfur hexafluoride (SF6) 0.5 12150
Nitrogen trifluoride (NF3) 1 17400
Perfluorinated compounds PFC-14 (CF4) 3 22140
Fluorinated ethers HFE-134 (CHF2OCHF2) 1.5 9945
Carbon dioxide (CO2) 50 75 Override test: given kg_co2eq differs from calculation 75

Buildings

building_energycombustions_data.csv
field type mandatory values constraints example / notes
unit_institutional_id string ✅ numbers only for EPFL: cf_id (4-digits, numbers only)
name string ✅ within building_combustions_factors.csv e.g. "natural_gas"
unit string ✅ in SI format eg kg, kWh , if couple "unit" "name" not found in building_energycombustions_factors.csv row ignore with warning message
quantity float ✅ 0 ≤ float e.g. 34
note string ❌ - contains the note if needed
kg_co2eq float ❌ - if given no calculation is performed for the line
building_energycombustions_test.csv & building_energycombustions_template.csv
field type mandatory values constraints example / notes
name string ✅ within building_combustions_factors.csv e.g. "natural_gas"
unit string ✅ in SI format eg kg, kWh , if couple "unit" "name" not found in building_energycombustions_factors.csv row ignore with warning message
quantity float ✅ 0 ≤ float e.g. 34
note string ❌ - contains the note if needed
building_energycombustions_factors.csv
field type mandatory values constraints example / notes
unit string ✅ in SI format e.g. kWh, kg
name string ✅ has to be unique, see table below e.g. natural_gas
ef_kg_co2eq_per_unit float ✅ 0 ≤ float e.g. 0.05
name reference table
name FR EN
natural_gas Gaz naturel Natural gas
heating_oil Mazout Heating oil
biomethane Biométhane Biomethane
propane Propane Propane
pellets Granulés de bois Pellets
forest_chips Plaquettes forestières Forest chips
wood_logs Bois bûche Wood logs
test calculation building_energycombustion
name unit quantity kgco2eq note expected_result
natural_gas kWh 100 24
heating_oil kWh 50 16.22
biomethane kWh 200 8.88
propane kWh 75 20.38
pellets kg 500 55.40
forest_chips kg 1000 50.30
wood_logs kg 250 28.45
natural_gas kWh 150 40 Override test: given kgco2eq differs from calculation 40
building_rooms_data.csv
field type mandatory values constraints example / notes
unit_institutional_id string ✅ numbers only for EPFL: cf_id (4-digits, numbers only)
building_name string ✅ within building_rooms_factors.csv e.g. GC
room_name string ✅ i.e. AI0122 If the correspondence (building_name, room_name) is not found in the reference, the row is ignored with a warning message (we do not have the info on squared meters without the name, and so we cannot do the calculation).
room_type string ✅ within office, miscellaneous, laboratories, archives, libraries, auditoriums, see table below e.g. "office". it can be modified in the table by the user. If different from buildings_room_reference.csv it overwrites it. This is the information that is used for the calculation.
room_allocation_ratio float ❌ 0 ≤ float ≤ 1.0 Describe the allocation of a room for a sinle unit, in case of shared rooms etc... e.g. 0.8. If not given, default to 1
note string ❌ - contains the note if needed
kg_co2eq float ❌ - if given no calculation is performed for the line. For EPFL, this must be filled for SCITAS, RCP, etc
building_rooms_test.csv and building_rooms_template.csv
field type mandatory values constraints example / notes
building_location string ❌ can be None e.g. "ECUBLENS"
building_name string ✅ within building_rooms_factors.csv e.g. GC
room_name string ✅ i.e. AI0122 If the correspondence (building_name, room_name) is not found in the reference, the row is ignored with a warning message (we do not have the info on squared meters without the name, and so we cannot do the calculation).
room_type string ✅ within office, miscellaneous, laboratories, archives, libraries, auditoriums, see table below e.g. "office". it can be modified in the table by the user. If different from buildings_room_reference.csv it overwrites it. This is the information that is used for the calculation. If the correspondence building, room_name, room_type does not exist, use the kwh_per_square_meter for the building, room_type (the room_name does not influence the consumption).
note string ❌ - contains the note if needed
building_rooms_reference.csv
field type mandatory values constraints example / notes
building_location string ❌ can be None e.g. "ECUBLENS"
building_name string ✅ within building_rooms_factors.csv e.g. GC
room_name string ✅ digit or name i.e. AI0122
room_type string ✅ within office, miscellaneous, laboratories, archives, libraries, auditoriums, see table below The type in this file is the one that is used by default when adding a new line. However, it can be changed by the user, and if changed, the chosen type is used to pair with the corresponding factors in building_rooms_factors.csv (only type and building are taken to compute co2_eq).
room_surface_square_meter float ✅ 0 ≤ float e.g. 12
building_rooms_factors.csv
field type mandatory values constraints example / notes
building_name string ✅ - for EPFL: BCH,BS...
room_type string ✅ within office, miscellaneous, laboratories, archives, libraries, auditoriums, see table below e.g. "office"
heating_kwh_per_square_meter float ✅ 0 ≤ float e.g. 2.3. These are the consumption hypotheses in squared meters for the given building and type of room. This column gives the hypotheses for all buildings, which are used for the calculation also when the data are input by the users (via the upload .csv)
cooling_kwh_per_square_meter float ✅ 0 ≤ float e.g. 2.3. These are the consumption hypotheses in squared meters for the given building and type of room. This column gives the hypotheses for all buildings, which are used for the calculation also when the data are input by the users (via the upload .csv)
ventilation_kwh_per_square_meter float ✅ 0 ≤ float e.g. 2.3. These are the consumption hypotheses in squared meters for the given building and type of room. This column gives the hypotheses for all buildings, which are used for the calculation also when the data are input by the users (via the upload .csv)
lighting_kwh_per_square_meter float ✅ 0 ≤ float e.g. 2.3. These are the consumption hypotheses in squared meters for the given building and type of room. This column gives the hypotheses for all buildings, which are used for the calculation also when the data are input by the users (via the upload .csv)
ef_kg_co2eq_per_kwh float ✅ 0 ≤ float e.g. 0.125
energy_type string ✅ electric, thermal, etc It specifies the type of heating: if electric,the heating is classified as heating (electric), if thermal, it is classified as centralized heating.
conversion_factor float ❌ can be None e.g. 4 , if None consider as 1. To be applied to heating (only, and not to the other three categories) heating_kwh_per_square_meter * ef_kg_co2eq_per_kwh * conversion_factor. This is an adjustement factor needed because the emission factor or heating can be very different if the heating is not electric. So it needs to be adjusted to respect the nature of the thermal heating (gas, etc). Also pay attention to the fact that in some cases the kwh for heating are elec, in other thermique, etc. And we need to bring it to right type to use the emission factors properly.
room_type reference table
name FR EN
office Bureau Office
miscellaneous Divers Miscellaneous
laboratories Laboratoires Laboratories
archives Archives Archives
libraries Bibliothèques Libraries
auditoriums Auditoires Auditoriums

test calculation building_rooms
building_name room_name room_type room_allocation_ratio kg_co2eq note expected_result
AAB AAB 0 05 office 1.0 17.7 * (5.189 + 5.866 + 0.748 + 2.293 * 1.0) * 1.0 * 0.097 24.2
AAB AAB 0 32 miscellaneous 1.0 26.99 * (5.339 + 17.798 + 1.033 + 3.257 * 1.0) * 1.0 * 0.097 71.80
AAB AAB 0 47 office 0.5 18.76 * (5.189 + 5.866 + 0.748 + 2.293 * 1.0) * 0.5 * 0.097 12.83
CSV CSV 0 32 libraries 1.0 34.51 * (3.952 + 5.104 + 0.069 + 35.594 * 2.8297) * 1.0 * 0.097 367.7
SOS1 SOS1 0 32 archives 0.75 13.94 * (0.857 + 1.404 + 0.094 + 1.154 * 2.8297) * 0.75 * 0.097 5.7
AAB AAB 0 92.1 miscellaneous 1.0 50 Override test: given kg_co2eq differs from calculation 50
CCT CCT 0 01 office 1.0 36.62 * (381.421 + 431.142 + 54.965 + 168.571 * 1.0) * 1.0 * 0.097 3680.37

Equipment

equipment_data.csv
field type mandatory values constraints description
unit_institutional_id string ✅ numbers only for EPFL: cf_id (4-digits numbers only)
equipment_id string ✅ letters and numbers This info is used to deal with the updates between one year and the other, in particular for usage hours information. for EPFL: Inventory number
name string ✅ non-empty string e.g. name of the equipment "GoPro"
equipment_class string ✅ within equipments_factors.csv e.g. "Evaporator" is used to get power in equipments_factors.csv, for EPFL these are the standard inventory classes in ENG. If equipment_class is not empty but the value is not listed to equipments_factors.csv, the row is ignored. A warning message is displayed in loading.
sub_class string ❌ within equipments_factors.csv, can be None e.g. "Vacuum evaporators". The sub_class is filled by the user. Must be in the tuples equipment_class/sub_class within equipments_factors.csv else row ignored - (Warning message in loading if data uploaded with the wrong subclass)
active_usage_hours_per_week int ❌ 0 ≤ int ≤ 168 e.g. 23. The sum of active + passive must be ≤ 168
standby_usage_hours_per_week int ❌ 0 ≤ int ≤ 168 e.g. 23. The sum of active + passive must be ≤ 168
note string ❌ - contains the note if needed
kg_co2eq float ❌ - if given, no calculation is performed on this line
equipment_template.csv and equipment_test.csv
field type mandatory values constraints description
equipment_id string ✅ letters and numbers This info is used to deal with the updates between one year and the other, in particular for usage hours information. for EPFL: Inventory number
name string ✅ non-empty string e.g. name of the equipment "GoPro"
equipment_class string ✅ within equipments_factors.csv e.g. "Evaporator" is used to get power in equipments_factors.csv, for EPFL these are the standard inventory classes in ENG. If equipment_class is not empty but the value is not listed to equipments_factors.csv, the row is ignored. A warning message is displayed in loading.
sub_class string ❌ within equipments_factors.csv, can be None e.g. "Vacuum evaporators". The sub_class is filled by the user. Must be in the tuples equipment_class/sub_class within equipments_factors.csv else row ignored - (Warning message in loading if data uploaded with the wrong subclass)
active_usage_hours_per_week int ❌ 0 ≤ int ≤ 168 e.g. 23. The sum of active + passive must be ≤ 168
standby_usage_hours_per_week int ❌ 0 ≤ int ≤ 168 e.g. 23. The sum of active + passive must be ≤ 168
note string ❌ - contains the note if needed
equipment_factors.csv
field type mandatory values constraints description
equipment_category string ✅ non-empty string within : {scientific,it,other} e.g. scientific. Case-sensitive
equipment_class string ✅ not empty string e.g. "Evaporator". For EPFL these are the standard inventory classes in ENG
sub_class string ❌ can be None e.g. "Vacuum evaporators"
active_usage_hours_per_week int ✅ 0 ≤ int ≤ 168 e.g. 23. The sum of active + passive must be ≤ 168
standby_usage_hours_per_week int ✅ 0 ≤ int ≤ 168 e.g. 23. The sum of active + passive must be ≤ 168
active_power_w float ✅ ≥ 0 e.g. 23
standby_power_w float ✅ ≥ 0 e.g. 23
ef_kg_co2eq_per_kwh float ✅ ≥ 0 e.g. swiss mix 0.125
test calculation equipment
equipment_id name equipment_class sub_class active_usage_hours_per_week standby_usage_hours_per_week kgco2eq note expected_result
EQ001 Power supplies Power supplies 24 144 (100.0 * 24 + 0.0 * 144) / 1000 * 47 * 0.097 10.94
EQ002 Amplifiers Amplifiers 24 144 (20.0 * 24 + 10.0 * 144) / 1000 * 47 * 0.097 8.75
EQ003 Large Motor Moteurs Large Motor/Generator 24 144 (64000.0 * 24 + 100.0 * 144) / 1000 * 47 * 0.097 7068.27
EQ004 Milling machine Milling machine 24 144 (2300.0 * 24 + 30.0 * 144) / 1000 * 47 * 0.097 271.35
EQ005 Arc Welding Press Arc Welding Power Sources 24 144 (3500.0 * 24 + 30.0 * 144) / 1000 * 47 * 0.097 402.65
EQ006 Old -80C freezer Lab Freezer / Frigde Old -80°C freezers (>12yo) 168 0 900 Override test: given kgco2eq differs from calculation 900
EQ007 Servers Servers 70 98 (500.0 * 70 + 100.0 * 98) / 1000 * 47 * 0.097 204.24

Purchases

purchases_common_data.csv
field type mandatory values constraints example / notes
unit_institutional_id string ✅ numbers only for EPFL: cf_id (4-digits, numbers only)
name string ✅ non-empty string e.g. "HP Novobook"
supplier string ❌ - e.g. "Bentley Systems International Ltd"
quantity float ❌ 0 ≤ float e.g. 3
total_spent_amount float ✅ 0 ≤ float e.g. 3567
currency string ❌ in chf, eur, usd, gbp, aud, etc format. If not given, chf is used by default. e.g. eur
purchase_institutional_code string ✅ within purchases_common_factors.csv e.g. UNSPSC code, as to within purchases_common_factors.csv
purchase_institutional_description string ❌ - e.g. UNSPSC description, if not given compute with purchases_common_factors.csv
purchase_additional_code string ❌ within purchases_common_factors.csv e.g. NACRES code, this column is used for the co2 emission calculations. For EPFL: data uploaded from the data manager will always have this column filled. But users can add purchases without this code and a static mapping (contained in the factors) is used for UNSPCS -> NACRES.
note string ❌ - contains the note if needed
kg_co2eq float ❌ - if given no calculation is performed for the line
purchases_common_test.csv and purchases_common_template.csv
field type mandatory values constraints example / notes
name string ✅ non-empty string e.g. "HP Novobook"
supplier string ❌ - e.g. "Bentley Systems International Ltd"
quantity float ❌ 0 ≤ float e.g. 3
total_spent_amount float ✅ 0 ≤ float e.g. 3567
currency string ❌ in chf, eur, usd, gbp, aud, etc format. If not given, chf is used by default. e.g. eur
purchase_institutional_code string ✅ within purchases_factors.csv e.g. UNSPSC code
purchase_institutional_description string ❌ - e.g. UNSPSC description, if not given compute with purchases_common_factors.csv
purchase_additional_code string ❌ within purchases_factors.csv e.g. NACRES code
note string ❌ - contains the note if needed
purchases_common_factors.csv
field type mandatory values constraints example / notes
currency string ✅ in chf, eur, usd, gbp, aud, etc format. for labo1point5 is eur
purchase_category string ✅ within it_equipment,other_purchases,scientific_equipment,services,vehicles,consumable_accessories,biological_chemical_gaseous_product e.g. vehicle. This columns is used to split the purchases into the subsections in the module.
purchase_institutional_code string ✅ - e.g. UNSPSC code
purchase_institutional_description string ❌ - e.g. UNSPSC description, in english
purchase_additional_code string ❌ - e.g. NACRES code, optional because for EPFL we add a line per UNSPSC with the average to be used for purchases added by the user
ef_kg_co2eq_per_currency float ✅ 0 ≤ float e.g. 0.1
test calculation purchases_common
name supplier quantity total_spent_amount currency purchase_institutional_code purchase_institutional_description purchase_additional_code note kg_co2eq expected_result
name 1 supplier 1 1 168.639 chf 27112800 VA03 0.061372
name 2 supplier 2 1 537.190 chf B KC01 0.151509
name 3 supplier 1 3.2 7.86 chf 31162800 KE31 0.002574
name 4 supplier 2 1 100 chf 10121700 here we use the UNSPSC factor, 100 * 1.067 / 1.173 * 0.88 0.088
name 5 supplier 1 1.3 585 eur B NA12 0.797953964194373
name 6 supplier 2 2.7 63.46 eur 41120000 OA21 override test 10 10
purchases_centralized_data.csv
field type mandatory values constraints example / notes
unit_institutional_id string ✅ numbers only for EPFL: cf_id (4-dits, numbers only)
name string ✅ non-empty string e.g. "Liquid nitrogen"
unit string ✅ - e.g. liter
annual_consumption float ✅ - e.g. 45.05
coef_to_kg float ✅ non negative e.g. 3.05
note string ❌ - contains the note if needed
kg_co2eq float ❌ - if given no calculation is performed for the line
purchases_centralized_test.csv and purchases_centralized_template.csv
field type mandatory values constraints example / notes
name string ✅ non-empty string e.g. "Liquid nitrogen"
unit string ✅ - e.g. liter
annual_consumption float ✅ - e.g. 45.05
coef_to_kg float ✅ non negative e.g. 3.05
note string ❌ no constraints contains the note if needed
purchases_centralized_factors.csv
field type mandatory values constraints example / notes
name string ✅ non-empty string e.g. "Liquid nitrogen"
ef_kg_co2eq_per_kg float ✅ 0 ≤ float e.g. 0.1
test calculation purchases_centralized
name unit annual_consumption coef_to_kg note kg_co2eq expected_result
liquid nitrogen liters 500 0.808 500 * 0.808 * 0.1 40.40
liquid nitrogen liters 250 0.808 250 * 0.808 * 0.1 20.20
liquid nitrogen kg 100 1.0 100 * 1.0 * 0.1 10.00
liquid nitrogen liters 750 0.808 750 * 0.808 * 0.1 60.60
liquid nitrogen kg 80 1.0 80 * 1.0 * 0.1 8.00
liquid nitrogen liters 200 0.808 override test 15 15

External Clouds & AI

external_ai_data.csv
field type mandatory values constraints example / notes
unit_institutional_id string ✅ numbers only for EPFL: cf_id (4-digits numbers only)
provider string ✅ within external_ai_factors.csv e.g. name of the firm "Google"
usage_type string ✅ within external_ai_factors.csv e.g. "text,video,image", tuple provider/usage_type within external_ai_factors. If not in provided tuple, the raw is ignored with a Warning message.
requests_per_user_per_day string ✅ within "1-5 times per day", "5-20 times per day", "20-100 times per day", ">100 times per day" e.g. 1-5 times per day
fte_count float ✅ 1 ≤ float e.g. 2. By default the numbers shown is the total headcount of the unit.
note string ❌ - contains the note if needed
kg_co2eq float ❌ - if given no calculation is performed
external_ai_test.csv and external_ai_template.csv
field type mandatory values constraints example / notes
provider string ✅ have to be in external_ai_factors.csv e.g. name of the firm "Google"
usage_type string ✅ have to be in external_ai_factors.csv e.g. "text,video,image"
requests_per_user_per_day string ✅ within "1-5 times per day", "5-20 times per day", "20-100 times per day", ">100 times per day" e.g. 1-5 times per day
fte_count float ✅ 1 ≤ float e.g. 2. By default the numbers shown is the total headcount of the unit.
note string ❌ - contains the note if needed
external_ai_factors.csv
field type mandatory values constraints example / notes
provider string ✅ - e.g. name of the firm "Google"
usage_type string ✅ - e.g. type of use "text,video,image"
ef_kg_co2eq_per_request float ✅ 0 ≤ float e.g. "0.05"
test calculation external_ai
provider usage_type requests_per_user_per_day fte_count note kg_co2eq expected_result
Claude (Anthropic) text 10 5 5 * 10 * 235 * 0.0075 88.1250
ChatGPT (OpenAI) image 2 3 3 * 2 * 235 * 0.3 423.0000
Mistral AI code 15 2 2 * 15 * 235 * 0.15 1057.5000
Gemini (Google) text 5 4 4 * 5 * 235 * 0.0075 35.2500
Copilot (Microsoft) image 8 1 1 * 8 * 235 * 0.3 564.0000
Claude (Anthropic) code 20 2 2 * 20 * 235 * 0.15 1410.0000
Other text 3 3 3 * 3 * 235 * 0.0075 override test 100
external_clouds_data.csv
field type mandatory values constraints example / notes
unit_institutional_id string ✅ numbers only for EPFL: cf_id (4-digits numbers only)
service_type string ✅ within external_clouds_factors.csv e.g. one of storage,compute
provider string ✅ within external_clouds_factors.csv e.g."AWS"
spent_amount float ✅ 0 ≤ float e.g. 299
currency string ❌ in chf, eur, usd format. If not given, eur is used by default. e.g. eur
note string ❌ - contains the note if needed
kg_co2eq float ❌ - if given no calculation is performed
external_clouds_test.csv and external_clouds_template.csv
field type mandatory values constraints example / notes
service_type string ✅ within external_clouds_factors.csv e.g. one of storage,compute
provider string ✅ within external_clouds_factors.csv e.g."AWS"
spent_amount float ✅ 0 ≤ float e.g. 299
currency string ❌ in chf, eur, usd format. If not given, eur is used by default. e.g. eur
note string ❌ - contains the note if need
external_clouds_factors.csv
field type mandatory values constraints example / notes
service_type string ✅ not empty e.g. storage,compute
provider string ✅ not empty e.g. firm
currency string ✅ in chf, eur, usd format, not None. for EPFL -> eur
ef_kg_co2eq_per_currency float ✅ 0 ≤ float e.g. 0.8
test calculation external_clouds
service_type provider spent_amount currency note kg_co2eq expected_result
storage AWS 100 eur 100 * 0.259 25.90
compute GCP 500 eur 500 * 0.259 129.50
storage Azure 250 chf 250 * 1.0672 * 0.259 69.10
compute OVH 300 chf 300 * 1.0672 * 0.259 82.92
storage AWS 1000 usd 1000 * 0.8849 * 0.259 (USD to EUR conversion) 229.19
compute GCP 150 eur 150 * 0.259 38.85
storage OVH 200 chf 200 * 1.0672 * 0.259, override test 50 50
---

Travel

travel_planes_data.csv
field type mandatory values constraints example / notes
unit_institutional_id string ✅ numbers only for EPFL: cf_id (numbers only)
origin_iata string ✅ IATA code e.g. "GVA".
destination_iata string ✅ IATA code e.g. "JFK".
user_institutional_id string ❌ - e.g. EPFL: SCIPER. It is not mandatory so that users can add travels also for external people, people outside the unit, etc. Data from the backoffice however should have a SCIPER.
departure_date string ❌ ISO format YYYY-MM-DD e.g. "2025-05-15" if date format not recognized ignore row, id date not in the carbon report year ignore row. If None the row is considered.
number_of_trips int ✅ 1 ≤ int e.g. 2
cabin_class string ✅ within first,business,economy e.g. business. For EPFL when taken from API, premium economy needs to be classifed as eco.
note string ❌ - contains the note if needed
kg_co2eq float ❌ - if given no calculation is performed for the line.
travel_planes_test.csv and travel_planes_template.csv
field type mandatory values constraints example / notes
origin_iata string ✅ IATA code e.g. "GVA"
destination_iata string ✅ IATA code e.g. "JFK"
user_institutional_id string ❌ - e.g. EPFL: SCIPER
departure_date string ❌ ISO format YYYY-MM-DD e.g. "2025-05-15 if date format not recognized ignore row, id date not in the carbon report year ignore row. If None the row is considered.
number_of_trips int ✅ 1 ≤ int e.g. 2
cabin_class string ✅ within first,business,economy e.g. business
note string ❌ - contains the note if needed
travel_planes_factors.csv
field type mandatory values constraints example / notes
category string ✅ within short_to_medium_haul, medium_to_long_haul e.g. "medium_to_long_haul"
cabin_class string ✅ business, economy, first flight class to choose the corresponding factor. for EPFL: Premium economy is treated as economy, first class and business class have the same factor for short to mediul haul
ef_kg_co2eq_per_km float ✅ 0 ≤ float e.g. "0.345"
rfi_adjustment float ✅ 0 ≤ float The RFI (Radiative Forcing Index) for the methodology should be specified here, e.g. 2, 2.7, 3, etc. This is used to account for the total warming impact of flying. for EPFL: 1.35, which corresponds to transforming mobitool factors to 2.7 RFI as in atmosfair
min_distance float ✅ in km, unique value e.g. "300" min distance of the category
max_distance float ✅ in km, unique value e.g. "1200" max distance of the category
travel_planes_locations_reference.csv

Data source

Airport location reference data is sourced from GeoNames, a geographical database covering all countries.

field type mandatory values constraints example / notes
name string ✅ - name of the location, typically the city or train station
airport_size string ❌ within medium_airport,large_airport e.g. "medium_airport"
latitude float ✅ - e.g. 46.2044
longitude float ✅ - e.g. 6.1432
continent string ❌ within EU,NA,SA,AF,AS,OC e.g. "EU"
country_code string ❌ in ISO 3166-1 alpha-2 format or use RoW for rest of the world e.g. "CH"
iata_code string ✅ IATA code of the airport e.g. "GVA"
municipality string ❌ - e.g. "Geneva"
keywords string ❌ - keywords to link the location with the possible different names in the data
test calculation travel_planes
origin_iata destination_iata user_institutional_id departure_date number_of_trips cabin_class note kg_co2eq expected_result
GVA CDG 1 economy (407.6 + 95) km * 0.2906 * 1.35 * 1 197.18
GVA LHR 2 business (753.7 + 95) km * 0.4471 * 1.35 * 2 1024.57
GVA FRA 1 economy (459.2 + 95) km * 0.2906 * 1.35 * 1 217.41
GVA JFK 1 business (6201.1 + 95) km * 0.393 * 1.35 * 1 3340.39
GVA LAX 1 economy (9509.4 + 95) km * 0.1902 * 1.35 * 1 2466.12
LHR JFK 3 business (5540.0 + 95) km * 0.393 * 1.35 * 3 8968.97
GVA CDG 1 economy override test 150 150
travel_trains_data.csv
field type mandatory values constraints example / notes
unit_institutional_id string ✅ numbers only for EPFL: cf_id (4-digits,numbers only)
origin_name string ✅ train station name e.g. "Geneve Cornavin" TBD it accepts error in naming
origin_country_code string ✅ ISO2 for the country e.g. CH for switzerland
destination_name string ✅ train station name e.g. "Geneve Cornavin" TBD it accepts error in naming
destination_country_code string ✅ ISO2 for the country e.g. CH for switzerland
user_institutional_id string ❌ only number e.g. EPFL: SCIPER. It is not mandatory so that users can add travels also for external people, people outside the unit, etc.
departure_date string ❌ ISO format YYYY-MM-DD e.g. "2025-05-15 if date format not recognized ignore row, id date not in the carbon report year ignore row. If None the row is considered.
number_of_trips int ✅ 1 ≤ int e.g. 2
cabin_class string ✅ within first,second e.g. second
note string ❌ - contains the note if needed
kg_co2eq float ❌ - if given no calculation is performed for the line

Note

Traveler name is obtained with headcount

travel_trains_test.csv , travel_trains_template.csv
field type mandatory values constraints example / notes
origin_name string ✅ train station name e.g. "Geneve Cornavin" TBD it accepts error in naming
origin_country_code string ✅ ISO2 for the country e.g. CH for switzerland
destination_name string ✅ train station name e.g. "Geneve Cornavin" TBD it accepts error in naming
destination_country_code string ✅ ISO2 for the country e.g. CH for switzerland
user_institutional_id string ❌ only number e.g. EPFL: SCIPER. It is not mandatory so that users can add travels also for external people, people outside the unit, etc.
departure_date string ❌ ISO format YYYY-MM-DD e.g. "2025-05-15 if date format not recognized ignore row, id date not in the carbon report year ignore row. If None the row is considered.
number_of_trips int ✅ 1 ≤ int e.g. 2
cabin_class string ✅ within first,second e.g. second
note string ❌ - contains the note if needed
travel_trains_factors.csv
field type mandatory values constraints example / notes
country_code string ✅ in ISO 3166-1 alpha-2 format or use RoW for rest of the world e.g. "CH"
ef_kg_co2eq_per_km float ✅ 0 ≤ float e.g. "0.125"
travel_trains_locations_reference.csv

Data source

Train station location reference data is sourced from GeoNames, a geographical database covering all countries.

field type mandatory values constraints example / notes
name string ✅ - name of the location, typically the city or train station
latitude float ✅ - e.g. 46.2044
longitude float ✅ - e.g. 6.1432
continent string ❌ within EU,NA,SA,AF,AS,OC e.g. "EU"
country_code string ✅ in ISO 3166-1 alpha-2 format or use RoW for rest of the world e.g. "CH"
municipality string ❌ - e.g. "Geneva"
keywords string ❌ - keywords to link the location with the possible different names in the data
test calculation travel_trains
origin_name origin_country_code destination_name destination_country_code user_institutional_id departure_date number_of_trips cabin_class note kg_co2eq expected_result
Genève CH Basel SBB CH 1 (184.9 × 1.2) km × 0.00979 (CH) × 1 2.17
Basel SBB CH Aachen Hbf DE 2 (374.3 × 1.2) km × 0.0719 (DE) × 2 64.59
Genève CH Paris FR 1 (410.6 × 1.2) km × 0.0269 (FR) × 1 13.26
Milano IT Aachen Hbf DE 1 (630.6 × 1.2) km × 0.0719 (DE) × 1 54.41
Genève CH Lyon FR 3 (113.0 × 1.2) km × 0.0269 (FR) × 3 10.95
Basel SBB CH Milano IT 2 (260.0 × 1.2) km × 0.0491 (IT) × 2 30.64
Genève CH Aachen Hbf DE 1 (506.9 × 1.2) km × 0.0719 (DE) × 1, override test 40 40
Genève CH London GB 1 (980.0 × 1.2) km × 0.0775 (RoW) × 1 90.78

Research Facilities

researchfacilities_common_data.csv
field type mandatory values constraints example / notes
unit_institutional_id string ✅ numbers only for EPFL: cf_id (4-digits, numbers only)
researchfacility_id string ✅ within researchfacilities_common_factors.csv e.g. for EPFL: cf of research facilities
researchfacility_name string ✅ within researchfacilities_common_factors.csv e.g. CIBM-GE
use float ✅ 0 ≤ float, in format of use_unit e.g. 34
use_unit string ✅ within researchfacilities_common_factors.csv e.g. chf, hours... if correspondence is not found in factors, the row is ignored with a warning message
note string ❌ - contains the note if needed
kg_co2eq float ❌ - if given no calculation is performed for the line. in this case this would correspond to the co2 generated by the unit use of the facility
researchfacilities_common_test.csv and researchfacilities_common_template.csv
field type mandatory values constraints example / notes
researchfacility_id string ✅ within researchfacilities_common_factors.csv e.g. for EPFL: cf of research facilities
researchfacility_name string ✅ within researchfacilities_common_factors.csv e.g. CIBM-GE
use float ✅ 0 ≤ float, in format of use_unit e.g. 34
use_unit string ✅ within researchfacilities_common_factors.csv e.g. chf, hours... if correspondence is not found in factors, the row is ignored with a warning message
note string ❌ - contains the note if needed
researchfacilities_common_factors.csv
field type mandatory values constraints example / notes
researchfacility_id string ✅ e.g. for EPFL: cf of research facilities
researchfacility_name string ✅ e.g. CIBM-GE
kg_co2eq_sum float ❌ 0 ≤ float e.g. 3555, not mandatory because the calculator is used to compute these results. however if this quantity is given here, it is taken instead of the calculator computation. It corresponds to the co2 for the research facility coming from purchases, equipment, buildings, process emissions and combustion emissions.
total_use float ✅ 0 ≤ float, in the unit of "use_unit" e.g. 34
use_unit string ✅ - typically currency, time or count : chf if total_use calculated by billing, or time in hrs or other. This info appears in the table for the users.

Note

Important to push on the button 'compute missing factor' to calculate the kg_co2eq_sum for research facilities where this info was not known, through the calculator computation. If not done, the contribution of these research facilities will be 0.

researchfacilities_animals_data.csv
field type mandatory values constraints example / notes
unit_institutional_id string ✅ numbers only for EPFL: cf_id (4-digits, numbers only)
researchfacility_id string ✅ within researchfacilities_animals_factors.csv e.g. for EPFL: cf of research facilities
researchfacility_name string ✅ within researchfacilities_animals_factors.csv e.g. CIBM-GE
researchfacility_type string ✅ within researchfacilities_animals_factors.csv e.g. mice
use float ✅ 0 ≤ float, in format of use_unit e.g. 34
use_unit string ✅ within researchfacilities_animals_factors.csv e.g. housing
note string ❌ - contains the note if needed
kg_co2eq float ❌ - if given no calculation is performed for the line
researchfacilities_animals_test.csv and researchfacilities_animals_template.csv
field type mandatory values constraints example / notes
researchfacility_id string ✅ within researchfacilities_animals_factors.csv e.g. for EPFL: cf of research facilities
researchfacility_name string ✅ within researchfacilities_animals_factors.csv e.g. CIBM-GE
researchfacility_type string ✅ within researchfacilities_animals_factors.csv e.g. mice
use float ✅ 0 ≤ float, in format of use_unit e.g. 34
use_unit string ✅ within researchfacilities_animals_factors.csv e.g. housings
note string ❌ - contains the note if needed
researchfacilities_animals_factors.csv
field type mandatory values constraints example / notes
researchfacility_id string ✅ e.g. for EPFL: cf of research facilities
researchfacility_name string ✅ e.g. CIBM-GE
processemissions_share float ✅ 0 ≤ float ≤ 1 e.g. 0.3, this is the share of process emissions in the total co2eq of the research facility. This is used to split the total co2eq into the different parts of the research facility (for animal facility, mice vs fish).
building_energycombustions_share float ✅ 0 ≤ float ≤ 1 e.g. 0.3, this is the share of building energy combustion emissions in the total co2eq of the research facility. This is used to split the total co2eq into the different parts of the research facility (for animal facility, mice vs fish).
building_rooms_share float ✅ 0 ≤ float ≤ 1 e.g. 0.1, this is the share of building rooms emissions in the total co2eq of the research facility. This is used to split the total co2eq into the different parts of the research facility (for animal facility, mice vs fish).
purchases_common_share float ✅ 0 ≤ float ≤ 1 e.g. 0.2, this is the share of purchases common emissions in the total co2eq of the research facility. This is used to split the total co2eq into the different parts of the research facility (for animal facility, mice vs fish).
purchases_additional_share float ✅ 0 ≤ float ≤ 1 e.g. 0.05, this is the share of purchases additional emissions in the total co2eq of the research facility. This is used to split the total co2eq into the different parts of the research facility (for animal facility, mice vs fish).
equipments_share float ✅ 0 ≤ float ≤ 1 e.g. 0.15, this is the share of equipments emissions in the total co2eq of the research facility. This is used to split the total co2eq into the different parts of the research facility (for animal facility, mice vs fish).
kg_co2eq_sum_processemissions float ❌ 0 ≤ float e.g. 3555, not mandatory because the calculator is used to compute these results. however if this quantity is given here, it is taken instead of the calculator computation. It corresponds to the co2 for the research facility coming from process emissions
kg_co2eq_sum_building_energycombustions float ❌ 0 ≤ float e.g. 3555, not mandatory because the calculator is used to compute these results. however if this quantity is given here, it is taken instead of the calculator computation. It corresponds to the co2 for the research facility coming from buidlings energy combustion
kg_co2eq_sum_building_rooms float ❌ 0 ≤ float e.g. 3555, not mandatory because the calculator is used to compute these results. however if this quantity is given here, it is taken instead of the calculator computation. It corresponds to the co2 for the research facility coming from building rooms
kg_co2eq_sum_purchases_common float ❌ 0 ≤ float e.g. 3555, not mandatory because the calculator is used to compute these results. however if this quantity is given here, it is taken instead of the calculator computation. It corresponds to the co2 for the research facility coming from purchases common
kg_co2eq_sum_purchases_additional float ❌ 0 ≤ float e.g. 3555, not mandatory because the calculator is used to compute these results. however if this quantity is given here, it is taken instead of the calculator computation. It corresponds to the co2 for the research facility coming from purchases additional
kg_co2eq_sum_equipments float ❌ 0 ≤ float e.g. 3555, not mandatory because the calculator is used to compute these results. however if this quantity is given here, it is taken instead of the calculator computation. It corresponds to the co2 for the research facility coming from equipments
researchfacility_type string ✅ - e.g. mice
total_use float ✅ 0 ≤ float, in the unit of "use_unit" e.g. 34
use_unit string ✅ - e.g. housing

Note

Important to push on the button 'compute missing factor' to calculate the kg_co2eq_sum_module_submodule where this info was not known, through the calculator computation. If not done, the contribution of these modules/submodules will be 0.


Additional Categories

Food, commuting and waste

These categories are related to the headcount. The total FTE is used to compute the values. For the logic of the calculation, all three categories - food, commuting, waste - are in the same files. A difference is made between student and members of staff, but waste has no difference in values.

headcount_members_factors.csv" & "headcount_students_factors.csv
field type mandatory values constraints example / notes
headcount_category string ✅ within food, commuting, waste e.g. food
headcount_class string ✅ within the class of the categories, food: vegetarian, non_vegetarian , commuting: walking, cycling, powered_two_wheeler, public_transport, car, waste: incineration, composting, biogas, recycling the class of the category
headcount_subclass string ❌ none the subclass of the category if needed
number_of_unit_per_fte float ✅ 0 ≤ float e.g. for food, this is the kg of food per FTE, for commuting this is the total km per FTE for the reference year, for waste this is the total kg of waste per FTE for the reference year
ef_kg_co2eq_per_unit float ✅ 0 ≤ float e.g. for food, this is the kg of co2eq per kg of food, for commuting this is the kg of co2eq per km, for waste this is the kg of co2eq per kg of waste
unit string ✅ - e.g. for food, this is kg, for commuting this is km, for waste this is kg

Note

No test and template files

Building grey energy

building_construction_renovation_factors.csv
field type mandatory values constraints example / notes
building_name string ✅ within building_rooms_reference.csv e.g. BCH
category string ✅ within the class of the categories new-tech, new-env,ren-tech,ren-env,demolition the category of the specified category of grey energy
ef_kgco2eq_per_m2 float ✅ 0 ≤ float the kg of co2eq per m2 attributes to a specified category of grey energy