Process Catalog

Business-level catalog of all German energy market communication processes — GPKE, WiM Strom, MaBiS, GeLi Gas, WiM Gas, GaBi Gas, and PARTIN. For each process: initiating role, message exchange, APERAK deadline, regulatory basis, and implementation status.

Process Catalog

This page is the business-level companion to the PID Reference. Where the PID Reference lists every individual EDIFACT message type, the Process Catalog groups related messages into complete end-to-end processes — the unit of work from the business perspective and the unit of implementation in the mako-* domain crates.

Role coverage. All market roles are equally supported: Lieferant (LF/LFN/LFA), Netzbetreiber (NB/GNB), Messstellenbetreiber (MSB/gMSB), Bilanzkreisverantwortlicher (BKV), Übertragungsnetzbetreiber (ÜNB), and others. Each process table lists all participating roles and marks which crate implements each side of the exchange.

Commodity isolation. Strom and Gas are fully independent deployment units. A makod instance for Strom loads only mako-gpke + mako-wim + mako-mabis. A makod instance for Gas loads mako-geli-gas + mako-wim + mako-gabi-gasmako-wim covers WiM in both Sparten. Running separate instances per commodity is explicitly supported and common in production. A combined instance is equally valid. Each section in this catalog is documented as self-contained — no cross-commodity knowledge required.

Format versions ship on a semi-annual cadence (April + October). The workspace carries per-message, fv-dated profiles (crates/edi-energy/profiles/<message>/fv<yyyymmdd>/): a message type only gets a new fv directory when its format actually changes in a release. Multiple format versions coexist in the same engine instance simultaneously.

ReleaseBindingMessage types with changed formats
fv20260401since 2026-04-01COMDIS, INVOIC, MSCONS, ORDERS, ORDRSP, PARTIN, REMADV, UTILMD Gas
fv20261001from 2026-10-01APERAK, IFTSTA, INVOIC, MSCONS, ORDCHG, ORDERS, ORDRSP, PARTIN, PRICAT, QUOTES, REMADV, REQOTE, UTILMD (Strom 2.2 / Gas 1.2), UTILTS

The fv date is the Anwendungszeitpunkt, six months after the document's Publikationsdatum (Allgemeine Festlegungen 6.1d §2.5). Message types untouched by a release keep their previous profile — CONTRL and INSRPT last changed with fv20260101.

Status legend:

SymbolMeaning
Full state machine + AHB rule enforcement, production-safe
⚠️PID registered, partial handling — accepts message, limited state transitions
Not registered; inbound messages are dead-lettered

APERAK Frist legend:

DomainAPERAK Frist
GPKEper Prüfidentifikator, als Uhrzeit auf einem Werktag (mako_fristen::antwort)
WiM Strom45 Minuten (UTILMD Strom; APERAK AHB §2.4.1)
GeLi Gasnegative APERAK only: nächster Werktag 12:00 (Folgeprozess) / 3 Werktage (Initialprozess)
WiM Gasnegative APERAK only: nächster Werktag 12:00 (Folgeprozess) / 3 Werktage (Initialprozess: 44039, 44042)

The APERAK Frist is the technical-acknowledgement clock only. It is distinct from the business-answer window (Antwortfrist): for the WiM Strom MSB-Wechsel the substantive Antwort is due within 3 / 5 / 7 / 1 Werktage, per PID (55039 / 55042 / 55051 / 55168) — see the MSB-Wechsel section below.

Saturdays, Sundays and public holidays are not Werktage; 24.12. and 31.12. count as holidays. Deadline arithmetic uses German local time (CET/CEST) — an off-by-one-hour error at DST transitions constitutes a regulatory deadline violation.


Process Overview

Quick reference across all process families. Each row is a top-level domain.

„nicht quantifiziert" heißt unbekannt, nicht unbefristet. mako_fristen::antwort liefert für eine solche PID None; makod registriert dann eine Betriebskonvention, gekennzeichnet als is_regulatory: false. Die APERAK-Frist ist eine eigene Uhr (45 Minuten an einem Werktag, APERAK AHB 1.0 §2.4.1) und steht nicht in dieser Spalte.

DomainSparteCrateKey PIDsAntwortfrist des GeschäftsprozessesBasis
GPKE Lieferantenwechsel (NB-Sicht)mako-gpke gpke-supplier-changeUTILMD 55001–55018, 55022–5502411:00 / 06:00 Uhr des 1. WT nach dem ÜTBK6-24-174 Teil 2 § 2.1.2 / § 2.5.1.2
GPKE Lieferantenwechsel (LF-Sicht)mako-gpke gpke-lf-anmeldungUTILMD 55001/55002/55016/55077 (out) · 55003–55006 (in)— (the NB answers)BK6-24-174 Teil 2
GPKE Neuanlage MaLomako-gpke gpke-neuanlageUTILMD 55600/55601 → 55602–5560500:00 Uhr des 61. WT nach dem ÜT (60 WT täglicher Prüflauf, E_0608)BK6-24-174 Teil 2 § 2.2.2
GPKE Abmeldung LFmako-gpke gpke-lf-abmeldungUTILMD 55007 → 55008/5500905:00 Uhr des 1. WT nach dem ÜTBK6-24-174 Teil 2 § 2.5.2.2
GPKE Ankündigung Zuordnung LFmako-gpke gpke-ankuendigung-zuordnung-lfUTILMD 55607 → 55608/5560915:00 Uhr am ÜT (Zuordnungsbeginn in der Zukunft), sonst 15:00 Uhr des 1. WTBK6-24-174 Teil 2 § 2.4.2
GPKE Sperrung/Entsperrung (NB)mako-gpke gpke-sperrungORDERS 17115/17117 → ORDRSP 19116/19117ORDRSP 1. WT nach dem ÜT · Ausführung 6 WT · IFTSTA 1 WT nach AbschlussBK6-24-174 Teil 2 § 3.5
GPKE Sperrung/Entsperrung (LF-Sicht)mako-gpke gpke-sperrung-lfORDERS 17115/17117 (out) · ORDCHG 39000 (out) · ORDRSP 19116/19117 · 19128/19129 · IFTSTA 21039Vorlauf 6 WT (nicht termingebunden) / 12 WT (termingebunden)BK6-24-174 Teil 2 § 3.5
GPKE Abrechnung (INVOIC)mako-gpke gpke-abrechnungINVOIC 31001/31002/31005/31006; REMADV; COMDISzum Zahlungsziel (SG8 DTM+265)BK6-24-174 Teil 2 § 3.3
GPKE Datenabrufmako-gpke gpke-datenabrufORDERS 17004/17102/17113 → ORDRSP rejectionnicht quantifiziertBK6-24-174 Teil 4
GPKE Anfrage Bestellung (55555)mako-gpke gpke-anfrage-bestellungUTILMD 55555nicht quantifiziertBK6-24-174 Teil 4
GPKE Allokationsliste Strommako-gpke gpke-allokationslisteORDERS 17110/17114 · ORDRSP 19110/19115 · MSCONS 13014nicht quantifiziertBK6-24-174
GPKE Messwerte (MSCONS)mako-gpke gpke-messwerteMSCONS 13005/13006/13015–13019/13025/13027nicht quantifiziertBK6-24-174
GPKE UTILTSmako-gpke gpke-utiltsUTILTS 25001/25004–25010nicht quantifiziertBK6-24-174
GPKE Konfigurationmako-gpke gpke-konfigurationORDERS 17134/17135 → ORDRSP 19001/19002nicht quantifiziertBK6-24-174 Teil 3
GPKE Konfiguration Änderungmako-gpke gpke-konfiguration-aenderungORDERS/ORDRSP config changesnicht quantifiziertBK6-24-174 Teil 3
PARTIN Strom Kommunikationsdatenmako-gpke gpke-partinPARTIN 37000–37006PARTIN AHB 1.0f
WiM MSB-Wechsel⚡ 🔥mako-wim wim-device-changeUTILMD 55039/55042/55051/55168 resp. 44039/44042/44051/44168 (out+in) und ihre Antworten3/5/7/1 WT — see belowBK6-22-024 · AWH WiM Gas 2.0
WiM Geräteübernahme⚡ 🔥mako-wim wim-geraeteubernahmeORDERS 17001 · 17002 · 17009 · ORDRSP 19001/19002 · 19003/19004 · 19015/190164 WT Angebot · 2 WT Bestellung · 2 WT vor dem GerätewechselterminBK6-22-024 Kap. 3.1.2 / 3.2.2
WiM Abrechnung⚡ 🔥mako-wim wim-invoicINVOIC 31009 · 31003 · 31004 · REMADV 33001–33004 · COMDIS 29001zum Zahlungsziel; NB bei 31009: 4. WT davorBK6-22-024 Kap. 3.6.3.8 / 3.7 / 6
WiM Rechnungsabwicklung MSB über LFmako-wim wim-rechnungsabwicklungREQOTE 35002 → QUOTES 15002 · ORDERS 17005/17006 · ORDRSP 19009/190105 WT Angebot · 8 WT Antwort/BeendigungBK6-22-024 Kap. 3.6.3.4–3.6.3.7
WiM INSRPT Störungsbehebung⚡ 🔥mako-wim wim-insrptINSRPT 23001 · 23003/23004 · 23005 · 23008 · 23009 · 23011/230123/1 WT je Messtechnik · Ergebnisbericht 7/4/2 WT · Weiterleitung 1 WTBK6-22-024 Anlage 2b Kap. 1.2
MaBiS Bilanzkreisabrechnungmako-mabis mabis-billingMSCONS 13003; IFTSTA 21000–210051 WT (§13.8)BK6-24-174
MaBiS Clearinglistemako-mabis mabis-clearinglisteUTILMD 55065/55069/55070BK6-24-174
MaBiS-ZP Lifecyclemako-mabis mabis-zp-lifecycleUTILMD 55062–55064, 55071/55072, 55197–55200, 55203–55214BK6-24-174
MaBiS Anforderungenmako-mabis mabis-anforderungORDERS 17201–17208BK6-24-174
MaBiS Listenabgleichmako-mabis mabis-listenabgleichUTILMD 55065/55066, 55195/55196, 55201/55202, 55223/55224BK6-24-174
GeLi Gas Lieferantenwechsel🔥mako-geli-gas geli-gas-supplier-changeUTILMD G 44001–4402110 WTBK7-24-01-009
GeLi Gas Lieferbeginn (LF-Sicht)🔥mako-geli-gas geli-gas-lf-anmeldungUTILMD G 44001 (out) · 44002/44003 (in)10 WTBK7-24-01-009
GeLi Gas Stornierung (GNB-Sicht)🔥mako-geli-gas geli-gas-stornierungUTILMD G 44022 (Nb-only inbound)10 WTBK7-24-01-009
GeLi Gas Stornierung (LF-Sicht)🔥mako-geli-gas geli-gas-stornierung-lfUTILMD G 44023/44024 (Lf-only inbound)10 WTBK7-24-01-009
GeLi Gas Sperrung (LF-Sicht)🔥mako-geli-gas geli-gas-sperrung-lfORDERS 17115/17117 · ORDCHG 3900010 WTBK7-24-01-009
GeLi Gas Sperrung (GNB-Sicht)🔥mako-geli-gas geli-gas-sperrung-nbORDERS 17115–17117 · ORDCHG 39000/39001 · ORDRSP 19118/1911910 WTBK7-24-01-009
GeLi Gas AWH-Abrechnung🔥mako-geli-gas geli-gas-sperrprozesse-invoicINVOIC 31011BK7-24-01-009
GeLi Gas Messdaten (MSCONS)🔥mako-geli-gas geli-gas-msconsMSCONS 13002/13007/13008/13009BK7-24-01-009
GeLi Gas Datenabruf🔥mako-geli-gas geli-gas-datenabrufORDERS 17103/17104 → ORDRSP 19103/1910410 WTBK7-24-01-009
PARTIN Gas Kommunikationsdaten🔥mako-geli-gas geli-gas-partinPARTIN 37008–37014PARTIN AHB 1.0f
WiM Gas MSB-Wechsel🔥mako-wim wim-device-changeUTILMD G 44039–44044/44051–44053/44168/44169/441833 / 5 / 7 / 1 WTAWH WiM Gas 2.0
WiM Gas INSRPT🔥mako-wim wim-insrptINSRPT 23005/23009 (Gas-only)3 WT Antwort · 7 WT ErgebnisAWH WiM Gas 2.0 Kap. 4.3
WiM Gas Abrechnung🔥mako-wim wim-invoicINVOIC 31003/31004Zahlungsziel (DTM+265)AWH WiM Gas 2.0 Kap. 4.7
GaBi Gas Abrechnung🔥mako-gabi-gas gabi-gas-invoicINVOIC 31007/31008/31010BK7-24-01-008
GaBi Gas Allokationsliste (MMMA)🔥mako-gabi-gas gabi-gas-mmmaMSCONS 13013 (ORDERS 17110 / ORDRSP 19110 routed via mako-gpke gpke-allokationsliste)BK7-24-01-008
GaBi Gas ALOCAT🔥mako-gabi-gas gabi-gas-allocationPIDs 70001–70023DVGW ALOCAT 5.11a
GaBi Gas NOMINT/NOMRES🔥mako-gabi-gas gabi-gas-nominationPIDs 70030–70039DVGW NOMINT 4.6 / NOMRES 4.7
Redispatch 2.0mako-redispatchIFTSTA 21037/21038; XML documentsBK6-20-059/060/061

Table of Contents

  1. GPKE — Kundenbelieferung Elektrizität
  2. WiM — Messstellenbetrieb
  3. MaBiS — Bilanzkreisabrechnung Strom
  4. GeLi Gas — Lieferantenwechsel Gas
  5. WiM Gas — Messstellenbetrieb Gas
  6. GaBi Gas — Kapazitätsabrechnung Gas
  7. PARTIN — Stammdaten Marktpartner
  8. Redispatch 2.0
  9. DVGW — Gas Transport

GPKE — Kundenbelieferung Elektrizität

Regulatory basis: BK6-24-174 (Beschluss 24.10.2024, gültig ab 06.06.2025) — GPKE Teil 1–3 = Anlagen 1a–1c; BK6-22-024 (Beschluss 21.03.2024) — LFW24 (§ 20a EnWG) and GPKE Teil 4 = Anlage 1d.

APERAK Frist: 45 Minuten an einem Werktag für UTILMD und ORDERS, Samstag → Sonntag 12:00, sonst nächster Werktag 12:00 (APERAK AHB 1.1 § 2.4.1) — a separate clock from the business Antwortfrist of the process itself.


Lieferantenwechsel Strom

The supplier-switch process (GPKE Teil 2) is the highest-volume process in the German electricity market. The incoming supplier (LFN) initiates the registration and separately cancels the outgoing supplier's (LFA) contract.

Every answer window is a wall-clock instant on the first Werktag after the ÜT — never a duration. LFW24 does require the switch itself to complete within 24 hours (§ 20a EnWG), and GPKE meets that by chaining those instants; but GPKE Teil 1 Kap. 7 („Fristenberechnung") defines only WT, T, Zuordnungsbeginn, ÜT and ÜZ, and contains no 24-hour Frist. Reading the statutory duration as a message deadline expires a Friday-afternoon Anmeldung on Saturday and reports a Tuesday-11:00 Frist as healthy until Tuesday night.

Der Sequenzablauf des Lieferbeginn (GPKE Teil 2 § 2.1.2):

Nr.AktionPIDRichtungSpätester ÜZ
1Anmeldung55001 / 55077LFN → NB— (Vorlauffrist, s. u.)
2Information über existierende Zuordnung55036NB → LFN07:00 Uhr des 1. WT nach dem ÜT
3Anfrage zur Beendigung der Zuordnung55010NB → LFAparallel zu Nr. 2
4Antwort auf die Anfrage55011 / 55012LFA → NB09:00 Uhr des 1. WT — Schweigen gilt als Zustimmung
5Zuordnung des LFN (Bestätigung)55002 / 55078NB → LFN11:00 Uhr des 1. WT
6Ablehnung der Anmeldung55003 / 55080NB → LFN11:00 Uhr des 1. WT
10Beendigung der Zuordnung55037NB → LFA12:00 Uhr des 1. WT
13Aufhebung einer zukünftigen Zuordnung55038NB → LFZ12:00 Uhr des 1. WT

Nr. 2, 10 and 13 are Meldepflichten — one-way notifications with no answer; see Meldepflichten below. Nr. 2 and Nr. 3 share a condition: both fire only when the Marktlokation is already assigned at the Zuordnungsbeginn (Nr. 1 Prüfschritt 4), and Nr. 3 is „parallel zu Nr. 2" for that reason.

The NB's answer is two-phase whenever Nr. 3 fires. E_0622 („Prüfen, ob Anmeldung direkt ablehnbar") is a Vorprüfung: surviving it means only that the Anmeldung is not directly refusable. What the NB answers comes from E_0623, whose Prüfschritte 20–50 read the LFA's answer to the 55010 — so the Anfrage has to go out, and its 09:00 window has to close, before Nr. 5 or Nr. 6 can be decided. Silence is a result: „Verstreicht die Frist, ohne dass eine Antwort beim NB eingeht, gilt dies als Bestätigung nach Fall a). Nach Ablauf der Frist eingehende Antworten sind für den Fortlauf dieses Prozesses unerheblich."

A Widerspruch that is not A30 („die Belieferung wurde zum angefragten Termin bereits beendet und eine vom NB bestätigte Abmeldung liegt vor") refuses the Anmeldung with E_0623 A50A57 on an erzeugende Marktlokation, Z35 in Gas. A30 itself confirms it: the assignment is already ending, which is what the NB asked for. The Ablehnung then carries a second SG4 STS, Z35 „Status der Antwort des dritten Marktbeteiligten", restating the LFA's own E_0624 code — that is Nr. 6's „der NB gibt zusätzlich den Grund der Ablehnung des LFA an", on the wire.

Vorlauffristen (BK6-24-174 GPKE Teil 2, SD Lieferbeginn Nr. 1):

ScenarioMindestvorlauffristNotes
Lieferbeginn (LFW24)spätester ÜT ist der Tag vor dem letzten WT vor dem ZuordnungsbeginnDay-granular, kein Uhrzeit-Cutoff. Seit LFW24 gibt es keine separate „Standardwechsel"-Frist mehr; frühere Anmeldung ist zulässig („unverzüglich nach Vorliegen des Anmeldegrundes")
EEG-Marktlokationen und Tranchensechs published Fristen, keyed on Geschäftsvorfall und VeräußerungsformGPKE Teil 2 § 2.1.1, Tabelle „Fristen für die Anmeldung (Prozessschritt 1)"
Neuanlage MaLokeine MindestfristAntwortfrist dafür 00:00 Uhr des 61. WTE_0608 macht die Identifikation einer neu in Betrieb genommenen MaLo zu einer täglichen Wiederholprüfung über 60 WT
Stornierung einer Zuordnungsolange die auslösende Meldung noch nicht beantwortet istGPKE Teil 4 Kap. 5. Danach nur noch Rückabwicklung — ein manueller Prozess, der das Einverständnis aller Beteiligten erfordert. Es gibt keine „24 h vor Lieferbeginn"-Frist

Kündigung und Anmeldung sind nicht taggleich gekoppelt. GPKE Teil 2 § 1.2.1 stellt für den Use-Case „Kündigung" keine Bedingung auf, dass 55016 (LFN → LFA) am selben Kalendertag wie 55001 (LFN → NB) zu senden wäre. Was die Festlegung verlangt, ist die Nachbedingung im Erfolgsfall: „Der LFA ist verpflichtet, unmittelbar mit Bestätigung der Kündigung gegenüber dem LFN auch den Use-Case ‚Lieferende von LF an NB' gegenüber dem NB anzustoßen."

Meldepflichten — obligations with no answer

Three of the eight steps above carry no Bestätigung, so a missing one produces no timeout, no dead letter and no alert. It surfaces later as a counterparty holding a stale view of who supplies the Marktlokation.

PIDMessageNB →Substance
55036Information über existierende ZuordnungLFNdie Identität des LFA — „Hierbei teilt der NB dem LFN insbesondere die Identität des LFA … mit"
55037Beendigung der ZuordnungLFAZuordnungsende und Grund
55038Aufhebung einer zukünftigen ZuordnungLFZdass eine künftige Zuordnung entfällt

The Gas twins are 44036 / 44037 / 44038, on their own windows: the Information by the Ablauf des 4. WT nach Eingang, the other two „am selben Tag wie die Antwort" and only on a confirmation.

processd issues the Information and the Beendigung as part of the Anmeldung decision. The Information goes out with the Anfrage of Nr. 3 — the two share a condition — so it reaches the LFN well inside its 07:00 window, which closes four hours before the 11:00 Bestätigung of the same message, and an Anmeldung the Vorprüfung refuses never names the LFA to the party it refuses. The Beendigung rides the Bestätigung, whether that is dispatched automatically or released by an operator. The Aufhebung is an operator command: it addresses a supplier whose future Zuordnung the Anmeldung displaces, and the supply projection holds one future supplier per Marktlokation, which the incoming Anmeldung has already claimed.

Since no alert can cover a message nobody waits for, the guard is a test — mako_fristen::meldung against the PID router.

Ersatz-/Grundversorgung (EoG, §36/§38 EnWG): When a MaLo draws energy without an assignable supply contract (after Lieferende without successor, supplier insolvency, Erlöschen der Zuordnungsermächtigung), the NB assigns it to the Grundversorger via UTILMD 55013 (Anmeldung / Zuordnung EOG — the gpke-eog workflow; retroactive Zuordnungsbeginn allowed). The E/G answers with 55014 (stating Ersatz- vs. Grundversorgung and the Bilanzkreis) or 55015; no answer → the NB assigns with the pre-deposited default Bilanzkreis. Ersatzversorgung ends by law after three months (§38 Abs. 4); the processd EoG module automates gap detection and the timer.

ProcessInitiator → ResponderAnfrage PIDAntwort OKAntwort NGCrate
Anmeldung / Lieferbeginn (LF-AN)LFN → NBUTILMD 550015500255003mako-gpke
Lieferende / Abmeldung (LFN → NB)LFN → NBUTILMD 550045500555006mako-gpke
Anmeldung erz. MaLo (LF-AN)LFN → NBUTILMD 550775507855080mako-gpke
Neuanlage verb. MaLoLF → NBUTILMD 556005560255604mako-gpke
Neuanlage erz. MaLoLF → NBUTILMD 556015560355605mako-gpke
Kündigung LieferbeginnLFN → LFAUTILMD 550165501755018mako-gpke
Abmeldung (NB-initiiert)NB → LFAUTILMD 550075500855009mako-gpke
Änderung MSB-Abrechnungsdaten der MaLoLFN ↔ NBUTILMD 55557mako-gpke
Ankündigung Zuordnung LFNB → LFNUTILMD 556075560855609mako-gpke
Rückmeldung/Bestellung AbrechnungsdatenLF → NBUTILMD 55156/55220/55673IFTSTA 21047IFTSTA 21047mako-gpke
Stornierung Zuordnungsprozessorig. → orig.UTILMD 550225502355024mako-gpke

Lieferbeginn = T. Both UTILMD 55001 (LFN → NB) and 55016 (LFN → LFA) are sent on the same day, referencing the same Lieferbeginn-date. The NB coordinates the transition; the actual disconnection of LFA follows automatically when the Lieferbeginn date is reached.

Message flow — Lieferantenwechsel Strom (LF-AN):

sequenceDiagram
    participant LFN as Neuer LF (LFN)
    participant NB  as Netzbetreiber (NB)
    participant LFA as Alter LF (LFA)

    Note over LFN,LFA: T = Lieferbeginn-Datum
    LFN->>NB:  UTILMD 55001 (Anmeldung verb. MaLo)
    LFN->>LFA: UTILMD 55016 (Kündigung Lieferbeginn)

    alt Bestätigung
        NB-->>LFN:  UTILMD 55002 (Bestätigung Anmeldung)
        LFA-->>LFN: UTILMD 55017 (Bestätigung Kündigung)
    else Ablehnung durch NB
        NB-->>LFN:  UTILMD 55003 (Ablehnung Anmeldung)
    else Ablehnung durch LFA
        LFA-->>LFN: UTILMD 55018 (Ablehnung Kündigung)
    end

    Note over LFN,LFA: Zum Lieferbeginn-Datum T
    NB->>LFA: UTILMD 55007 (Abmeldung / Beendigung Zuordnung)
    LFA-->>NB: UTILMD 55008 (Bestätigung) oder 55009 (Ablehnung)

    Note over LFN,NB: Nach Lieferbeginn (separate Prozesse)
    NB-->>LFN: MSCONS (Zählerstandsübermittlung — eigener Prozess)
    NB-->>LFN: INVOIC 31001/31002 (Netznutzungsrechnung — eigener Prozess)

Note: MSCONS and INVOIC arrive after Lieferbeginn as independent processes with their own process IDs and APERAK windows. They are shown here only to indicate the downstream billing relationship.


Sperrung / Entsperrung Strom

The LF can order a disconnection (Sperrung) or reconnection (Entsperrung) of a market location via ORDERS. The NB forwards the order to the MSB (metering point operator). After physical execution, the NB confirms back to the LF via ORDRSP and sends an IFTSTA status update.

PIDs 17115 and 17117 are shared between GPKE Strom (NB-role inbound) and GeLi Gas (LF-role outbound). Routing is determined by market context (Sparte Strom vs. Gas) at the protocol level.

ProcessInitiator → ResponderAnfrage PIDAntwort OKAntwort NGCrate
Sperrauftrag LF-initiiert (Strom)LF → NBORDERS 17115ORDRSP 19116ORDRSP 19117mako-gpke
Entsperrauftrag LF-initiiert (Strom)LF → NBORDERS 17117ORDRSP 19116ORDRSP 19117mako-gpke
Anfrage Sperrung (NB → MSB)NB → MSBORDERS 17116ORDRSP 19118ORDRSP 19119mako-gpke
Auftragsstatus SperrenNB → LF/MSB/ÜNBIFTSTA 21039mako-gpke
Info EntsperrauftragNB → MSBIFTSTA 21040
Stornierung SperrauftragLF → NBORDCHG 39000ORDRSP 19128ORDRSP 19129mako-gpke
Weiterleitung StornierungNB → MSBORDCHG 39001mako-gpke

Message flow — Sperrauftrag Strom (LF-initiiert):

sequenceDiagram
    participant LF
    participant NB  as Netzbetreiber (NB)
    participant MSB as Messstellenbetreiber (MSB)

    LF->>NB:  ORDERS 17115 (Sperrauftrag)
    NB->>MSB: ORDERS 17116 (Anfrage Sperrung)
    MSB-->>NB: ORDRSP 19118 (Bestätigung) oder 19119 (Ablehnung)

    alt Bestätigung
        NB-->>LF: ORDRSP 19116 (Bestätigung Sperrauftrag)
        NB->>LF:  IFTSTA 21039 (Auftragsstatus — Sperrung ausgeführt)
    else Ablehnung
        NB-->>LF: ORDRSP 19117 (Ablehnung Sperrauftrag)
    end

    opt Stornierung
        LF->>NB:  ORDCHG 39000 (Stornierung Sperrauftrag)
        NB-->>LF: ORDRSP 19128 (Bestätigung) oder 19129 (Ablehnung)
    end

INVOIC Strom Abrechnung

Network billing messages from the NB to the LF. The LF is the passive receiver; the technical acknowledgement is an APERAK by the next Werktag 12:00 (APERAK AHB 1.0 § 2.4.1 — an INVOIC is not a UTILMD, so the 45-minute window does not apply), and the business answer is the REMADV, due zum Zahlungsziel (SG8 DTM+265).

INVOIC — Netznutzungs- und Mehr-/Mindermengenabrechnung

ProcessSender → EmpfängerINVOIC PIDContentSparteCrate
AbschlagsrechnungNB → LFINVOIC 31001Netznutzung Abschlag (StromNEV §21)mako-gpke
NN-Rechnung (Netznutzung)NB → LFINVOIC 31002Netznutzungsentgelt Strom + Gas (StromNEV §21 / GasNEV §14; Sparte in message content)netzbilanzd
MMM-RechnungNB → LFINVOIC 31005Mehr-/Mindermengensaldo Strom + Gasnetzbilanzd
MMM Mehrmenge selbst ausgestelltNB+LF same entityINVOIC 31006Mehr-/Mindermenge als Lieferung, selbst ausgestelltnetzbilanzd
WiM-RechnungMSBA → NB · MSBA → MSBNINVOIC 31003Fortführung Messstellenbetrieb, Geräteübernahme, Zwischen-/Kontrollablesung⚡🔥mako-wim wim-invoic
Stornorechnung (universal)Rechnungssteller → RechnungsempfängerINVOIC 31004Sparte-neutral Storno of any INVOIC (INVOIC AHB §3.1.2); deadline = Zahlungsziel of the referenced invoice (DTM+265)⚡🔥mako-wim wim-invoic (checked by invoic-checker check_storno)
MSB-Rechnung StromMSB → NB / LF / ESAINVOIC 31009WiM Messstellenbetriebsabrechnung — generated by netzbilanzd, ingested via mako-wim wim-invoicmako-wim
MMM Gas aggregiertNB → MGVINVOIC 31007Aggreg. MMM-Rechnung Gas🔥mako-gabi-gas
MMM Gas selbstausgestelltMGVINVOIC 31008Selbst ausgest. MMM-Rechnung Gas🔥mako-gabi-gas
AWH Sperrprozesse GasGNB/VNB → LFINVOIC 31011Sonstige Leistung Sperrung Gas🔥mako-geli-gas
Kapazitätsabrechnung GasGNB → KNINVOIC 31010Kapazitätsabrechnung Gas🔥mako-gabi-gas

REMADV / COMDIS — Zahlungsabwicklung

MessageSender → EmpfängerPIDMeaningCrate
Zahlungsavis (vollständige Zahlung)LF → NBREMADV 33001Full payment confirmationmako-gpke
Zahlungsavis (Ablehnung Zahlung)LF → NBREMADV 33002Payment rejectedmako-gpke
Abweisung Kopf und SummeLF → NBREMADV 33003Itemized rejection (Strom): header and totalsmako-gpke
Abweisung PositionLF → NBREMADV 33004Itemized rejection (Strom): individual line itemmako-gpke
Ablehnung ZahlungsavisNB → LFCOMDIS 29001Invoicer disputes REMADVmako-gpke

Datenabruf und Stammdatenprozesse

Data requests and configuration processes under GPKE Teil 4 (BK6-22-024).

Multi-crate processes: Some PIDs appear in more than one crate when the direction or Marktrolle differs. For example, ORDERS 17132 (Stammdaten MeLo) is handled by mako-wim because it uses WiM-specific MeLo semantics, while all other GPKE datenabruf PIDs live in mako-gpke.

Datenabruf

ProcessInitiator → ResponderAnfrage PIDAntwortCrate
Anfrage Daten der individuellen BestellungLF → NBUTILMD 55555UTILMD 55553mako-gpke
Anfrage Werte (GPKE)LF → MSB/NBORDERS 17004ORDRSP 19101mako-gpke
Anfrage Stammdaten MaLo (Strom)LF/NB → NBORDERS 17102ORDRSP 19102mako-gpke
Anfrage Stammdaten NNE/NLPVLF → NBORDERS 17113ORDRSP 19114mako-gpke
Anfrage Stammdaten MesslokationLF/MSB → NBORDERS 17132ORDRSPmako-wim
Anforderung AllokationslisteLF → NBORDERS 17110ORDRSP 19110mako-gpke
Anforderung bilanzierte MengeNB/LF → ÜNBORDERS 17114ORDRSP 19115mako-gpke

Konfigurationseinrichtung (NB-outbound)

These ORDERS messages are generated by the NB workflow as part of its post-Lieferbeginn configuration obligation (GPKE Teil 4 §3). They are dispatched via the NB's outbox after UTILMD 55001 is accepted — they are not inbound routing PIDs. The MSB responds with ORDRSP 19001 (Bestätigung) or 19002 (Ablehnung) which are routed back to the gpke-konfiguration workflow.

Process (BDEW AHB name)NB sends toORDERS PIDMSB-AntwortCrate
Einrichtung Konfiguration aufgrund Zuordnung LF (NB an MSB)NB → MSB17134ORDRSP 19001/19002mako-gpke
Einrichtung Konfiguration aufgrund Zuordnung LF (MSB an MSB) ¹NB → MSB17135ORDRSP 19001/19002mako-gpke

¹ Despite the name "MSB an MSB", ORDERS 17135 is sent by the NB (via its outbox) to coordinate configuration between two MSBs. The NB workflow (gpke-konfiguration) is the owner; no MSB system invokes this directly.

Konfigurationsänderung (LF/NB-initiated)

ProcessInitiator → ResponderORDERS PIDAntwortCrate
Änderung PrognosegrundlageLF → NB17120ORDRSP 19121mako-gpke
Änderung Konfiguration (NB → MSB)NB → MSB17121ORDRSPmako-gpke
Änderung LastprofilzuordnungLF/NB → NB17122/17123ORDRSPmako-gpke
Änderung iMS-PflichteinbauNB → MSB17128–17131ORDRSPmako-gpke
Änderung NetzengpassmanagementLF → NB17133ORDRSPmako-gpke

UTILTS — Berechnungsformeln und Zählzeitdefinitionen

Workflow: gpke-utilts — Inbound-only receive-and-store. No APERAK is triggered by the LF for UTILTS; the NB expects acknowledgement via CONTRL at transport level.

PIDDescriptionSender → Empfänger
25001BerechnungsformelNB → LF
25004Übermittlung Übersicht ZählzeitdefinitionenNB/MSB → LF
25005–25010Weitere UTILTS-Varianten (Messwertparameter, etc.)NB/MSB → LF

UTILTS is used by the NB to distribute tariff formula structures and meter-reading time-zone definitions to all connected suppliers. The LF stores these for billing calculation and pass-through to the ERP system.

§42b EnWG Solarpaket I — GGV community solar allocation formulas (CCI+ZG6): UTILTS PID 25001 is also used to transmit the community solar allocation fractions for Gemeinschaftliche Gebäudeversorgung (GGV) under §42b Abs. 5 EnWG (Solarpaket I, 2024). The segment CCI+ZG6 (Aufteilungsfaktor Energiemenge) carries the fraction parameter for each tenant MaLo. edmd evaluates these formulas via the metering::AggregationRule::GgvConstantAllocation and metering::AggregationRule::GgvProportionalAllocation variants — see the edmd operator guide for details on the computation and the §42b Abs. 5 Pos() cap.


MSCONS — Zählerstandsübermittlung

Workflow: gpke-messwerte

MSCONS messages carry meter readings, load profiles, and interval metered values. The NB sends MSCONS to the LF at defined reporting intervals and at Lieferbeginn/ Lieferende. The LF acknowledges with an APERAK by the next Werktag 12:00 (APERAK AHB 1.0 § 2.4.1); the 45-minute window is UTILMD/ORDERS only.

ContextSender → EmpfängerTrigger
TurnusablesungNB → LFAnnual or quarterly meter read
LieferbeginnNB → LFAt or shortly after Lieferbeginn-Datum
LieferendeNB → LFFinal reading at Lieferende
NachlieferungNB → LFLate-arriving corrected values

GPKE IFTSTA — Vollzugsmeldungen, Statusmeldungen, EnFG (GPKE Teil 2/3/4)

IFTSTA messages in the GPKE family carry supplier-change execution confirmations (Vollzugsmeldungen), Konfigurationsänderung responses, and EnFG-related status notifications (privilege information and billing status under the Energiefinanzierungsgesetz, 2023). All are routed to the relevant mako-gpke workflow for correlation; no separate receipt-only workflow exists.

IFTSTA PIDDescription (IFTSTA AHB)Sender → EmpfängerCrate
21024Vollzugsmeldung LieferantenwechselNB → LFmako-gpke gpke-supplier-change
21025Vollzugsmeldung EinzugNB → LFmako-gpke gpke-supplier-change
21026Vollzugsmeldung AuszugNB → LFmako-gpke gpke-supplier-change
21027Vollzugsmeldung NetznutzungNB → LFmako-gpke gpke-supplier-change
21028VollzugsmeldungNB → LFmako-gpke gpke-supplier-change
21033Statusmeldung KündigungMSB → NB/LFmako-gpke gpke-supplier-change
21035Rückmeldung an Lieferstelle (GPKE Teil 2)MSB → LFmako-gpke gpke-supplier-change
21043Bestellungsantwort / -mitteilung (GPKE Teil 3)NB → LF · MSB → MSB · MSB → NB · MSB → LFmako-gpke gpke-konfiguration-aenderung
21044Bestellungsbeendigung (GPKE Teil 3)MSB → NB · MSB → LFmako-gpke gpke-konfiguration-aenderung
21045EnFG Informationen (GPKE Teil 4)LF → NBmako-gpke gpke-supplier-change
21047Bearbeitungsstandsmeldung (GPKE Teil 2/4)NB → LF · NB → ÜNB · MSB → NB · MSB → LFmako-gpke gpke-supplier-change

PID 21042 (WiM / Umsetzungsstatus, „Bestellung (WiM)", MSB → ESA; IFTSTA AHB 2.0g Kap. 6.10, STS 4405 = 105 „beendet") is a WiM Strom Teil 2 message. It is the UC 4.4 „Beendigung durch MSB" notification, handled by mako-wim (esa-wertebestellung), not mako-gpke.

Why are 17134/17135/17121/17128–17131 NB→MSB PIDs in GPKE, not WiM? GPKE governs what metering configuration is required after a supplier change and who can authorize disconnection (BK6-22-024). WiM governs which company provides the metering service (BK6-22-024). These are orthogonal obligations: GPKE Teil 3/4 obligates the NB to configure the MSB after confirming Lieferbeginn; WiM Teil 1 governs the MSB-Wechsel process itself. A combined Stadtwerke NB+MSB operator implements both crates simultaneously.


WiM — Messstellenbetrieb

Regulatory basis: BK6-22-024, Anlage 2a (WiM Teil 1) und Anlage 2b (WiM Teil 2) für Strom; AWH WiM Gas 2.0 (gültig ab 01.10.2026) für Gas. Beide Sparten laufen in mako-wim durch dieselben Workflows.

APERAK: Strom antwortet positiv und negativ innerhalb 45 Minuten (APERAK AHB §2.4.1); Gas kennt nur die negative APERAK, fällig am nächsten Werktag 12:00 (Folgeprozess) bzw. nach 3 WT (Initialprozess).

Antwortfrist (business answer): 3 / 5 / 7 / 1 Werktage per PID for the MSB-Wechsel, identisch in beiden Sparten — see the table below. These are two separate clocks: the APERAK acknowledges receipt, the Antwort decides the process.

MSB-Wechsel

ProcessInitiator → ResponderUTILMD PID Strom · GasAntwort OKAntwort NGFristCrate
Kündigung MSB (neuer MSB initiiert)MSBN → MSBA55039 · 4403955040 · 4404055041 · 440413 WTmako-wim
Anmeldung MSB beim NBMSBN → NB55042 · 4404255043 · 4404355044 · 440445 WTmako-wim
Ende MSB (alter MSB → NB)MSBA → NB55051 · 4405155052 · 4405255053 · 440537 WTmako-wim
Verpflichtungsanfrage / AufforderungNB → gMSB55168 · 4416855169 · 4416955170 · 441691 WTmako-wim

Gas kennt keine 44170: die Ablehnung der Verpflichtungsanfrage läuft über dieselbe 44169 wie die Bestätigung, unterschieden durch den Antwortcode. Zusätzlich meldet der Gas-NB das Ende des Messstellenbetriebs mit 44183.

The Antwortfrist differs per process (BK6-22-024 WiM Strom Teil 1 Kap. 2.2.2 / 2.3.2 / 2.4.2 / 2.5.2; AWH WiM Gas 2.0 Kap. 4.1–4.4) and is distinct from the APERAK window. mako_fristen::antwort is the single source for these values.

The Kündigung (55039) runs on the contract layer between the two MSB and never reaches the NB. Per Kap. 2.1.3 it is explicitly non-constitutive: the switch is effected solely by a successful Anmeldung MSBN → NB, so 55042 must never be gated on a 55040 Bestätigung.

Geräteübernahme und Stammdaten

ProcessInitiator → ResponderORDERS PIDAntwortCrate
Anzeige GerätewechselabsichtMSBN → MSBAORDERS 17009ORDRSP 19015/19016mako-wim
Bestellung Angebot Änderung TechnikNB/LF → MSBORDERS 17011mako-wim
Stammdaten Messlokation (Strom)LF/MSB → NBORDERS 17132mako-wim
Geräteübernahme BestellungMSBN → MSBAORDERS 17001/17002ORDRSPmako-wim

WiM-Abrechnung

ProcessSender → EmpfängerINVOIC PIDContentCrate
MSB-RechnungMSB → NB / LF / ESAINVOIC 31009Messstellenbetrieb — generated by netzbilanzd, ingested via mako-wim wim-invoicmako-wim
WiM-RechnungMSB → NB / MSBNINVOIC 31003Dienstleistungen im Messwesen (temporäre Fortführung, Geräteübernahme, Zwischen-/Kontrollablesung), beide Spartenmako-wim
Stornorechnungwie die UrsprungsrechnungINVOIC 31004Sparte-neutraler Stornomako-wim

Die Antwort (REMADV 33001–33004) ist zum Zahlungsziel der Rechnung fällig (SG8 DTM+265), mit einer Ausnahme: den NB trifft bei der 31009 „Messstellen­betrieb mit iMS gegenüber dem NB" der 4. WT vor dem Zahlungsziel (Kap. 6.2 Nr. 2). Die COMDIS 29001, mit der der MSB eine abgelehnte Rechnung als korrekt bestätigt, ist bis zum 2. WT vor dem Zahlungsziel fällig. Das Zahlungsziel selbst darf 10 WT nach Empfang der Rechnung nicht unterschreiten.

Rechnungsabwicklung MSB über LF

Workflow: wim-rechnungsabwicklung (crate mako-wim) — BK6-22-024 Kap. 3.6.3.4–3.6.3.7

The LF can take over invoice processing for the MSB ("Rechnungsabwicklung des Messstellenbetriebs über den Lieferanten"). The exchange starts with a Preisanfrage/Angebot pair and is ordered — and later ended — via ORDERS:

StepMessageDirectionAntwort
Anfrage RechnungsabwicklungREQOTE 35002LF → MSBQUOTES 15002
Angebot RechnungsabwicklungQUOTES 15002MSB → LF
BestellungORDERS 17005LF → MSB— (answers the Angebot; no ORDRSP exists for 17005)
BeendigungORDERS 17006both directions — MSB → LF (AD §2.9, EBD E_0206) · LF → MSB (AD §2.11, EBD E_0209)ORDRSP 19009 (Bestätigung) / 19010 (Ablehnung)

ORDRSP 19009/19010 answer only the Beendigung (17006), never the Bestellung — the 17005 Bestellung itself is the answer to the QUOTES 15002 Angebot.

Technik-Änderung und Gerätekonfiguration

Workflow: wim-technik-aenderung

Requests for device or configuration changes at a Messlokation. Two regulatory documents describe the same change, and they end in the same messages: WiM Strom Teil 1 Kap. 3.3 has the NB or the LF order it outright, while the BDEW AWH Prozesse zur Änderung der Technik an Lokationen V1.1 puts a quotation round in front of it.

Antwortfrist: 10 Werktage (Kap. 3.3.1.2 / 3.3.2.2 Nr. 2) on both the REQOTE and the ORDERS; die APERAK läuft daneben auf ihren eigenen 45 Minuten. The AWH Bestellung has no Vorlauffrist Prüfschritt — the Umsetzungszeitraum was agreed in the Angebot — while the direct Beauftragung is refused with A01 when the requested date is less than 20 Werktage out.

ProcessInitiator → ResponderORDERS PIDAntwortEBDCrate
Messlokationsänderung, direkt beauftragtNB → MSB17011 (ZO-T15)ORDRSP 19005/19006E_0249mako-wim
Messlokationsänderung, direkt beauftragtLF → MSB17011 (ZO-T15)ORDRSP 19005/19006E_0250mako-wim
Anfrage Angebot Änderung der TechnikNB / LF → MSBREQOTE 35005QUOTES 15005 / IFTSTA 21033E_0278 · E_0281mako-wim
Bestellung nach AngebotNB → MSB17011 (ZG-T24)ORDRSP 19005/19006E_0279mako-wim
Bestellung nach AngebotLF → MSB17011 (ZG-T24)ORDRSP 19005/19006E_0283mako-wim
Durchführung — ScheitermeldungMSB → NB / LFIFTSTA 21027 / 21025E_0286mako-wim
KonfigurationsänderungMSB → MSB17118ORDRSP 19127mako-wim
Bestellung Änderung (GPKE Teil 3)NB → MSB17121ORDRSP 19120E_0526mako-gpke

One answer PID pair, four trees. ORDRSP 19005/19006 carries all four Bestellungs-Bäume. The sender's Marktrolle separates the NB column from the LF one; what separates the WiM Teil 1 rows from the AWH rows is the ORDERS' Zuordnung zu einem ObjektZO-T15 opens a Vorgang, ZG-T24 answers one (Anwendungsübersicht 4.0 rows 30660/30720 against 36030/36120). mako_pruefung::codes::aenderung_der_technik_baum(besteller, art) takes both.

A02 is the Zustimmung of E_0249 and an Ablehnung of E_0279 — same spelling, same PID, opposite meaning.

ORDRSP semantics: 19005 = Auftragsbestätigung Änderung Technik · 19006 = Ablehnung · 19003 = Fortführungsbestätigung · 19004 = Ablehnung Fortführung · 19007 = Ablehnung Anforderung Messwerte. ORDRSP 19003–19007 resume the process that sent the ORDERS; a rejection reason is read from FTX, falling back to the BGM response code. The ESA Ab-/Bestellung answers (ORDRSP 19011–19014) belong to the ESA Wertebestellung below, not here.

Direction: mako implements both sides. As requester it sends the ORDERS and ingests the ORDRSP; as MSB it answers 35005 and 17011 out of the four trees above and reports the Durchführung with E_0286.

ESA Wertebestellung (WiM Strom Teil 2, Kap. 4)

Workflows: wim-wertebestellung (MSB side), esa-wertebestellung (ESA side).

An Energieserviceanbieter (ESA) subscribes to a Marktlokation's metered values from the Messstellenbetreiber. §34 Abs. 2 S. 2 Nr. 10 MsbG makes serving an ESA a mandatory Zusatzleistung. The whole exchange — Anfrage, Angebot, Bestellung, delivery, and either cancellation path — is one correlated process on each side, not a bag of independent messages.

StepMessageDirectionAntwortFristEBD
Werteanfrage (UC 4.1 Nr. 1)REQOTE 35003ESA → MSBQUOTES 150035 WTE_0252
Angebot / Ablehnung (UC 4.1 Nr. 2)QUOTES 15003MSB → ESABindungsfrist
Bestellung (UC 4.1 Nr. 3)ORDERS 17007ESA → MSBORDRSP 19011/190122 WTE_0256
Wertelieferung (UC 4.2)MSCONS 13027MSB → ESAper Messprodukt
Stornierung (UC 4.1 Nr. 5)ORDCHG 39002ESA → MSBORDRSP 19013/190142 WTE_0257
Abbestellung (UC 4.3 Nr. 1)ORDERS 17008ESA → MSBORDRSP 19011/190122 WTE_0254
Beendigung durch MSB (UC 4.4)IFTSTA 21042MSB → ESAunverzüglich
sequenceDiagram
    autonumber
    participant ESA as ESA · esa-wertebestellung
    participant MSB as MSB · wim-wertebestellung
    ESA->>MSB: REQOTE 35003 Werteanfrage · LOC+172 · PIA Messprodukt · DTM+76
    MSB-->>ESA: QUOTES 15003 Angebot · RFF+AAV · CUX · PRI je Artikel-ID · PIA OBIS · DTM+273/469
    Note over ESA,MSB: 5 WT · E_0252 · keine Preisposition ⇒ Ablehnung der Anfrage
    ESA->>MSB: ORDERS 17007 Bestellung · RFF+AAG · IMD+7081 · DTM+203 = max(Wunsch, DTM+469)
    MSB-->>ESA: ORDRSP 19011 / 19012 · RFF+ON · AJT code · E_0256
    loop per the ordered Messprodukt
        MSB-->>ESA: MSCONS 13027 Werte nach Typ 2
    end
    alt Stornierung before first delivery
        ESA->>MSB: ORDCHG 39002 Storno · RFF+ON
        MSB-->>ESA: ORDRSP 19013 / 19014 · RFF+ACW · AJT code · E_0257
    else Abbestellung during delivery
        ESA->>MSB: ORDERS 17008 Abbestellung · RFF+ACW · IMD++Z02
        MSB-->>ESA: ORDRSP 19011 / 19012 · RFF+ON · AJT code · E_0254
    end

What is ordered. The request names a Messprodukt from Codeliste der Konfigurationen 1.4 Kapitel 4.6 — the only products the ESA role may order — plus the DTM+76 Wunschtermin and the IMD+7081 Abo mode (Z01 running series, Z03 single transmission). The catalogue distinguishes the two delivery paths: 4.6.1 arrives as MSCONS 13027 over AS4, 4.6.2 as XML straight from the iMS over SM-PKI, and the latter makes the target address and certificate bodies mandatory in the Werteanfrage. A product defined for a different Lokationsebene than the request addresses is refused before it reaches the wire.

The product decides the Lokationsebene. LOC+172 DE 3225 has four permitted shapes and the Marktlokations-ID format ([950]) serves both the Marktlokation and the Tranche (REQOTE AHB 1.2 §4.3, hints [502]/[504]), so the identifier cannot resolve it — and the Tranche carries a Pflichtprodukt.

The Angebot is a priced offer. UC 4.1.1 has the ESA asking for „die Übermittlung von Werten und die damit verbundenen Kosten"; QUOTES AHB 1.1a §4.3 makes SG4 CUX, the PIA+Z02 Artikel-IDs, one SG31 PRI+CAL each and one to 23 PIA+5 … :SRW OBIS-Kennzahlen Muss, alongside DTM+469 and DTM+273. The prices, not the Bindungsfrist, tell an Angebot from an Ablehnung: DTM+273 is Muss on the only published 15003 use case, so a refusal carries one too.

The Prüfidentifikator is not in BGM. Every BGM DE 1004 row of the MSCONS, REQOTE, QUOTES, ORDERS, ORDCHG and ORDRSP handbooks reads „Dokumentennummer"; the PID travels in SG1 RFF+Z13 (SG15 RFF+Z13 on the IFTSTA). DE 1001 carries a BDEW document code — Z57 on the order handshake, Z83 on the MSCONS delivery, Z09 on the IFTSTA. mako reads the PID from both locations and accepts only a plausible 5-digit code, so a numeric Belegnummer cannot outrank the real one.

Correlation. Only the opening REQOTE is keyed on a location (LOC+172, Zuordnungsschlüssel ZO-T17). Every later step carries no LOC at all and is matched by the Belegnummer it echoes:

PIDSchlüsselSegmentPoints at
15003ZG-T16SG1 RFF+AAVthe REQOTE
17007ZG-T24SG1 RFF+AAGthe QUOTES Angebot
17008ZG-T41SG1 RFF+ACWthe ORDERS Bestellung
39002ZG-T51SG1 RFF+ONthe ORDERS Bestellung
19011 / 19012ZG-T14SG1 RFF+ONthe ORDERS answered
19013 / 19014ZG-T50SG1 RFF+ACWthe ORDCHG
21042ZG-T47SG15 RFF+AGIthe ORDERS Bestellung
13027ZG-T42 (of EZ-03)SG1 RFF+AGIthe ORDERS Bestellung

Answers. SG2 AJT is Muss on all four ORDRSP PIDs: DE 4465 carries the Prüfschritt code, DE 1082 the EBD that publishes it. The code's Cluster — not a separate accept flag — decides whether the answer rides the Bestätigungs- or the Ablehnungs-PID. 19011/19012 answer both the Bestellung and the Beendigung, and the IMD+7081 on the answer says which tree its code came from.

Those four use cases publish no free-text segment at all — the only FTX a conformant 19011 may carry is SG27 FTX+Z27, the MSB's IP address for an SM-PKI delivery — so the Antwortcode is the whole content of a refusal in both directions. The MSB's check of an inbound Werteanfrage is E_0252 „Anfrage prüfen" (eight Prüfschritte, refusals A02A07); what has no tree is E_0253, the ESA's look at the offer that comes back, and E_0258, its look at the ORDRSP.

See the makod ESA messages guide for the consent gate (§49 Abs. 2 Nr. 9 MsbG / GDPR Art. 7) and the command surface.

Preisanfrage, Angebote und Preislisten

Allows market participants to request and receive price offers (REQOTE/QUOTES) and price lists (PRICAT) for MSB services before committing to a device takeover or configuration change. Workflow: wim-preisanfrage / wim-preisliste.

Preisanfrage / Angebot:

ProcessInitiator → ResponderPIDCrate
Anfrage GeräteübernahmeangebotMSBN → MSBAREQOTE 35001mako-wim
Anfrage Rechnungsabwicklung MSB über LFLF → MSBREQOTE 35002mako-wim
ESA Werteanfrage (Wertebestellung)ESA → MSBREQOTE 35003mako-wim wim-wertebestellung
Anfrage KonfigurationsangebotNB/LF → MSBREQOTE 35004mako-wim
Anfrage Angebot Änderung TechnikNB/LF → MSBREQOTE 35005mako-wim
Angebot GeräteübernahmeMSBA → MSBNQUOTES 15001mako-wim
Angebot Rechnungsabwicklung MSBMSB → LFQUOTES 15002mako-wim
Angebot WerteMSB → ESAQUOTES 15003mako-wim
Angebot KonfigurationMSB → NB/LFQUOTES 15004mako-wim
Angebot Änderung TechnikMSB → NB/LFQUOTES 15005mako-wim

Preislisten (PRICAT):

ProcessSender → EmpfängerPIDContentCrate
AusgleichsenergiepreisBIKO → BKVPRICAT 27001Settlement energy pricemako-wim
Preisblätter MSB-LeistungenMSB → NB/LFPRICAT 27002MSB service price listmako-wim
Preisblätter NB-LeistungenNB → LFPRICAT 27003NB service price list (incl. Sperrprozesse)mako-wim

Steuerungsauftrag (API-Webdienste Strom)

Workflow: wim-steuerungsauftragREST-based, not EDIFACT/AS4.

The Steuerungsauftrag handles remote load control commands (controlMeasuresV1) via HTTPS using the BDEW API-Webdienste Strom interface (API-Guideline 1.0a). Answer semantics follow the API-Guideline: Sofortquittung (HTTP 202), then vorläufige Antwort, then Endantwort over the REST channel. The per-PID UTILMD Antwortfristen (3 / 5 / 7 / 1 WT) do not apply here — this workflow has no EDIFACT Prüfidentifikator.

StepSender → EmpfängerTransportDescription
Konfiguration / InitialZustandNB/LF → MSBREST JSONCommand dispatch
SofortquittungMSB → NB/LFREST 202 AcceptedImmediate receipt
Vorläufige AntwortMSB → NB/LFREST JSONFeasibility confirmed
Endantwort (positiv/negativ)MSB → NB/LFREST JSONExecution result

This workflow has no EDIFACT Prüfidentifikator and is not listed in the BDEW PID overview. It is implemented as an event-sourced workflow over the REST channel; AS4 is not involved.

IFTSTA Status (WiM Strom)

IFTSTA messages carry status updates that the NB or MSB sends to inform the LF or the outgoing MSB about the progress of an ongoing WiM process. The LF receives these passively — no workflow state change is required on the LF side.

Directions are the Anwendungsübersicht der Prüfidentifikatoren 4.0's. They are worth stating precisely: the Gesamtvorgang leg's numeric order is the reverse of its reading order (21009 is the failure, 21010 the success), and one PID serves several Prozessschritte.

IFTSTA PIDProzessschrittSender → Empfänger
21007Beginn MSB 3/4 — Information über die vorläufige BestätigungNB → MSBA · NB → LF
21009Beginn MSB 7 — Mitteilung über den Gesamtvorgang, gescheitertMSBN → NB
21010Beginn MSB 7 — Mitteilung über den Gesamtvorgang, erfolgreichMSBN → NB
21010Verpflichtung gMSB 3 · Gerätewechsel 3gMSB → NB · MSBN → MSBA
21011Beginn MSB 8 — Antwort (E_0232) · 14/15 ScheiternNB → MSBN · NB → MSBA · NB → LF
21012Beginn MSB 8 — Antwort, erfolgreichNB → MSBN
21013Beginn MSB 16/17/18 — Mitteilung über das ScheiternNB → MSBN · MSBA · LF
21015Informationsmeldung (Gas, fv20251001 only — zurückgezogen in IFTSTA AHB 2.1 Änd-ID 27061)NB → MSBA
21018Verpflichtung gMSB 4 — Information über die Verpflichtung (ab AHB 2.1 nur Strom)NB → MSBA
21036Gerätewechsel 6 — Zeitpunkt des GeräteausbausMSBN → MSBA

All PIDs above are routed to mako-wim wim-device-change ✅.

Three IFTSTA PIDs that look like status lines and are not, each owned by its own workflow because each carries a decision:

IFTSTA PIDProzessschrittEBDSender → EmpfängerWorkflow
21029 → 21030/21031Ersteinbau eines iMS in eine bestehende Messlokation (WiM Teil 1 Kap. 3.5)E_0233gMSB → wMSB, Antwort zurückwim-ersteinbau
21025 · 21027Messlokationsänderung durchführen — ScheitermeldungE_0286MSB → LF · MSB → NBwim-technik-aenderung
21032Antwort auf das Angebot Rechnungsabwicklung — die AblehnungE_0205 · E_0208LF → MSBwim-rechnungsabwicklung

IFTSTA — Ersteinbau eines iMS (WiM Strom Teil 1 Kap. 3.5)

Workflow: wim-ersteinbau (crate mako-wim) — Strom only.

The gMSB carries the § 29 MsbG rollout obligation and it reaches Messlokationen a wettbewerblicher MSB operates. It announces the planned Umstellungszeitpunkt 3 Monate und 3 Werktage ahead (21029), and the wMSB has 3 Werktage to answer out of E_0233:

CodeClusterBedeutungPID
A03ZustimmungAuf den Selbsteinbau wird verzichtet21030
A01AblehnungBestandsschutz nach § 19 Abs. 5 MsbG, auf den nicht verzichtet wird21031
A02AblehnungSelbsteinbau eines iMS oder einer mME geplant21031
A04AblehnungZum jetzigen Zeitpunkt keine Aussage möglich21031

A04 reads like a deferral and the BDEW clusters it as an Ablehnung — the gMSB may not roll out against it, and neither may it roll out against an expired window. Both leave the Vorgang in Abgelehnt.

INSRPT — Störungsmeldungen (WiM Strom)

Workflow: wim-insrpt — one workflow for both Sparten.

Fault and interruption reports sent to the MSB when a metering-point problem is detected. Neither window is a function of the PID: the MSB's own device registry decides them.

ProzessschrittStromGas
Antwort (23003/23004)3 WT (kME ohne RLM, mME) / 1 WT (kME mit RLM, iMS)3 WT, flach
Mitteilung Ergebnis (23008)7 / 4 / 2 WT nach Messtechnik und Spannungsebene7 WT, flach
Weiterleitung an betroffene MaLo (23011/23012)1 WT
PIDProcessSender → EmpfängerCrate
23001StörungsmeldungLF/NB/Melder → MSBmako-wim wim-insrpt
23003Ablehnung StörungsmeldungMSB → LF/NB/Meldermako-wim wim-insrpt
23004Bestätigung StörungsmeldungMSB → LF/NB/Meldermako-wim wim-insrpt
23008Ergebnisbericht (gemeinsam)MSB → LF/NB/Meldermako-wim wim-insrpt
23005Informationsmeldung über die Störung an den NB (Gas)MSB → NBmako-wim wim-insrpt
23009Informationsmeldung über die Behebung an den NB (Gas)MSB → NBmako-wim wim-insrpt
23011Information über die Störung an betroffener Marktlokation (Strom)MSB → LF/NBmako-wim wim-insrpt
23012Information über das Ergebnis an betroffener Marktlokation (Strom)MSB → LF/NBmako-wim wim-insrpt

23005/23009/23011/23012 accompany an answer rather than being one: they carry no decision and do not close the process. The Weiterleitung 23011/23012 still carries an obligation, and it is the one window a terminal state does not close — the 23012 falls due one Werktag after the Ergebnisbericht has ended the Use-Case. wim-insrpt tracks what is owed; only the Weiterleitung going out discharges it.

Both sides run in the same workflow. The Melder issues SendStoerungsmeldung; the MSB ingests the 23001 and answers through wim.stoerung.bestaetigen / .ablehnen, then wim.stoerung.ergebnis-melden. Neither Frist is in the message — the MSB's own device registry supplies the messtechnik the command takes, and absent it the fastest branch applies so an alert fires early rather than late.


MaBiS — Bilanzkreisabrechnung Strom

Regulatory basis: BK6-24-174 (Anlage 3 MaBiS, gültig ab 06.06.2025)

Architecture note: MaBiS is a batch projection, not a per-MaLo saga. mako-mabis uses ProjectionRunner::catch_up_persistent to aggregate metering data across all MaLo streams for a billing period, then produces MSCONS output. There is no per-process deadline (Frist) — the submission windows are calendar-based.

ProcessRolesMessagePIDCrate
Summenzeitreihe (BKV-Abrechnung)ÜNB → BKVMSCONS13003mako-mabis
Statusmeldung BKVLF/NB/BKV → NB/ÜNBIFTSTA21000–21005mako-mabis
Clearingliste DZRBIKO → NB/ÜNBUTILMD55069mako-mabis
Clearingliste BASBIKO → BKVUTILMD55070mako-mabis
LieferantenclearinglisteNB → LFUTILMD55065mako-mabis

GeLi Gas — Lieferantenwechsel Gas

Regulatory basis: BK7-24-01-009 — „GeLi Gas 3.0", Anlage zu BK7-06-067 in der Fassung BK7-24-01-009 (Beschluss 12.09.2025, Tenor gültig ab 01.01.2026; KoV-XV-Cluster ab 01.10.2026). Supersedes BK7-19-001 and the original BK7-06-067 (2007). The Sequenzdiagramme that refine it are the BDEW/VKU/GEODE/FNB Gas AWH GeLi Gas V1.2 (26.03.2026, gültig ab 01.04.2026).

APERAK Frist: Gas knows only the Verarbeitbarkeitsfehlermeldung — nächster Werktag 12:00 Uhr for a Folgeprozess, 3 Werktage for an Initialprozess (APERAK AHB 1.1 § 2.3.1). Every APERAK is answered with a CONTRL. This is the technical clock; the business Antwortfristen are 4 / 3 / 2 Werktage per Prüfidentifikator.

Key differences from electricity. Both Sparten switch suppliers at the Marktlokation and both use UTILMD. What differs: the answer window is the Ablauf of a Werktag rather than a wall-clock instant on one; the Zuordnungszeitpunkt is 06:00 Uhr (the Gastag runs 06:00–06:00) rather than 00:00; the Entscheidungsbäume are E_30xx rather than E_06xx; and the LF carries a Vorlauffrist the Strom side does not. The grid operator is called GNB.


Lieferantenwechsel Gas

Vorlauffristen und Antwortfristen (BK7-24-01-009 Kap. 3.1–3.3):

ScenarioFristFundstelle
Anmeldung bei Lieferantenwechsel — LF-Vorlaufmindestens 10 Werktage vor Aufnahme der BelieferungKap. 3.2.3
Anmeldung — Antwort des GNBAblauf des 4. Werktags nach EingangKap. 3.2.3
Abmeldung bei Lieferantenwechsel — LF-Vorlaufmindestens 7 Werktage vor dem AbmeldedatumKap. 3.2.2
Abmeldung — Antwort des GNBAblauf des 3. Werktags nach EingangKap. 3.2.2
Kündigung — Antwort des LFAAblauf des 3. Werktags nach EingangKap. 3.1
Zuordnung E/G — Antwort des E/GAblauf des 2. WerktagsKap. 3.3.2
Neuanlagekeine MindestvorlauffristLieferbeginn = frühestmöglicher Termin
Stornierungsolange die auslösende Meldung noch nicht beantwortet istKap. 2.7; AWH Kap. 2.5.2 Nr. 2: „Eine Stornierung der Anmeldung kann bis zum Eingang der Antwortnachricht erfolgen"

Die „10 Werktage" sind die Vorlauffrist des Lieferanten, keine Antwortfrist. Sie sagen, wie weit im Voraus der LFN senden muss — nicht, wie lange der GNB antworten darf. Wer damit eine Antwortqueue dimensioniert, meldet eine seit sechs Werktagen abgelaufene Frist als noch laufend.

Wo bei Gas die 24 Stunden stehen. Die AWH GeLi Gas nimmt seit V1.1 die Neuregelung zum Lieferantenwechsel in 24 Stunden Gas (§ 20a EnWG) auf: „Der Vorgang der Bestätigung einer Anmeldung zu einem LF ist nach erfolgreichem Abschluss aller relevanten Prüfungen für die Zuordnung der entsprechenden MaLo innerhalb von höchstens 24 Stunden vorzunehmen" (Kap. 1.6). Das ist eine Frist auf die Ausführung nach bestandener Prüfung, keine Antwortfrist auf die Nachricht — die bleibt bei 4 Werktagen als Obergrenze.

Die AWH V1.2 präzisiert Prozessschritt 5 („Antwort auf Anmeldung") weiter in zwei Zweige:

ZweigFristObergrenze
Eine Abmeldeanfrage wurde versendet24 h nach Eingang der „Beantwortung der Abmeldeanfrage" (ist der Folgetag kein WT, dann der nächstfolgende WT)Ablauf des 4. WT nach Prozessschritt 2
Keine Abmeldeanfrage versendet24 h nach der PrüfungAblauf des 4. WT nach Eingang der Anmeldung
Der LFA antwortet gar nichtder WT nach dem 3. WT nach Versand von Prozessschritt 2

mako_fristen::antwort::gas_lieferbeginn_antwort_nach_abmeldeanfrage rechnet den ersten Zweig aus; die PID-Tabelle veröffentlicht die Obergrenze, weil aus der Nachricht selbst nicht hervorgeht, welcher Zweig gilt.

Meldepflichten — Nachrichten ohne Antwort. Wie bei GPKE trägt auch das Gas-SD Lieferbeginn drei einseitige Informationsmeldungen, die mako nicht implementiert: 44036 (Informationsmeldung über existierende Zuordnung, GNB → LFN, Ablauf des 4. WT — sie nennt dem LFN die Identität des LFA), 44037 (Beendigung der Zuordnung, GNB → LFA) und 44038 (Aufhebung einer zukünftigen Zuordnung, GNB → LFZ), die beiden letzten „am selben Tag wie Prozessschritt 5, wenn die Anmeldung bestätigt wurde" (AWH Kap. 2.5.2 Nr. 2 / 6 / 7). Katalogisiert in mako_fristen::meldung, Lücke fixiert durch services/makod/tests/meldepflicht_coverage.rs.

GNB-role note: In the gas market the grid operator is always called GNB (Gasnetzbetreiber). Messages are addressed to the GNB by EIC/GLN. The GNB coordinates with the outgoing LF (LFA) after receiving the LFN's Anmeldung, by sending the Abmeldeanfrage of Prozessschritt 3.

ProcessInitiator → ResponderUTILMD PIDAntwort OKAntwort NGCrate
Lieferbeginn Gas (LF-AN)LFN → GNBUTILMD G 440014400244003mako-geli-gas
Lieferende Gas / Abmeldung NNLFN → GNBUTILMD G 440044400544006mako-geli-gas
Abmeldung NN (GNB → LFN)GNB → LFNUTILMD G 440074400844009mako-geli-gas
Abmeldungsanfrage (GNB → LFA)GNB → LFAUTILMD G 440104401144012mako-geli-gas
EoG Anmeldung (GNB → LF)GNB → LFUTILMD G 440134401444015mako-geli-gas
Kündigung beim alten LieferantenLFN → LFAUTILMD G 440164401744018mako-geli-gas
Bestandsliste (GNB → LF)GNB → LFUTILMD G 44019mako-geli-gas
Änderungsmeldung zur BestandslisteLF → GNBUTILMD G 4402044021mako-geli-gas
Stornierung (GNB-side, inbound)LFN/LFA → GNBUTILMD G 44022mako-geli-gas
Stornierung (LF-side, inbound)GNB → LFN/LFAUTILMD G 44023/44024mako-geli-gas

PIDs 44022–44024 (Stornierung) are multi-domain: GeLi Gas 2.0 (supply cancellation by LFN/LFA ↔ GNB) and WiM Gas (MSB-change cancellation by gMSB). Role-conditional routing is implemented in mako-geli-gas:

  • Nb-only: PID 44022 → geli-gas-stornierung (GNB receives Anfrage)
  • Lf-only: PIDs 44023/44024 → geli-gas-stornierung-lf (LF receives GNB response)
  • Msb/Nmsb add nothing: the recipient of a 44022 is the party that received the Ursprungsnachricht, and the workflow resolves which process is meant from RFF+ACW rather than from the deployment's Marktrolle

LF-seitige Einreichung (geli-gas-lf-anmeldung)

When makod is deployed in the LF role, the LF initiates the Lieferbeginn Gas by sending UTILMD G 44001 outbound to the GNB. The response arrives inbound as 44002 (Bestätigung) or 44003 (Ablehnung). This mirrors the GPKE gpke-lf-anmeldung workflow for Strom.

Workflow: geli-gas-lf-anmeldung — the GNB's answer window on a 44001 is Ablauf des 4. Werktags (mako_fristen::antwort); the APERAK beside it is nächster Werktag 12:00 / 3 Werktage.

DirectionMessagePIDRole
Outbound (LFN → GNB)Anmeldung LieferbeginnUTILMD G 44001LFN initiates
Inbound (NB → LF)Bestätigung Anmeldung NNUTILMD G 44002NB confirms
Inbound (NB → LF)Ablehnung Anmeldung NNUTILMD G 44003NB rejects
Outbound (LFN → LFA)Kündigung beim alten LFUTILMD G 44016Concurrent with 44001
Inbound (LFA → LFN)Bestätigung KündigungUTILMD G 44017LFA confirms
Inbound (LFA → LFN)Ablehnung KündigungUTILMD G 44018LFA rejects

Kündigung und Anmeldung sind nicht taggleich gekoppelt. Weder GeLi Gas 3.0 Kap. 3.1 noch die AWH verlangen, dass 44016 (LFN → LFA) am selben Werktag wie 44001 (LFN → GNB) versendet wird. Was Kap. 3.1 verlangt, ist die Nachbedingung: „Der Altlieferant ist ferner verpflichtet, unmittelbar mit Bestätigung der Kündigung gegenüber dem Neulieferanten auch das Lieferende gegenüber dem Netzbetreiber einzuleiten."

Die Mindestvorlauffrist für den Lieferantenwechsel ist 10 Werktage (Anmeldung) bzw. 7 Werktage (Abmeldung). GPKE Strom kennt seit LFW24 keine feste Standardwechsel-Vorlauffrist mehr, sondern nur „spätester ÜT ist der Tag vor dem letzten WT vor dem Zuordnungsbeginn". § 20a EnWG gilt in beiden Sparten — bei Gas als 24-Stunden-Frist auf die Ausführung der Zuordnung nach bestandener Prüfung (AWH Kap. 1.6), nicht als Antwortfrist.

sequenceDiagram
    participant LFN as Neuer LF (LFN)
    participant GNB as Gasnetzbetreiber (GNB)
    participant LFA as Alter LF (LFA)

    Note over LFN,LFA: Keine taggleiche Kopplung vorgeschrieben
    LFN->>GNB: UTILMD G 44001 (Anmeldung Lieferbeginn)
    LFN->>LFA: UTILMD G 44016 (Kündigung beim alten LF)

    Note over LFN,GNB: LF-Vorlauf 10 WT · GNB antwortet bis Ablauf des 4. WT

    alt GNB bestätigt
        GNB-->>LFN: UTILMD G 44002 (Bestätigung Anmeldung NN)
        LFA-->>LFN: UTILMD G 44017 (Bestätigung Kündigung)
    else GNB lehnt ab
        GNB-->>LFN: UTILMD G 44003 (Ablehnung Anmeldung NN)
    else LFA lehnt ab
        LFA-->>LFN: UTILMD G 44018 (Ablehnung Kündigung)
    end

    Note over LFN,LFA: Zum Lieferbeginn-Datum
    GNB->>LFA: UTILMD G 44007 (Abmeldung NN)
    LFA-->>GNB: UTILMD G 44008 (Bestätigung) oder 44009 (Ablehnung)

Message flow — Lieferbeginn Gas (GNB-Sicht):

sequenceDiagram
    participant LFN as Neuer LF (LFN)
    participant GNB as Gasnetzbetreiber (GNB)
    participant LFA as Alter LF (LFA)

    LFN->>GNB: UTILMD G 44001 (Anmeldung Lieferbeginn Gas)
    LFN->>LFA: UTILMD G 44016 (Kündigung beim alten Lieferanten)

    alt Bestätigung
        GNB-->>LFN: UTILMD G 44002 (Bestätigung Anmeldung NN)
        LFA-->>LFN: UTILMD G 44017 (Bestätigung Kündigung)
    else Ablehnung durch GNB
        GNB-->>LFN: UTILMD G 44003 (Ablehnung Anmeldung NN)
    else Ablehnung durch LFA
        LFA-->>LFN: UTILMD G 44018 (Ablehnung Kündigung)
    end

    Note over LFN,LFA: Zum Lieferbeginn-Datum
    GNB->>LFA: UTILMD G 44007 (Abmeldung NN)
    LFA-->>GNB: UTILMD G 44008 (Bestätigung) oder 44009 (Ablehnung)

Sperrung / Entsperrung Gas

The gas disconnection / reconnection process (LF-initiated) follows the same PID numbers as the Strom Sperrung, but runs between the LF and the GNB on a Gas MaLo and answers on the same Sparte-neutral row as Strom: 17115 / 17117 / 39000 are one ORDERS Anwendungsfall in both Sparten, so the GNB's ORDRSP is due „spätester ÜT ist der 1. WT nach dem ÜT". The Gas process itself lives in the BDEW AWH „Unterbrechung / Wiederherstellung der Anschlussnutzung" — with the Gas Entscheidungsbäume E_1000 / E_1004 against Strom's E_0470 / E_0497not in GeLi Gas 3.0, which contains no Sperrprozess at all.

LF-Seitegeli-gas-sperrung-lf (LF initiates, awaits GNB response)

ProcessInitiator → ResponderAnfrage PIDAntwort OKAntwort NGCrate
Gas-Sperrauftrag sendenLF → GNBORDERS 17115ORDRSP 19116ORDRSP 19117mako-geli-gas geli-gas-sperrung-lf
Gas-Entsperrauftrag sendenLF → GNBORDERS 17117ORDRSP 19116ORDRSP 19117mako-geli-gas geli-gas-sperrung-lf
Stornierung Sperrauftrag sendenLF → GNBORDCHG 39000ORDRSP 19128ORDRSP 19129mako-geli-gas geli-gas-sperrung-lf

GNB-Seitegeli-gas-sperrung-nb (GNB receives, forwards to gMSB, confirms to LF)

ProcessInitiator → ResponderAnfrage PIDAntwort OKAntwort NGCrate
Sperrauftrag empfangen (GNB)LF → GNBORDERS 17115ORDRSP 19116ORDRSP 19117mako-geli-gas geli-gas-sperrung-nb
Entsperrauftrag empfangen (GNB)LF → GNBORDERS 17117ORDRSP 19116ORDRSP 19117mako-geli-gas geli-gas-sperrung-nb
Anfrage Sperrung an gMSBGNB → gMSBORDERS 17116ORDRSP 19118ORDRSP 19119mako-geli-gas geli-gas-sperrung-nb
Stornierung empfangen (GNB)LF → GNBORDCHG 39000ORDRSP 19128ORDRSP 19129mako-geli-gas geli-gas-sperrung-nb
Weiterleitung Stornierung (GNB → gMSB)GNB → gMSBORDCHG 39001mako-geli-gas geli-gas-sperrung-nb

Same PIDs, different market. ORDERS 17115 and 17117 are used for both Strom Sperrung (routed to mako-gpke) and Gas Sperrung (routed to mako-geli-gas). The routing is determined at dispatch time by the commodity field in the ORDERS message header and the deployment role of the receiving party.

Message flow — Gas-Sperrauftrag (LF-initiiert):

LF-Sicht (LF initiates, geli-gas-sperrung-lf):

sequenceDiagram
    participant LF
    participant GNB as Gasnetzbetreiber (GNB)

    LF->>GNB: ORDERS 17115 (Gas-Sperrauftrag, LF → GNB)
    Note over LF,GNB: ORDRSP bis zum 1. WT nach dem ÜT

    alt Bestätigung
        GNB-->>LF: ORDRSP 19116 (Bestätigung Gas-Sperrauftrag)
    else Ablehnung
        GNB-->>LF: ORDRSP 19117 (Ablehnung Gas-Sperrauftrag)
    end

    opt Stornierung (vor GNB-Antwort)
        LF->>GNB:  ORDCHG 39000 (Stornierung Gas-Sperrauftrag)
        GNB-->>LF: ORDRSP 19128 (Bestätigung) oder 19129 (Ablehnung)
    end

GNB-Sicht (GNB receives, forwards to gMSB, geli-gas-sperrung-nb):

sequenceDiagram
    participant LF
    participant GNB as Gasnetzbetreiber (GNB)
    participant gMSB

    LF->>GNB:  ORDERS 17115 (Gas-Sperrauftrag)
    GNB->>gMSB: ORDERS 17116 (Anfrage Sperrung)
    gMSB-->>GNB: ORDRSP 19118 (Bestätigung) oder 19119 (Ablehnung)

    alt gMSB bestätigt
        GNB-->>LF: ORDRSP 19116 (Bestätigung Gas-Sperrauftrag)
    else gMSB lehnt ab
        GNB-->>LF: ORDRSP 19117 (Ablehnung Gas-Sperrauftrag)
    end

    opt Stornierung
        LF->>GNB:  ORDCHG 39000 (Stornierung)
        GNB->>gMSB: ORDCHG 39001 (Weiterleitung Stornierung)
        GNB-->>LF: ORDRSP 19128 (Bestätigung) oder 19129 (Ablehnung)
    end

Gas Abrechnung — Billing Scope

INVOIC PIDContentSender → EmpfängerCrate
31002Netznutzungsentgelt Gas (GasNEV §14, NN-Rechnung)NB → LFnetzbilanzd
31005Mehr-/Mindermengensaldo Gas (MMM)NB → LFnetzbilanzd
31011AWH Sperrprozesse GasGNB/VNB → LFmako-geli-gas
31003WiM-Rechnung (Abrechnung von Dienstleistungen im Messwesen — Strom und Gas)MSBA → NB · MSBA → MSBNmako-wim wim-invoic
31004Stornorechnung — Sparte-neutral universal Storno of any INVOIC (INVOIC AHB §3.1.2)Rechnungssteller → Rechnungsempfängermako-wim wim-invoic
31007/31008Aggreg. MMM-Rechnung GasNB → MGVmako-gabi-gas
31010Kapazitätsabrechnung GasGNB → KNmako-gabi-gas

Gas Datenabruf

Data retrieval processes for gas-specific values. The positive response is the actual data (MSCONS or similar); ORDRSP is sent only for rejections.

ProcessInitiator → ResponderORDERS PIDAblehnung PIDCrate
Anfrage Abrechnungsbrennwert / ZustandszahlLF → GNB/MSBORDERS 17103ORDRSP 19103mako-geli-gas
Anfrage MSB Gas an NB Strom (Messwerte)MSB Gas → NB StromORDERS 17104ORDRSP 19104mako-geli-gas
Anfrage Stammdaten MaLo GasLF → GNBORDERS 17101ORDRSP 19101
Anfrage Stammdaten MeLo GasMSB → GNBORDERS 17126

MSCONS Gas — Messwert- und Energiemengenübermittlung

Workflow: geli-gas-mscons

Gas meter readings, load profiles, energy quantities, and gas quality values delivered via MSCONS by the GNB or MSB to the LF. The LF acknowledges with an APERAK on the Gas APERAK clock — nächster Werktag 12:00 Uhr for a Folgeprozess, 3 Werktage for an Initialprozess (APERAK AHB 1.1 § 2.3.1). Not 10 Werktage: that is the supplier's Vorlauffrist before a Lieferbeginn.

PIDContentSender → Empfänger
13002Zählerstand GasMSBA/MSBN → GNB · GNB → LF
13007Gasbeschaffenheit (Brennwert, Zustandszahl)GNB → LF · MSBA → GNB
13008Lastgang GasGNB → LF · MSBA → GNB
13009Energiemenge GasMSBA/MSBN → GNB · GNB → LF

PIDs 13013 and 13014 are listed here for cross-reference only. 13013 (Allokationsliste Gas, MMMA) belongs to mako-gabi-gas (gabi-gas-mmma) — GaBi Gas billing domain (BK7-24-01-008). 13014 (Bilanzierte Menge Gas/Strom) is a GaBi Gas/ÜNB process. Neither is registered under mako-geli-gas; Gas-only deployments that do not load mako-gabi-gas will dead-letter these PIDs.

PIDContentSender → EmpfängerCrate
13002Zählerstand GasMSBA/MSBN → GNB · GNB → LFmako-geli-gas
13007Gasbeschaffenheit (Brennwert, Zustandszahl)GNB → LF · MSBA → GNBmako-geli-gas
13008Lastgang GasGNB → LF · MSBA → GNBmako-geli-gas
13009Energiemenge GasMSBA/MSBN → GNB · GNB → LFmako-geli-gas
13013Allokationsliste Gas (MaLo-scharf, MMMA)GNB → MGVmako-gabi-gas gabi-gas-mmma — GaBi Gas domain
13014Bilanzierte Menge Gas/Strom (MaLo-scharf)ÜNB → GNB · GNB → LFmako-gabi-gas — GaBi Gas domain

Process Symmetry: GPKE ↔ GeLi Gas

Why doesn't GeLi Gas have every GPKE process?

GPKE (Strom) and GeLi Gas (Gas) share the same business goals — supplier switching, disconnection, billing, data retrieval — but have structurally different regulatory frameworks. The asymmetry is real and intentional, not a documentation or implementation gap.

GPKE Process (Strom)GeLi Gas EquivalentNotes
Lieferantenwechsel (NB-Sicht) — UTILMD 55001–55018Lieferantenwechsel (GNB-Sicht) — UTILMD G 44001–44021✅ Direct equivalent. Gas has no fast-switch option (10 WT only)
Lieferantenwechsel (LF-Sicht) — gpke-lf-anmeldungLieferbeginn (LF-Sicht) — geli-gas-lf-anmeldung (44001 out, 44002/44003 in)✅ Direct equivalent
Abmeldung NB-initiiert — UTILMD 55007–55009Abmeldung NN (GNB → LFN) — UTILMD G 44007–44009✅ Direct equivalent
Stornierung — UTILMD 55022–55024Stornierung — UTILMD G 44022–44024✅ Direct equivalent (role-conditional routing)
Sperrung/Entsperrung — ORDERS 17115–17117Sperrung/Entsperrung — ORDERS 17115–17117Same PIDs, different market; routed by commodity
INVOIC NNE Strom — 31002INVOIC 31002 — NNE Gas (NB → LF, GasNEV §14)✅ Same NN-Rechnung PID for both Sparten. netzbilanzd billing_type: "nne_gas" generates PID 31002 via SettlementType::NneGas; same calculation as Strom, legal refs switch to GasNEV §14
INVOIC MMM Strom — 31005 (NB → LF)INVOIC 31005 — MMM Gas (NB → LF); aggregierte Gas MMM (NB → MGV) uses 31007/31008 (mako-gabi-gas)⚠️ NB → LF Gas MMM shares PID 31005 with Strom; the aggregierte MMM-Rechnung flows NB → MGV (Marktgebietsverantwortlicher) as 31007/31008, which invoicd checks against MMMA Gas (THE) prices
Neuanlage MaLo — UTILMD 55600–55605Embedded in UTILMD G 44001 (Lieferbeginn)⚠️ Gas has no separate "Neuanlage" PID set; new connections use the same 44001 PID as supplier changes
Ankündigung Zuordnung LF — UTILMD 55607–55609❌ No equivalentThe NB restores the 100 % LF-Zuordnung of an erzeugende Marktlokation or Tranche (GPKE Teil 2 § 2.4). Gas has no Veräußerungsform/Direktvermarktung split, so no counterpart
UTILTS — 25001/25004–25010❌ No equivalentUTILTS carries Zählzeitdefinitionen (HT/NT tariff clocks) and Berechnungsformeln — concepts that don't exist in Gas regulation
Allokationsliste Strom — ORDERS 17110 · MSCONS 13014GaBi Gas Allokationsliste — MSCONS 13013 (mako-gabi-gas)Different crate/domain: Gas allocation belongs to GaBi Gas (BK7-24-01-008), not GeLi Gas
Konfiguration / iMSys — ORDERS 17134/17135WiM Gas — UTILMD G 44039–44044 / 44051–44053 / 44168/44169/44183Handled by mako-wim; MSB gateway configuration is a WiM concern in both Sparten
GPKE Anfrage Bestellung — UTILMD 55555❌ No equivalentStrom-only Stammdaten process for special metering configurations
MSCONS Zählerstand — 13005/13006MSCONS Gas Zählerstand — 13002/13008/13009✅ Equivalent function; Gas uses separate PID range due to Gas-specific Brennwert/Zustandszahl fields
Datenabruf — ORDERS 17004/17102Datenabruf Gas — ORDERS 17103/17104✅ Direct equivalent (Gas-specific fields: Abrechnungsbrennwert, Zustandszahl)
PARTIN Strom — 37000–37006PARTIN Gas — 37008–37014✅ Direct equivalent — separate PID ranges for separate partner data schemas
IFTSTA 21039 (Sperrung Vollzug)IFTSTA 21039 (Gas Sperrung Vollzug)✅ Same PID, routed by Sparte

Key Gas-only processes (no GPKE equivalent):

GeLi Gas ProcessReason
MSCONS 13007 (Gasbeschaffenheit: Brennwert, Zustandszahl)Gas physical properties required for billing conversion (m³ → kWh_Hs per DVGW G 685); no Strom analogue
INVOIC 31011 (AWH Sperrprozesse)Gas Sperrung involves separate gMSB layer; GNB bills LF for AWH. Strom Sperrung costs are handled via INVOIC 31001/31002
GaBi Gas ALOCAT/NOMINT/NOMRES (DVGW)Gas balancing and transport nomination — no Strom equivalent (Strom uses redispatch and BKV processes)
Datenabruf 17103/17104 (Brennwert/Zustandszahl)Gas-specific physical data required for settlement

WiM Gas — Messstellenbetrieb Gas

Regulatory basis: AWH WiM Gas 2.0 (BDEW/VKU/GEODE/FNBGas, gültig ab 01.10.2026). Gas has no BNetzA-Festlegung for the Messwesen — BK7-24-01-009 is GeLi Gas 3.0 and governs the Lieferantenwechsel, not the Messstellenbetrieb.

One engine, two Sparten. AWH WiM Gas 2.0 restates WiM Strom Teil 1 use-case for use-case with the same Fristen, so mako-wim runs both. Only the UTILMD PID namespace splits; ORDERS, ORDRSP, REQOTE, QUOTES, IFTSTA and INSRPT are Sparte-neutral AHBs carrying both, and the Sparte comes from the recipient MP-ID.

StromGas
Antwort-Codeliste (DE 1131 / DE 1082)S_00xxG_00xx
Zuordnungszeitpunkt00:00 Uhr06:00 Uhr (Gastag)
APERAKpositiv und negativ, 45 min für UTILMD/ORDERSnur negativ; nächster WT 12:00, bzw. 3 WT auf einem Initialprozess
Antwortfristen3 / 5 / 7 / 1 WTidentisch
ProcessInitiator → ResponderUTILMD PIDFristEBDStatus
Kündigung MSB GasMSBN → MSBA44039 → 44040/440413 WTE_2000
Anmeldung MSB Gas (Beginn Messstellenbetrieb)MSBN → NB44042 → 44043/440445 WTE_2002
Ende MSB GasMSBA → NB44051 → 44052/440537 WTE_2005
Verpflichtungsanfrage gMSBNB → gMSB44168 → 44169 ¹1 WTE_2006
Ende MSB von NB (Stilllegung)NB → MSB44183— (Information)
Mitteilung über GesamtvorgangMSBN ↔ NBIFTSTA 21009/21010 → 21011/21012, 2101310./11. WT · 1 WTE_2003
Weiterverpflichtung des MSBNB → MSBAORDERS 17002 → ORDRSP 19003/190041 WTE_2004
GeräteübernahmeMSBN → MSBAREQOTE 35001 → QUOTES 15001 → ORDERS 17001 → ORDRSP 19001/190024 / 3 / 2 WTE_2011
GerätewechselMSBN → MSBAORDERS 17009 → ORDRSP 19015/19016; IFTSTA 21036 Zeitpunkt des Geräteausbaus2 WT vor dem WechselterminE_2007
Stornierung ²orig. → orig.UTILMD G 44022–44024G_0003/G_0004

¹ 44170 does not exist. PID-Übersicht 4.0 publishes the Gas Verpflichtungsanfrage as 44168 → 44169 and no Ablehnungs-PID. E_2006 still publishes the Ablehnungs-Codeliste G_0071, so a refusal has a code and no carrier; the process escalates rather than emitting a PID the market rejects.

² PIDs 44022–44024 are multi-domain per BDEW PID overview: GeLi Gas Lieferbeginn/-ende and the WiM Gas Kündigung Messstellenbetrieb. One workflow owns them, keyed on which side of the exchange the deployment is on — see GeLi Gas Stornierung.

WiM Gas Abrechnung

Two different Abrechnungen, not a Sparte pair. INVOIC 31009 bills the Messstellenbetrieb to the NB, LF or ESA and is Strom-only. INVOIC 31003 bills the Dienstleistungen between the abgebender and the aufnehmender MSB — and exists in both Sparten (WiM Strom Teil 1 Kap. 3.7, AWH WiM Gas 2.0 Kap. 4.7). No WiM-Rechnung ever addresses a Gas-Lieferant: AWH WiM Gas 2.0 has no „Rechnungsabwicklung über den LF".

MessageSender → EmpfängerPIDContentFristCrate
WiM Gas RechnungMSBA → NB · MSBA → MSBNINVOIC 31003Fortführung Messstellenbetrieb, Geräteübernahme, Zwischen-/Kontrollablesung20 WT nach Durchführung; Zahlungsziel ≥ 10 WTmako-wim wim-invoic
Stornorechnung (universal)Rechnungssteller → RechnungsempfängerINVOIC 31004Sparte-neutral Storno of any INVOIC (INVOIC AHB §3.1.2); checked by invoic-checker check_stornoZahlungsziel (DTM+265)mako-wim wim-invoic
ZahlungsavisNB → MSBA · MSBN → MSBAREMADV 33001/33002Payment confirmation/rejectionzum Zahlungszielmako-wim wim-invoic
Ablehnung ZahlungsavisMSBA → NBCOMDIS 29001Invoicer disputes the REMADVmako-wim wim-invoic

Die Gas-Ablehnung wählt ihren Entscheidungsbaum danach, wer wessen Rechnung ablehnt — nicht nach der PID: E_2014 (NB, Marktlokation) · E_2015 (MSBN) · E_2016 (NB, nur Messlokation) für die Rechnung, E_2018/E_2019 für den Storno. mako_wim::gas_ablehnungs_ebd löst es auf. Alle fünf veröffentlichen ausschließlich Ablehnungscodes: das Zahlungsavis 33001 trägt kein AJT, und E_2017 hat keinen Baum, „da keine Antwort gegeben wird".

WiM Gas — INSRPT Störungsmeldungen

Workflow: wim-insrpt — the same workflow as Strom, with the Gas Fristen.

Gas states one flat number per Prozessschritt because it has no iMS rollout obligation to branch on: 3 WT for the Antwort and 7 WT for die Mitteilung Ergebnis (AWH WiM Gas 2.0 Kap. 4.3.2 Nr. 2/4).

PIDProcessSender → EmpfängerSparte
23001StörungsmeldungLF/NB → MSBbeide
23003Ablehnung der StörungsmeldungMSB → Melderbeide
23004Bestätigung der StörungsmeldungMSB → Melderbeide
23005Informationsmeldung über die Störung an den NBMSB → NBGas
23008Mitteilung ErgebnisMSB → Melderbeide
23009Informationsmeldung über die Behebung an den NBMSB → NBGas

GaBi Gas — Kapazitätsabrechnung Gas

Regulatory basis: BK7 (Kapazitätsabrechnung Gas / AWH Sperrprozesse Gas) + DVGW G685/G2000

Implementation status: BK7 billing (INVOIC 31007/31008/31010), the DVGW nomination cycle (NOMINT/NOMRES) and allocation (ALOCAT) are implemented. The remaining DVGW transport formats — SCHEDL, IMBNOT, TRANOT, DELORD/DELRES, SSQNOT, CHACAP, NUEVOR, SLPASP, TSIMSG — are not parsed and have no workflow.

Crate layering: dvgw-edi is the format library (parses NOMINT, NOMRES and ALOCAT) — analogous to edi-energy for EDI@Energy messages. mako-gabi-gas is the process layer built on top of it, handling both DVGW transport workflows (nominations, allocations) and BK7 billing (INVOIC 31010) — analogous to mako-gpke sitting on top of edi-energy.

Gas balancing process flow

sequenceDiagram
    autonumber
    participant BKV as BKV
    participant FNB as FNB / MGV
    participant VNB as VNB

    Note over BKV,FNB: D-1 (deadline 13:00 CET per KoV §3.2)
    BKV->>FNB: NOMINT 70030-70034
    FNB-->>BKV: NOMRES 70035-70039

    Note over BKV,FNB: Day D intraday
    BKV->>FNB: DELORD (format not parsed)
    FNB-->>BKV: DELRES (format not parsed)
    FNB->>BKV: SCHEDL (format not parsed)

    Note over FNB,BKV: After day D (KoV §6.4)
    FNB->>BKV: ALOCAT 70013-70020 (Initial)
    FNB->>BKV: ALOCAT 70013-70020 (Correction 1..n)
    FNB->>BKV: ALOCAT 70013-70020 (Final — binding)
    FNB->>BKV: IMBNOT (format not parsed)

    Note over VNB,FNB: Sub-daily
    VNB->>FNB: ALOCAT 70011-70012
    FNB->>BKV: TRANOT (format not parsed)

The Prüfidentifikatoren are the codes DVGW publishes in SG1 RFF+Z13. Steps marked format not parsed are part of the KoV process but not of dvgw-edi's coverage, so makod neither routes nor answers them.

Domain model

mako-gabi-gas provides a gas-specific domain vocabulary in src/domain.rs and src/portfolio.rs. All energy quantities use Decimal — no float arithmetic.

TypeDescriptionKey method
GasDayTyped gas market day. Starts 06:00 CET (DST-aware).start_utc(), duration_hours() (23/24/25), nomination_deadline_utc()
GasBeschaffenheitBrennwert Hs/Hu + Zustandszahl. DVGW G 685/G 260.to_kwh_hs(m3) = m³ × Hs × Z, rounded to 3 dp
GasQuantityGas energy in kWh_Hs with optional m³ context.from_m3(vol, beschaffenheit), from_kwh(kwh)
NominationQuantitySubmitted / accepted / curtailed breakdown.accept_partial(kwh, reason), is_curtailed()
AllocationVersionInitial / Correction(n) / Final per KoV §6.4.is_revision()
GasMarketRoleTyped BKV/FNB/VNB/MGV/LF/Händler classification.submits_nominations(), has_imbalance_obligation()
GasImbalanceSaldoNomination − allocation imbalance.direction() → Mehr / Minder / Balanced
GasPortfolioBalanceBKV portfolio across all Bilanzkreise.net_imbalance_kwh(), open_imbalance_count()

DVGW transport processes (see DVGW — Gas Transport for the full PID/message table):

ProcessRolesFormatWorkflowCrate
Nomination / RenominationBKV → FNB/MGVNOMINT / NOMRESgabi-gas-nominationmako-gabi-gas
Allocation (Initial/Correction/Final)FNB/MGV/VNB → BKVALOCATgabi-gas-allocationmako-gabi-gas

BK7 billing processes:

ProcessSender → EmpfängerINVOIC PIDContentCrate
KapazitätsrechnungGNB → KN (Kapazitätsnutzer)INVOIC 31010Kapazitätsabrechnung Gasmako-gabi-gas

PID 31011 (Rechnung sonstige Leistung / AWH Sperrprozesse Gas, NB → LF) belongs to mako-geli-gas (BK7-24-01-009), not GaBi Gas. See Gas Abrechnung — Billing Scope.


PARTIN — Stammdaten Marktpartner

PARTIN messages carry trading-partner master data (GLN, AS4 endpoint, email). They are not part of any process saga — they update the durable PartnerStore directly on receipt.

Inbound PARTIN auto-upsert: Any PARTIN message with a PID in the 37000–37014 range is automatically parsed and merged into the partner store. No ERP webhook is triggered. A more recent valid_from always wins; a config-bootstrapped record (no valid_from) is overwritten by inbound PARTIN data.

PID rangeDescriptionCommodityCrate
37000–37006LF, NB, MSB, BKV, BIKO, ÜNB, ESA KommunikationsdatenStrommako-gpke gpke-partin
37008–37014LF, GNB, gMSB, MGV, ÜNB, spartenübergreifend Kommunikationsdaten GasGasmako-geli-gas geli-gas-partin

COM segment qualifier for AS4:

The AS4 endpoint URL is carried in the COM segment with qualifier "AK" (PARTIN AHB 1.0f, DE 3155). The PartnerStore stores this as CommunicationChannel { qualifier: "AK", address: "<URL>" }.

REST admin endpoints (see also makod Operator Guide):

MethodPathDescription
GET/admin/partnersList all trading-partner records
GET/admin/partners/{mp_id}Retrieve a single partner record
PUT/admin/partners/{mp_id}Create or update a partner record
DELETE/admin/partners/{mp_id}Remove a partner record
POST/admin/partners/importBulk-import from a raw PARTIN interchange

Redispatch 2.0

Regulatory basis: §§ 13, 13a, 14 EnWG; BNetzA Beschlüsse BK6-20-059, BK6-20-060, BK6-20-061 (see Redispatch 2.0 for the per-ruling deadline table)

Redispatch 2.0 uses XML-based messages (not EDIFACT) alongside IFTSTA status messages. redispatch-xml parses/validates the nine document types, mako-redispatch runs the eight event-sourced workflows, and makod's AS4 ingest joins the two (XML sniff → parse → document_kind → workflow, with the 5-min/6h/24h deadlines registered at spawn).

ProcessRolesFormatIFTSTA PIDWorkflow
AktivierungsauftragNB → BTRActivationDocument (XML)IFTSTA 21037/21038redispatch-aktivierung
StammdatenBTR → NBStammdaten (XML)redispatch-stammdaten
PlanungsdatenNB → NBPlannedResourceScheduleDocument (XML)redispatch-planungsdaten
NichtbeanspruchbarkeitBTR → NBUnavailability_MarketDocument (XML)redispatch-verfuegbarkeit
NetzengpassNB ↔ NBNetworkConstraintDocument (XML)redispatch-netzengpass
KaskadeNB → NBKaskade (XML)redispatch-kaskade
StatusanfragebidirectionalStatusRequest_MarketDocument (XML)redispatch-statusanfrage
KostenblattVNB → ÜNBKostenblatt (XML)redispatch-kostenblatt

Message flow — Redispatch Aktivierung:

sequenceDiagram
    participant NB  as Netzbetreiber (NB)
    participant BTR as Betreiber techn. Ressource (BTR)

    NB->>BTR:  ActivationDocument (XML) — Redispatch-Auftrag
    BTR-->>NB: IFTSTA 21038 (Ansicht BTR — Annahme/Ablehnung)
    NB-->>BTR: IFTSTA 21037 (Ansicht NB — Bestätigung)

DVGW — Gas Transport

DVGW EDIFACT messages carry gas transport nominations and allocations between network operators (NB/FNB/VNB), market area managers (MGV) and balance responsible parties (BKV).

They are identified by BGM DE 1001, not by UNH. Every DVGW format is a subset of a UN/EDIFACT D.07A message, so UNH names the carrier (ORDERS or ORDRSP) and the document-name code names the message. The Prüfidentifikator is published and on the wire, in SG1 RFF+Z13, from the range 70000–79999.

Crate layering. dvgw-edi is the format library — it parses, validates and writes DVGW EDIFACT messages, analogous to edi-energy for EDI@Energy. mako-gabi-gas is the process layer on top of it, implementing GaBi Gas workflows (both DVGW transport and BK7 billing) — analogous to mako-gpke on top of edi-energy. See GaBi Gas — Kapazitätsabrechnung Gas for the full process table.

See DVGW EDI for the regulatory basis and parsing architecture, and the PID Reference for the full Anwendungsfall table.

PIDsMessageDirectionWorkflow
70001–70010ALOCATNB → MGVgabi-gas-allocation
70011–70012ALOCATENB/ANB → NBgabi-gas-allocation
70013–70020ALOCATMGV → BKVgabi-gas-allocation
70021, 70023ALOCATMGV → NBgabi-gas-allocation
70022ALOCATNB → BKVgabi-gas-allocation
70030–70034NOMINTTransportkunde → NB/MGVgabi-gas-nomination
70035–70039NOMRESNB/MGV → Transportkundegabi-gas-nomination

SCHEDL, IMBNOT, TRANOT, DELORD/DELRES, SSQNOT, CHACAP, NUEVOR, SLPASP and TSIMSG are not implemented: dvgw-edi does not parse them, so they have no workflow and no Prüfidentifikator here.


Cross-Process Notes

APERAK — Universal acknowledgement

Every EDIFACT message exchange has an APERAK acknowledgement layer. The sender expects an APERAK within the applicable Frist. An APERAK can carry:

  • Acceptance (Z01) — message syntactically and semantically valid
  • Functional rejection (Z04) — AHB rule violation
  • Technical rejection (Z07) — message could not be processed

The APERAK does not signal process acceptance/rejection — that is done by the substantive response (e.g. UTILMD 55002/55003). APERAK is purely the technical receipt acknowledgement.

CONTRL — Syntactic Transport Acknowledgement

CONTRL is distinct from APERAK. It operates at the transport/interchange level (between AS4 Message Service Handlers) and confirms that the EDIFACT interchange was syntactically parseable. CONTRL is exchanged automatically by the AS4 MSH and is never exposed to the workflow layer.

LevelMessageScopeWho handles it
TransportCONTRLInterchange syntaxAS4 MSH (mako-as4)
ApplicationAPERAKFunctional / AHB rulesDomain workflow (mako-gpke, etc.)

Implementors must not confuse a CONTRL acknowledgement with APERAK compliance: a CONTRL-accepted message may still be rejected by an APERAK with code Z04.

ERP Integration

All process events are forwarded to the ERP system via outbound webhooks. The INVOIC/REMADV/COMDIS messages in particular drive downstream accounting workflows. See ERP Integration Guide for the full webhook payload schema and retry semantics.

Shared PID numbers across commodities

The BDEW ORDERS/ORDRSP AHB reuses some PID numbers across both Strom and Gas because the underlying message structure is identical — only the commodity context differs. No cross-commodity coupling exists in the code. Each crate registers only the PIDs it owns; a Strom-only instance never loads any Gas crate and vice versa.

PIDStrom usageGas usageRouting
17115 (Sperrauftrag)Inbound NB receives from LF (mako-gpke gpke-sperrung)Outbound LF→GNB (geli-gas-sperrung-lf) · Inbound GNB receives from LF (geli-gas-sperrung-nb)Commodity + DeploymentRoles
17117 (Entsperrauftrag)Inbound NB receives from LF (mako-gpke gpke-sperrung)Outbound LF→GNB (geli-gas-sperrung-lf) · Inbound GNB receives from LF (geli-gas-sperrung-nb)Commodity + DeploymentRoles
17116 (Anfrage Sperrung)NB→MSB outbox (mako-gpke gpke-sperrung) · Inbound MSB→NB response via 19118/19119GNB→gMSB outbox (geli-gas-sperrung-nb) · Inbound gMSB→GNB response via 19118/19119Commodity
19118 (Best. Anfrage Sperr.)Inbound NB receives from MSB (mako-gpke gpke-sperrung)Inbound GNB receives from gMSB (geli-gas-sperrung-nb)Commodity + DeploymentRoles
19119 (Abl. Anfrage Sperr.)Inbound NB receives from MSB (mako-gpke gpke-sperrung)Inbound GNB receives from gMSB (geli-gas-sperrung-nb)Commodity + DeploymentRoles
19116 (Bestätigung Sperrung)Inbound LF receives from NB (mako-gpke)Inbound LF receives from GNB (mako-geli-gas)DeploymentRoles / Marktrolle
19117 (Ablehnung Sperrung)Inbound LF receives from NB (mako-gpke)Inbound LF receives from GNB (mako-geli-gas)DeploymentRoles / Marktrolle
19128/19129 (Storno ORDRSP)mako-gpkemako-geli-gasDeploymentRoles / Marktrolle
19001/19002 (ORDRSP Bestätigung/Ablehnung)mako-gpke (NB-role only) + mako-wimmako-wim (same workflow)ORDERS correlation ID; the Sparte picks E_0247 vs E_2011
23001–23012 (INSRPT)mako-wim wim-insrptmako-wim wim-insrptone workflow; the Sparte picks the Frist

Inbound disambiguation: When the same PID is registered by two crates in a combined Strom+Gas instance, PidRouter dispatches using:

  • ORDERS/ORDRSP Sperrung (17115, 17117, 19116–19129): by DeploymentRoles / Marktrolle (EIC prefix).
  • WiM (INSRPT, ORDERS/ORDRSP, IFTSTA): no disambiguation needed — one workflow serves both Sparten and takes the Sparte as an argument, resolved from the recipient MP-ID.

In commodity-separated instances (separate makod per Sparte), no disambiguation is needed — only one crate registers the PID.

Format versions and process transitions

A process started under an older format version continues under those AHB rules until it completes, even after a cutover (e.g. the FV2026-10-01 cutover on 2026-10-01). Multiple format versions coexist simultaneously in the same engine instance. WorkflowVersionPolicy::ForwardCompatible is the mandatory default for all MaKo workflows. See Schema Versioning for details.

Edit this page ↗