FinOps & Costs

ip·Solis includes a built-in cost tracking and chargeback engine. Every asset type can be priced, and the cost report aggregates active orders into projected monthly spend per cost center — giving IT finance teams the data they need for internal chargeback, forecasting, and budget enforcement.

Cost report page


Cost Model

Set cost fields on each asset type in Admin → Asset Definitions → [type] → Cost:

Field Description
monthly_cost Projected monthly cost for one instance of this asset type
currency ISO 4217 currency code (e.g., EUR, USD, GBP)
cost_center The cost center that bears the charge for this asset type

The cost model is intentionally simple: one flat monthly rate per asset type. This covers the majority of IT chargeback scenarios without requiring a complex billing engine.


Cost Report

The cost report at Admin → Cost Report aggregates all active orders into a projected monthly spend summary. It shows:

  • Total projected spend per cost center
  • Per-provider breakdown — spend by asset type within each cost center
  • Consumer breakdown — spend sliced by the requester's department, cost center, company, and employee ID (snapshotted from AD at order creation time)
  • CSV export — full per-order breakdown for spreadsheet pivots

The consumer breakdown relies on an AD attribute snapshot taken at order creation. The snapshot captures department, cost_center, company, employeeID, and title (attribute names are configurable in Settings → Active Directory → Consumer attributes). This means the report reflects who placed each order even if the user's AD attributes change later.


Per-Order Cost Projection

When an asset type has a monthly_cost configured, the portal's order form shows the projected total before the user submits. The calculation is monthly_cost × months_requested and appears in the Access & Duration card. This gives requesters visibility into cost before committing to an order.


FX Conversion

When asset types are priced in different currencies, the cost report can convert everything to a single canonical reporting currency.

Configure in Admin → Settings → FinOps:

Config key Example Description
cost.fx.canonical EUR The reporting currency all costs are converted to
cost.fx.rates {"USD": 0.92, "GBP": 1.18} Static exchange rates relative to the canonical currency

With FX enabled, the cost report gets a Show in currency selector that converts summary cards via cross-rates to a single figure per cost center. Asset types without a configured rate surface in a warning banner so operators know which currencies are excluded from the totals.


Historical Snapshots

A daily Celery Beat task (cost-report-snapshot-daily) at 02:00 captures the current state of all cost report views into the cost_report_snapshots table. This enables retrospective analysis — answering questions like "what was our projected spend in March?" without losing the active-order data that only exists as a live moment in time.

The cost report page gains an As of date picker that reads from the snapshot table for past dates. When no snapshot exists for a selected date (e.g., before snapshots were enabled), the report falls back to live data.

Configure snapshot retention with cost.snapshot_retention_days (default: 365 days).


Cost Threshold Alerts

Operators can define monthly spend ceilings per (cost_center, currency) pair. When the projected monthly spend for a cost center crosses a threshold, ip·Solis sends an email alert to the configured recipients.

Configure thresholds on the Cost Report page via Manage Thresholds.

Hysteresis: the cost.threshold_alert_quiet_hours setting (default: 24 hours) prevents repeated alerts when spend is hovering just above the threshold. Once an alert fires, the clock resets. Editing a threshold clears the alert clock so the next breach re-alerts immediately.

Teams notifications — when Microsoft Teams integration is enabled, threshold alerts are also delivered as an Adaptive Card to the configured channel.

Dashboard indicators — cost center provider totals cards on the report are highlighted in red when they are in breach, so the situation is visible at a glance without waiting for an email.

The Celery Beat task cost-threshold-alerter runs daily at 04:00 (Europe/Berlin).


ServiceNow-Driven Orders

Orders dispatched via the ServiceNow webhook (POST /webhook/servicenow) go through the same AD attribute snapshot at creation time, so they appear in the consumer breakdown on the cost report alongside portal and API-originated orders. No separate configuration is required.

FinOps & Costs — ip·Solis