Skip to main content

BillingEngine

Struct BillingEngine 

Source
pub struct BillingEngine { /* private fields */ }
Expand description

The composition root for multi-product invoice generation.

Implementations§

Source§

impl BillingEngine

Source

pub fn new() -> Self

Create an empty engine. Register providers with add.

Source

pub fn add<P: BillingProvider + 'static>(self, provider: P) -> Self

Register a BillingProvider. Returns self for method chaining.

Providers run in registration order. Register tax providers (e.g. MwStProvider) last — they will automatically run in a second pass.

Source

pub fn validate( &self, ctx: &BillingContext, quantities: &Quantities, ) -> Vec<BillingWarning>

Run all registered providers and collect regulatory compliance warnings.

Does NOT generate positions or produce an invoice. Call this before bill() to check regulatory preconditions (e.g. §41a iMSys guard, missing tariff fields) without committing to billing.

An Error-severity warning indicates a definite regulatory violation. The operator should resolve the issue before calling bill().

Source

pub fn bill_batch( &self, batch: Vec<(BillingContext, Quantities)>, ) -> Vec<Result<Invoice, EngineError>>

Bill multiple (context, quantities) pairs using this engine configuration.

Reuses the same provider set for every item in the batch. Fails fast per item (each error is independent). For large portfolios, collect all results and handle errors individually.

§Example
let results = engine.bill_batch(batch);
let errors: Vec<_> = results.iter().filter_map(|r| r.as_ref().err()).collect();
Source

pub fn bill( &self, ctx: BillingContext, quantities: &Quantities, ) -> Result<Invoice, EngineError>

Run all providers and assemble an Invoice.

Three-pass execution:

  1. Commodity + levy providers (all is_tax_pass() == false)
  2. Tax providers (all is_tax_pass() == true)
  3. Abschlag deductions from ctx.abschlage (on every settling document — every InvoiceType except AdvancePayment)

Trait Implementations§

Source§

impl Default for BillingEngine

Source§

fn default() -> BillingEngine

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more