dagapp.examples.consulting_fees

Compute consulting fees

All common parameter defaults are centralized in the dflt single-source-of-truth so functions that share parameter names also share the same defaults. This avoids signature conflicts when building a DAG using meshed (parameter merging).

dagapp.examples.consulting_fees.base_fee_ex_vat(effective_day_rate: float, committed_days: float = 8.0) float[source]

Return the base monthly fee (ex-VAT) for committed days.

dagapp.examples.consulting_fees.committed_days(tier: Literal['light', 'regular', 'deep'] = 'regular') float[source]

Return default committed days/month for a named tier.

dagapp.examples.consulting_fees.deep_monthly_total_incl_vat(retainer: bool = True, ad_hoc_day_rate: float = 2800.0, retainer_day_rate: float = 2400.0, ramp_up_days: float = 0.0, flex_premium_pct: float = 0.1, vat_rate: float = 0.081) float[source]

Return total incl. VAT for the ‘deep’ (12 d/mo) scenario.

dagapp.examples.consulting_fees.effective_day_rate(retainer: bool = True, ad_hoc_day_rate: float = 2800.0, retainer_day_rate: float = 2400.0) float[source]

Return the effective day-rate based on retainer flag.

dagapp.examples.consulting_fees.effective_hourly_rate(effective_day_rate: float, hours_per_day: float = 8.0) float[source]

Return the hourly equivalent of the effective day-rate.

dagapp.examples.consulting_fees.flex_fee_ex_vat(effective_day_rate: float, ramp_up_days: float = 0.0, flex_premium_pct: float = 0.1) float[source]

Return the flex (short-notice) component (ex-VAT). Applies only to additional ramp-up days beyond the commitment.

dagapp.examples.consulting_fees.light_monthly_total_incl_vat(retainer: bool = True, ad_hoc_day_rate: float = 2800.0, retainer_day_rate: float = 2400.0, ramp_up_days: float = 0.0, flex_premium_pct: float = 0.1, vat_rate: float = 0.081) float[source]

Return total incl. VAT for the ‘light’ (4 d/mo) scenario.

dagapp.examples.consulting_fees.monthly_totals(committed_days: float = 8.0, ramp_up_days: float = 0.0, retainer: bool = True, ad_hoc_day_rate: float = 2800.0, retainer_day_rate: float = 2400.0, flex_premium_pct: float = 0.1, vat_rate: float = 0.081) dict[source]

Return a dict with all intermediate values for transparency: effective_day_rate, base_fee_ex_vat, flex_fee_ex_vat, subtotal_ex_vat, vat_amount, total_incl_vat.

dagapp.examples.consulting_fees.regular_monthly_total_incl_vat(retainer: bool = True, ad_hoc_day_rate: float = 2800.0, retainer_day_rate: float = 2400.0, ramp_up_days: float = 0.0, flex_premium_pct: float = 0.1, vat_rate: float = 0.081) float[source]

Return total incl. VAT for the ‘regular’ (8 d/mo) scenario.

dagapp.examples.consulting_fees.subtotal_ex_vat(base_fee_ex_vat: float, flex_fee_ex_vat: float = 0.0) float[source]

Return the subtotal (ex-VAT).

dagapp.examples.consulting_fees.total_incl_vat(subtotal_ex_vat: float, vat_amount: float) float[source]

Return the total including VAT.

dagapp.examples.consulting_fees.vat_amount(subtotal_ex_vat: float, vat_rate: float = 0.081) float[source]

Return the VAT amount.