microsoft / microsoft/finops-toolkit
Feature: FOCUS 1.3 Ingestion and Hub Support (ContractCommitment + ContractApplied)
Nobody has claimed this yet.
- Dominant language
- PowerShell
- Stars
- 603
- Forks
- 248
- Avg merge
- 7d 11h
- Merged PRs (30d)
- 11
Description
Feature Request: FOCUS 1.3 Ingestion and Hub Support (ContractCommitment + ContractApplied)
Summary
Add FOCUS 1.3 ingestion (IngestionSetup_v1_3.kql) and hub (HubSetup_v1_3.kql) KQL scripts to support the new columns and datasets introduced in the FOCUS 1.3 specification (ratified December 2025).
The highest-priority additions are the Contract Commitment dataset and the ContractApplied column on Cost and Usage, which enable provider-confirmed MACC decrement tracking instead of heuristic-based eligibility classification.
Motivation
Organizations with Microsoft Azure Consumption Commitments (MACCs) currently rely on heuristic confidence layers to estimate which charges decrement the commitment:
- Layer 1: First-party Azure usage (95%+ confidence via ProviderName + ChargeCategory)
- Layer 2: RI/SP purchases (90%+ via CommitmentDiscountId)
- Layer 3: Marketplace (70-75%, "benefit eligible" tags can be stale)
- Layer 4: Edge cases (30-40%, requires Finance confirmation)
This gets to ~85-90% accuracy. The remaining 10-15% gap requires reconciliation against the Billing API (/Microsoft.Consumption/lots and /events endpoints).
FOCUS 1.3 eliminates this gap by having the data generator (Azure) tell you per-row which charges applied to which contract commitment and the exact applied amount. This is ground truth, not a heuristic.
What FOCUS 1.3 Adds
New supplemental dataset: ContractCommitment (13 columns)
| Column | Description |
|---|---|
| ContractCommitmentId | Unique commitment identifier |
| ContractCommitmentCategory | Type classification |
| ContractCommitmentType | Spend vs usage commitment |
| ContractCommitmentDescription | Human-readable label |
| ContractCommitmentCost | Commitment amount in billing currency |
| ContractCommitmentQuantity | Commitment in units (if applicable) |
| ContractCommitmentUnit | Unit of measure |
| ContractCommitmentPeriodStart | Commitment term start |
| ContractCommitmentPeriodEnd | Commitment term end |
| ContractId | Parent contract identifier |
| ContractPeriodStart | Contract start |
| ContractPeriodEnd | Contract end |
| BillingCurrency | Currency |
New column on Cost and Usage: ContractApplied (JSON)
Each cost row carries a JSON array:
{
"Elements": [
{
"ContractCommitmentID": "...",
"ContractCommitmentAppliedCost": 123.45
}
]
}
Column deprecations (available in 1.3, removed in 1.4)
ProviderNamereplaced byServiceProviderNamePublisherNamereplaced byHostProviderName
Proposed Work
-
IngestionSetup_v1_3.kql: Raw table definitions and transform functions for FOCUS 1.3 exports, including:
- ContractApplied JSON column on Costs_raw
- ServiceProviderName / HostProviderName columns (with ProviderName / PublisherName backward compat)
- ContractCommitment dataset raw table and transform
- Data completeness / recency metadata fields
-
HubSetup_v1_3.kql: Hub functions (
Costs_v1_3,Prices_v1_3, etc.) that:- Project ContractApplied alongside existing cost columns
- Add ServiceProviderName / HostProviderName with fallback to ProviderName / PublisherName
- Include ContractCommitment() function wrapping the new dataset
- Update latest-version aliases:
Costs()->Costs_v1_3(), etc.
-
Backward compatibility: v1_2 data should union cleanly into v1_3 functions with
column_ifexists()for new fields, matching the existing v1_0-to-v1_2 pattern.
Blocking Dependency
Azure Cost Management needs to actually populate the FOCUS 1.3 columns in FOCUS exports. If Azure is not yet exporting ContractApplied or the ContractCommitment dataset, the ingestion scripts would define empty columns. Confirming export availability would help sequence this work.
References
Labels
Tool: FinOps hubs, Tool: FOCUS, Type: Feature
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading the existing v1_0-to-v1_2 ingestion and hub patterns, then confirm whether Azure Cost Management exports ContractApplied and the ContractCommitment dataset. Implement the specified changes in IngestionSetup_v1_3.kql and HubSetup_v1_3.kql; done means FOCUS 1.3 fields and functions are supported while v1_2 data still unions cleanly.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- azure
- Domain
- cloud, data-engineering, tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100