Inleiding
Deze connector laat toe om te communiceren met Fluvius.
Fluvius
Distributienetbeheerder in alle gemeenten van het Vlaams Gewest. Ontstaan uit de fusie van Eandis en Infrax op 1 juli 2018. Fluvius is verantwoordelijk voor elektriciteit, aardgas, riolering, openbare verlichting, en in sommige gemeenten warmtenetten. Sinds 1 januari 2023 is Fluvius verantwoordelijk voor de plaatsing en uitrol van digitale meters voor alle Vlaamse huishoudens. Fluvius zorgt ook voor aansluitingen, meteropnames, beheer van groenestroom, laadpalen, enzovoort.
Benopass
In Vlaanderen is de Benopass (of “Totaalrenovatiebonus”-pass) een digitaal dossier beheerd door netbeheerder Fluvius. Het volgt alle energiebesparende renovatiewerken in je woning van 2017–2020 bij. Wie binnen vijf jaar minstens drie van deze werken uitvoerde, ontving hiervoor een extra bonus. Via de connector kan je een renovatiedossier doorsturen naar Benopass.
Use cases
-
Aansluitingsgegevens van een klant ophalen op basis van een EAN-code (bv. adres, tariefstructuur, aanwezige lokale productie-installaties zoals zonnepanelen) om te gebruiken binnen een dossier.
-
EPC-informatie van een aansluiting raadplegen.
-
Een renovatiedossier (premie) en de bijhorende bewijsstukken doorsturen naar Benopass, in het kader van de Totaalrenovatiebonus.
Setup
Onboardingprocedure
De authenticatie met de Fluvius Assets API gebeurt via client assertion: een JWT die je zelf ondertekent met een privésleutel, in plaats van via een gedeeld secret. Dit vereist een certificaatstraject vóór je effectief kan configureren:
-
Certificaat aanvragen bij GlobalSign: maak lokaal een certificate signing request (CSR) en private key aan. GlobalSign verifieert domeineigenaarschap via een DNS TXT-record dat je in de hosted zone moet plaatsen. Na verificatie stuurt GlobalSign het certificaat naar Skryv.
-
Certificaat laten whitelisten bij Fluvius: stuur het certificaat naar Fluvius, zodat zij het toevoegen aan de firewall van hun Assets API.
-
JWK genereren uit het certificaat:
-
Bundel certificaat + private key in een PKCS12-bestand, en zet dit om naar JWK-formaat.
-
Verwijder de velden
use,algenx5cuit de gegenereerde JWK. -
Pas het
x5t-veld aan: Fluvius vereist de base64url-encoding van de hex-geïnterpreteerdekid-waarde (niet de kid als string). Gebruik hiervoor het door Fluvius aangeleverde Java-hulpprogramma. -
Het resultaat is een JWK-bestand met enkel
kid,kty,n,e,dp,dq,qi,p,q,d,x5t.
-
Van Fluvius ontvang je: de subscription key, de API-URL, en het app-number. Het certificaat/private key/JWK maak je zelf aan.
Dependency toevoegen aan pom.xml bestand
Om de connector te kunnen gebruiken, voeg je deze eerst als maven dependency toe aan het pom.xml bestand van je applicatie. Deze haalt de code voor de connector op bij het maken van de build voor je app.
<dependency>
<groupId>com.skryv.connectors</groupId>
<artifactId>fluvius</artifactId>
<version>${skryv.version}</version>
</dependency>
Applicatie eigenschappen
Volgende applicatie eigenschappen kunnen ingesteld worden bij de technische setup van de Fluvius-connector.
|
Eigenschap |
Default |
Beschrijving |
|---|---|---|
|
FluviusTechnicalConnector |
||
|
|
|
Basis-URL van de Fluvius Assets API. In een echte omgeving stel je hier de effectieve Fluvius-host in, bv. |
|
|
|
Subscription key voor de Fluvius Assets API, die achter Azure API Management draait. Deze waarde wordt best als secret aangeleverd (bv. via AWS SSM Parameter Store), nooit als platte tekst in |
|
|
|
Indien |
|
|
|
Leestimeout (in ms) specifiek voor de bijlage-upload naar Benopass ( |
|
|
|
Connectietimeout (in ms) voor de bijlage-upload naar Benopass. |
|
|
|
Leestimeout (in ms) voor de overige Fluvius-aanroepen ( |
|
|
|
Connectietimeout (in ms) voor de overige Fluvius-aanroepen. |
|
FluviusAuthenticationProperties |
||
|
|
- |
GeoSecure OAuth scope, doorgaans in de vorm |
|
|
- |
GeoSecure token request path: het Microsoft Entra ID-tokenendpoint ( |
|
|
- |
GeoSecure app number: het door Fluvius toegekende identificatienummer van je applicatie, gebruikt als |
|
|
- |
GeoSecure audience: de Microsoft Entra ID-tenant-URL ( |
|
|
- |
GeoSecure keypath: lokaal bestandspad naar de JWK (het certificaat/private-key-bestand na conversie, zie Onboardingprocedure). |
|
|
|
Bepaalt of de JWK bij het opstarten van de applicatie automatisch uit AWS Secrets Manager gehaald en naar |
|
|
- |
AWS keypath: naam van het secret in AWS Secrets Manager waar de JWK staat. Enkel relevant wanneer |
Services en functies
Overzicht
|
Functie |
Retourtype |
Info |
|---|---|---|
|
|
Haalt aansluitingsinformatie op voor een EAN-code, optioneel voor een specifieke refertedatum. |
|
|
|
Haalt EPC-informatie op voor een EAN-code. |
|
|
|
Verstuurt een renovatiedossier (premie) naar Benopass. |
|
|
|
Verstuurt een extra bijlage naar een bestaand Benopass-dossier. |
Deze functies zijn, naast de workflow expressie, ook rechtstreeks aanroepbaar vanuit Java-code door FluviusCamundaConnector (bean fluvius) te injecteren in je klasse:
@RequiredArgsConstructor
public class MyOwnService {
private final FluviusCamundaConnector fluvius;
}
getConnectionInformation
Workflow expressie 1
${fluvius.getConnectionInformation(String ean)}
Workflow expressie 2 (met refertedatum)
${fluvius.getConnectionInformation(String ean, LocalDate date)}
Java-code
java
ConnectionInformationResponseDto response = fluvius.getConnectionInformation(ean);
// of, met refertedatum:
ConnectionInformationResponseDto response = fluvius.getConnectionInformation(ean, date);
Input
|
Inputparameters |
Data type |
Voorbeeld |
Uitleg |
|---|---|---|---|
|
ean |
String |
|
Aansluitingsnummer (EAN-code, 18 cijfers, begint met 54) waarvoor je aansluitingsinformatie opvraagt. |
|
date (enkel variant 2) |
LocalDate |
|
Refertedatum: de aansluitingsinformatie wordt opgevraagd zoals ze gold op deze datum. |
Output
Je krijgt een ConnectionInformationResponseDto-object terug met twee velden: status (ResultStatus) en result (ResultInformation, enkel ingevuld bij SUCCESS).
ResultStatus kan volgende waarden aannemen: WaardeBetekenisSUCCESSAansluiting gevonden, result is ingevuld.EAN_NOT_ELECTRICITYDe opgegeven EAN is geen elektriciteitsaansluiting.EAN_OUTSIDE_FLANDERSDe aansluiting valt buiten het Vlaamse Gewest.EAN_NOT_FOUNDEAN-code niet gevonden.TECHNICAL_ERRORTechnisch probleem bij Fluvius.
ResultInformation bevat: ean, address (straat, huisnummer, busnummer, postcode, plaatsnaam, landcode), rate (tariefstructuur: SINGLE, SINGLE_EXCLUSIVE_NIGHT, DOUBLE, DOUBLE_EXCLUSIVE_NIGHT, EXCLUSIVE_NIGHT), digitalMeterPlacementDate, connectionDateUtc, isEanActive, dnb (distributienetbeheerder), localProductions (lijst van lokale productie-installaties zoals zonnepanelen, elk met type — PV, BIOM, FOSM, PCSM, WIND, WATR, ONBE — en vermogen), accesspointsAmount, isExclusiveNightMeter, aansluitObjectId, superAansluitObjectId.
Error-handling
Deze functie gooit geen exceptie bij een probleem. Controleer altijd zelf het status-veld vóór je result gebruikt:
ConnectionInformationResponseDto response = fluvius.getConnectionInformation(ean);
if (response.getStatus() != ResultStatus.SUCCESS) {
// result is niet ingevuld -- behandel de specifieke status
}
getEpcInformation
getEpcInformation
Workflow expressie
${fluvius.getEpcInformation(String ean)}
Java-code
java
EpcInformationResponseDto response = fluvius.getEpcInformation(ean);
Input
|
Inputparameters |
Data type |
Voorbeeld |
Uitleg |
|---|---|---|---|
|
ean |
String |
|
Aansluitingsnummer (EAN-code) waarvoor je EPC-informatie opvraagt. |
Output
Je krijgt een EpcInformationResponseDto-object terug met: ean, epclabelVoor/epclabelNa (EPC-label vóór/na renovatie), epcDatumVoor, epcDatumVervallen, dossiernummer, activatiedatum, vervaldatum, en drie velden lapAanw, laaAanw, benoAanw.
Error-handling
In tegenstelling tot getConnectionInformation bevat dit DTO geen status-veld. Op basis van de code (een rechtstreekse RestTemplate-aanroep zonder foutafhandeling) resulteert elk technisch probleem of een niet-gevonden EAN in een niet-opvangbare exceptie en dus een Camunda-incident, niet in een status binnen het antwoordobject zelf.
sendToBenopass
Workflow expressie
${fluvius.sendToBenopass(Premie premie)}
Java-code
java
fluvius.sendToBenopass(premie);
Input
|
Inputparameters |
Data type |
Uitleg |
|---|---|---|
|
|
Premie |
Samengesteld object met alle gegevens van het renovatiedossier. |
Het Premie-object bevat algemene gegevens (leverpunten, opdrachtgever, contactPersoon, bedragen, facturen, woningType, investeringsType, beschermdeKlant, aantalAppartementen, referentieWoningVlaanderen, rekeningNummer) plus een lijst types (CategorieenType-codes: DAK, MUUR, GLAS, ZONNEBOILER, VLOER, WARMTEPOMP) die aangeeft welke van de volgende secties je invult: glas, kelder, dak, spouwmuur, buitenmuurBinnenkant/buitenmuurBuitenkant, vloer, warmtepomp, zonneboiler. Vul enkel de sectie(s) in die overeenkomen met de opgegeven types. de overige secties laat je leeg.
Let op: te lange tekstvelden (bv. voornaam >40 tekens, huisnummer/postcode/busnummer >10 tekens, diverse merk/type-velden >60 tekens) worden door de connector stilzwijgend afgekapt vóór verzending. Je krijgt hierover geen foutmelding. BTW-nummers worden gevalideerd voor BE/NL/FR/DE-structuren; een niet-valideerbaar of buitenlands nummer wordt vervangen door een dummy-waarde (BE0000000097).
Output
Geen output (void).
Error-handling
|
Situatie |
Gedrag |
|---|---|
|
HTTP 409 CONFLICT |
Geen fout, de premie werd al eerder verstuurd, de functie keert gewoon terug. |
|
HTTP 403 FORBIDDEN / 429 TOO_MANY_REQUESTS |
|
|
overige 4xx |
|
|
5xx |
|
sendBijlageToBenopass
Workflow expressie
${fluvius.sendBijlageToBenopass(String dossierId, BijlageInfo bijlageInfo)}
Java-code
fluvius.sendBijlageToBenopass(dossierId, bijlageInfo);
Input
|
Inputparameters |
Data type |
Uitleg |
|---|---|---|
|
|
String |
Id van het Skryv-dossier. Wordt gebruikt om het dossierlabel en de bijlage-inhoud op te halen. |
|
|
BijlageInfo |
Object met |
Output
Geen output (void). Een succesvolle upload resulteert intern in HTTP 202 Accepted (asynchrone verwerking aan Fluvius' kant).
Error-handling
|
Situatie |
Gedrag |
|---|---|
|
HTTP 409 CONFLICT |
Geen fout, bijlage werd al eerder geüpload, functie keert terug. |
|
HTTP 403 / 429 |
|
|
HTTP 400 BAD_REQUEST |
|
|
HTTP 500 |
|
|
overige status ≠ 202 |
|
|
I/O-fout bij het openen van de HTTP-client |
|