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 only mako-geli-gas + mako-wim-gas + mako-gabi-gas. 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-01 (Mitteilung Nr. 54)INVOIC, ORDERS, ORDRSP, ORDCHG, PARTIN, PRICAT, QUOTES, REMADV, REQOTE, UTILTS
fv20261001from 2026-10-01 (Mitteilung Nr. 56)UTILMD (Strom 2.2 / Gas 1.2), MSCONS 3.2, APERAK, COMDIS, IFTSTA

Message types untouched by a release keep their previous profile (e.g. 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:

DomainFrist
GPKE24 Stunden (wall-clock)
WiM Strom5 Werktage
GeLi Gas10 Werktage
WiM Gas10 Werktage

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.

DomainSparteCrateKey PIDsAPERAK FristBasis
GPKE Lieferantenwechsel (NB-Sicht)mako-gpke gpke-supplier-changeUTILMD 55001–55018, 55022–5502424 hBK6-24-174
GPKE Lieferantenwechsel (LF-Sicht)mako-gpke gpke-lf-anmeldungUTILMD 55001/55002/55016/55077 (out) · 55003–55006 (in)24 hBK6-24-174
GPKE Neuanlage MaLomako-gpke gpke-neuanlageUTILMD 55600/55601 → 55602–5560524 hBK6-24-174
GPKE Abmeldung LFmako-gpke gpke-lf-abmeldungUTILMD 55007 → 55008/5500924 hBK6-24-174
GPKE Ankündigung Zuordnung LFmako-gpke gpke-ankuendigung-zuordnung-lfUTILMD 55607 → 55608/5560924 hBK6-24-174
GPKE Sperrung/Entsperrung (NB)mako-gpke gpke-sperrungORDERS 17115/17117 → ORDRSP 19116/1911724 hBK6-22-024
GPKE Sperrung/Entsperrung (LF-Sicht)mako-gpke gpke-sperrung-lfORDERS 17115/17117 (out) · ORDCHG 39000 (out) · ORDRSP 19116/19117 · 19128/19129 · IFTSTA 2103924 hBK6-22-024
GPKE Abrechnung (INVOIC)mako-gpke gpke-abrechnungINVOIC 31001/31002/31005/31006; REMADV; COMDIS24 hBK6-24-174
GPKE Datenabrufmako-gpke gpke-datenabrufORDERS 17004/17102/17113 → ORDRSP rejection24 hBK6-22-024
GPKE Anfrage Bestellung (55555)mako-gpke gpke-anfrage-bestellungUTILMD 5555524 hBK6-22-024
GPKE Allokationsliste Strommako-gpke gpke-allokationslisteORDERS 17110/17114 · ORDRSP 19110/19115 · MSCONS 1301424 hBK6-24-174
GPKE Messwerte (MSCONS)mako-gpke gpke-messwerteMSCONS 13005/13006/13015–13019/13025/1302724 hBK6-24-174
GPKE UTILTSmako-gpke gpke-utiltsUTILTS 25001/25004–2501024 hBK6-24-174
GPKE Konfigurationmako-gpke gpke-konfigurationORDERS 17134/17135 → ORDRSP 19001/1900224 hBK6-22-024
GPKE Konfiguration Änderungmako-gpke gpke-konfiguration-aenderungORDERS/ORDRSP config changes24 hBK6-22-024
PARTIN Strom Kommunikationsdatenmako-gpke gpke-partinPARTIN 37000–37006PARTIN AHB 1.0f
WiM Strom MSB-Wechselmako-wim wim-device-changeUTILMD 55039/55042/55051/55168 (out+in) · 55040/55041 · 55043/55044 · 55052/55053 · 55169/55170 (Antwort)3/5/7/1 WT — see belowBK6-24-174
WiM Strom Geräteübernahmemako-wim wim-geraeteubernahmeORDERS 17001–17011 · ORDRSP 19001/190025 WTBK6-24-174
WiM Strom Abrechnungmako-wim wim-rechnungINVOIC 310095 WTBK6-24-174
WiM Strom INSRPTmako-wim wim-insrptINSRPT 23001/23003/23004/230085 WTBK6-24-174
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
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-gasUTILMD G 44039–44044/44051–44053/44168–4417010 WTBK7-24-01-009
WiM Gas Stornierung🔥mako-wim-gas wim-gas-stornierungUTILMD G 44022–44024 (Msb/Nmsb role)10 WTBK7-24-01-009
WiM Gas INSRPT🔥mako-wim-gas wim-gas-insrptINSRPT 23005/23009 (Gas-only)10 WTBK7-24-01-009
WiM Gas Abrechnung🔥mako-wim-gas wim-gas-invoicINVOIC 31003/31004BK7-24-01-009
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 currently routed via mako-gpke gpke-allokationsliste)BK7-24-01-008
GaBi Gas ALOCAT🔥mako-gabi-gas gabi-gas-allocationSynthetic PIDs 90001–90003DVGW ALOCAT 5.11a
GaBi Gas NOMINT/NOMRES🔥mako-gabi-gas gabi-gas-nominationSynthetic PIDs 90011/90012/90021/90022DVGW NOMINT 4.6 FK
GaBi Gas SCHEDL🔥mako-gabi-gas gabi-gas-schedlSynthetic PIDsDVGW G685/G2000
GaBi Gas IMBNOT🔥mako-gabi-gas gabi-gas-imbnotSynthetic PIDsDVGW IMBNOT 5.7a
GaBi Gas TRANOT🔥mako-gabi-gas gabi-gas-tranotSynthetic PIDsDVGW TRANOT 5.8b
GaBi Gas DELORD/DELRES🔥mako-gabi-gas gabi-gas-delivery-orderSynthetic PIDsDVGW DELORD 4.5 FK
Redispatch 2.0mako-redispatchIFTSTA 21037/21038; XML documentsBK6-20-059/060/061

Table of Contents

  1. GPKE — Kundenbelieferung Elektrizität
  2. WiM Strom — 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) + BK6-22-024 (GPKE Teil 4, Stammdaten und Konfiguration)

APERAK Frist: 24 wall-clock hours from receipt of the triggering message.


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 simultaneously cancels the outgoing supplier's (LFA) contract. Both the NB and LFA must respond within 24 h.

Process timing rules (BK6-22-024 / BK6-24-174):

ScenarioMindestvorlauffristNotes
Lieferbeginn (LFW24, 24h-Wechsel)Tag nach dem nächsten WT nach dem ÜTSpätester ÜT ist der Tag vor dem letzten WT vor dem Zuordnungsbeginn (day-granular, kein Uhrzeit-Cutoff) — BK6-24-174 GPKE Teil 2, SD Lieferbeginn Schritt 1. Seit LFW24 gibt es keine separate „Standardwechsel“-Frist mehr; frühere Anmeldung ist zulässig („unverzüglich nach Vorliegen des Anmeldegrundes“)
Neuanlage MaLokeine MindestfristLieferbeginn = Tag der Fertigstellung
Stornierung Zuordnungbis 24 h vor LieferbeginnNur der ursprüngliche Sender darf stornieren

Einreichungstag rule: UTILMD 55001 (LFN → NB) and UTILMD 55016 (LFN → LFA) must be submitted on the same calendar day. The NB coordinates the transition; the actual LFA disconnection follows automatically at Lieferbeginn-Datum.

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 550015500355004mako-gpke
Lieferende / Abmeldung (LFN → NB)LFN → NBUTILMD 550025500555006mako-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
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; acknowledgement is via APERAK within 24 h.

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 Gas RechnunggMSB → NBINVOIC 31003MSB-Gerätewechsel Gas🔥mako-wim-gas ⚠️
Stornorechnung WiM GasgMSB → NBINVOIC 31004Storno MSB-Rechnung Gas🔥mako-wim-gas ⚠️
MSB-Rechnung StromMSB → LFINVOIC 31009WiM Messstellenbetriebsabrechnungmako-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
Zahlungsavis (Teilzahlung Netznutzung)LF → NBREMADV 33003Partial payment NNAmako-gpke
Zahlungsavis (Teilzahlung MMM)LF → NBREMADV 33004Partial payment MMMmako-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 APERAK within 24 h.

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-24-174). 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 Strom — Messstellenbetrieb

Regulatory basis: BK6-24-174 (Beschluss 24.10.2024, gültig ab 06.06.2025)

APERAK Frist: 5 Werktage (Samstag zählt nicht)

WiM regulates the competitive metering point market. The key processes from the LF perspective are: MSB-Wechsel (when the customer switches their metering service provider) and receiving WiM-Rechnungen for metering services.

MSB-Wechsel Strom

ProcessInitiator → ResponderUTILMD PIDAntwort OKAntwort NGFristCrate
Kündigung MSB (neuer MSB initiiert)MSBN → MSBA5503955040550413 WTmako-wim
Anmeldung MSB beim NBMSBN → NB5504255043550445 WTmako-wim
Ende MSB (alter MSB → NB)MSBA → NB5505155052550537 WTmako-wim
Verpflichtungsanfrage / AufforderungNB → gMSB5516855169551701 WTmako-wim

The Antwortfrist differs per process (BK6-24-174 WiM Teil 1 Kap. 2.2.2 / 2.3.2 / 2.4.2) and is distinct from the APERAK window, which is 45 minutes for UTILMD in Strom (APERAK AHB §2.4.1). geraetewechsel::antwort_frist_werktage(pid) 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 → LFINVOIC 31009Messstellenbetriebsabrechnungmako-wim

Technik-Änderung und Gerätekonfiguration

Workflow: wim-technik-aenderung

ORDERS-based requests for device or configuration changes defined in WiM Strom Teil 1 and AWH Änderung Technik (BK6-24-174). APERAK Frist: 5 Werktage.

ProcessInitiator → ResponderORDERS PIDAntwortCrate
Änderung der Technik (Messlokationsänderung Strom)LF → MSB17011ORDRSP 19005/19006mako-wim
KonfigurationsänderungMSB → MSB17118ORDRSP 19003/19004mako-wim
Bestellung Änderung (GPKE Teil 3)NB → MSB17121ORDRSP 19003/19004mako-wim

ORDRSP semantics: 19005 = Auftragsbestätigung Änderung Technik · 19006 = Ablehnung · 19003 = Fortführungsbestätigung · 19004 = Ablehnung Fortführung · 19007 = Ablehnung Anforderung Messwerte. ORDRSP 19003–19007 route to wim-technik-aenderung. The ESA Ab-/Bestellung answers (ORDRSP 19011–19014) belong to the ESA Wertebestellung below, not here.

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.

StepMessageDirectionAntwortFrist
Werteanfrage (UC 4.1 Nr. 1)REQOTE 35002ESA → MSBQUOTES 150035 WT
Angebot / Ablehnung (UC 4.1 Nr. 2)QUOTES 15003MSB → ESABindungsfrist
Bestellung (UC 4.1 Nr. 3)ORDERS 17007ESA → MSBORDRSP 19011/190122 WT
Wertelieferung (UC 4.2)MSCONS 13027MSB → ESA§60 Abs. 1 MsbG, daily
Stornierung (UC 4.1 Nr. 5)ORDCHG 39002ESA → MSBORDRSP 19013/190142 WT
Abbestellung (UC 4.3 Nr. 1)ORDERS 17008ESA → MSBORDRSP 190112 WT
sequenceDiagram
    autonumber
    participant ESA as ESA · esa-wertebestellung
    participant MSB as MSB · wim-wertebestellung
    ESA->>MSB: REQOTE 35002 Werteanfrage (LOC = MaLo)
    MSB-->>ESA: QUOTES 15003 Angebot · DTM+273 Bindungsfrist
    Note over ESA,MSB: 5 WT · no Bindungsfrist ⇒ Ablehnung der Anfrage
    ESA->>MSB: ORDERS 17007 Bestellung (within Bindungsfrist)
    MSB-->>ESA: ORDRSP 19011 Bestätigung / 19012 Ablehnung
    Note over ESA,MSB: 2 WT · ORDRSP carries no LOC ⇒ correlate by RFF+ACW
    loop §60 Abs. 1 MsbG · daily
        MSB-->>ESA: MSCONS 13027 Werte nach Typ 2
    end
    alt Stornierung before first delivery
        ESA->>MSB: ORDCHG 39002 Storno · RFF+ON = Bestellung
        MSB-->>ESA: ORDRSP 19013 / 19014
    else Abbestellung during delivery
        ESA->>MSB: ORDERS 17008 Abbestellung
        MSB-->>ESA: ORDRSP 19011
    end

Correlation. REQOTE, QUOTES and ORDERS carry a LOC (the MaLo). The MIG-conformant ORDRSP and ORDCHG carry none — they are correlated to the running process by the order reference each echoes: an answer references the order it answers in RFF+ACW, and the 39002 Stornierung references the original Bestellung in RFF+ON. REQOTE 35002 is shared with the Preisanfrage catalog; the sender's registered ESA role (or a PIA Messprodukt marker) selects the Wertebestellung. The 39002 Stornierung is part of this subscription lifecycle, not a standalone process. See the makod ESA counterparties guide for the consent gate (§49 Abs. 2 Nr. 9 MsbG / GDPR Art. 7) and the loopback 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 (shared with the ESA Werteanfrage, see above)LF / ESA → MSBREQOTE 35002mako-wim
Anfrage von Werten für RechnungsabwicklungLF → MSBREQOTE 35003mako-wim
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, BK6-18-032). APERAK Frist: 5 Werktage.

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.

IFTSTA PIDDescriptionSender → Empfänger
21007Statusmeldung GerätewechselNB → MSBA / NB → LF
21009Statusmeldung MSB-Wechsel nach MsbG an LFNB → LF
21010Statusmeldung MSB-Wechsel nach MsbG an NBMSB alt → NB
21011Statusmeldung MSB-Wechsel nach MsbG an NBMSB neu → NB
21012Statusmeldung MSB-Wechsel nach MsbG an BKVNB → BKV
21013Statusmeldung MSB-Wechsel nach MsbG an ÜNBNB → ÜNB
21015Statusmeldung Einbau iMSwMSB → gMSB
21018Statusmeldung Anforderung DatenzugangMSB → LF
21029Vorabinformation iMS-EinbauwMSB → NB
21030iMS-ErsteinbauzustandwMSB → gMSB
21031Bestandssituation / Eigenausbau iMSwMSB → gMSB
21032Antwort auf das AngebotLF → MSB

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

INSRPT — Störungsmeldungen (WiM Strom)

Workflow: wim-insrpt — APERAK Frist: 5 Werktage

Fault and interruption reports sent to the MSB when a supply-point problem is detected. The MSB responds with a confirmation or rejection within 5 Werktage. PIDs 23011/23012 (Strom-only Ergebnisbericht variants) are registered exclusively in mako-wim; PIDs 23005/23009 (Gas-only variants) belong to mako-wim-gas.

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
23011Ergebnisbericht Strom (Variante 1)MSB → LF/NB/Meldermako-wim wim-insrpt
23012Ergebnisbericht Strom (Variante 2)MSB → LF/NB/Meldermako-wim wim-insrpt

PIDs 23005 and 23009 (Gas-only Ablehnung/Ergebnisbericht variants) are handled by mako-wim-gas wim-gas-insrpt with a 10-Werktage deadline. See WiM Gas — INSRPT Störungsmeldungen.


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 (Beschluss 12.09.2025, Tenor gültig ab 01.01.2026; KoV-XV-Cluster ab 01.10.2026) Supersedes BK7-19-001 and BK7-06-067.

APERAK Frist: 10 Werktage (longest Frist across all MaKo process families)

Key difference from electricity: Gas uses MaLo (not MeLo) as the supply object. The grid operator is called GNB (Gasnetzbetreiber), not NB.


Lieferantenwechsel Gas

Process timing rules (BK7-24-01-009):

ScenarioMindestvorlauffristNotes
Standardwechsel10 Werktage vor LieferbeginnEingang bei GNB und LFA auf demselben Werktag
Schneller Wechselnicht anwendbarGas kennt keinen schnellen Lieferantenwechsel
Neuanlagekeine MindestfristLieferbeginn = frühestmöglicher Termin
Stornierungbis 24 h vor LieferbeginnNur der ursprüngliche Sender darf stornieren

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) automatically after receiving the LFN's Anmeldung.

ProcessInitiator → ResponderUTILMD PIDAntwort OKAntwort NGCrate
Lieferbeginn Gas (LF-AN)LFN → GNBUTILMD G 440014400344004mako-geli-gas
Lieferende GasLFN → GNBUTILMD G 440024400544006mako-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/all(): mako-wim-gas wim-gas-stornierung handles all three

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 44003 (Bestätigung) or 44004 (Ablehnung). This mirrors the GPKE gpke-lf-anmeldung workflow for Strom.

Workflow: geli-gas-lf-anmeldung — APERAK Frist: 10 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

Einreichungstag rule (Gas): Like GPKE Strom, UTILMD G 44001 (LFN → GNB) and UTILMD G 44016 (LFN → LFA) must be submitted on the same Werktag. The Mindestvorlauffrist for a Standardwechsel is 10 Werktage — significantly longer than the GPKE 7-Werktage window. Gas has no fast-switch equivalent (Schneller Lieferantenwechsel does not exist in Gas; BK7-24-01-009 §2.1).

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

    Note over LFN,LFA: Einreichungstag = gleichzeitig
    LFN->>GNB: UTILMD G 44001 (Anmeldung Lieferbeginn)
    LFN->>LFA: UTILMD G 44016 (Kündigung beim alten LF)

    Note over LFN,GNB: Frist: 10 Werktage (keine Express-Option)

    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 is governed by BK7-24-01-009 with a 10-Werktage deadline instead of 24 h.

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: GNB hat 10 Werktage Zeit (BK7-24-01-009)

    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 Gas Rechnung (Gerätewechsel)gMSB → NBmako-wim-gas ⚠️
31004Stornorechnung WiM GasgMSB → NBmako-wim-gas ⚠️
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 APERAK within 10 Werktage (BK7-24-01-009).

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 equivalentStrom-only balancing group notification (§14a EnWG / iMSys demand response)
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–44053Handled by mako-wim-gas; MSB gateway configuration is a WiM concern in both Strom and Gas
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/SCHEDL/IMBNOT/TRANOT/DELORD/DELRES (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: BK7-24-01-009 (Beschluss 12.09.2025, Tenor gültig ab 01.01.2026; KoV-XV-Cluster ab 01.10.2026)

APERAK Frist: 10 Werktage

The MSB-switch workflows (Kündigung, Anmeldung, Ende MSB, Verpflichtungsanfrage, Stornierung) enforce full state machines. INVOIC 31003/31004 record receipt with limited state transitions (⚠️ in the tables below).

ProcessInitiator → ResponderUTILMD PIDStatusCrate
Kündigung MSB Gas (neuer MSB)gMSBN → gMSBAUTILMD G 44039–44041mako-wim-gas
Anmeldung neuer MSB Gas beim GNBgMSBN → GNBUTILMD G 44042–44044mako-wim-gas
Ende MSB Gas / Vorläufige AbmeldunggMSBA → GNBUTILMD G 44051–44053mako-wim-gas
Verpflichtungsanfrage gMSBGNB → gMSBUTILMD G 44168–44170mako-wim-gas
Stornierung LF/MSB Gas ¹orig. → orig.UTILMD G 44022–44024mako-wim-gas / mako-geli-gas

¹ PIDs 44022–44024 are multi-domain per BDEW PID overview. Routing is role-conditional:

RolePIDWorkflowCrate
Nb-only (GNB)44022 inbound (Anfrage)geli-gas-stornierungmako-geli-gas
Lf (LFN/LFA)44023/44024 inbound (Bestätigung/Ablehnung)geli-gas-stornierung-lfmako-geli-gas
Msb/Nmsb/all()44022–44024wim-gas-stornierungmako-wim-gas

For Nb-only deployments, PIDs 44023/44024 are outbound (GNB dispatches them via outbox) and do not require inbound PID-router registration. For Lf deployments, PID 44022 is ERP-initiated outbound via POST /api/v1/commands and also does not need inbound registration.

WiM Gas Abrechnung

Key difference from WiM Strom: In Strom the MSB bills the LF directly (INVOIC 31009: MSB → LF). In Gas the gMSB bills the NB (INVOIC 31003/31004: gMSB → NB). The NB is the contractual counterpart for gas MSB services.

MessageSender → EmpfängerPIDContentStatusCrate
WiM Gas RechnunggMSB → NBINVOIC 31003MSB-Rechnung Gerätewechsel⚠️mako-wim-gas
Stornorechnung WiM GasgMSB → NBINVOIC 31004Storno MSB-Rechnung⚠️mako-wim-gas
Zahlungsavis (NB → gMSB)NB → gMSBREMADV 33001/33002Payment confirmation/rejection⚠️mako-wim-gas
Ablehnung ZahlungsavisgMSB → NBCOMDIS 29001Invoicer disputes REMADV⚠️mako-wim-gas

WiM Gas — INSRPT Störungsmeldungen

Workflow: wim-gas-insrpt — APERAK Frist: 10 Werktage

Gas fault and interruption reports use the same base INSRPT message type as WiM Strom, but with Gas-specific qualifier codes and a 10-Werktage deadline (BK7-24-01-009). Gas-only PIDs (23005, 23009) are exclusively registered in mako-wim-gas. Shared PIDs (23001, 23003, 23004, 23008) are registered by mako-wim (via register_with_sparte(pid, Sparte::Strom)) and by mako-wim-gas (via register_with_sparte(pid, Sparte::Gas)) in both standalone and combined deployments.

PIDProcessSender → EmpfängerDeploymentCrate
23001StörungsmeldungLF/NB/Melder → MSBCombined: route_with_sparte(Strom)→wim-insrpt · Gas-only: wim-gas-insrptwim-insrpt / wim-gas-insrpt
23003Ablehnung StörungsmeldungMSB → LF/NB/MelderCombined: route_with_sparte(Strom)→wim-insrpt · Gas-only: wim-gas-insrptwim-insrpt / wim-gas-insrpt
23004Bestätigung StörungsmeldungMSB → LF/NB/MelderCombined: route_with_sparte(Strom)→wim-insrpt · Gas-only: wim-gas-insrptwim-insrpt / wim-gas-insrpt
23005Ablehnung Gas-VarianteMSB → NB/MSBGas-onlymako-wim-gas wim-gas-insrpt
23008Ergebnisbericht (gemeinsam)MSB → LF/NB/MelderCombined: route_with_sparte(Strom)→wim-insrpt · Gas-only: wim-gas-insrptwim-insrpt / wim-gas-insrpt
23009Ergebnisbericht Gas-VarianteMSB → NB/MSBGas-onlymako-wim-gas wim-gas-insrpt

In a combined Strom+Gas makod instance, PidRouter::route_with_sparte selects the workflow by commodity: Sparte::Strom → wim-insrpt (5 WT) and Sparte::Gas → wim-gas-insrpt (10 WT). PIDs 23005/23009 always route to wim-gas-insrpt (10 WT) regardless of deployment topology.


GaBi Gas — Kapazitätsabrechnung Gas

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

Implementation status: mako-gabi-gas ✅ for all processes — BK7 billing (INVOIC 31010), DVGW nomination cycle (NOMINT/NOMRES), allocation (ALOCAT), and the full DVGW transport suite (SCHEDL, IMBNOT, TRANOT, DELORD/DELRES).

Crate layering: dvgw-edi is the format library (parses NOMINT, NOMRES, ALOCAT, SCHEDL, …) — 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 90011/90012
    FNB-->>BKV: NOMRES 90021/90022

    Note over BKV,FNB: Day D intraday
    BKV->>FNB: DELORD 90061
    FNB-->>BKV: DELRES 90062
    FNB->>BKV: SCHEDL 90031

    Note over FNB,BKV: After day D (KoV §6.4)
    FNB->>BKV: ALOCAT 90001 (Initial)
    FNB->>BKV: ALOCAT 90001 (Correction 1..n)
    FNB->>BKV: ALOCAT 90001 (Final — binding)
    FNB->>BKV: IMBNOT 90041

    Note over VNB,FNB: Sub-daily
    VNB->>FNB: ALOCAT 90003
    FNB->>BKV: TRANOT 90051

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
Day-ahead schedulesender → receiverSCHEDLgabi-gas-schedlmako-gabi-gas
Imbalance notificationFNB/MGV → BKVIMBNOTgabi-gas-imbnotmako-gabi-gas
Transport notificationFNB/VNB → BKV/GH/MGVTRANOTgabi-gas-tranotmako-gabi-gas
Delivery order / responseBKV/GH ↔ FNB/MGVDELORD / DELRESgabi-gas-delivery-ordermako-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 handle gas transport nominations, allocations, and schedules between FNBs (Fernleitungsnetzbetreiber), BKVs, and MGVs. They carry no BGM Prüfidentifikator; routing uses synthetic PIDs (90000–90999) derived from (message_type, role_qualifier).

Crate layering. dvgw-edi is the format library — it parses and validates DVGW EDIFACT messages (NOMINT, NOMRES, ALOCAT, SCHEDL, …), 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 full regulatory basis and parsing architecture.

Synthetic PIDMessageDirectionDescriptionWorkflow
90001ALOCATFNB → BKVDaily allocationgabi-gas-allocation
90002ALOCATMGV → BKVMonthly allocationgabi-gas-allocation
90003ALOCATVNB → FNBSub-daily allocationgabi-gas-allocation
90011NOMINTBKV → FNBNominationgabi-gas-nomination
90012NOMINTBKV → MGVNominationgabi-gas-nomination
90021NOMRESFNB → BKVNomination responsegabi-gas-nomination
90022NOMRESMGV → BKVNomination responsegabi-gas-nomination
90031SCHEDLFNB/BKV/MGV → receiverDay-ahead transport schedulegabi-gas-schedl
90041IMBNOTFNB/MGV → BKVImbalance notificationgabi-gas-imbnot
90051TRANOTFNB/VNB → BKV/GH/MGVTransport notificationgabi-gas-tranot
90061DELORDBKV/GH → FNB/MGVDelivery ordergabi-gas-delivery-order
90062DELRESFNB/MGV → BKV/GHDelivery responsegabi-gas-delivery-order

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-wimnot used by GeLi/WiM GasORDERS correlation ID
23001/23003/23004/23008 (INSRPT shared)mako-wim wim-insrpt (5 WT)mako-wim-gas wim-gas-insrpt (10 WT)PidRouter::route_with_sparte(pid, Sparte)

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).
  • INSRPT (23001/23003/23004/23008): by Sparte via route_with_sparte(pid, Sparte) — the sender sets Strom/Gas Sparte, routing selects the correct deadline (5 WT vs. 10 WT).

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 ↗