Skip to main content

Crate energy_billing

Crate energy_billing 

Source
Expand description

Pure multi-product retail energy billing for German markets.

§Architecture

This crate is the commercial billing engine for the Lieferant (LF). It answers: “What does the customer’s invoice look like?”

metering       — "What quantities are billable?"
    ↓
eeg-billing    — "What EEG remuneration applies?" (NB-side)
    ↓
energy-billing — "What does the customer's invoice look like?" (LF-side)
    ↓
accountingd    — Payments, Ledger, Dunning

§Primary API — Product::build_engine

use energy_billing::{BillingContext, BillingPeriod, GridInput, InvoiceType, MeterInput, Product, Quantities, RegulatoryRates};
use rust_decimal::dec;
use time::macros::date;

let json = r#"{"category":"STROM","arbeitspreis_ct_per_kwh":"30.0","grundpreis_ct_per_day":"8.0"}"#;
let product: Product = serde_json::from_str(json).unwrap();
let ctx = BillingContext {
    malo_id:         "51238696012".to_owned(),
    lf_mp_id:        "9900000000001".to_owned(),
    rechnungsnummer: "R2026-001".to_owned(),
    period: BillingPeriod::new(date!(2026-01-01), date!(2026-01-31)).unwrap(),
    invoice_type:     InvoiceType::Initial,
    contract_id:      None,
    regulatory_rates: RegulatoryRates::default(),
    ..Default::default()
};
let quantities = Quantities {
    electricity: Some(MeterInput { arbeitsmenge_kwh: dec!(500), ..Default::default() }),
    ..Default::default()
};
let invoice = product.build_engine(&GridInput::default(), &RegulatoryRates::default())
    .bill(ctx, &quantities).unwrap();
assert!(invoice.brutto_eur > invoice.netto_eur);

§Product categories

CategoryProviderLegal basis
STROMElectricityProvider§41 EnWG
WAERMEPUMPEControllableLoadProvider (§14a)§14a EnWG
WALLBOXControllableLoadProvider (§14a)§14a EnWG
GASGasProvider§41 EnWG
WAERMEHeatProvider§41 EnWG; AVBFernwärmeV §24; CO2KostAufG §3; §14 WPG
WASSERWaterProviderAVBWasserV; §12 Abs. 2 Nr. 1 UStG (7 %); gesplittete Abwassergebühr
SOLARSolarProvider§42a Abs. 4 EnWG (Mieterstrom-Preisdeckel) / §42b EnWG (GGV)
EEGEegProvider (→ eeg-billing)§§20–21 EEG 2023
EINSPEISUNGEinspeisungProvider§20 EEG 2023
HEMSHemsProvider
EMOBILITYEmobilityProvider§41a EnWG
ENERGIEDIENSTLEISTUNGServiceProvider
STROM + dynamic_epex=trueDynamicElectricityProvider§41a EnWG
SHARINGElectricityProvider + EnergyShareProvider§42c EnWG

Re-exports§

pub use context::AbschlagDeduction;
pub use context::BillingContext;
pub use context::BillingPeriod;
pub use context::CustomerKategorie;
pub use context::InvoiceType;
pub use context::Rechnungsempfaenger;
pub use context::SettlementForm;
pub use context::Verbraucherinformationen;
pub use context::Verbrauchshistorie;
pub use context::Vertragsart;
pub use context::Vertragsinformationen;
pub use engine::BillingEngine;
pub use error::EngineError;
pub use invoice::Invoice;
pub use invoice::TaxSubtotal;
pub use invoice::VatCategory;
pub use invoice::negate_rechnung_json_for_correction;
pub use invoice::tax_subtotals_of;
pub use position::BillingPosition;
pub use position::BillingWarning;
pub use position::PositionCategory;
pub use position::PositionTrace;
pub use position::WarningSeverity;
pub use provider::BillingProvider;
pub use provider::MTU_MINUTES;
pub use provider::mtu_start;
pub use quantities::Ablesungsart;
pub use quantities::Abschlagsplan;
pub use quantities::AbschlagsplanEntry;
pub use quantities::Absetzung;
pub use quantities::AbsetzungsGrund;
pub use quantities::DayApportionment;
pub use quantities::DynamicInterval;
pub use quantities::EegMeterInput;
pub use quantities::EmobilityMeterInput;
pub use quantities::EnergyShareMeterInput;
pub use quantities::GasMeterInput;
pub use quantities::GgvNutzungsplan;
pub use quantities::GgvNutzungsplanEntry;
pub use quantities::GgvSolarInput;
pub use quantities::GridInput;
pub use quantities::HemsMeterInput;
pub use quantities::MeterInput;
pub use quantities::MeteringMode;
pub use quantities::ProsumerMeterInput;
pub use quantities::Quantities;
pub use quantities::Sect14aModul3Verbrauch;
pub use quantities::Sect41aAnnualComparison;
pub use quantities::ServiceMeterInput;
pub use quantities::SolarMeterInput;
pub use quantities::WaermeMeterInput;
pub use quantities::WasserMeterInput;
pub use rates::ERDGAS_UMRECHNUNGSFAKTOR_GJ_PER_MWH;
pub use rates::RegulatoryRates;
pub use rates::RoundMoney;
pub use rates::behg_ct_per_kwh_for_year;
pub use rates::behg_ct_per_kwh_from_price;
pub use rates::energiesteuer_gas_for_year;
pub use rates::erdgas_emissionsfaktor_kg_per_kwh;
pub use rates::mwst_rate_for_gas_waerme_period;
pub use rates::mwst_rate_for_period;
pub use rates::round_money;
pub use rates::steuer_stichtage_im_zeitraum;
pub use rates::stromsteuer_for_year;
pub use steuer::EnergiesteuerBefreiung;
pub use steuer::EnergiesteuerTarif;
pub use steuer::Steuerentlastung;
pub use steuer::StromsteuerBefreiung;
pub use steuer::StromsteuerErmaessigung;
pub use steuer::StromsteuerTarif;
pub use tariff::AbwasserRegime;
pub use tariff::BlockTierInput;
pub use tariff::ControllableLoadProduct;
pub use tariff::EegProduct;
pub use tariff::EinspeisungProduct;
pub use tariff::ElectricityProduct;
pub use tariff::EmobilityProduct;
pub use tariff::EnergieQuellen;
pub use tariff::GasProduct;
pub use tariff::HeatProduct;
pub use tariff::HemsProduct;
pub use tariff::IndexedPriceConfig;
pub use tariff::Product;
pub use tariff::SeasonalPriceOverride;
pub use tariff::ServiceProduct;
pub use tariff::SharingProduct;
pub use tariff::SolarProduct;
pub use tariff::WaterProduct;
pub use providers::ControllableLoadProvider;
pub use providers::DynamicElectricityProvider;
pub use providers::EegProvider;
pub use providers::EinspeisungProvider;
pub use providers::ElectricityProvider;
pub use providers::EmobilityProvider;
pub use providers::EnergyShareProvider;
pub use providers::GasProvider;
pub use providers::HeatProvider;
pub use providers::HemsProvider;
pub use providers::MwStProvider;
pub use providers::ServiceProvider;
pub use providers::SolarProvider;
pub use providers::WaterProvider;

Modules§

context
BillingContext — the immutable billing metadata passed to every provider.
engine
BillingEngine — the composition root for multi-product invoice generation.
error
EngineError — the typed error surface of the billing engine.
invoice
Invoice — the aggregate root of every billing run.
position
BillingPosition — the atomic unit of every energy invoice.
provider
The BillingProvider trait — one implementation per product type.
providers
Concrete BillingProvider implementations for all product types.
quantities
Quantities — all metered quantities for one billing period.
rates
RegulatoryRates — statutory levy rates, operator-configured.
steuer
Verbrauchsteuerliche Begünstigungen — Befreiung, Ermäßigung, Entlastung.
tariff
Typed product definitions for the German retail energy market.

Structs§

Amount
Fixed-point monetary amount with P decimal places.

Enums§

BillingError
All errors produced by the billing engine.
RoundingStrategy
Explicit rounding strategy. Always required — no hidden defaults.

Type Aliases§

EuroAmount
A monetary amount in euro at 10⁻⁵-EUR resolution.