@zerocarbon/erp-config-sdk 1.0.8 → 1.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -38365,6 +38365,503 @@ const supportsIntensityCalculations = (industry) => {
38365
38365
  const config = getIndustryFieldConfig(industry);
38366
38366
  return config.enableIntensityCalculations || false;
38367
38367
  };
38368
+ // Industry-specific mappings from user data to Carbon Intensity API requirements
38369
+ const CARBON_INTENSITY_FIELD_MAPPINGS = {
38370
+ // Steel Industry Mapping (API expects: revenue + steel_production)
38371
+ Steel: {
38372
+ revenue: {
38373
+ userDataPath: "additionalConfig.erp.steel.plants.{plantName}.revenue",
38374
+ transform: (value) => parseFloat(value) || 0,
38375
+ required: true,
38376
+ fieldLabel: "Revenue (₹Cr)",
38377
+ industryFieldKey: "revenue",
38378
+ },
38379
+ steel_production: {
38380
+ userDataPath: "additionalConfig.erp.steel.plants.{plantName}.crudeSteel",
38381
+ transform: (value) => parseFloat(value) || 0,
38382
+ required: true,
38383
+ fieldLabel: "Crude Steel Production (tonnes)",
38384
+ industryFieldKey: "crudeSteel",
38385
+ },
38386
+ },
38387
+ // Pharmaceutical Industry Mapping (API expects: area + production)
38388
+ Pharmaceutical: {
38389
+ area: {
38390
+ userDataPath: "additionalConfig.erp.pharmaceutical.plants.{plantName}.productionFacilityArea",
38391
+ transform: (value) => parseFloat(value) || 0,
38392
+ required: true,
38393
+ fieldLabel: "Production Facility Area (m²)",
38394
+ industryFieldKey: "productionFacilityArea",
38395
+ },
38396
+ production: {
38397
+ userDataPath: "additionalConfig.erp.pharmaceutical.plants.{plantName}.annualProductionVolume",
38398
+ transform: (value) => parseFloat(value) || 0,
38399
+ required: true,
38400
+ fieldLabel: "Annual Production Volume (tonnes)",
38401
+ industryFieldKey: "annualProductionVolume",
38402
+ },
38403
+ },
38404
+ // Chemical Industry Mapping (API expects: production only)
38405
+ Chemical: {
38406
+ production: {
38407
+ userDataPath: "additionalConfig.erp.chemical.plants.{plantName}.totalProduction",
38408
+ transform: (value) => parseFloat(value) || 0,
38409
+ required: true,
38410
+ fieldLabel: "Total Chemical Production (tonnes)",
38411
+ industryFieldKey: "totalProduction",
38412
+ },
38413
+ },
38414
+ // Aluminum Industry Mapping (API expects: production only)
38415
+ Aluminum: {
38416
+ production: {
38417
+ userDataPath: "additionalConfig.erp.aluminum.plants.{plantName}.annualProduction",
38418
+ transform: (value) => parseFloat(value) || 0,
38419
+ required: true,
38420
+ fieldLabel: "Annual Production (tonnes)",
38421
+ industryFieldKey: "annualProduction",
38422
+ },
38423
+ },
38424
+ // Alloy Industry Mapping (API expects: area + production)
38425
+ Alloy: {
38426
+ area: {
38427
+ userDataPath: "additionalConfig.erp.alloy.plants.{plantName}.facilityArea",
38428
+ transform: (value) => parseFloat(value) || 0,
38429
+ required: true,
38430
+ fieldLabel: "Facility Area (m²)",
38431
+ industryFieldKey: "facilityArea",
38432
+ },
38433
+ production: {
38434
+ userDataPath: "additionalConfig.erp.alloy.plants.{plantName}.annualProductionVolume",
38435
+ transform: (value) => parseFloat(value) || 0,
38436
+ required: true,
38437
+ fieldLabel: "Annual Production Volume (tonnes)",
38438
+ industryFieldKey: "annualProductionVolume",
38439
+ },
38440
+ },
38441
+ // Textile Industry Mapping (API expects: area + production)
38442
+ Textile: {
38443
+ area: {
38444
+ userDataPath: "additionalConfig.erp.textile.plants.{plantName}.productionFacilityArea",
38445
+ transform: (value) => parseFloat(value) || 0,
38446
+ required: true,
38447
+ fieldLabel: "Production Facility Area (m²)",
38448
+ industryFieldKey: "productionFacilityArea",
38449
+ },
38450
+ production: {
38451
+ userDataPath: "additionalConfig.erp.textile.plants.{plantName}.annualProductionVolume",
38452
+ transform: (value) => parseFloat(value) || 0,
38453
+ required: true,
38454
+ fieldLabel: "Annual Production Volume (tonnes)",
38455
+ industryFieldKey: "annualProductionVolume",
38456
+ },
38457
+ },
38458
+ // Automobile Industry Mapping (API expects: annual_production_units)
38459
+ Automobiles: {
38460
+ annual_production_units: {
38461
+ userDataPath: "additionalConfig.erp.automobiles.plants.{plantName}.annualProductionVolume",
38462
+ transform: (value) => parseFloat(value) || 0,
38463
+ required: true,
38464
+ fieldLabel: "Annual Production Volume (Units)",
38465
+ industryFieldKey: "annualProductionVolume",
38466
+ },
38467
+ },
38468
+ // Aviation Industry Mapping (API expects: area only)
38469
+ Aviation: {
38470
+ area: {
38471
+ userDataPath: "additionalConfig.erp.aviation.plants.{plantName}.facilitiesArea",
38472
+ transform: (value) => parseFloat(value) || 0,
38473
+ required: true,
38474
+ fieldLabel: "Facilities Area (m²)",
38475
+ industryFieldKey: "facilitiesArea",
38476
+ },
38477
+ },
38478
+ // Shipping Industry Mapping (API expects: area + employees)
38479
+ Shipping: {
38480
+ area: {
38481
+ userDataPath: "additionalConfig.erp.shipping.plants.{plantName}.portTerminalFacilitiesArea",
38482
+ transform: (value) => parseFloat(value) || 0,
38483
+ required: true,
38484
+ fieldLabel: "Port & Terminal Facilities Area (m²)",
38485
+ industryFieldKey: "portTerminalFacilitiesArea",
38486
+ },
38487
+ employees: {
38488
+ userDataPath: "additionalConfig.erp.shipping.plants.{plantName}.numberOfEmployees",
38489
+ transform: (value) => parseFloat(value) || 0,
38490
+ required: true,
38491
+ fieldLabel: "Number of Employees",
38492
+ industryFieldKey: "numberOfEmployees",
38493
+ },
38494
+ },
38495
+ // Food & Beverages Industry Mapping (API expects: production_facility_area + production)
38496
+ "Food & Beverages": {
38497
+ production_facility_area: {
38498
+ userDataPath: "additionalConfig.erp.food & beverages.plants.{plantName}.productionFacilityArea",
38499
+ transform: (value) => parseFloat(value) || 0,
38500
+ required: true,
38501
+ fieldLabel: "Production Facility Area (m²)",
38502
+ industryFieldKey: "productionFacilityArea",
38503
+ },
38504
+ production: {
38505
+ userDataPath: "additionalConfig.erp.food & beverages.plants.{plantName}.annualProductionVolume",
38506
+ transform: (value) => parseFloat(value) || 0,
38507
+ required: true,
38508
+ fieldLabel: "Annual Production Volume (tonnes)",
38509
+ industryFieldKey: "annualProductionVolume",
38510
+ },
38511
+ },
38512
+ // Hospitality Industry Mapping (API expects: built_up_area only)
38513
+ Hospitality: {
38514
+ built_up_area: {
38515
+ userDataPath: "additionalConfig.erp.hospitality.plants.{plantName}.totalBuiltUpArea",
38516
+ transform: (value) => parseFloat(value) || 0,
38517
+ required: true,
38518
+ fieldLabel: "Total Built Up Area (m²)",
38519
+ industryFieldKey: "totalBuiltUpArea",
38520
+ },
38521
+ },
38522
+ // Logistics Industry Mapping (API expects: warehouse_area only)
38523
+ Logistics: {
38524
+ warehouse_area: {
38525
+ userDataPath: "additionalConfig.erp.logistics.plants.{plantName}.warehouseSpaceOperated",
38526
+ transform: (value) => parseFloat(value) || 0,
38527
+ required: true,
38528
+ fieldLabel: "Warehouse Space Operated (m²)",
38529
+ industryFieldKey: "warehouseSpaceOperated",
38530
+ },
38531
+ },
38532
+ // Manufacturing Industry Mapping (API expects: manufacturing_facility_area + annual_production)
38533
+ Manufacturing: {
38534
+ manufacturing_facility_area: {
38535
+ userDataPath: "additionalConfig.erp.manufacturing.plants.{plantName}.manufacturingFacilityArea",
38536
+ transform: (value) => parseFloat(value) || 0,
38537
+ required: true,
38538
+ fieldLabel: "Manufacturing Facility Area (m²)",
38539
+ industryFieldKey: "manufacturingFacilityArea",
38540
+ },
38541
+ annual_production: {
38542
+ userDataPath: "additionalConfig.erp.manufacturing.plants.{plantName}.annualProductionVolume",
38543
+ transform: (value) => parseFloat(value) || 0,
38544
+ required: true,
38545
+ fieldLabel: "Annual Production Volume (tonnes)",
38546
+ industryFieldKey: "annualProductionVolume",
38547
+ },
38548
+ },
38549
+ // Metals & Energy Industry Mapping (API expects: power_generated + annual_production)
38550
+ "Metals & Energy": {
38551
+ power_generated: {
38552
+ userDataPath: "additionalConfig.erp.metals & energy.plants.{plantName}.powerGenerated",
38553
+ transform: (value) => parseFloat(value) || 0,
38554
+ required: true,
38555
+ fieldLabel: "Power Generated (MWH)",
38556
+ industryFieldKey: "powerGenerated",
38557
+ },
38558
+ annual_production: {
38559
+ userDataPath: "additionalConfig.erp.metals & energy.plants.{plantName}.annualProductionVolume",
38560
+ transform: (value) => parseFloat(value) || 0,
38561
+ required: true,
38562
+ fieldLabel: "Annual Production Volume (tonnes)",
38563
+ industryFieldKey: "annualProductionVolume",
38564
+ },
38565
+ },
38566
+ // Packaging Industry Mapping (API expects: packaging_units only)
38567
+ Packaging: {
38568
+ packaging_units: {
38569
+ userDataPath: "additionalConfig.erp.packaging.plants.{plantName}.packagingUnitsProduced",
38570
+ transform: (value) => parseFloat(value) || 0,
38571
+ required: true,
38572
+ fieldLabel: "Packaging Units Produced",
38573
+ industryFieldKey: "packagingUnitsProduced",
38574
+ },
38575
+ },
38576
+ // Petrochemical Industry Mapping (API expects: chemical_production only)
38577
+ "Petro Chemical": {
38578
+ chemical_production: {
38579
+ userDataPath: "additionalConfig.erp.petro chemical.plants.{plantName}.annualProductionVolume",
38580
+ transform: (value) => parseFloat(value) || 0,
38581
+ required: true,
38582
+ fieldLabel: "Chemical Production (tonnes)",
38583
+ industryFieldKey: "annualProductionVolume",
38584
+ },
38585
+ },
38586
+ // Real Estate Industry Mapping (API expects: project_site_area only)
38587
+ "Real Estate & Construction": {
38588
+ project_site_area: {
38589
+ userDataPath: "additionalConfig.erp.real estate & construction.plants.{plantName}.projectSiteArea",
38590
+ transform: (value) => parseFloat(value) || 0,
38591
+ required: true,
38592
+ fieldLabel: "Project Site Area (m²)",
38593
+ industryFieldKey: "projectSiteArea",
38594
+ },
38595
+ },
38596
+ // Telecommunications Industry Mapping (API expects: project_site_area only)
38597
+ Telecommunications: {
38598
+ project_site_area: {
38599
+ userDataPath: "additionalConfig.erp.telecommunications.plants.{plantName}.projectSiteArea",
38600
+ transform: (value) => parseFloat(value) || 0,
38601
+ required: true,
38602
+ fieldLabel: "Project Site Area (m²)",
38603
+ industryFieldKey: "projectSiteArea",
38604
+ },
38605
+ },
38606
+ // Utilities Industry Mapping (API expects: total_area + annual_production)
38607
+ Utilities: {
38608
+ total_area: {
38609
+ userDataPath: "additionalConfig.erp.utilities.plants.{plantName}.plantArea",
38610
+ transform: (value) => parseFloat(value) || 0,
38611
+ required: true,
38612
+ fieldLabel: "Plant Area (m²)",
38613
+ industryFieldKey: "plantArea",
38614
+ },
38615
+ annual_production: {
38616
+ userDataPath: "additionalConfig.erp.utilities.plants.{plantName}.annualProductionServiceOutput",
38617
+ transform: (value) => parseFloat(value) || 0,
38618
+ required: true,
38619
+ fieldLabel: "Annual Production/Service Output",
38620
+ industryFieldKey: "annualProductionServiceOutput",
38621
+ },
38622
+ },
38623
+ // Cement Industry Mapping (API expects: manufacturing_facility_area + annual_production)
38624
+ Cement: {
38625
+ manufacturing_facility_area: {
38626
+ userDataPath: "additionalConfig.erp.cement.plants.{plantName}.manufacturingFacilityArea",
38627
+ transform: (value) => parseFloat(value) || 0,
38628
+ required: true,
38629
+ fieldLabel: "Manufacturing Facility Area (m²)",
38630
+ industryFieldKey: "manufacturingFacilityArea",
38631
+ },
38632
+ annual_production: {
38633
+ userDataPath: "additionalConfig.erp.cement.plants.{plantName}.cementProduced",
38634
+ transform: (value) => parseFloat(value) || 0,
38635
+ required: true,
38636
+ fieldLabel: "Cement Produced (tonnes)",
38637
+ industryFieldKey: "cementProduced",
38638
+ },
38639
+ },
38640
+ // Battery & EV Infrastructure (fallback to manufacturing structure)
38641
+ "Battery & EV Infra": {
38642
+ manufacturing_facility_area: {
38643
+ userDataPath: "additionalConfig.erp.battery & ev infra.plants.{plantName}.facilityArea",
38644
+ transform: (value) => parseFloat(value) || 0,
38645
+ required: true,
38646
+ fieldLabel: "Facility Area (m²)",
38647
+ industryFieldKey: "facilityArea",
38648
+ },
38649
+ annual_production: {
38650
+ userDataPath: "additionalConfig.erp.battery & ev infra.plants.{plantName}.annualProduction",
38651
+ transform: (value) => parseFloat(value) || 0,
38652
+ required: true,
38653
+ fieldLabel: "Annual Production (units)",
38654
+ industryFieldKey: "annualProduction",
38655
+ },
38656
+ },
38657
+ // Default mapping for industries without specific configuration
38658
+ default: {
38659
+ manufacturing_facility_area: {
38660
+ userDataPath: "additionalConfig.erp.{industry}.plants.{plantName}.facilityArea",
38661
+ transform: (value) => parseFloat(value) || 0,
38662
+ required: true,
38663
+ fieldLabel: "Facility Area (m²)",
38664
+ industryFieldKey: "facilityArea",
38665
+ },
38666
+ annual_production: {
38667
+ userDataPath: "additionalConfig.erp.{industry}.plants.{plantName}.annualProduction",
38668
+ transform: (value) => parseFloat(value) || 0,
38669
+ required: true,
38670
+ fieldLabel: "Annual Production (tonnes)",
38671
+ industryFieldKey: "annualProduction",
38672
+ },
38673
+ },
38674
+ };
38675
+ // Helper function to get nested value from object using dot notation
38676
+ const getNestedValue = (obj, path) => {
38677
+ if (!obj || !path)
38678
+ return undefined;
38679
+ // Handle array notation like "plants[].plantData.field"
38680
+ if (path.includes("[].")) {
38681
+ const [arrayPath, ...restPath] = path.split("[].", 2);
38682
+ const arrayValue = getNestedValue(obj, arrayPath);
38683
+ if (Array.isArray(arrayValue) && arrayValue.length > 0) {
38684
+ // For now, take the first item in the array
38685
+ return getNestedValue(arrayValue[0], restPath.join("[]."));
38686
+ }
38687
+ return undefined;
38688
+ }
38689
+ return path.split(".").reduce((current, key) => {
38690
+ return current && current[key] !== undefined ? current[key] : undefined;
38691
+ }, obj);
38692
+ };
38693
+ // Main function to extract carbon intensity data from user data
38694
+ const extractCarbonIntensityData = (userData, industry) => {
38695
+ var _a, _b;
38696
+ let mapping = CARBON_INTENSITY_FIELD_MAPPINGS[industry];
38697
+ // If no mapping found, try default mapping
38698
+ if (!mapping) {
38699
+ mapping = CARBON_INTENSITY_FIELD_MAPPINGS.default;
38700
+ console.warn(`No specific carbon intensity mapping found for industry: ${industry}, using default mapping`);
38701
+ }
38702
+ const extractedData = {};
38703
+ // Get the current plant name - use the first available plant or a default
38704
+ const industryData = (_b = (_a = userData.additionalConfig) === null || _a === void 0 ? void 0 : _a.erp) === null || _b === void 0 ? void 0 : _b[industry.toLowerCase()];
38705
+ const plants = industryData === null || industryData === void 0 ? void 0 : industryData.plants;
38706
+ let currentPlantName = "default";
38707
+ if (plants && typeof plants === "object") {
38708
+ if (Array.isArray(plants)) {
38709
+ // Handle array-based plants structure
38710
+ if (plants.length > 0) {
38711
+ // Use the first plant's id or name
38712
+ const firstPlant = plants[0];
38713
+ currentPlantName = firstPlant.id || firstPlant.name || "default";
38714
+ console.log(`Using plant "${currentPlantName}" from array for carbon intensity data extraction`);
38715
+ }
38716
+ }
38717
+ else {
38718
+ // Handle object-based plants structure
38719
+ const plantNames = Object.keys(plants);
38720
+ if (plantNames.length > 0) {
38721
+ currentPlantName = plantNames[0];
38722
+ console.log(`Using plant "${currentPlantName}" from object for carbon intensity data extraction`);
38723
+ }
38724
+ }
38725
+ }
38726
+ Object.entries(mapping).forEach(([apiField, config]) => {
38727
+ // Replace {industry} and {plantName} placeholders
38728
+ let userDataPath = config.userDataPath
38729
+ .replace("{industry}", industry.toLowerCase())
38730
+ .replace("{plantName}", currentPlantName);
38731
+ let value = getNestedValue(userData, userDataPath);
38732
+ // If value not found and we have array-based plants, try alternative path
38733
+ if ((value === undefined || value === null) &&
38734
+ plants &&
38735
+ Array.isArray(plants) &&
38736
+ plants.length > 0) {
38737
+ // Try to get the field directly from the first plant's plantData
38738
+ const firstPlant = plants[0];
38739
+ const fieldKey = config.industryFieldKey;
38740
+ if (firstPlant.plantData &&
38741
+ fieldKey &&
38742
+ firstPlant.plantData[fieldKey] !== undefined) {
38743
+ value = firstPlant.plantData[fieldKey];
38744
+ console.log(`Found ${apiField} in plantData: ${value}`);
38745
+ }
38746
+ }
38747
+ // Apply transformation if provided
38748
+ if (config.transform && value !== undefined) {
38749
+ value = config.transform(value);
38750
+ }
38751
+ // Only use fallback if config explicitly has one and field is not required
38752
+ if (value === undefined || value === null || isNaN(Number(value))) {
38753
+ if (config.required) {
38754
+ // For required fields, set to 0 to indicate missing data (will be caught by validation)
38755
+ value = 0;
38756
+ }
38757
+ else {
38758
+ // For non-required fields, use fallback if available
38759
+ value = config.fallback || 0;
38760
+ }
38761
+ }
38762
+ extractedData[apiField] = Number(value);
38763
+ });
38764
+ return extractedData;
38765
+ };
38766
+ // Helper function to map frontend industry names to API industry types
38767
+ const mapIndustryToApiType = (industryName) => {
38768
+ const industryMapping = {
38769
+ Steel: "steel",
38770
+ Pharmaceutical: "pharma",
38771
+ Chemical: "chemical",
38772
+ Aluminum: "aluminium",
38773
+ Alloy: "alloy",
38774
+ Textile: "textile",
38775
+ Automobiles: "automobile",
38776
+ Aviation: "aviation",
38777
+ Shipping: "shipping",
38778
+ "Food & Beverages": "food_beverages",
38779
+ Hospitality: "hospitality",
38780
+ Logistics: "logistics",
38781
+ Manufacturing: "manufacturing",
38782
+ "Metals & Energy": "metal_energy",
38783
+ "Battery & EV Infra": "manufacturing", // Falls back to manufacturing
38784
+ Packaging: "packaging",
38785
+ "Petro Chemical": "petrochemical",
38786
+ "Real Estate & Construction": "real_estate",
38787
+ Telecommunications: "telecommunication",
38788
+ Utilities: "utilities",
38789
+ Cement: "manufacturing", // Maps cement to manufacturing API
38790
+ };
38791
+ return industryMapping[industryName] || "manufacturing";
38792
+ };
38793
+ // Helper function to get available fields for an industry from user data
38794
+ const getAvailableFieldsForIndustry = (userData, industry) => {
38795
+ const mapping = CARBON_INTENSITY_FIELD_MAPPINGS[industry];
38796
+ if (!mapping)
38797
+ return [];
38798
+ const availableFields = [];
38799
+ Object.entries(mapping).forEach(([apiField, config]) => {
38800
+ const value = getNestedValue(userData, config.userDataPath);
38801
+ if (value !== undefined && value !== null && value !== "") {
38802
+ availableFields.push(apiField);
38803
+ }
38804
+ });
38805
+ return availableFields;
38806
+ };
38807
+ // Helper function to validate that required data is available
38808
+ const validateCarbonIntensityData = (userData, industry) => {
38809
+ var _a, _b;
38810
+ let mapping = CARBON_INTENSITY_FIELD_MAPPINGS[industry];
38811
+ if (!mapping) {
38812
+ mapping = CARBON_INTENSITY_FIELD_MAPPINGS.default;
38813
+ }
38814
+ const extractedData = extractCarbonIntensityData(userData, industry);
38815
+ const missingFields = [];
38816
+ const errors = [];
38817
+ // Get the current plant name for error messages
38818
+ const industryData = (_b = (_a = userData.additionalConfig) === null || _a === void 0 ? void 0 : _a.erp) === null || _b === void 0 ? void 0 : _b[industry.toLowerCase()];
38819
+ const plants = industryData === null || industryData === void 0 ? void 0 : industryData.plants;
38820
+ let currentPlantName = "default";
38821
+ if (plants && typeof plants === "object") {
38822
+ if (Array.isArray(plants)) {
38823
+ // Handle array-based plants structure
38824
+ if (plants.length > 0) {
38825
+ // Use the first plant's id or name
38826
+ const firstPlant = plants[0];
38827
+ currentPlantName = firstPlant.id || firstPlant.name || "default";
38828
+ }
38829
+ }
38830
+ else {
38831
+ // Handle object-based plants structure
38832
+ const plantNames = Object.keys(plants);
38833
+ if (plantNames.length > 0) {
38834
+ currentPlantName = plantNames[0];
38835
+ }
38836
+ }
38837
+ }
38838
+ Object.entries(mapping).forEach(([apiField, config]) => {
38839
+ if (config.required) {
38840
+ const value = extractedData[apiField];
38841
+ if (!value || value === 0) {
38842
+ const userDataPath = config.userDataPath
38843
+ .replace("{industry}", industry.toLowerCase())
38844
+ .replace("{plantName}", currentPlantName);
38845
+ missingFields.push({
38846
+ apiField,
38847
+ fieldLabel: config.fieldLabel || apiField,
38848
+ industryFieldKey: config.industryFieldKey || apiField,
38849
+ userDataPath,
38850
+ });
38851
+ errors.push(`Missing required field: "${config.fieldLabel || apiField}" (Key: ${config.industryFieldKey || apiField}) is required for carbon intensity calculations. Please fill this field in the ${industry} industry configuration for plant "${currentPlantName}".`);
38852
+ }
38853
+ }
38854
+ });
38855
+ return {
38856
+ isValid: missingFields.length === 0,
38857
+ missingFields,
38858
+ errors,
38859
+ };
38860
+ };
38861
+ // Debug function to see what data is being extracted
38862
+ const debugCarbonIntensityMapping = (userData, industry) => {
38863
+ extractCarbonIntensityData(userData, industry);
38864
+ };
38368
38865
 
38369
38866
  /**
38370
38867
  * UI Features Configuration System
@@ -40116,12 +40613,15 @@ exports.createBillManager = createBillManager;
40116
40613
  exports.createCapitalizedMonthMapping = createCapitalizedMonthMapping;
40117
40614
  exports.createEmissionSourceGenerator = createEmissionSourceGenerator;
40118
40615
  exports.createMonthMapping = createMonthMapping;
40616
+ exports.debugCarbonIntensityMapping = debugCarbonIntensityMapping;
40617
+ exports.extractCarbonIntensityData = extractCarbonIntensityData;
40119
40618
  exports.formatEmissionValue = formatEmissionValue;
40120
40619
  exports.formatIntensityValue = formatIntensityValue;
40121
40620
  exports.formatKPIEmission = formatKPIEmission;
40122
40621
  exports.formatMonthlyEmission = formatMonthlyEmission;
40123
40622
  exports.formatPercentage = formatPercentage;
40124
40623
  exports.getApiIndustryType = getApiIndustryType;
40624
+ exports.getAvailableFieldsForIndustry = getAvailableFieldsForIndustry;
40125
40625
  exports.getIndustryConfig = getIndustryConfig;
40126
40626
  exports.getIndustryFieldConfig = getIndustryFieldConfig;
40127
40627
  exports.getIntensityFormulas = getIntensityFormulas;
@@ -40130,6 +40630,8 @@ exports.getScope3ConfigByName = getScope3ConfigByName;
40130
40630
  exports.getUserNameWaterManagementConfig = getUserNameWaterManagementConfig;
40131
40631
  exports.hasIntensities = hasIntensities;
40132
40632
  exports.isUIFeatureEnabled = isUIFeatureEnabled;
40633
+ exports.mapIndustryToApiType = mapIndustryToApiType;
40133
40634
  exports.sanitizeNumber = sanitizeNumber;
40134
40635
  exports.supportsIntensityCalculations = supportsIntensityCalculations;
40636
+ exports.validateCarbonIntensityData = validateCarbonIntensityData;
40135
40637
  //# sourceMappingURL=index.js.map