#[non_exhaustive]pub enum SanktionsTyp {
Show 13 variants
FernsteuerbarkeitFehlend,
SpeicherAnforderungNichtErfuellt,
IMssAnforderungNichtErfuellt,
Sect10bVorgabenVerletzt,
MastrNichtRegistriert,
InbetriebnahmeVorgabeVerletzt,
VolleinspeisungspflichtVerletzt,
AusfallverguetungHoechstdauerUeberschritten,
EinspeiseverguetungUnzulaessigeNutzung,
VeraeusserungsformWechselUngueltig,
VeraeusserungsformNachweispflichtVerletzt,
ZuordnungsWechselNichtGemeldet,
DoppelvermarktungsverbotVerletzt,
}Expand description
§52 EEG 2023 compliance violation type.
Each type triggers a payment obligation to the NB of €10/kW/month (§52 Abs. 2). The obligation can be retroactively reduced to €2/kW/month once fulfilled (§52 Abs. 3).
Use crate::foerderdauer::calculate_pflichtzahlung to compute the penalty.
§EEG version note
§52 EEG 2023 applies to plants under current EEG 2023 rules.
For old plants (commissioned before 01.01.2023) under §100 Übergangsregelung,
the old §47 EEG 2021 “Vergütung = 0” rule applies instead — use sanktion: Some(SanktionAlt::VerguetungAufNull).
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
FernsteuerbarkeitFehlend
§52 Abs. 1 Nr. 1 — Missing Fernsteuerbarkeit (§9 Abs. 1/2).
Plant ≥25 kW does not have remote control capability installed. Obligation fulfilled → reduced to €2/kW/month retroactively. Technical defect grace: 2 months waived.
SpeicherAnforderungNichtErfuellt
§52 Abs. 1 Nr. 2 — Missing Speicher / §9 Abs. 5 violation.
Plant does not meet the storage requirement for certain EE/KWK plants.
Rate: €10/kW/month (§52 Abs. 2). Not in the §52 Abs. 3 Nr. 1 reduction list — this violation is NOT retroactively reducible to €2/kW.
IMssAnforderungNichtErfuellt
§52 Abs. 1 Nr. 3 — Missing iMSys Messeinrichtung (§9 Abs. 8).
Plant not equipped with the required intelligent measurement system infrastructure.
Sect10bVorgabenVerletzt
§52 Abs. 1 Nr. 4 — Verstoß gegen §10b (Vorgaben zur Direktvermarktung).
§10b Abs. 1 obliges the operator of a plant over 25 kW that direct-markets
to fit the technical equipment through which the Direktvermarktungsunternehmen
can call up the Ist-Einspeisung and remotely curtail it, and to grant it that
authority. It is not the duty to direct-market: a plant over 100 kW that
stays on the Einspeisevergütung breaches nothing here — it simply has no
§21 Abs. 1 Satz 1 Nr. 1 claim, which is
SettlementStatus::KeinAnspruch, not a Zahlung.
Rate: €10/kW/month, reduced to €2 retroactively on cure (§52 Abs. 3 Satz 1 Nr. 1) and waived for two months on a technical defect (Satz 2).
MastrNichtRegistriert
§52 Abs. 1 Nr. 11 — Plant not registered in MaStR.
Required registration data not submitted per Marktstammdatenregisterverordnung. Obligation fulfilled → reduced to €2/kW/month retroactively.
EEG 2023 change: Old §47 EEG 2021 reduced Vergütung to EUR 0.
§52 EEG 2023 instead charges €10/kW/month; Vergütung remains payable.
Use sanktion: Some(SanktionAlt::VerguetungAufNull) for old plants (EEG ≤2021, §100 Übergangsregelung).
InbetriebnahmeVorgabeVerletzt
§52 Abs. 1 Nr. 9a — Post-commissioning violation of §37 Abs. 1a or §48 Abs. 6.
Plant violates the obligations that arise after commissioning under those paragraphs (§37 Abs. 1a: iMSys Nachrüstung after commissioning; §48 Abs. 6: solar Segment obligations).
Rate: always €2/kW/month (§52 Abs. 3 Nr. 2 EEG 2023).
This is a permanently lower rate — NOT reduced from €10; starts at €2 for this type.
nachtraeglich_erfuellt has NO effect on this type.
VolleinspeisungspflichtVerletzt
§52 Abs. 1 Nr. 10 — Volleinspeisung obligation violated (§48 Abs. 2a).
Plant registered for Volleinspeisung (100% grid feed-in bonus, §48 Abs. 2a EEG 2023) but does not feed all generated electricity into the grid in a calendar year.
Rate: always €2/kW/month (§52 Abs. 3 Nr. 2 EEG 2023).
nachtraeglich_erfuellt has NO effect on this type.
§§52 Abs. 4 Nr. 3: calendar-year scope
This violation is assessed for all calendar months of the year in which
the under-delivery occurs (not just the months of non-delivery).
Include all 12 months in monate_des_verstosses.
AusfallverguetungHoechstdauerUeberschritten
§52 Abs. 1 Nr. 5 — Ausfallvergütung Höchstdauer exceeded (§21 Abs. 1 Satz 1 Nr. 3).
Plant in Ausfallvergütung exceeds the statutory 3-month maximum.
The §10/kW Pflichtzahlung is owed for the months of the violation only — §52 Abs. 4 grants additional months solely to Nr. 7 (+3), Nr. 9 (+1), Nr. 10 (full calendar year) and Nr. 12 (+6). Nr. 5 is not listed there, so no extra months are added (adding +3 here over-charged the operator).
EinspeiseverguetungUnzulaessigeNutzung
§52 Abs. 1 Nr. 6 — Unzulässige Inanspruchnahme von Einspeisevergütung (§21 Abs. 2).
Plant claims Einspeisevergütung while violating the conditions of §21 Abs. 2 (e.g., plant participates in Regelenergiemarkt while on Einspeisevergütung).
VeraeusserungsformWechselUngueltig
§52 Abs. 1 Nr. 7 — Unzulässiger Veräußerungsform-Wechsel (§21b Abs. 2 Satz 1 zweiter Halbsatz).
Operator performs an impermissible switch of Veräußerungsform (e.g., switching when mandatory Direktvermarktung applies and return to Einspeisevergütung is blocked).
§§52 Abs. 4 Nr. 1: +3 extra months
Payment is also owed for the 3 calendar months following the violation period.
Callers should add these 3 months to monate_des_verstosses.
VeraeusserungsformNachweispflichtVerletzt
§52 Abs. 1 Nr. 8 — Pflichtnachweis-Verletzung (§21b Abs. 3).
Operator fails to provide required evidence/documentation after a Veräußerungsform switch (§21b Abs. 3 documentation obligations).
§§52 Abs. 3 Satz 2: Technical defect grace
When technischer_defekt = true and violation occurred after 31 Dec 2023:
payment waived for the violation month and the following month.
ZuordnungsWechselNichtGemeldet
§52 Abs. 1 Nr. 9 — Zuordnungs-/Wechselmeldung nicht übermittelt (§21c).
Operator did not notify the NB of a Veräußerungsform assignment or switch within the deadline per §21c EEG 2023.
§§52 Abs. 4 Nr. 2: +1 extra month
Payment is also owed for the 1 calendar month following the violation period.
Callers should add this 1 month to monate_des_verstosses.
DoppelvermarktungsverbotVerletzt
§52 Abs. 1 Nr. 12 — Doppelvermarktungsverbot verletzt (§80 EEG 2023).
Strom was claimed for EEG payment AND simultaneously used in another subsidised scheme (e.g., EEG + EEG, or EEG + KWKG, or EEG + HKN). §80 prohibits double-counting.
§§52 Abs. 4 Nr. 4: +6 extra months
Payment is also owed for the 6 calendar months following the violation period.
Callers should add these 6 months to monate_des_verstosses.
Implementations§
Source§impl SanktionsTyp
impl SanktionsTyp
Sourcepub const ALL: [Self; 13]
pub const ALL: [Self; 13]
Every variant, in the order §52 Abs. 1 lists them.
Thirteen, not twelve: Abs. 1 counts to 12 but inserts Nr. 9a between
9 and 10. The list is what a persistence layer’s CHECK constraint and a
REST surface’s vocabulary are held against, so a new Pflichtverstoß
cannot be added in one place and forgotten in the other.
Sourcepub fn nummer(self) -> &'static str
pub fn nummer(self) -> &'static str
Which Nummer of §52 Abs. 1 this is, as the statute writes it — "9a"
is a Nummer of its own, which is why this is a string and not a number.
Sourcepub fn as_db_str(self) -> &'static str
pub fn as_db_str(self) -> &'static str
The stored/wire token — the SCREAMING_SNAKE_CASE serde name.
Sourcepub fn from_db_str(s: &str) -> Option<Self>
pub fn from_db_str(s: &str) -> Option<Self>
Parse a stored/wire token back. None for anything not in Self::ALL.
Sourcepub fn abs4_monate(self, monate_des_verstosses: u32) -> u32
pub fn abs4_monate(self, monate_des_verstosses: u32) -> u32
§52 Abs. 4 — how many calendar months the Zahlung is owed for, given the months the breach itself lasted.
Four Nummern run past the breach: Nr. 7 „zusätzlich für die folgenden drei Kalendermonate“, Nr. 9 „zusätzlich für den folgenden Kalendermonat“, Nr. 12 „zusätzlich für die folgenden sechs Kalendermonate“ — and Nr. 10 is not an extension at all but a replacement: „für alle Kalendermonate des Kalenderjahres“.
Nr. 5 is deliberately absent. Abs. 4 does not name it, and adding three months there would charge a plant on the Ausfallvergütung a quarter it does not owe.
§Example
use eeg_billing::SanktionsTyp;
assert_eq!(SanktionsTyp::ZuordnungsWechselNichtGemeldet.abs4_monate(2), 3);
assert_eq!(SanktionsTyp::VolleinspeisungspflichtVerletzt.abs4_monate(2), 12);
assert_eq!(SanktionsTyp::AusfallverguetungHoechstdauerUeberschritten.abs4_monate(2), 2);Trait Implementations§
Source§impl Clone for SanktionsTyp
impl Clone for SanktionsTyp
Source§fn clone(&self) -> SanktionsTyp
fn clone(&self) -> SanktionsTyp
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more