diff --git a/CHANGELOG.md b/CHANGELOG.md index 90c970c37..f10b26529 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,12 +5,26 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + ## v1.2 -[All unreleased changes](https://github.com/FinOps-Open-Cost-and-Usage-Spec/FOCUS_Spec/compare/1.1...working_draft) +Announced June 2025 + +**Added:** + +- `BillingAccountType` column +- `SubAccountType` column + +**Changed:** + +- `CommitmentDiscountType` column updates: + - Must be a consistent, readable display value. + +[All 1.2 changes](https://github.com/FinOps-Open-Cost-and-Usage-Spec/FOCUS_Spec/compare/1.1...working_draft)
---> ## v1.1 @@ -55,7 +69,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), - `SchemaId` metadata schema property updates: - Recommended to be a globally unique identifier (GUID) instead of a universally unique identifier (UUID) or SemVer version. -[All 1.1 changes](https://github.com/FinOps-Open-Cost-and-Usage-Spec/FOCUS_Spec/compare/v1.0...v1.1-cr) +[All 1.1 changes](https://github.com/FinOps-Open-Cost-and-Usage-Spec/FOCUS_Spec/compare/v1.0...v1.1)
diff --git a/specification/columns/billingaccounttype.md b/specification/columns/billingaccounttype.md new file mode 100644 index 000000000..2acaebf9d --- /dev/null +++ b/specification/columns/billingaccounttype.md @@ -0,0 +1,39 @@ +# Billing Account Type + +Billing Account Type is a provider-assigned name to identify the type of [*billing account*](#glossary:billing-account). Billing Account Type is a readable display name and not a code. Billing Account Type is commonly used for scenarios like mapping FOCUS constructs to provider constructs and summarizing costs across providers. + +The BillingAccountType column adheres to the following requirements: + +* BillingAccountType MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports more than one possible BillingAccountType value. +* BillingAccountType MUST be of type String. +* BillingAccountType MUST conform to [String Handling](#stringhandling) requirements. +* BillingAccountType MUST be null when BillingAccountId is null. +* BillingAccountType MUST NOT be null when BillingAccountId not is null. +* BillingAccountType MUST be a consistent, readable display value. + +## Column ID + +BillingAccountType + +## Display Name + +Billing Account Type + +## Description + +A provider-assigned identifier for the type of *billing account* applied to the *row*. + +## Content Constraints + +| Constraint | Value | +| :-------------- | :--------------- | +| Column type | Dimension | +| Feature level | Conditional | +| Column required | True | +| Allows nulls | False | +| Data type | String | +| Value format | \ | + +## Introduced (version) + +1.2 diff --git a/specification/columns/columns.mdpp b/specification/columns/columns.mdpp index 48cbb79f4..c9ff08297 100644 --- a/specification/columns/columns.mdpp +++ b/specification/columns/columns.mdpp @@ -6,6 +6,7 @@ The FOCUS specification defines a group of columns that provide qualitative valu !INCLUDE "billedcost.md",1 !INCLUDE "billingaccountid.md",1 !INCLUDE "billingaccountname.md",1 +!INCLUDE "billingaccounttype.md",1 !INCLUDE "billingcurrency.md",1 !INCLUDE "billingperiodend.md",1 !INCLUDE "billingperiodstart.md",1 @@ -51,6 +52,7 @@ The FOCUS specification defines a group of columns that provide qualitative valu !INCLUDE "skupriceid.md",1 !INCLUDE "subaccountid.md",1 !INCLUDE "subaccountname.md",1 +!INCLUDE "subaccounttype.md",1 !INCLUDE "tags.md",1 [FODOFC]: https://www.finops.org/framework/capabilities/ diff --git a/specification/columns/commitmentdiscounttype.md b/specification/columns/commitmentdiscounttype.md index 3c3dfe746..37f5ac1bf 100644 --- a/specification/columns/commitmentdiscounttype.md +++ b/specification/columns/commitmentdiscounttype.md @@ -4,8 +4,11 @@ Commitment Discount Type is a provider-assigned name to identify the type of [*c The CommitmentDiscountType column adheres to the following requirements: -* The CommitmentDiscountType column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *commitment discounts*. -* This column MUST be of type String, MUST be null when [CommitmentDiscountId](#commitmentdiscountid) is null, and MUST NOT be null when CommitmentDiscountId is not null. +* CommitmentDiscountType MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *commitment discounts*. +* CommitmentDiscountType MUST be of type String. +* CommitmentDiscountType MUST be null when [CommitmentDiscountId](#commitmentdiscountid) is null. +* CommitmentDiscountType MUST NOT be null when CommitmentDiscountId is not null. +* CommitmentDiscountType MUST be a consistent, readable display value. ## Column ID @@ -19,7 +22,7 @@ Commitment Discount Type A provider-assigned identifier for the type of *commitment discount* applied to the *row*. -## Content constraints +## Content Constraints | Constraint | Value | |:----------------|:-----------------| diff --git a/specification/columns/subaccounttype.md b/specification/columns/subaccounttype.md new file mode 100644 index 000000000..8e88782e3 --- /dev/null +++ b/specification/columns/subaccounttype.md @@ -0,0 +1,39 @@ +# Sub Account Type + +Sub Account Type is a provider-assigned name to identify the type of [*sub account*](#glossary:sub-account). Sub Account Type is a readable display name and not a code. Sub Account Type is commonly used for scenarios like mapping FOCUS constructs to provider constructs and summarizing costs across providers. + +The SubAccountType column adheres to the following requirements: + +* SubAccountType MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports more than one possible SubAccountType value. +* SubAccountType MUST be of type String. +* SubAccountType MUST conform to [String Handling](#stringhandling) requirements. +* SubAccountType MUST be null when SubAccountId is null. +* SubAccountType MUST NOT be null when SubAccountId not is null. +* SubAccountType MUST be a consistent, readable display value. + +## Column ID + +SubAccountType + +## Display Name + +Sub Account Type + +## Description + +A provider-assigned identifier for the type of *sub account* applied to the *row*. + +## Content Constraints + +| Constraint | Value | +| :-------------- | :--------------- | +| Column type | Dimension | +| Feature level | Conditional | +| Column required | True | +| Allows nulls | True | +| Data type | String | +| Value format | \ | + +## Introduced (version) + +1.2 diff --git a/supporting_content/columns/billingaccounttype.md b/supporting_content/columns/billingaccounttype.md new file mode 100644 index 000000000..055660e04 --- /dev/null +++ b/supporting_content/columns/billingaccounttype.md @@ -0,0 +1,39 @@ +# Column: BillingAccountType + +## Example provider mappings + +Current column mappings found in available data sets: + +| Provider | Data set | Column | +| --------- | ----------------------- | ------------- | +| AWS | CUR | Not available | +| GCP | BigQuery Billing Export | Not available | +| Microsoft | Cost details | Not available | + +## Documentation + +- GCP: [Resource Hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy#resource-hierarchy-detail) +- Azure: [Organizing resources](https://learn.microsoft.com/azure/cost-management-billing/manage/view-all-accounts) +- AWS: [Org Concepts](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html) + +## Example usage scenarios + +Current terms used by providers: + +| Provider | Scenario | Value | +| --------- | ------------- | -------------------- | +| AWS | Not available | "Payer Account" | +| GCP | Not available | "Billing Account" | +| Microsoft | EA | "Billing Account" | +| Microsoft | MCA/MPA | "Billing Profile" | +| Microsoft | Other | "Subscription" | +| OCI | Not available | "Billing Account" | + +## Discussion / scratch space + +We ran a poll to determine if BillingAccountType and SubAccountType columns were desired. Poll results: +* 4 votes for `Yes, add both columns as REQUIRED for ALL providers` +* 10 votes for `Yes, add both columns as REQUIRED for providers that have DIFFERENT ACCOUNT TYPES` +* 1 vote for `Yes, add both columns as OPTIONAL for all providers` +* 4 votes for `I am fine with or without these columns` +* 0 votes for `No, I do not want/need these columns in the FOCUS dataset` diff --git a/supporting_content/columns/subaccounttype.md b/supporting_content/columns/subaccounttype.md new file mode 100644 index 000000000..4d6b89410 --- /dev/null +++ b/supporting_content/columns/subaccounttype.md @@ -0,0 +1,38 @@ +# Column: SubAccountType + +## Example provider mappings + +Current column mappings found in available data sets: + +| Provider | Data set | Column | +| --------- | ----------------------- | ------------- | +| AWS | CUR | Not available | +| GCP | BigQuery Billing Export | Not available | +| Microsoft | Cost details | Not available | + +## Documentation + +- GCP: [Resource Hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy#resource-hierarchy-detail) +- Azure: [Organizing resources](https://learn.microsoft.com/azure/cost-management-billing/manage/view-all-accounts) +- AWS: [Org Concepts](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html) + +## Example usage scenarios + +Current terms used by providers: + +| Provider | Value | +| --------- | ---------------- | +| AWS | "Membership Account" | +| GCP | "Project" | +| Microsoft | "Subscription" | +| OCI | "Tenancy" | +| OCI | "Child Tenancy" | + +## Discussion / scratch space + +We ran a poll to determine if BillingAccountType and SubAccountType columns were desired. Poll results: +* 4 votes for `Yes, add both columns as REQUIRED for ALL providers` +* 10 votes for `Yes, add both columns as REQUIRED for providers that have DIFFERENT ACCOUNT TYPES` +* 1 vote for `Yes, add both columns as OPTIONAL for all providers` +* 4 votes for `I am fine with or without these columns` +* 0 votes for `No, I do not want/need these columns in the FOCUS dataset`