AI-redo systemintegrationer

Från klimatberäkning till beslutsstöd: integrera BM med era verktyg

BM:s klimatberäkningar behöver inte stanna i webbplattformen. Genom integrationer kan ni använda projektdata i era egna system, rapporter och arbetsflöden för att skapa effektivare processer och bättre beslutsunderlag.

  • Uppföljning och analys i Power BI
    Sammanställ data från flera projekt och följ upp klimatprestanda, nyckeltal och utveckling på portföljnivå.
  • Kvalitetssäkring av EPD:er
    Få en samlad överblick över era miljövarudeklarationer (EPD:er) och kontrollera att de uppfyller era interna krav – för ett enskilt projekt eller över hela verksamheten.
  • Automatiserad projektgranskning med AI
    Använd AI för att identifiera avvikelser och genomföra kvalitetskontroller enligt era egna rutiner och processer.
  • Anpassade integrationer
    Koppla samman BM med befintliga system för projektering, kalkyl, uppföljning eller rapportering och skapa ett sömlöst informationsflöde genom hela projektets livscykel.

Vi utforskar gärna möjligheterna tillsammans med er organisation. Kontaktuppgifter hittar du längst ned på sidan. Du kan också läsa mer om våra rådgivningstjänster här.

BM:s API:er är under utveckling. Guiden är ett stöd för tidiga integrationstester. Den beskriver anrop som används av BM:s publika analysvy och är inte en fullständig API-specifikation. API:et är ännu inte lanserat som ett stabilt publikt gränssnitt. Adresser, inställningar och svar kan ändras.



Teknisk information

Exempelprojekt

För att exemplen nedan måste delning av analys vara aktiverad för utvalt projekt. Läs mer om delningsfunktionen i BM:s supportartikel: Dela analys.

I BM finns ett exempelprojekt som kan användas för testning. Öppna exempelprojektets publika analys i BM. 

Parameter i guiden Värde Var den hittas
shareCode 79fd21ff-a6d8-436a-ae73-d9ae4e41bd96 Efter /public/analysis/ i länken.
versionId 72932 Värdet på ?version= i länken.

shareCode är guidens benämning på delningskoden. För ett annat testprojekt: använd kod och versions-ID från just den delningslänk BM tillhandahåller.

API-anrop

Basadress:

https://ivl-bmv2-swce-api.azurewebsites.net/api/v1

A. Hämta projekt via delningskod

GET /projects/by-code/{shareCode}

B. Begär beräkning för vald version

POST /project-versions/{versionId}/calculate-with-settings/{shareCode}

Skicka Content-Type: application/json och följande body:

{
  "settingType": 0,
  "includeA51FromTransportScenarios": false,
  "includeOverview": true,
  "includeProjectResourcesForWebGrid": true,
  "includeProjectResourcesForResourceList": true,
  "includeProjectResourcesForEPD": true,
  "includeProjectResourcesForOwnChoices": true,
  "includeMethodologyResult": true,
  "includeTransports": true,
  "useConservativeData": false,
  "productSystemIds": null
}

Åtkomst och headers

Ingen Authorization-header eller cookie behövs i anropen. 

Snabbtest i Postman

  1. Skapa ett GET-anrop och klistra in denna adress:
https://ivl-bmv2-swce-api.azurewebsites.net/api/v1/projects/by-code/79fd21ff-a6d8-436a-ae73-d9ae4e41bd96

Välj No Auth som första test och lägg till headers enligt ovan. Skicka anropet och kontrollera att svaret är JSON.

  1. Skapa ett POST-anrop till:
https://ivl-bmv2-swce-api.azurewebsites.net/api/v1/project-versions/72932/calculate-with-settings/79fd21ff-a6d8-436a-ae73-d9ae4e41bd96

Under Body → raw → JSON, klistra in kroppen från avsnitt 3. Skicka en gång och spara svaret.

Körbart exempel i Python

import json
from pathlib import Path
from urllib.request import Request, urlopen
from urllib.error import HTTPError, URLError

BASE = "https://ivl-bmv2-swce-api.azurewebsites.net/api/v1"
SHARE_CODE = "79fd21ff-a6d8-436a-ae73-d9ae4e41bd96"
VERSION_ID = 72932

settings = json.loads('''{
  "settingType": 0,
  "includeA51FromTransportScenarios": false,
  "includeOverview": true,
  "includeProjectResourcesForWebGrid": true,
  "includeProjectResourcesForResourceList": true,
  "includeProjectResourcesForEPD": true,
  "includeProjectResourcesForOwnChoices": true,
  "includeMethodologyResult": true,
  "includeTransports": true,
  "useConservativeData": false,
  "productSystemIds": null
}''')

def fetch_json(path, payload=None):
    data = None if payload is None else json.dumps(payload).encode("utf-8")
    request = Request(
        BASE + path,
        data=data,
        method="GET" if payload is None else "POST",
        headers={"Accept": "application/json",
                 "Content-Type": "application/json"},
    )
    try:
        with urlopen(request, timeout=60) as response:
            return json.load(response)
    except HTTPError as error:
        raise RuntimeError(f"BM svarade med HTTP {error.code}. "
                           "Kontrollera delning, version och åtkomst med BM.") from error
    except URLError as error:
        raise RuntimeError("Kunde inte ansluta till BM.") from error

project = fetch_json(f"/projects/by-code/{SHARE_CODE}")
result = fetch_json(
    f"/project-versions/{VERSION_ID}/calculate-with-settings/{SHARE_CODE}",
    settings,
)

for filename, value in [("bm-project.json", project),
                        ("bm-analysis.json", result)]:
    Path(filename).write_text(
        json.dumps(value, ensure_ascii=False, indent=2), encoding="utf-8"
    )
    print(f"Sparat {filename}")

# Spara även inställningarna så att resultatet går att tolka senare.
Path("bm-settings.json").write_text(
    json.dumps(settings, indent=2), encoding="utf-8"
)

Fältbeskrivningar

Fält Betydelse
includeA51FromTransportScenarios Inkludera A5.1 från transportscenarier.
includeOverview Inkludera översiktsdata.
includeProjectResourcesForWebGrid Resursdata för appens tabellvy.
includeProjectResourcesForResourceList Resursdata för resurslistan.
includeProjectResourcesForEPD Resursdata för EPD-vyn.
includeProjectResourcesForOwnChoices Resursdata för egna val.
includeMethodologyResult Resultat för metodval.
includeTransports Transportdata.
useConservativeData Använd konservativa data från Boverkets databas.
productSystemIds Filter för produktsystem

Felmeddelanden

Symtom Nästa steg
401, 403 eller 404 Kontrollera delningslänk och version med BM. 
400 eller 415 Kontrollera JSON-kroppen och Content-Type.
429, 5xx eller timeout Kontakta oss för mer information
Fungerar i skript men inte i webbläsare Kontrollera CORS/preflight tillsammans med BM.
200 men oväntat innehåll Spara svaret och låt BM bekräfta strukturen innan fält kopplas till nyckeltal.

 

Kontaktperson

Pelle Beckman
Expert digitala system och processledning