Domain Model

BDEW market role model, market objects (MaLo, MeLo, NeLo, NeBe), territory definitions, identifier formats with check-digit rules, and EDIFACT encoding for all identifiers used in German energy market communication.

Domain Model — Market Roles, Objects, and Identifiers

This page is the definitive reference for the BDEW Rollenmodell für die Marktkommunikation im deutschen Energiemarkt and all identifier types used across EDI@Energy messages. Every developer working with this library will need this material to understand what a MaLo is, why the NB sends UTILMD messages on behalf of the LF, and how to parse a 9900357000004 out of a NAD segment.

Source documents:

DocumentVersionDate
Rollenmodell für die Marktkommunikation im deutschen EnergiemarktV2.22026-01-08
Identifikatoren in der MarktkommunikationV1.22025-02-07
Allgemeine Festlegungen zu den EDIFACT- und XML-Nachrichten6.1d2026-04-01

Market Role Interaction Map

The following diagram shows how the core Marktrollen interact via the key MaKo processes. Gas-only roles (MGV, KN) are omitted for clarity — see the party role table below.

graph LR
    LF["LF<br/>Lieferant"]
    NB["NB<br/>Netzbetreiber"]
    MSB["MSB<br/>Messstellenbetreiber"]
    BKV["BKV<br/>Bilanzkreisverantwortlicher"]
    UNB["ÜNB<br/>Übertragungsnetzbetreiber"]
    BIKO["BIKO<br/>Bilanzkoordinator"]
    EIV["EIV<br/>Einsatzverantwortlicher"]

    LF -->|"GPKE: Lieferbeginn / Lieferende<br/>UTILMD 55001–55018"| NB
    NB -->|"GPKE: Bestätigung / Ablehnung<br/>UTILMD 55002/55003"| LF
    LF -->|"GeLi Gas: Anmeldung<br/>UTILMD 44001–44021"| NB
    NB -->|"WiM: MSB-Wechsel<br/>UTILMD 55039/55042"| MSB
    MSB -->|"WiM: Stammdaten<br/>UTILMD 55168"| NB
    MSB -->|"INSRPT: Ablesesteuerung<br/>INSRPT 23001/23003"| NB
    NB -->|"MSCONS: Messwerte<br/>(MSCONS 13xxx)"| BKV
    NB -->|"INVOIC: NNE/MMM<br/>31001/31002/31005"| LF
    LF -->|"INVOIC: Sperrung AWH Gas<br/>31011"| NB
    NB -->|"MaBiS: Summenzeitreihe<br/>MSCONS 13003"| BIKO
    BIKO -->|"MABIS: Abrechnungsdaten"| BKV
    BIKO ---|"settlement"| UNB
    EIV -->|"Redispatch 2.0<br/>ORDERS/ORDRSP"| NB

Table of Contents

  1. Party Roles (Marktrollen)
  2. Market Objects (Objekte)
  3. Territories (Gebiete)
  4. Identifier Formats
  5. Check Digit Algorithms
  6. EDIFACT Encoding
  7. Rust API

Party Roles (Marktrollen)

The market role model defines who the actors are. One company can hold multiple roles simultaneously (e.g., a DSO may also be its own MSB). A distinct MP-ID is required for each role per commodity (Strom / Gas).

Source: RME V2.2 §3.1

Abbr.German NameEnglishStromGasDefinition
LFLieferantEnergy SupplierResponsible for supplying energy to market locations, settling billing with the DSO, and financially compensating the balance between profiled and metered energy quantities.
NBNetzbetreiberDistribution System Operator (DSO)Responsible for grid operation, grid maintenance, and routing of energy. Creates and manages market locations, metering locations, and technical resources within the grid area. Aggregates energy quantities for settlement. Gas: responsible for forwarding metering values to trading partners.
ÜNBÜbertragungsnetzbetreiberTransmission System Operator (TSO)Responsible for transmission grid stability, EEG allocation time-series, and short-term plausibility checks within the control zone. One TSO = one Regelzone. In MABIS: bilateral MSCONS exchange with BKV (PID 13003).
MSBMessstellenbetreiberMetering Point OperatorResponsible for installing, operating, and maintaining meters. gMSB (grundzuständig) is the incumbent — the NB by default, per §41 MsbG; nMSB (nicht-grundzuständig) is the challenger a customer may switch to; aMSB (abgebend) is the outgoing operator in a switch. Strom: distributes metered values, substitute values, and preliminary values to authorised partners. Gas: determines and forwards metering values to the DSO.
BKVBilanzkreisverantwortlicherBalance Responsible Party (BRP)Responsible for the energetic and financial balance within a Bilanzkreis. Counterparty to the BIKO (Strom) or MGV (Gas).
BIKOBilanzkoordinatorBalance CoordinatorResponsible for Bilanzkreisabrechnung (balance-circle settlement) and financial settlement between BKVs. See mako-mabis (PID 13003).
MGVMarktgebietsverantwortlicherMarket Area ManagerResponsible for gas balance circle settlement and procurement/dispatch of balancing energy. Operates the virtual trading hub.
KNKapazitätsnutzerCapacity UserAcquires transport capacity at bookable entry/exit points in the gas entry-exit system and allocates it to Bilanzkreise.
BTRBetreiber einer technischen RessourceTechnical Resource OperatorInstalls, operates, and maintains technical resources (generators, controllable loads). Does not change with DSO ownership transfer.
EIVEinsatzverantwortlicherDispatch Responsible PartyResponsible for deploying controllable resources. Assigns SR-IDs to steuerable resources. Central actor in Redispatch 2.0.
DPData ProviderData ProviderForwards information to authorised trading partners on behalf of the DSO or MSB.
ESAEnergieserviceanbieter des AnschlussnutzersConsumer-side Energy Service ProviderActs on behalf of the end-customer (Anschlussnutzer) to request and process metering data. Has no Zuordnung to a Marktlokation: access rests on the Anschlussnutzer's consent (§49 Abs. 2 Nr. 9 MsbG) plus a bilateral contract with the MSB, which §34 Abs. 2 S. 2 Nr. 10 MsbG makes a mandatory, non-discriminatory Zusatzleistung. Data may be used only in the consumer relationship. See Marktrolle::Esa.
RBRegisterbetreiberRegistry OperatorOperates a database for energy market data (e.g., the national Marktstammdatenregister).

Role pairs in key processes

ProcessSender (NAD+MS)Receiver (NAD+MR)Crate
GPKE Lieferbeginn / LieferendeLFNBmako-gpke
GPKE Kündigung LieferbeginnLFLFA (outgoing supplier)mako-gpke
GPKE Antwort LieferbeginnNBLFmako-gpke
GPKE Sperrung / Entsperrung (NB-initiated)NBMSBmako-gpke
GPKE Sperrung / Entsperrung (LF-initiated, Strom)LFNBmako-gpke
WiM GerätewechselMSBNBmako-wim
WiM StammdatenNBLF / MSBmako-wim
GeLi Gas Lieferbeginn / LieferendeLFGNB (gas DSO)mako-geli-gas
GeLi Gas Sperrung / Entsperrung (LF-initiated, Gas)LFGNBmako-geli-gas
WiM Gas Anmeldung / Kündigung gMSBMSB (gas)NB (gas)mako-wim-gas
MABIS SummenzeitreiheÜNBBKVmako-mabis
INVOIC AbrechnungNBLFmako-gpke

Market Objects (Objekte)

Objects are the entities that processes act on. The NB is responsible for creating and closing objects within the grid area and assigning MP identifiers to them.

Source: RME V2.2 §3.2; Allgemeine Festlegungen 6.1d §2.15, §2.19

Abbr.GermanEnglishStromGasDefinition
MaLoMarktlokationMarket LocationThe central billing entity. A point where energy is either produced or consumed, connected to a grid via at least one line. The NB is responsible for creating, managing, and closing MaLo. Identified by MaLo-ID (11-digit numeric).
MeLoMesslokationMetering LocationA location where energy is measured, containing all technical equipment required for measurement and value transmission. One MaLo may have one or more MeLo. Each physical quantity is measured at most once per timestamp. Identified by Zählpunktbezeichnung (VDE-AR-N 4400 Strom / DVGW G2000 Gas).
NeLoNetzlokationNetwork LocationAn interconnection point in a grid area. Connects one or more MaLo to the grid via exactly one line. Used for reactive-power billing (Blindarbeit) and monitoring power-curve limits. Identified by NeLo-ID (11-char alphanumeric, prefix E). Introduced by BNetzA BK6-22-128.
NeBeNetzbereichNetwork ZoneA sub-area within a grid for managing controllable consumption facilities (§14a EnWG). Identified by NeBe-ID (11-char alphanumeric, prefix F). Introduced by BNetzA BK6-22-300 / BK8-22/010-A.
BKBilanzkreisBalance CircleAn account that balances feed-in and consumption quantities, facilitating energy trading. One BKV manages one or more BK.
NKPNetzkopplungspunktGrid Coupling PointA physical point connecting two grid areas.
TRTechnische RessourceTechnical ResourceA physical asset that consumes and/or generates electricity. One TR may be assigned to two MaLo if it both consumes and produces. Identified by TR-ID (prefix D).
SRSteuerbare RessourceControllable ResourceA controllable asset that affects at least one grid connection point. One or more TR are assigned to each SR. Identified by SR-ID (prefix C).
SGSteuergruppeControl GroupA grouping of controllable resources for dispatch purposes. Identified by SG-ID (prefix B).
CRCluster RessourceCluster ResourceA bundle of control groups. Identified by CR-ID (prefix A).

MaLo vs MeLo — the critical distinction

These are not interchangeable. Confusion between them is the single most common domain modelling error in EDI@Energy implementations:

AspectMaLoMeLo
What it modelsCommercial supply point (billing)Physical measurement device location
Who manages itNB — registers and closesMSB — installs and operates the meter
How many per location1 per supply relationship1..n per MaLo
Identifier typeMaLo-ID (11-digit numeric)Zählpunktbezeichnung (33-char Strom / 11-char Gas)
EDIFACT contextUTILMD IDE+Z01, INVOICMSCONS, UTILMD (WiM)
Rust typemako_engine::types::MaLomako_engine::types::MeLo

Business scenario: When a consumer switches supplier (GPKE Lieferbeginn), the LF sends a UTILMD referencing the MaLo-ID. When the MSB reads the meter and sends measurements, those go in a MSCONS referencing the MeLo-ID (Zählpunktbezeichnung). They refer to the same physical site but are structurally different objects in the BDEW role model.


Territories (Gebiete)

Territories are spatial containers. Each DSO operates one or more grid areas. Each TSO operates one control zone.

Source: RME V2.2 §3.2

Abbr.GermanEnglishStromGasDefinition
NGNetzgebietGrid AreaA metrologically bounded area within a market area (Gas) or control zone (Strom). May span multiple voltage/pressure levels. Operated by the NB.
BGBilanzierungsgebietBalancing ZoneOne or more grid areas consolidated for settlement purposes. The synthetic (SLP) or analytical (RLM) balancing method is applied uniformly within a BG.
MGMarktgebietMarket AreaAggregation of gas transport networks sharing a virtual trading hub operated by the MGV.
RZRegelzoneControl ZoneA bounded area within which one TSO (ÜNB) is responsible for frequency and voltage stability. Each ÜNB operates exactly one RZ.

Identifier Formats

All market identifiers are:

  • Immutable once assigned — a MaLo-ID does not change when the DSO changes ownership
  • Centrally issued by bdew-codes.de (Strom) or codevergabe.dvgw-sc.de (Gas)
  • Locally assigned to objects by the responsible code holder (NB in most cases)

Source: Identifikatoren in der Marktkommunikation V1.2 (BDEW, 2025-02-07)


MP-ID — Marktpartner (13 digits)

Identifies a trading partner in a specific market role and commodity. One company holds one MP-ID per role per Sparte.

PositionsLengthContent
1–22Issuer + commodity: 99 = BDEW/Strom, 98 = DVGW/Gas
31Issue mode: 08 (BDEW), 9 (DVGW)
4–129Sequence number
131Check digit (Lok- und Waggon-Kennzeichnungsverfahren)

Alternative: GLN (GS1, 13 digits). When the code holder uses a GS1-issued Global Location Number, the GS1 check-digit algorithm applies (EAN-13).

EDIFACT DE3055 qualifier:

  • 293 — BDEW-Codenummer or DVGW-Codenummer
  • 9 — GS1 GLN

Segments: UNB DE0004 (sender), UNB DE0010 (recipient), NAD DE3035 = MS (message sender), NAD DE3035 = MR (message recipient).

Databases:


MaLo-ID — Marktlokation (11 digits)

Identifies a supply point (electricity or gas — same pool) for the life of the market location. The first digit indicates which code authority issued the ID but does not indicate the Sparte (Strom or Gas).

PositionLengthContent
11Issuer: 49 = BDEW, 13 = DVGW
2–109Sequence number (auto-assigned)
111Check digit (Lok- und Waggon-Kennzeichnungsverfahren)

Who assigns: NB (network operator), who requests blocks of MaLo-IDs from bdew-codes.de or codevergabe.dvgw-sc.de.

Key rule: The same MaLo-ID identifies the location regardless of whether the grid was transferred to a new DSO — the NB keeps the ID.

Examples: 51238696780, 40130000551


MeLo-ID — Messlokation (Zählpunktbezeichnung)

The metering location identifier is the Zählpunktbezeichnung (metering code). It is not covered by the Identifikatoren AWH — format is defined by technical standards:

CommodityStandardTypical lengthFormat description
StromVDE-AR-N 4400 §6 (MeteringCode)33 charactersCountry code (2) + issuer (11) + sequence + check char
GasDVGW G200011 charactersIssuer code + sequence

Strom example: DE0000123400007002500000000001234
(DE = Germany; remainder identifies the DSO grid area and metering point sequence)

Segments: Referenced in MSCONS LOC, UTILMD WiM IDE+Z01, ORDERS/ORDRSP LOC.


NeLo-ID — Netzlokation (11 chars)

Strom only. Issued since 15 February 2023 (per BNetzA BK6-22-128). Used for reactive-power billing and power-curve limit monitoring.

PositionLengthContent
11Type code: always E
2–109Alphanumeric sequence (A–Z, 0–9), auto-assigned
111Check digit (ASCII-Verfahren)

Issuer: bdew-codes.de only.


NeBe-ID — Netzbereich (11 chars)

Strom only. Issued since 20 February 2025 (per BNetzA BK6-22-300 / BK8-22/010-A). Used to classify controllable consumption facilities under §14a EnWG.

PositionLengthContent
11Type code: always F
2–109Alphanumeric sequence (A–Z, 0–9), auto-assigned
111Check digit (ASCII-Verfahren)

Issuer: bdew-codes.de only.


Ressourcen-ID — TR / SR / SG / CR (11 chars)

Used in Redispatch 2.0 and Netzbetreiberkoordination. Four sub-types share one format, distinguished by the first character.

PositionLengthContent
11Type code: A = Cluster Ressource, B = Steuergruppe, C = Steuerbare Ressource, D = Technische Ressource
2–109Alphanumeric sequence (A–Z, 0–9), auto-assigned
111Check digit (ASCII-Verfahren)

Who assigns: NB assigns TR-IDs and SG-IDs; EIV assigns SR-IDs. Issuer: bdew-codes.de.


Paket-ID — Netzbetreiberwechsel (11 chars)

Identifies a bundle of market locations affected by a DSO ownership transfer (Netzbetreiberwechsel). Used in PARTIN messages (mako-nbw).

PositionLengthContent
11Type code (assigned by Vergabestelle)
21Sub-type (assigned by Vergabestelle)
3–108Sequence number (auto-assigned)
111Check digit (ASCII-Verfahren)

Check Digit Algorithms

Two algorithms are used across all BDEW market identifiers.

Source: Identifikatoren V1.2 §8

Lok- und Waggon-Kennzeichnungsverfahren

Used for: BDEW-Code, DVGW-Code, MaLo-ID

  1. Starting from the leftmost digit, alternately multiply each digit by 2 and 1.
  2. If a product exceeds 9, subtract 9 (equivalent to summing the two digits of the product).
  3. Sum all weighted digits.
  4. Check digit = (10 - (sum mod 10)) mod 10

This is the same as the ISO 6346 (railway wagon numbering) check digit, also known as the Luhn-like BDEW variant.

ASCII-Verfahren

Used for: NeLo-ID, NeBe-ID, Ressourcen-ID, Paket-ID

Each character is converted to its ASCII code value. The values are weighted by position and the check digit is computed using modulo arithmetic over the defined base. The exact weight and base tables are published in Identifikatoren V1.2 §8.2.


EDIFACT Encoding

Key segment positions where identifiers appear in EDI@Energy messages.

Source: Allgemeine Festlegungen 6.1d §2.13, §2.15, §2.16, §2.19

Interchange level (UNB)

DERoleContent
UNB DE0004Sender (Absender)MP-ID of the transmitting party
UNB DE0010Receiver (Empfänger)MP-ID of the receiving party

The MP-ID in UNB must be identical to the MP-ID in the corresponding NAD+MS / NAD+MR segment in the enclosed messages. Mismatches are rejected.

Message level (NAD segment, DE3035)

QualifierRole
MSMessage sender (Nachrichtenabsender) — always the same party as UNB DE0004
MRMessage receiver (Nachrichtenempfänger) — always the same party as UNB DE0010

Code scheme (DE3055): 293 for BDEW-Code or DVGW-Code; 9 for GS1 GLN.

Market / metering location (IDE segment, DE3129 qualifier)

The qualifier in IDE DE3129 identifies which type of object the IDE DE3130 value refers to. Common qualifiers:

QualifierObject typeIdentifier format
Z01Marktlokation (MaLo)11-digit MaLo-ID
Z01Messlokation (MeLo) / MaBiS-ZP33-char Zählpunktbezeichnung (Strom) or 11-char (Gas)
Z08Netzlokation (NeLo)11-char NeLo-ID (prefix E)

Note: Both MaLo and MeLo use qualifier Z01 in the IDE segment. The object type is determined by context (message type and segment group), not the qualifier alone. A UTILMD GPKE message references a MaLo-ID; a UTILMD WiM message for Zählerstandsgangmessung references a MeLo-ID.

File naming convention

Per Allgemeine Festlegungen 6.1d §2.12:

{type}_{anwendungsref}_{sender-MP-ID}_{receiver-MP-ID}_{yyyymmdd}_{DAR}.txt

Example: UTILMD__9900123400007_4012345393651_20261001_A177.txt


Rust API

mako-engine::types provides typed newtypes that prevent cross-domain identifier confusion at compile time.

use mako_engine::types::{
    MaLo,           // Marktlokations-ID
    MeLo,           // Messlokations-ID (Zählpunktbezeichnung)
    MarktpartnerCode, // MP-ID: BDEW-Code (99...), DVGW-Code (98...), or GLN
    BkvId,          // Bilanzkreisverantwortlicher-ID
    UenbId,         // Übertragungsnetzbetreiber-ID (ÜNB)
    BikoId,         // Bilanzkoordinator-ID (BIKO)
    DeviceId,       // Geräte-ID / Zählernummer (WiM MSB processes)
};

// --- Market location (MaLo) ---
// 11-digit numeric; first digit 4-9 = BDEW-issued, 1-3 = DVGW-issued
let malo: MaLo = MaLo::new("51238696780");   // starts with 5 = BDEW

// --- Metering location (MeLo) = Zählpunktbezeichnung ---
// 33-char Strom (VDE-AR-N 4400) or 11-char Gas (DVGW G2000)
let melo: MeLo = MeLo::new("DE0000123400007002500000000001234"); // Strom

// --- Market participant (MP-ID) ---
// 13-digit numeric; 99... = BDEW/Strom; 98... = DVGW/Gas
let nb:  MarktpartnerCode = MarktpartnerCode::new("9900357000004"); // BDEW-Code, NB
let lf:  MarktpartnerCode = MarktpartnerCode::new("9900357000011"); // BDEW-Code, LF

// --- Balance-circle roles (MABIS) ---
let bkv:  BkvId  = BkvId::new("9900357000004");   // Bilanzkreisverantwortlicher
let uenb: UenbId = UenbId::new("4012345000023");   // ÜNB
let biko: BikoId = BikoId::new("9900357000005");   // Bilanzkoordinator

// --- WiM MSB device identifier ---
// Format depends on meter type and MSB; not standardised as a BDEW ID format
let device: DeviceId = DeviceId::new("1EMH0012345678");

All types:

  • Wrap Box<str>immutable, 1-word smaller than String, no heap realloc
  • Implement Serialize / Deserialize as transparent JSON strings
  • Implement Display, AsRef<str>, From<String>, From<&str>
  • Are not validated at construction — validation happens at the EDIFACT parsing boundary in edi-energy. The type system enforces that a MaLo cannot be passed where a MeLo is expected; the format correctness is a runtime concern of the adapter layer.

Why no validation in the constructor?
The identifier format standards themselves allow for future extensions. Validating at construction would require bumping the library version every time BDEW extends a format. Format validation belongs at the boundary where untrusted input enters the system — i.e., in the EDIFACT parser adapters, not in the typed wrappers.

Sparte across layers — deliberately distinct enums

Four crates define their own Sparte enum. This is by design, not duplication — each models a different domain with a different legal variant set, and two of the serde casings are load-bearing wire formats:

CrateVariantsWhy
metering::SparteStrom, Gas, Waerme, WasserPhysical metering commodities — heat/water submetering under HeizkostenV is metered but is not market communication
mako-engine::types::SparteStrom, GasMaKo message routing — selects the WiM APERAK Frist (5 vs 10 Werktage); serialized lowercase in stored process events
mako-markt::SparteStrom, GasMaKo master data — a Marktlokation exists only for Strom/Gas; serialized SCREAMING_SNAKE at the REST boundary
grid-billing::SparteStrom, GasLegal-reference selector (StromNEV vs GasNEV) — regulated grid settlement has no Waerme/Wasser

Adding Waerme/Wasser to the MaKo-side enums would create invalid states (a Wasser MaLo cannot exist), and unifying the serde casings would break stored event streams and the public REST contract. The same reasoning applies to the SQL CHECKs: marktd restricts sparte to STROM/GAS, while edmd also accepts WAERME/WASSER for submetering series.


Further Reading

TopicDocument
Full PID table for all process familiesPID Reference
BNetzA rulings governing each processBNetzA Regulatory Reference
How EDIFACT messages are parsed and validatedParsing Guide
How the engine routes messages to workflowsProcess Engine
BO4E objects in ERP integrationERP Integration
Gas balancing domain modelGaBi Gas domain (below)

Gas Domain — GaBi Gas

The mako-gabi-gas crate provides a dedicated domain vocabulary for the German gas market, all in src/domain.rs and src/portfolio.rs. All energy quantities use Decimal — no float arithmetic (DVGW G 685 requires ≥ 3 decimal places).

GasDay — typed gas market day

The German gas day is defined by DVGW G 2000 §3.2: it starts and ends at 06:00 CET (Central European Time), which is UTC-offset aware:

SeasonLocalUTC
Winter (CET, UTC+1)06:00 CET05:00 UTC
Summer (CEST, UTC+2)06:00 CEST04:00 UTC

DST transitions produce 23-hour (spring forward) or 25-hour (fall back) gas days. The nomination deadline per KoV §3.2 is D-1 13:00 CET.

let day = GasDay::new(date!(2026-01-15));
assert_eq!(day.start_utc().hour(), 5);          // 05:00 UTC (CET winter)
assert_eq!(day.duration_hours(), 24);
assert_eq!(GasDay::new(date!(2026-03-28)).duration_hours(), 23); // spring-forward day
assert_eq!(GasDay::new(date!(2026-10-24)).duration_hours(), 25); // fall-back day

GasBeschaffenheit + GasQuantity

The DVGW G 685 conversion formula:

$$kWh_{Hs} = m^3 \times H_s \times Z$$

let beschaffenheit = GasBeschaffenheit {
    brennwert_hs_kwh_per_m3: dec!(10.55),  // Abrechnungsbrennwert from MSCONS PID 13007
    zustandszahl: dec!(0.9764),             // pressure/temperature correction
    quality_class: GasQualityClass::HGas,
    ..
};
let q = GasQuantity::from_m3(dec!(100), beschaffenheit);
assert_eq!(q.energy_kwh_hs, dec!(1030.102));  // rounded to 3 decimal places

Gas quality classes per DVGW G 260:

ClassHs range (kWh/m³)Usage
H-Gas9.5–13.1Most German transmission grids
L-Gas7.5–10.3Parts of northern Germany
BiogasvariableInjected biomethane

AllocationVersion — KoV §6.4 correction tracking

ALOCAT messages may be sent as initial, corrected, or final allocations:

VariantMeaning
InitialFirst ALOCAT for this gas day — preliminary
Correction(n)nth corrected allocation (1-based)
FinalBinding for imbalance settlement — no further corrections

GasMarketRole

RoleGasMarketRoleNotes
BilanzkreisverantwortlicherBkvSubmits NOMINT; receives ALOCAT; subject to IMBNOT
FernleitungsnetzbetreiberFnbSends daily ALOCAT 90001; receives NOMINT
VerteilnetzbetreiberVnbSends sub-daily ALOCAT 90003
MarktgebietsverantwortlicherMgvSends monthly ALOCAT 90002; imbalance settlement
LieferantLfSupplies end customers; does not submit DVGW nominations directly
HändlerHaendlerMay submit nominations and delivery orders

GasPortfolioBalance

GasPortfolioBalance aggregates all BKV positions across Bilanzkreise for a gas day, enabling portfolio-level imbalance management:

let balance: GasPortfolioBalance = compute_portfolio(bkv_eic, gas_day, positions);
println!("Net imbalance: {} kWh",  balance.net_imbalance_kwh());
println!("Direction: {:?}",         balance.portfolio_direction()); // Mehr/Minder/Balanced
println!("Open positions: {}",      balance.open_imbalance_count());
println!("Fully settled: {}",       balance.is_fully_settled());

Gas identifier formats

IdentifierFormatStandardExample
EIC (BKV / FNB / MGV)16 chars alphanumericENTSO-E EIC code21X000000001368S
Bilanzkreis-EIC16 charsENTSO-E EIC code11YAPG4CTRDNZ--A
DVGW-Codenummer (NB)13 digits, starts 98DVGW registry9800357000001
BDEW-Codenummer (LF)13 digits, starts 99BDEW registry9900357000004
Gas Zählpunkt (MeLo)11 charsDVGW G 2000DE000123400M

Edit this page ↗