Process Catalog

Every German market communication process mako implements — GPKE, WiM, MaBiS, GeLi Gas, GaBi Gas and PARTIN — with its roles, messages and deadlines.

On this page 13 sections

The business-level companion to the PID Reference: related messages grouped into end-to-end processes, the unit of implementation in the mako-* domain crates. Terms are defined in the reference vocabulary.

Deployment scope. A makod build loads the domain modules its Marktrolle features enable (makod::startup::production_modules): a Strom deployment runs mako-gpke, mako-wim, mako-mabis, mako-emob and mako-redispatch; a Gas deployment mako-geli-gas, mako-wim and mako-gabi-gas. mako-wim covers WiM in both Sparten. Separate instances per Sparte and one combined instance are both supported.

Profiles are per message and fv-dated, and several format versions run in one instance — see Release Lifecycle.

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 only; the business Antwortfrist is a separate clock (WiM MSB-Wechsel: 3 / 5 / 7 / 1 Werktage per PID). Saturdays, Sundays and public holidays are not Werktage; 24.12. and 31.12. count as holidays. Deadline arithmetic runs in German local time (CET/CEST).


Process Overview

„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 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 MaLo⚡mako-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 LF⚡mako-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 LF⚡mako-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 Datenabruf⚡mako-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 Strom⚡mako-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 UTILTS⚡mako-gpke gpke-utiltsUTILTS 25001/25004–25010nicht quantifiziertBK6-24-174
GPKE Konfiguration⚡mako-gpke gpke-konfigurationORDERS 17134/17135 → ORDRSP 19001/19002nicht quantifiziertBK6-24-174 Teil 3
GPKE Konfiguration Änderung⚡mako-gpke gpke-konfiguration-aenderungORDERS/ORDRSP config changesnicht quantifiziertBK6-24-174 Teil 3
GPKE Beendigung der Zuordnung⚡mako-gpke gpke-beendigung-zuordnungUTILMD 55010 → 55011/5501209:00 Uhr des 1. WT nach dem ÜT (E_0624)BK6-24-174 Teil 2
GPKE Kündigung⚡mako-gpke gpke-kuendigungUTILMD 55016 → 55017/55018Ablauf des 1. WT nach dem ÜTBK6-24-174 Teil 2
GPKE Stornierung⚡mako-gpke gpke-stornierungUTILMD 55022 → 55023/55024— keine Festlegung nennt ein AntwortfensterGPKE Teil 4 Kap. 5
GPKE Stammdatenänderung⚡mako-gpke gpke-stammdatenaenderungUTILMD 55615–55694, 55109/55110 → 551372 WT Rückmeldung · 10 WT BestellungBK6-24-174 Teil 4
GPKE Abrechnungsdaten⚡mako-gpke gpke-abrechnungsdatenUTILMD 55156/55220/55673 → IFTSTA 210472 WTBK6-24-174 Teil 2 § 3.1
GPKE Zuordnungs-Meldungen⚡mako-gpke gpke-zuordnungsmeldungUTILMD 55036/55037/55038— Meldepflicht, keine Antwortnachricht (Sendefrist in mako_fristen::meldung)BK6-24-174 Teil 2
PARTIN Strom Kommunikationsdaten⚡mako-gpke gpke-partinPARTIN 37000–37006—PARTIN 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-24-174 · 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 · Gerätewechseltermin frühestens am 4. WT, Antwort 2 WT davorBK6-24-174 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-24-174 Kap. 3.6.3.8 / 3.7 / 6
WiM Rechnungsabwicklung MSB über LF⚡mako-wim wim-rechnungsabwicklungREQOTE 35002 → QUOTES 15002 · ORDERS 17005/17006 · ORDRSP 19009/190105 WT Angebot · 8 WT Antwort/BeendigungBK6-24-174 Kap. 3.6.3.4–3.6.3.7
WiM Stammdaten⚡🔥mako-wim wim-stammdatenUTILMD Stammdaten beider Spartenper PID, mako_fristen::antwortBK6-24-174 · AWH WiM Gas 2.0
WiM Weiterverpflichtung⚡🔥mako-wim wim-weiterverpflichtungORDERS 17002 → ORDRSP 19003/190041 WT (MSBA antwortet)BK6-24-174
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-24-174 Anlage 2b Kap. 1.2
MaBiS Bilanzkreisabrechnung⚡mako-mabis mabis-billingMSCONS 13003; IFTSTA 21000–21005keine veröffentlicht — das Clearingfenster der Kap. 3.10 Tabelle 2 begrenzt sieBK6-24-174 Anlage 3
MaBiS Clearingliste⚡mako-mabis mabis-clearinglisteUTILMD 55065/55069/55070—BK6-24-174
MaBiS-ZP Lifecycle⚡mako-mabis mabis-zp-lifecycleUTILMD 55062–55064, 55071/55072, 55197–55200, 55203–55214—BK6-24-174
MaBiS Anforderungen⚡mako-mabis mabis-anforderungORDERS 17201–17208—BK6-24-174
MaBiS Listenabgleich⚡mako-mabis mabis-listenabgleichUTILMD 55065/55066, 55195/55196, 55201/55202, 55223/55224—BK6-24-174
MaBiS Profile⚡mako-mabis mabis-profileMSCONS Profilübermittlung— die 10/12-WT-Lieferfristen sind die des NB (Kap. 6.5.3); dies ist die EmpfangsseiteBK6-24-174 Anlage 3
GeLi Gas Lieferantenwechsel🔥mako-geli-gas geli-gas-supplier-changeUTILMD G 44001–44021Ablauf des 4. WT (44001) · 3. WT (44004/44007/44010/44016) · 2. WT (44013)BK7-24-01-009 Kap. 3.1–3.3
GeLi Gas Lieferbeginn (LF-Sicht)🔥mako-geli-gas geli-gas-lf-anmeldungUTILMD G 44001 (out) · 44002/44003 (in)Ablauf des 4. WT (der GNB antwortet)BK7-24-01-009 Kap. 3.2.3
GeLi Gas Stornierung (GNB-Sicht)🔥mako-geli-gas geli-gas-stornierungUTILMD G 44022 (Nb-only inbound)— keine Festlegung quantifiziert sie; BetreiberkonventionGeLi Gas 2.0 Kap. 1.8
GeLi Gas Stornierung (LF-Sicht)🔥mako-geli-gas geli-gas-stornierung-lfUTILMD G 44023/44024 (Lf-only inbound)— (der GNB antwortet)GeLi Gas 2.0 Kap. 1.8
GeLi Gas Sperrung (LF-Sicht)🔥mako-geli-gas geli-gas-sperrung-lfORDERS 17115/17117 · ORDCHG 390001 WT (Sparte-neutrale 17115/17117-Zeile)BK6-24-174 GPKE Teil 2 § 3.5
GeLi Gas Sperrung (GNB-Sicht)🔥mako-geli-gas geli-gas-sperrung-nbORDERS 17115–17117 · ORDCHG 39000/39001 · ORDRSP 19118/191191 WT (17115/17117/39000) · 3 WT (17116)BK6-24-174 GPKE Teil 2 § 3.5
GeLi Gas AWH-Abrechnung🔥mako-geli-gas geli-gas-sperrprozesse-invoicINVOIC 31011—BK7-24-01-009
GeLi Gas Messdaten (MSCONS)🔥mako-geli-gas geli-gas-msconsMSCONS 13002/13007/13008/13009—BK7-24-01-009
GeLi Gas Datenabruf🔥mako-geli-gas geli-gas-datenabrufORDERS 17103/17104 → ORDRSP 19103/1910410 WT — hier ist die Zehn echt (AWH § 5.12), nicht die VorlauffristAWH GeLi Gas § 5.12
GeLi Gas Stammdatenänderung🔥mako-geli-gas geli-gas-stammdatenaenderungUTILMD G 44109–44182Ablauf des 10. WT — hier echt: Gas gibt eine Zustimmung/Ablehnung, Strom nur QualitätsrückmeldungAWH GeLi Gas § 4.3.2
GeLi Gas Zuordnungs-Meldungen🔥mako-geli-gas geli-gas-zuordnungsmeldungUTILMD G 44036/44037/44038— Meldepflicht, keine AntwortnachrichtAWH GeLi Gas
PARTIN Gas Kommunikationsdaten🔥mako-geli-gas geli-gas-partinPARTIN 37008–37014—PARTIN 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 23001–23009 (23005/23009 beide Sparten; Gas an den NB)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/31010—BK7-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–70023—DVGW ALOCAT 5.11a
GaBi Gas NOMINT/NOMRES🔥mako-gabi-gas gabi-gas-nominationPIDs 70030–70039—DVGW NOMINT 4.6 / NOMRES 4.7
GaBi Gas SSQNOT🔥mako-gabi-gas gabi-gas-mehr-mindermengenPIDs 70095–70096—DVGW SSQNOT 5.7
NZR-EMob / Modell 2⚡mako-emob emob-anmeldung · emob-zuordnungsende · emob-abmeldungUTILMD 55238/55239 · 55240/55241 · 55242/55243Ablauf des 7. WT (55238) · 3. WT (55240/55242)BK6-20-160 Anlage 6 · BK6-24-267
Redispatch 2.0⚡mako-redispatchIFTSTA 21037/21038; XML documents3-min ACK; the rest operator-setBK6-23-241 · BK6-20-059 TZ 2

Zehn Werktage ist bei GeLi Gas meist die Vorlauffrist des Lieferanten („Mindestens 10 Werktage vor Aufnahme der Belieferung", GeLi Gas 3.0 Kap. 3.2.3), nicht das Antwortfenster des Netzbetreibers (4 / 3 / 2 WT). Echte Zehn-WT-Antwortfenster sind der Datenabruf (AWH § 5.12) und die Stammdatenänderung Gas (AWH § 4.3.2).


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. NZR-EMob — Modell 2
  9. Redispatch 2.0
  10. 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 für UTILMD und ORDERS; Samstagseingang bis Sonntag 12:00; sonst nächster Werktag 12:00 (APERAK AHB 1.1 § 2.4.1).


Lieferantenwechsel Strom

The incoming supplier (LFN) registers with the NB and separately terminates the outgoing supplier's (LFA) contract (GPKE Teil 2).

Every answer window is a clock time on the first Werktag after the ÜT, never a duration. The 24 hours of § 20a EnWG bind the switch as a whole; GPKE Teil 1 Kap. 7 („Fristenberechnung") defines no 24-hour message Frist.

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; the answer comes from E_0623, whose Prüfschritte 20–50 read the LFA's answer to the 55010, so Nr. 5 or Nr. 6 waits for that answer or its 09:00 window. 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 A50 — A57 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. WT — E_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 steps above carry no Bestätigung, so a missing one raises no timeout, dead letter or alert.

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 sends the Information with the Anfrage of Nr. 3 (they share a condition), inside its 07:00 window, and the Beendigung with the Bestätigung. The Aufhebung is an operator command. mako_fristen::meldung is tested 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 55557——mako-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 ✅

Message flow — Lieferantenwechsel Strom (LF-AN):

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

    LFN->>LFA: UTILMD 55016 (Kündigung)
    LFA-->>LFN: UTILMD 55017 (Bestätigung) oder 55018 (Ablehnung)

    LFN->>NB:  UTILMD 55001 (Anmeldung verb. MaLo)
    opt MaLo zum Zuordnungsbeginn bereits zugeordnet
        NB->>LFN:  UTILMD 55036 (Information über existierende Zuordnung)
        NB->>LFA:  UTILMD 55010 (Anfrage zur Beendigung der Zuordnung)
        LFA-->>NB: UTILMD 55011 / 55012 — bis 09:00 Uhr des 1. WT
    end
    alt Bestätigung
        NB-->>LFN: UTILMD 55002 (Bestätigung Anmeldung)
        NB->>LFA:  UTILMD 55037 (Beendigung der Zuordnung)
    else Ablehnung
        NB-->>LFN: UTILMD 55003 (Ablehnung Anmeldung)
    end

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/ÜNB—IFTSTA 21039—mako-gpke ✅
Info EntsperrauftragNB → MSB—IFTSTA 21040——
Stornierung SperrauftragLF → NBORDCHG 39000ORDRSP 19128ORDRSP 19129mako-gpke ✅
Weiterleitung StornierungNB → MSBORDCHG 39001——mako-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 from the NB to the LF. The APERAK is due by the next Werktag 12:00 (APERAK AHB 1.1 § 2.4.1 — the 45 minutes are UTILMD/ORDERS only); 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 §15; Sparte in message content)⚡netzbilanzd ✅
MMM-RechnungNB → LFINVOIC 31005Mehr-/Mindermengensaldo Strom + Gas⚡netzbilanzd ✅
MMM Mehrmenge selbst ausgestelltNB+LF same entityINVOIC 31006Mehr-/Mindermenge als Lieferung, selbst ausgestellt⚡netzbilanzd ✅
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, routed to mako-wim wim-invoic⚡mako-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

The NB distributes Berechnungsformeln and Zählzeitdefinitionen to the connected suppliers, who store them for billing and pass them to the ERP.

§42b EnWG — GGV allocation formulas (CCI+ZG6): UTILTS 25001 also carries the Gemeinschaftliche Gebäudeversorgung allocation fractions (§42b Abs. 5 EnWG); CCI+ZG6 (Aufteilungsfaktor Energiemenge) carries the fraction per tenant MaLo. edmd evaluates such a formula as a FORMULA virtual meter (metering::allocation::formula::Formula, the UTILTS step graph with its Z69/Z70/Z80–Z83 operators and Z16/ZB2/ZG6 factors) and a community as COMMUNITY_SHARE rules (metering::allocation::community::allocate) — 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.1 § 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)

Vollzugsmeldungen, Konfigurationsänderung responses and EnFG status notifications, routed to the mako-gpke workflow they correlate with.

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.

17134/17135/17121/17128–17131 are GPKE, not WiM: GPKE Teil 3/4 obliges the NB to configure the MSB after a Lieferbeginn; WiM Teil 1 governs which company runs the Messstellenbetrieb.


WiM — Messstellenbetrieb

Regulatory basis: BK6-24-174, 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-24-174 WiM Strom Teil 1 Kap. 2.2.2 Nr. 2 / 2.3.2 Nr. 2 / 2.4.2 Nr. 2 / 2.4.2 Nr. 4; AWH WiM Gas 2.0 Kap. 4.1–4.4); mako_fristen::antwort is the single source.

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 17011—mako-wim ✅
Stammdaten Messlokation (Strom)LF/MSB → NBORDERS 17132—mako-wim ✅
Geräteübernahme BestellungMSBN → MSBAORDERS 17001/17002ORDRSPmako-wim ✅

WiM-Abrechnung

ProcessSender → EmpfängerINVOIC PIDContentCrate
MSB-RechnungMSB → NB / LF / ESAINVOIC 31009Messstellenbetrieb, routed to 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-24-174 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 / LF—IFTSTA 21027 / 21025E_0286mako-wim ✅
KonfigurationsänderungMSB → MSB17118ORDRSP 19127—mako-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 Objekt — ZO-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 → ESA—Bindungsfrist—
Bestellung (UC 4.1 Nr. 3)ORDERS 17007ESA → MSBORDRSP 19011/190122 WTE_0256
Wertelieferung (UC 4.2)MSCONS 13027MSB → ESA—per 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 → ESA—unverzü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 A02–A07); 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-steuerungsauftrag — REST-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 (beide Sparten)MSB → MSB (Strom) · MSB → NB (Gas)mako-wim wim-insrpt ✅
23009Informationsmeldung über die Behebung (beide Sparten)MSB → MSB (Strom) · MSB → NB (Gas)mako-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"

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, geroutet an geli-gas-zuordnungsmeldung: 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, gegen den Router geprüft durch services/makod/tests/it/meldepflicht_coverage.rs.

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 44019——mako-geli-gas ✅
Änderungsmeldung zur BestandslisteLF → GNBUTILMD G 4402044021—mako-geli-gas ✅
Stornierung (GNB-side, inbound)LFN/LFA → GNBUTILMD G 44022——mako-geli-gas ✅
Stornierung (LF-side, inbound)GNB → LFN/LFAUTILMD G 44023/44024——mako-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)

In the LF role the LF sends UTILMD G 44001 to the GNB and receives 44002 (Bestätigung) or 44003 (Ablehnung) — the Gas twin of gpke-lf-anmeldung.

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."

Message flow — Lieferbeginn Gas:

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

    LFN->>LFA: UTILMD G 44016 (Kündigung)
    LFA-->>LFN: UTILMD G 44017 (Bestätigung) oder 44018 (Ablehnung)

    LFN->>GNB: UTILMD G 44001 (Anmeldung, LF-Vorlauf 10 WT)
    opt MaLo bereits zugeordnet
        GNB->>LFN: UTILMD G 44036 (Information über existierende Zuordnung)
        GNB->>LFA: UTILMD G 44010 (Abmeldeanfrage)
        LFA-->>GNB: UTILMD G 44011 / 44012
    end
    alt Bestätigung — bis Ablauf des 4. WT
        GNB-->>LFN: UTILMD G 44002 (Bestätigung Anmeldung NN)
        GNB->>LFA:  UTILMD G 44037 (Beendigung der Zuordnung)
    else Ablehnung
        GNB-->>LFN: UTILMD G 44003 (Ablehnung Anmeldung NN)
    end

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_0497 — not in GeLi Gas 3.0, which contains no Sperrprozess at all.

LF-Seite — geli-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-Seite — geli-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 39001——mako-geli-gas geli-gas-sperrung-nb ✅

Same PIDs, different market. ORDERS 17115 and 17117 route to mako-gpke for Strom and mako-geli-gas for Gas, by the Sparte of the interchange recipient's MP-ID and the deployment role.

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 §15, 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.

13013 (Allokationsliste Gas, MMMA) belongs to mako-gabi-gas gabi-gas-mmma and 13014 (bilanzierte Menge) to mako-gpke gpke-allokationsliste; a deployment without those modules dead-letters them.

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 → NB · NB → LFmako-gpke gpke-allokationsliste

Process Symmetry: GPKE ↔ GeLi Gas

GPKE and GeLi Gas share business goals but rest on different Festlegungen, so not every process has a twin.

GPKE Process (Strom)GeLi Gas EquivalentNotes
Lieferantenwechsel (NB-Sicht) — UTILMD 55001–55018Lieferantenwechsel (GNB-Sicht) — UTILMD G 44001–44021✅ Direct equivalent; the Gas LF-Vorlauf is 10 WT
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–17117✅ Same PIDs, different market; routed by commodity
INVOIC NNE Strom — 31002INVOIC 31002 — NNE Gas (NB → LF, GasNEV §15)✅ Same NN-Rechnung PID for both Sparten. netzbilanzd takes billing_type: "nne" with sparte: "GAS" (there is no nne_gas discriminant — an unknown one is a parse error); same calculation as Strom, legal refs switch to GasNEV §15
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/SSQNOT (DVGW)Gas balancing, transport nomination and Netzkonto-Führung — 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–44024—G_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 REMADV—mako-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 → NBbeide (Gas an den NB)
23008Mitteilung ErgebnisMSB → Melderbeide
23009Informationsmeldung über die Behebung an den NBMSB → NBbeide (Gas an den NB)

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), allocation (ALOCAT) and the Mehr-/Mindermengenmeldung (SSQNOT) are implemented. The remaining DVGW transport formats — SCHEDL, IMBNOT, TRANOT, DELORD/DELRES, CHACAP, NUEVOR, SLPASP, TSIMSG — are not parsed and have no workflow.

Crate layering: dvgw-edi is the format library (parses NOMINT, NOMRES, ALOCAT and SSQNOT) — 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 (13:00 CET — the harmonised cycle, not a KoV Frist)
    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 (§§ 46/47 KoV XV)
    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 domain.rs and portfolio.rs. All energy quantities use Decimal — no float arithmetic.

domain.rs — the measured quantities:

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 §§ 46/47 KoV XV.is_revision()
GasImbalanceSaldoNomination − allocation imbalance.direction() → Mehr / Minder / Balanced

portfolio.rs — the BKV's whole position across its Bilanzkreise:

TypeDescriptionKey method
GasMarketRoleWhich role a party plays, and what that role owessubmits_nominations(), receives_allocations(), has_imbalance_obligation()
PortfolioPositionOne Bilanzkreis' nomination against its allocationcompute_imbalance_saldo(bkv_eic), is_balanced()
GasPortfolioBalanceThe positions for one BKV and one gas day, aggregatednet_imbalance_kwh(), portfolio_direction(), conservation_check() → ConservationViolation

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

NZR-EMob — Modell 2

Regulatory basis: BNetzA BK6-20-160 Anlage 6 und BK6-24-267; Prozessbeschreibung AWH „Zum Modell 2" V1.3. Crate: mako-emob (EmobModule).

Modell 2 is the virtual Bilanzierungsgebiet a Ladepunktbetreiber (LPB) runs so that each charging session is booked into the customer's own supplier's Bilanzkreis rather than the site operator's. Moving a Marktlokation into or out of that Bilanzierungsgebiet is what these three processes do.

LegAnfrageAntwortAntwortpflichtigFristEBD
Anmeldung in Modell 2UTILMD 5523855239NB (VNB)Ablauf des 7. WTE_0510 · E_0513
Beendigung der Zuordnung zur MaLoUTILMD 5524055241LFAblauf des 3. WTE_0511
Abmeldung aus Modell 2UTILMD 5524255243NB (VNB)Ablauf des 3. WTE_0512

Two details separate this family from every other UTILMD process:

One Prüfidentifikator carries both outcomes. There is no Bestätigungs-/Ablehnungs-pair — 55239 answers a 55238 whether it agrees or not, and the verdict lives in SG4 STS+E01 DE 9013 with the deciding tree named in DE 1131. The code alone is not readable: A01 is an Ablehnung in E_0510 and a Zustimmung in E_0511 and E_0512, so only the pair (tree, code) means anything.

Silence is not consent. Where a GPKE Beendigung der Zuordnung confirms on an expired window, neither Anlage 6 nor the AWH gives an unanswered Modell-2 leg a default outcome — so the timer escalates instead. Moving a Marktlokation between Bilanzierungsgebieten on no one's say-so is the one thing the model must not do.

A Bestätigung of an Anmeldung must also carry the Zählpunktbezeichnung of the ZP der Netzgangzeitreihe (SG5 LOC+Z15, AHB Bedingung [663]); without it the LPB cannot receive the series it has just won the right to.

The Zuordnung des ZP der NGZ zur NZR (55235–55237) looks adjacent but is MaBiS, not Modell 2, and rides mako-mabis's Zählpunkt lifecycle.


Redispatch 2.0

Regulatory basis: §§ 13, 13a, 14 EnWG; BK6-23-241 (BilAReM), which repealed BK6-20-060/061 and BK6-20-059 TZ 1 (see Redispatch 2.0 for the 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); the 3-minute ACK is sourced, the other windows are operator-set Betreiberfristen.

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 ✅
70095–70096SSQNOTNB → MGVgabi-gas-mehr-mindermengen ✅

SCHEDL, IMBNOT, TRANOT, DELORD/DELRES, CHACAP, NUEVOR, SLPASP and TSIMSG are not parsed by dvgw-edi and have no workflow.


Cross-Process Notes

APERAK — Universal acknowledgement

The APERAK states whether a message could be processed — not whether the process is accepted, which is the substantive answer's job (e.g. UTILMD 55002/55003). Two Anwendungsfälle exist: 29002 Anerkennungsmeldung (BGM+312, Strom only) and 29001 Fehlermeldung (BGM+313, with an ERC error code); Gas sends only the Fehlermeldung (APERAK AHB 1.1 §2.3).

CONTRL — Syntaxprüfung und Empfangsbestätigung

CONTRL reports the syntax check of one Übertragungsdatei, and it is neither the AS4 receipt nor the APERAK. The AS4 eb:Receipt says the bytes arrived; the CONTRL says what the syntax check made of them; the APERAK says whether the message could be processed. Three different statements on three clocks.

LevelMessageScopeWho emits it
AS4 transporteb:Receipt (NRR)The bytes arrivedThe MSH (mako-as4)
Interchange syntaxCONTRLUNB…UNZ parsed, or did notmakod — an outbox message with its own deadline
ApplicationAPERAKVerarbeitbarkeit / AHB rulesDomain workflow (mako-gpke, …)

The two Ausprägungen (CONTRL AHB 1.0 Kap. 2, UCI DE 0083):

CodeWhen
Empfangsbestätigung7Gas only — „In der Sparte Strom wird die CONTRL ausschließlich als Syntaxfehlermeldung eingesetzt" (§2.4)
Syntaxfehlermeldung4 + a DE 0085 codeBoth Sparten, when the Übertragungsdatei does not parse and „wird nicht weiterbearbeitet"

The window is not one number (§2.3.1, §2.4.1):

What arrivedWindow
A Strom UTILMD or ORDERS15 minutes, or 6 hours when it arrived on a Saturday
A GABi-Gas ALOCAT from the NB to the MGV45 minutes
Anything else, either Sparte6 hours

When no CONTRL can be sent. §2.2.2.1: the CONTRL copies its Muss-Datenelemente out of the subject interchange, so a UNB that is itself unreadable makes a conformant CONTRL impossible — „Der Fehler muss dann durch andere Mittel als durch die CONTRL mitgeteilt werden." That interchange is dead-lettered instead. §2.2.2.2 adds the other exception: never a CONTRL in answer to a CONTRL.

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

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 the Sparte of the recipient MP-ID and the DeploymentRoles.
  • 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 keeps the WorkflowId — and format version — it was created with, while the inbound message's own FV picks the adapter. See Format-version coexistence.

Edit this page ↗