diff --git a/specification/attributes/discount_handling.md b/specification/attributes/discount_handling.md
index 87770e053..be585c284 100644
--- a/specification/attributes/discount_handling.md
+++ b/specification/attributes/discount_handling.md
@@ -1,10 +1,10 @@
# Discount Handling
-A discount is a pricing construct where providers offer a reduced price for [*services*](#glossary:service). Providers may have many types of discounts, including but not limited to commercially negotiated discounts, commitment-based discounts when you agree to a certain amount of usage or spend, and bundled discounts where you receive free or discounted usage of one product or *service* based on the usage of another. Discount Handling is commonly used in scenarios like verifying discounts were applied and calculating cost savings.
+A discount is a pricing construct where providers offer a reduced price for [*services*](#glossary:service). Providers may have many types of discounts, including but not limited to commercially negotiated discounts, commitment discounts when you agree to a certain amount of usage or spend, and bundled discounts where you receive free or discounted usage of one product or *service* based on the usage of another. Discount Handling is commonly used in scenarios like verifying discounts were applied and calculating cost savings.
-Some discount offers can be purchased from a provider to get reduced prices. The most common example is a commitment-based discount, where you "purchase" a commitment to use or spend a specific amount within a period. When a commitment isn't fully utilized, the unused amount reduces the potential savings from the discount and can even result in paying higher costs than without the discount. Due to this risk, unused commitment amounts need to be clearly identifiable at a granular level. To facilitate this, unused commitments are recorded with a separate row for each charge period where the commitment was not fully utilized. In order to show the impact of purchased discounts on each discounted row, discount purchases need the purchase amount the be amortized over the term the discount is applied to (e.g., 1 year) with each charge period split and applied to each row that received the discount.
+Some discount offers can be purchased from a provider to get reduced prices. The most common example is a commitment discount, where you "purchase" a commitment to use or spend a specific amount within a period. When a commitment isn't fully utilized, the unused amount reduces the potential savings from the discount and can even result in paying higher costs than without the discount. Due to this risk, unused commitment amounts need to be clearly identifiable at a granular level. To facilitate this, unused commitments are recorded with a separate row for each charge period where the commitment was not fully utilized. In order to show the impact of purchased discounts on each discounted row, discount purchases need the purchase amount the be amortized over the term the discount is applied to (e.g., 1 year) with each charge period split and applied to each row that received the discount.
-Amortization is a process used to break down and spread purchase costs over a period of time or term of use. When a purchase is applicable to resources, like commitment-based discounts, the amortized cost of a resource takes the initial payment and term into account and distributes it out based on the resource's usage, attributing the prorated cost for each unit of billing. Amortization enables users of billing data to distribute purchase charges to the appropriate audience in support of cost allocation efforts. Discount Handling for purchased commitments is commonly used for scenarios like calculating utilization and implementing chargeback for the purchase amount.
+Amortization is a process used to break down and spread purchase costs over a period of time or term of use. When a purchase is applicable to resources, like commitment discounts, the amortized cost of a resource takes the initial payment and term into account and distributes it out based on the resource's usage, attributing the prorated cost for each unit of billing. Amortization enables users of billing data to distribute purchase charges to the appropriate audience in support of cost allocation efforts. Discount Handling for purchased commitments is commonly used for scenarios like calculating utilization and implementing chargeback for the purchase amount.
While providers may use different terms to describe discounts, FOCUS identifies a discount as being a reduced price applied directly to a row. Any price or cost reductions that are awarded after the fact are identified as a "Credit" Charge Category. One example might be when a provider offers a reduced rate after passing a certain threshold of usage or spend.
@@ -29,15 +29,15 @@ Indicates how to include and apply discounts to usage charges or rows in a FOCUS
* Multiple discounts MAY apply to a row, but they MUST apply to the entire charge covered by that row.
* If a discount only applies to a portion of a charge, then the discounted portion of the charge MUST be split into a separate row.
* Each discount MUST be identifiable using existing FOCUS columns.
- * Rows with a commitment-based discount applied to them MUST include a CommitmentDiscountId.
+ * Rows with a commitment discount applied to them MUST include a CommitmentDiscountId.
* If a provider applies a discount that cannot be represented by a FOCUS column, they SHOULD include additional columns to identify the source of the discount.
-* Purchased discounts (e.g., commitment-based discounts) MUST be amortized.
+* Purchased discounts (e.g., commitment discounts) MUST be amortized.
* The BilledCost MUST be 0 for any row where the commitment covers the entire cost for the charge period.
* The EffectiveCost MUST include the portion of the amortized purchase cost that applies to this row.
- * The sum of the EffectiveCost for all rows where CommitmentDiscountStatus is "Used" or "Unused" for each CommitmentDiscountId over the entire duration of the commitment MUST be the same as the total BilledCost of the commitment-based discount.
- * The CommitmentDiscountId and ResourceId MUST be set to the ID assigned to the commitment-based discount. ChargeCategory MUST be set to "Purchase" on rows that represent a purchase of a commitment-based discount.
+ * The sum of the EffectiveCost for all rows where CommitmentDiscountStatus is "Used" or "Unused" for each CommitmentDiscountId over the entire duration of the commitment MUST be the same as the total BilledCost of the commitment discount.
+ * The CommitmentDiscountId and ResourceId MUST be set to the ID assigned to the commitment discount. ChargeCategory MUST be set to "Purchase" on rows that represent a purchase of a commitment discount.
* CommitmentDiscountStatus MUST be "Used" for ChargeCategory "Usage" rows that received a reduced price from a commitment. CommitmentDiscountId MUST be set to the ID assigned to the discount. ResourceId MUST be set to the ID of the resource that received the discount.
- * If a commitment is not fully utilized, the provider MUST include a row that represents the unused portion of the commitment for that charge period. These rows MUST be represented with CommitmentDiscountStatus set to "Unused" and ChargeCategory set to "Usage". Such rows MUST have their CommitmentDiscountId and ResourceId set to the ID assigned to the commitment-based discount.
+ * If a commitment is not fully utilized, the provider MUST include a row that represents the unused portion of the commitment for that charge period. These rows MUST be represented with CommitmentDiscountStatus set to "Unused" and ChargeCategory set to "Usage". Such rows MUST have their CommitmentDiscountId and ResourceId set to the ID assigned to the commitment discount.
* Credits that are applied after the fact MUST use a ChargeCategory of "Credit".
## Exceptions
diff --git a/specification/columns/commitmentdiscountcategory.md b/specification/columns/commitmentdiscountcategory.md
index 7e422e9ee..70c08b180 100644
--- a/specification/columns/commitmentdiscountcategory.md
+++ b/specification/columns/commitmentdiscountcategory.md
@@ -1,8 +1,8 @@
# Commitment Discount Category
-Commitment Discount Category indicates whether the [*commitment-based discount*](#glossary:commitment-based-discount) identified in the CommitmentDiscountId column is based on usage quantity or cost (aka "spend").
+Commitment Discount Category indicates whether the [*commitment discount*](#glossary:commitment-discount) identified in the CommitmentDiscountId column is based on usage quantity or cost (aka "spend").
-The CommitmentDiscountCategory column MUST be present in a FOCUS dataset when the provider supports *commitment-based 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. The CommitmentDiscountCategory MUST be one of the allowed values.
+The CommitmentDiscountCategory column MUST be present in a 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. The CommitmentDiscountCategory MUST be one of the allowed values.
## Column ID
@@ -14,7 +14,7 @@ Commitment Discount Category
## Description
-Indicates whether the *commitment-based discount* identified in the CommitmentDiscountId column is based on usage quantity or cost (aka "spend").
+Indicates whether the *commitment discount* identified in the CommitmentDiscountId column is based on usage quantity or cost (aka "spend").
## Content constraints
@@ -30,8 +30,8 @@ Allowed values:
| Value | Description |
|:--------|:-------------------------------------------------------------------------|
-| Spend | Commitment-based discounts that require a predetermined amount of spend. |
-| Usage | Commitment-based discounts that require a predetermined amount of usage. |
+| Spend | Commitment discounts that require a predetermined amount of spend. |
+| Usage | Commitment discounts that require a predetermined amount of usage. |
## Introduced (version)
diff --git a/specification/columns/commitmentdiscountid.md b/specification/columns/commitmentdiscountid.md
index fd6a78bdf..30e99853f 100644
--- a/specification/columns/commitmentdiscountid.md
+++ b/specification/columns/commitmentdiscountid.md
@@ -1,8 +1,8 @@
# Commitment Discount ID
-A Commitment Discount ID is the identifier assigned to a [*commitment-based discount*](#glossary:commitment-based-discount) by the provider. Commitment Discount ID is commonly used for scenarios like chargeback for *commitments* and savings per *commitment-based discount*.
+A Commitment Discount ID is the identifier assigned to a [*commitment discount*](#glossary:commitment-discount) by the provider. Commitment Discount ID is commonly used for scenarios like chargeback for *commitments* and savings per *commitment discount*.
-The CommitmentDiscountId column MUST be present in a FOCUS dataset when the provider supports *commitment-based discounts*. This column MUST be of type String and MUST NOT contain null values when a charge is related to a *commitment-based discount*. When a charge is not associated with a *commitment-based discount*, the column MUST be null. CommitmentDiscountId MUST be unique within the provider.
+The CommitmentDiscountId column MUST be present in a FOCUS dataset when the provider supports *commitment discounts*. This column MUST be of type String and MUST NOT contain null values when a charge is related to a *commitment discount*. When a charge is not associated with a *commitment discount*, the column MUST be null. CommitmentDiscountId MUST be unique within the provider.
## Column ID
@@ -14,7 +14,7 @@ Commitment Discount ID
## Description
-The identifier assigned to a *commitment-based discount* by the provider.
+The identifier assigned to a *commitment discount* by the provider.
## Content constraints
diff --git a/specification/columns/commitmentdiscountname.md b/specification/columns/commitmentdiscountname.md
index 4ab4075ae..97abc352d 100644
--- a/specification/columns/commitmentdiscountname.md
+++ b/specification/columns/commitmentdiscountname.md
@@ -1,8 +1,8 @@
# Commitment Discount Name
-A Commitment Discount Name is the display name assigned to a [*commitment-based discount*](#glossary:commitment-based-discount).
+A Commitment Discount Name is the display name assigned to a [*commitment discount*](#glossary:commitment-discount).
-The CommitmentDiscountName column MUST be present in a FOCUS dataset when the provider supports *commitment-based discounts*. This column MUST be of type String. The CommitmentDiscountName value MUST be null if the charge is not related to a *commitment-based discount* and MAY be null if a display name cannot be assigned to a *commitment-based discount*. CommitmentDiscountName MUST NOT be null if a display name can be assigned to a *commitment-based discount*.
+The CommitmentDiscountName column MUST be present in a FOCUS dataset when the provider supports *commitment discounts*. This column MUST be of type String. The CommitmentDiscountName value MUST be null if the charge is not related to a *commitment discount* and MAY be null if a display name cannot be assigned to a *commitment discount*. CommitmentDiscountName MUST NOT be null if a display name can be assigned to a *commitment discount*.
## Column ID
@@ -14,7 +14,7 @@ Commitment Discount Name
## Description
-The display name assigned to a *commitment-based discount*.
+The display name assigned to a *commitment discount*.
## Content constraints
diff --git a/specification/columns/commitmentdiscountstatus.md b/specification/columns/commitmentdiscountstatus.md
index 085e4417e..8353d0284 100644
--- a/specification/columns/commitmentdiscountstatus.md
+++ b/specification/columns/commitmentdiscountstatus.md
@@ -1,8 +1,8 @@
# Commitment Discount Status
-Commitment Discount Status indicates whether the charge corresponds with the consumption of the [*commitment-based discount*](#glossary:commitment-based-discount) identified in the CommitmentDiscountId column or the unused portion of the committed amount.
+Commitment Discount Status indicates whether the charge corresponds with the consumption of the [*commitment discount*](#glossary:commitment-discount) identified in the CommitmentDiscountId column or the unused portion of the committed amount.
-The CommitmentDiscountStatus column MUST be present in a FOCUS dataset when the provider supports *commitment-based 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 and [Charge Category](#chargecategory) is "Usage". The CommitmentDiscountCategory MUST be one of the allowed values.
+The CommitmentDiscountStatus column MUST be present in a 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 and [Charge Category](#chargecategory) is "Usage". The CommitmentDiscountCategory MUST be one of the allowed values.
## Column ID
@@ -14,7 +14,7 @@ Commitment Discount Status
## Description
-Indicates whether the charge corresponds with the consumption of a *commitment-based discount* or the unused portion of the committed amount.
+Indicates whether the charge corresponds with the consumption of a *commitment discount* or the unused portion of the committed amount.
## Content constraints
@@ -30,8 +30,8 @@ Allowed values:
| Value | Description |
| :----- | :-------------------------------------------------------------------------- |
-| Used | Charges that utilized a specific amount of a commitment-based discount. |
-| Unused | Charges that represent the unused portion of the commitment-based discount. |
+| Used | Charges that utilized a specific amount of a commitment discount. |
+| Unused | Charges that represent the unused portion of the commitment discount. |
## Introduced (version)
diff --git a/specification/columns/commitmentdiscounttype.md b/specification/columns/commitmentdiscounttype.md
index 71eb249c2..48e61926e 100644
--- a/specification/columns/commitmentdiscounttype.md
+++ b/specification/columns/commitmentdiscounttype.md
@@ -1,8 +1,8 @@
# Commitment Discount Type
-Commitment Discount Type is a provider-assigned name to identify the type of [*commitment-based discount*](#glossary:commitment-based-discount) applied to the [*row*](#glossary:row).
+Commitment Discount Type is a provider-assigned name to identify the type of [*commitment discount*](#glossary:commitment-discount) applied to the [*row*](#glossary:row).
-The CommitmentDiscountType column MUST be present in a FOCUS dataset when the provider supports *commitment-based 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.
+The CommitmentDiscountType column MUST be present in a 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.
## Column ID
@@ -14,7 +14,7 @@ Commitment Discount Type
## Description
-A provider-assigned identifier for the type of *commitment-based discount* applied to the *row*.
+A provider-assigned identifier for the type of *commitment discount* applied to the *row*.
## Content constraints
diff --git a/specification/columns/contractedcost.md b/specification/columns/contractedcost.md
index 37710d034..12912f761 100644
--- a/specification/columns/contractedcost.md
+++ b/specification/columns/contractedcost.md
@@ -2,7 +2,7 @@
Contracted Cost represents the cost calculated by multiplying [*contracted unit price*](#glossary:contracted-unit-price) and the corresponding [Pricing Quantity](#pricingquantity). Contracted Cost is denominated in the [Billing Currency](#billingcurrency) and is commonly used for calculating savings based on negotiation activities, by comparing it with [List Cost](#listcost). If negotiated discounts are not applicable, the Contracted Cost defaults to the List Cost.
-**Important:** When aggregating Contracted Cost for savings calculations, it's important to exclude either one-time or recurring charges ([Charge Category](#chargecategory) "Purchase") that are paid to cover future eligible charges (e.g., [Commitment-Based Discount](#glossary:commitment-based-discount)) or the covered charges themselves. This exclusion helps prevent double counting of these charges in the aggregation. Which set of charges to exclude depends on whether cost are aggregated on a billed basis (exclude covered charges) or accrual basis (exclude Purchases for future charges). For instance, charges categorized as [Charge Category](#chargecategory) "Purchase" and their related [Charge Category](#chargecategory) "Tax" charges for a Commitment-Based Discount might be excluded from an accrual basis cost aggregation of Contracted Cost. This is because the "Usage" and "Tax" charge records provided during the term of the commitment discount already specify the Contracted Cost. Purchase charges that cover future eligible charges can be identified by filtering for [Charge Category](#chargecategory) "Purchase" records with a [Billed Cost](#billedcost) greater than 0 and an [Effective Cost](#effectivecost) equal to 0.
+**Important:** When aggregating Contracted Cost for savings calculations, it's important to exclude either one-time or recurring charges ([Charge Category](#chargecategory) "Purchase") that are paid to cover future eligible charges (e.g., [Commitment Discount](#glossary:commitment-discount)) or the covered charges themselves. This exclusion helps prevent double counting of these charges in the aggregation. Which set of charges to exclude depends on whether cost are aggregated on a billed basis (exclude covered charges) or accrual basis (exclude Purchases for future charges). For instance, charges categorized as [Charge Category](#chargecategory) "Purchase" and their related [Charge Category](#chargecategory) "Tax" charges for a Commitment Discount might be excluded from an accrual basis cost aggregation of Contracted Cost. This is because the "Usage" and "Tax" charge records provided during the term of the commitment discount already specify the Contracted Cost. Purchase charges that cover future eligible charges can be identified by filtering for [Charge Category](#chargecategory) "Purchase" records with a [Billed Cost](#billedcost) greater than 0 and an [Effective Cost](#effectivecost) equal to 0.
The ContractedCost column MUST be present in a FOCUS dataset and MUST NOT be null. This column MUST be of type Decimal, MUST conform to [Numeric Format](#numericformat) requirements, and be denominated in the BillingCurrency. When [ContractedUnitPrice](#contractedunitprice) is present and not null, multiplying the ContractedUnitPrice by PricingQuantity MUST produce the ContractedCost, except in cases of [ChargeClass](#chargeclass) "Correction", which may address PricingQuantity or any cost discrepancies independently.
diff --git a/specification/columns/contractedunitprice.md b/specification/columns/contractedunitprice.md
index 0104c899a..faf177d32 100644
--- a/specification/columns/contractedunitprice.md
+++ b/specification/columns/contractedunitprice.md
@@ -1,6 +1,6 @@
# Contracted Unit Price
-The Contracted Unit Price represents the agreed-upon unit price for a single [Pricing Unit](#pricingunit) of the associated SKU, inclusive of negotiated discounts, if present, while excluding negotiated commitment-based discounts or any other discounts. This price is denominated in the [Billing Currency](#billingcurrency). The Contracted Unit Price is commonly used for calculating savings based on negotiation activities. If negotiated discounts are not applicable, the Contracted Unit Price defaults to the [List Unit Price](#listunitprice).
+The Contracted Unit Price represents the agreed-upon unit price for a single [Pricing Unit](#pricingunit) of the associated SKU, inclusive of negotiated discounts, if present, while excluding negotiated commitment discounts or any other discounts. This price is denominated in the [Billing Currency](#billingcurrency). The Contracted Unit Price is commonly used for calculating savings based on negotiation activities. If negotiated discounts are not applicable, the Contracted Unit Price defaults to the [List Unit Price](#listunitprice).
The ContractedUnitPrice column MUST be present in a FOCUS dataset when the provider supports negotiated pricing concept. This column MUST be a Decimal within the range of non-negative decimal values, MUST conform to [Numeric Format](#numericformat) requirements, and be denominated in the BillingCurrency. It MUST NOT be null when [ChargeClass](#chargeclass) is not "Correction" and [ChargeCategory](#chargecategory) is "Usage" or "Purchase", MUST be null when ChargeCategory is "Tax", and MAY be null for all other combinations of ChargeClass and ChargeCategory. When ContractedUnitPrice is present and not null, multiplying ContractedUnitPrice by [PricingQuantity](#pricingquantity) MUST equal [ContractedCost](#contractedcost), except in cases of ChargeClass "Correction", which may address PricingQuantity or any cost discrepancies independently.
@@ -14,7 +14,7 @@ Contracted Unit Price
## Description
-The agreed-upon unit price for a single Pricing Unit of the associated SKU, inclusive of negotiated discounts, if present, while excluding negotiated commitment-based discounts or any other discounts.
+The agreed-upon unit price for a single Pricing Unit of the associated SKU, inclusive of negotiated discounts, if present, while excluding negotiated commitment discounts or any other discounts.
## Content Constraints
diff --git a/specification/columns/effectivecost.md b/specification/columns/effectivecost.md
index 25c0f8ac7..eb5b28887 100644
--- a/specification/columns/effectivecost.md
+++ b/specification/columns/effectivecost.md
@@ -5,7 +5,7 @@ Effective Cost represents the [*amortized*](#glossary:amortization) cost of the
This column resolves two challenges that are faced by practitioners:
1. Practitioners need to *amortize* relevant purchases, such as upfront fees, throughout the *commitment* and distribute them to the appropriate reporting groups (e.g. [*tags*](#glossary:tag), [*resources*](#glossary:resource)).
-2. Many [*commitment-based discount*](#glossary:commitment-based-discount) constructs include a recurring expense for the *commitment* for every [*billing period*](#glossary:billing-period) and must distribute this cost to the *resources* using the *commitment*. This forces reconciliation between the initial *commitment* [*row*](#glossary:row) per period and the actual usage *rows*.
+2. Many [*commitment discount*](#glossary:commitment-discount) constructs include a recurring expense for the *commitment* for every [*billing period*](#glossary:billing-period) and must distribute this cost to the *resources* using the *commitment*. This forces reconciliation between the initial *commitment* [*row*](#glossary:row) per period and the actual usage *rows*.
The EffectiveCost column MUST be present in a FOCUS dataset and MUST NOT be null. This column MUST be of type Decimal, MUST conform to [Numeric Format](#numericformat) requirements, and be denominated in the BillingCurrency. EffectiveCost MUST be 0 when ChargeCategory is "Purchase" and the purchase is intended to cover future eligible charges. The aggregated EffectiveCost for a billing period may not match the charge received on the invoice for the same *billing period*.
diff --git a/specification/columns/listcost.md b/specification/columns/listcost.md
index ad881ad3e..de5fabc87 100644
--- a/specification/columns/listcost.md
+++ b/specification/columns/listcost.md
@@ -2,7 +2,7 @@
List Cost represents the cost calculated by multiplying the [*list unit price*](#glossary:list-unit-price) and the corresponding [Pricing Quantity](#pricingquantity). List Cost is denominated in the [Billing Currency](#billingcurrency) and is commonly used for calculating savings based on various rate optimization activities, by comparing it with [Contracted Cost](#contractedcost), [Billed Cost](#billedcost) and [Effective Cost](#effectivecost).
-**Important:** When aggregating List Cost for savings calculations, it's important to exclude either one-time or recurring charges ([Charge Category](#chargecategory) "Purchase") that are paid to cover future eligible charges (e.g., [Commitment-Based Discount](#glossary:commitment-based-discount)) or the covered charges themselves. This exclusion helps prevent double counting of these charges in the aggregation. Which set of charges to exclude depends on whether cost are aggregated on a billed basis (exclude covered charges) or accrual basis (exclude Purchases for future charges). For instance, charges categorized as [Charge Category](#chargecategory) "Purchase" and their related [Charge Category](#chargecategory) "Tax" charges for a Commitment-Based Discount might be excluded from an accrual basis cost aggregation of List Cost. This is because the "Usage" and "Tax" charge records provided during the term of the commitment discount already specify the List Cost. Purchase charges that cover future eligible charges can be identified by filtering for [Charge Category](#chargecategory) "Purchase" records with a [Billed Cost](#billedcost) greater than 0 and an [Effective Cost](#effectivecost) equal to 0.
+**Important:** When aggregating List Cost for savings calculations, it's important to exclude either one-time or recurring charges ([Charge Category](#chargecategory) "Purchase") that are paid to cover future eligible charges (e.g., [Commitment Discount](#glossary:commitment-discount)) or the covered charges themselves. This exclusion helps prevent double counting of these charges in the aggregation. Which set of charges to exclude depends on whether cost are aggregated on a billed basis (exclude covered charges) or accrual basis (exclude Purchases for future charges). For instance, charges categorized as [Charge Category](#chargecategory) "Purchase" and their related [Charge Category](#chargecategory) "Tax" charges for a Commitment Discount might be excluded from an accrual basis cost aggregation of List Cost. This is because the "Usage" and "Tax" charge records provided during the term of the commitment discount already specify the List Cost. Purchase charges that cover future eligible charges can be identified by filtering for [Charge Category](#chargecategory) "Purchase" records with a [Billed Cost](#billedcost) greater than 0 and an [Effective Cost](#effectivecost) equal to 0.
The ListCost column MUST be present in a FOCUS dataset and MUST NOT be null. This column MUST be of type Decimal, MUST conform to [Numeric Format](#numericformat) requirements, and be denominated in the BillingCurrency. When [ListUnitPrice](#listunitprice) is present and not null, multiplying the ListUnitPrice by PricingQuantity MUST produce the ListCost, except in cases of [ChargeClass](#chargeclass) "Correction", which may address PricingQuantity or any cost discrepancies independently.
diff --git a/specification/columns/pricingcategory.md b/specification/columns/pricingcategory.md
index c9037ec43..7f881fa46 100644
--- a/specification/columns/pricingcategory.md
+++ b/specification/columns/pricingcategory.md
@@ -1,6 +1,6 @@
# Pricing Category
-Pricing Category describes the pricing model used for a charge at the time of use or purchase. It can be useful for distinguishing between charges incurred at the [*list unit price*](#glossary:list-unit-price) or a reduced price and exposing optimization opportunities, like increasing [commitment-based discount](#glossary:commitment-based-discount) coverage.
+Pricing Category describes the pricing model used for a charge at the time of use or purchase. It can be useful for distinguishing between charges incurred at the [*list unit price*](#glossary:list-unit-price) or a reduced price and exposing optimization opportunities, like increasing [commitment discount](#glossary:commitment-discount) coverage.
The PricingCategory column adheres to the following requirements:
@@ -38,9 +38,9 @@ Allowed values:
| Value | Description |
| :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| Standard | Charges priced at the agreed upon rate for the billing account, including negotiated discounts. This includes any flat rate and volume/tiered pricing but does not include dynamic or commitment-based discount pricing. |
+| Standard | Charges priced at the agreed upon rate for the billing account, including negotiated discounts. This includes any flat rate and volume/tiered pricing but does not include dynamic or commitment discount pricing. |
| Dynamic | Charges priced at a variable rate determined by the provider. This includes any product or service with a unit price the provider can change without notice, like interruptible or low priority resources. |
-| Committed | Charges with reduced prices due to a commitment-based discount specified by the Commitment Discount ID. |
+| Committed | Charges with reduced prices due to a commitment discount specified by the Commitment Discount ID. |
| Other | Charges priced in a way not covered by another pricing category. |
## Introduced (version)
diff --git a/specification/glossary.md b/specification/glossary.md
index 677b138d6..dae733a37 100644
--- a/specification/glossary.md
+++ b/specification/glossary.md
@@ -44,7 +44,7 @@ The time window for which a charge is effective, inclusive of the start date and
A customer's agreement to consume a specific quantity of a service or resource over a defined period, usually also creating a financial commitment throughout the entirety of the commitment period. Some commitments also hold Providers to certain assurance levels of resource availability.
-Commitment-Based Discount
+Commitment Discount
Also known as Commitment Discount, this is a commitment for an amount of usage or spend throughout a specified term, in exchange for discounted unit pricing on that amount. The commitment may be based on quantities of resource units or monetary value, with various payment options and time frames.
diff --git a/specification/use_case_library.md b/specification/use_case_library.md
index 535cb9ec5..b8b5da96c 100644
--- a/specification/use_case_library.md
+++ b/specification/use_case_library.md
@@ -5,7 +5,7 @@ The following table contains a set of commonly performed FinOps scenarios that w
| Persona | Capability | Use Case | FOCUS Columns |
|:--|:--|:--|:--|
| Business / Product Owner | Budget Management | As a Business/Product Owner, I need to compare actual usage costs incurred within a time period to the amount forecasted. | BilledCost
BillingAccountId
BillingAccountName
ChargePeriodStart
ChargePeriodEnd
ChargeCategory
Provider |
-| Engineering & Operations | Budget Management | As an Engineering Manager who wants to reduce their billed cost for Compute for a specific provider, I want to understand what is my current rate of Commitment based discount (without negotiated discounts) per type of commitment, so that I can strategize further purchases | BillingPeriodStart
CommitmentDiscountType
EffectiveCost
ProviderName
ServiceName
SubAccountId
SubAccountName |
+| Engineering & Operations | Budget Management | As an Engineering Manager who wants to reduce their billed cost for Compute for a specific provider, I want to understand what is my current rate of commitment discount (without negotiated discounts) per type of commitment, so that I can strategize further purchases | BillingPeriodStart
CommitmentDiscountType
EffectiveCost
ProviderName
ServiceName
SubAccountId
SubAccountName |
| Engineering & Operations | Data Analysis and Showback | As an Engineer, I want to understand the costs of the components that belong to an application | ChargeDescription
ChargePeriodStart
EffectiveCost
ResourceId
ResourceName
ResourceType
ServiceCategory
ServiceName
SkuId
Tags |
| Engineering & Operations | Data Analysis and Showback | As an Engineer, I want to understand the costs of the components for a specific resource | ChargePeriodStart
EffectiveCost
ResourceId
ResourceName
SkuId |
| Engineering & Operations | Data Analysis and Showback | As an Engineer, I want to understand the costs of all components and resources within a subaccount | ChargePeriodStart
EffectiveCost
ResourceId
ResourceName
SkuId
SubAccountId |
@@ -16,7 +16,7 @@ The following table contains a set of commonly performed FinOps scenarios that w
| Finance | Budget Management | As a person in Finance, I need to update cloud budget with actual cost details within a billing period | BilledCost
BillingPeriodStart
BillingPeriodEnd
ProviderName |
| Finance | Budget Management | As a person in Finance, I need to update budget, by application, with actual cost details within a billed time period | BilledCost
BillingPeriodStart
BillingPeriodEnd
ProviderName
Tags |
| Finance | Budget Management | As a person in Finance, I need to track tax costs month over month. | BillingPeriodStart
BilledCost
ChargeCategory
ProviderName |
-| Finance | Budget Management | As a Financial Analyst or member of the company's treasury, I would like to understand what volume of commitment based charges are going to reoccur in the coming financial year | ChargeFrequency
BillingPeriodStart
BilledCost |
+| Finance | Budget Management | As a Financial Analyst or member of the company's treasury, I would like to understand what volume of commitment discount charges are going to reoccur in the coming financial year | ChargeFrequency
BillingPeriodStart
BilledCost |
| Finance | Data Analysis and Showback | As a Finance person of a company that sells SaaS services, I need to determine the resource quantity and type used by a customer so that a monthly invoice can be issued to the customer. | ProviderName
BillingPeriodStart
SkuId
PricingQuantity
ConsumedQuantity
ConsumedUnit
Tags |
| Finance | Data Analysis and Showback | As a person in Finance, I need a report of all cost associated with a product from all geographic locations for a given month. | BilledCost
BillingCurrency
BillingAccountId
BillingAccountName
BillingPeriodEnd
ProviderName
Tags |
| Finance | FinOps & Intersecting Frameworks | As a person in Finance, I need a report of service-level cost within a specific Sub Account as a part of a private pricing negotiation. | BillingPeriodStart
EffectiveCost
ProviderName
ServiceName
SubAccountId
SubAccountName |
@@ -35,8 +35,8 @@ The following table contains a set of commonly performed FinOps scenarios that w
| FinOps Practitioner | Managing Anomalies | As a FinOps Practitioner, I need to see the daily costs across all cloud providers, billing accounts, and sub accounts | BillingAccountId
SubAccountId
ChargePeriodStart
ChargePeriodEnd
ProviderName
EffectiveCost |
| FinOps Practitioner | Managing Anomalies | As a FinOps Practitioner, I need to see the daily costs across all cloud providers, billing accounts, sub accounts, and region | BillingAccountId
SubAccountId
ChargePeriodStart
ChargePeriodEnd
EffectiveCost
ProviderName
RegionId
RegionName |
| FinOps Practitioner | Managing Anomalies | As a FinOps practitioner, I need to see the daily costs across all cloud providers, billing accounts, sub accounts, and service | BillingAccountId
SubAccountId
ChargePeriodStart
ChargePeriodEnd
EffectiveCost
ProviderName
ServiceName |
-| FinOps Practitioner | Managing Commitment Based Discounts | As a FinOps Practitioner, I want to track all commitment based discounts purchased for a time period | ProviderName
BillingAccountId
CommitmentDiscountId
CommitmentDiscountType
BilledCost
ChargePeriodStart
ChargeCategory |
-| FinOps Practitioner | Managing Commitment Based Discounts | As a FinOps Practitioner, I want to track unused commitment charges in any given time period so that I consider them in my future commitment planning or remedy them | CommitmentDiscountStatus (filter)
CommitmentDiscountId
BilledCost
ChargePeriodStart |
+| FinOps Practitioner | Managing Commitment Discounts | As a FinOps Practitioner, I want to track all commitment discounts purchased for a time period | ProviderName
BillingAccountId
CommitmentDiscountId
CommitmentDiscountType
BilledCost
ChargePeriodStart
ChargeCategory |
+| FinOps Practitioner | Managing Commitment Discounts | As a FinOps Practitioner, I want to track unused commitment charges in any given time period so that I consider them in my future commitment planning or remedy them | CommitmentDiscountStatus (filter)
CommitmentDiscountId
BilledCost
ChargePeriodStart |
| FinOps Practitioner | Resource Utilization & Efficiency | As a FinOps Practitioner, I need to analyze the fleet diversity in order to run a campaign to standardize application architecture. | ChargeCategory
ChargeDescription
ChargePeriodStart
ProviderName
ResourceType
SubAccountId
ServiceName |
| FinOps Practitioner | Resource Utilization & Efficiency | As a FinOps Practitioner, I need to analyze the fleet diversity in order to run a campaign to standardize application architecture within a specific service | ChargeCategory
ChargeDescription
ChargePeriodStart
ProviderName
ResourceType
SubAccountId
ServiceName |
| FinOps Practitioner | Resource Utilization & Efficiency | As a FinOps Practitioner, I need to identify total refunds within a billing period. | ProviderName
BillingAccountId
ServiceCategory
BilledCost
BillingPeriodStart
ChargeCategory
ChargeClass |
diff --git a/supporting_content/attributes/discount_handling.md b/supporting_content/attributes/discount_handling.md
index 4eac11eae..53eba39d4 100644
--- a/supporting_content/attributes/discount_handling.md
+++ b/supporting_content/attributes/discount_handling.md
@@ -49,14 +49,14 @@ Explanation of the unused commitment row:
Providers offer various discounting schemes for their service offerings. These discounts typically fall into common types such as:
-- Commitment-based discounts
+- Commitment discounts
- Tier-based discounts
- Negotiated discounts
- Promotional discounts
- Usage-based discounts
- Partner discounts
-## Commitment-based discounts
+## Commitment discounts
- Usage-based commitment discounts
- Spend-based commitment discounts
diff --git a/supporting_content/columns/chargecategory.md b/supporting_content/columns/chargecategory.md
index c4047d6d2..47a3df444 100644
--- a/supporting_content/columns/chargecategory.md
+++ b/supporting_content/columns/chargecategory.md
@@ -31,7 +31,7 @@ Current values observed in billing data for various scenarios:
| GCP | adjustment | Adjustment | ![Screenshot of GCP cost details with type and mode columns.](https://github.com/FinOps-Open-Cost-and-Usage-Spec/FOCUS_Spec/assets/399533/af90e4cd-f3c0-448a-bb0f-0249bcf7135c)
Example 1:
Description: "Billing correction - Adjustment for project X for incorrect Flexible CUD charge"
Mode: "MANUAL_ADJUSTMENT"
Type: "GENERAL_ADJUSTMENT" |
| GCP | rounding_error | Adjustment | These show up as monthly rows without a project as a credit |
| GCP | credit | Adjustment | Fields: type, name, amount, full_name, id
![Screenshot of a table with a type column and 5 rows of example values](https://github.com/FinOps-Open-Cost-and-Usage-Spec/FOCUS_Spec/assets/399533/15bcc210-5a36-473b-aeac-c1d2682dfdc8) |
-| Microsoft | Purchase | Purchase | Upfront or recurring fee for Marketplace offers or commitment-based discounts. |
+| Microsoft | Purchase | Purchase | Upfront or recurring fee for Marketplace offers or commitment discounts. |
| Microsoft | Usage | Usage | Consumption-based usage of deployed resources. |
| Microsoft | Refund | Adjustment | Refund provided by support. |
| Microsoft | Adjustment | Adjustment | Rounding errors. |
diff --git a/supporting_content/columns/contractedunitprice.md b/supporting_content/columns/contractedunitprice.md
index 9be525c3a..83c0764d2 100644
--- a/supporting_content/columns/contractedunitprice.md
+++ b/supporting_content/columns/contractedunitprice.md
@@ -50,7 +50,7 @@ Current column mappings found in available data sets:
* [Azure Billing Enterprise APIs - PriceSheet | Microsoft Learn](https://learn.microsoft.com/en-us/rest/api/billing/enterprise/ provides information for EA.
* TODO: Check if there is a Microsoft Custom Prices REST API, which might provide custom/negotiated prices for all account types.
-* **unitPrice** (The price per unit for the charge.) includes commitment based discounts and thus is not applicable for all use cases. Furthermore,
+* **unitPrice** (The price per unit for the charge.) includes commitment discounts and thus is not applicable for all use cases. Furthermore,
* According to documentation, it is available only for EA and PAYG.
* It is unclear if it's denominated in Billing or Pricing currency. Noticed that for different accounts types different relations apply
* In one case `unitPrice * quantity = costInBillingCurrency`
diff --git a/supporting_content/columns/listunitprice.md b/supporting_content/columns/listunitprice.md
index b42175a7a..f9e069c4f 100644
--- a/supporting_content/columns/listunitprice.md
+++ b/supporting_content/columns/listunitprice.md
@@ -51,7 +51,7 @@ Current column mappings found in available data sets:
### Current data sources and SkuPriceId
-* For GCP and OCI, Pricing Data serves as the sole data source for ListUnitPrice, while for AWS, it is the preferred data source due to concerns related to volume/tier-based pricing. To determine the relevant price in Pricing Data for a specific charge record, the billing data must include the SkuPriceId. * Considering that providers publish not only list/on-demand prices but also unit prices inclusive of commitment-based discounts (and perhaps more), we can't directly associate ListUnitPrice with the SkuPriceId.
+* For GCP and OCI, Pricing Data serves as the sole data source for ListUnitPrice, while for AWS, it is the preferred data source due to concerns related to volume/tier-based pricing. To determine the relevant price in Pricing Data for a specific charge record, the billing data must include the SkuPriceId. * Considering that providers publish not only list/on-demand prices but also unit prices inclusive of commitment discounts (and perhaps more), we can't directly associate ListUnitPrice with the SkuPriceId.
* How to resolve the ListUnitPrice from the Price Sheet or Pricing API based on SkuPriceId? Consider introducing an additional column that would contain the ID of the corresponding List/On-Demand SKU Price ID, instead of providing guidelines and expecting practitioners to resolve it.
* As previously mentioned, when BillingCurrency and PricingCurrency differ, the exchange rate must also be considered.
@@ -63,7 +63,7 @@ Current column mappings found in available data sets:
* Is it ok to assume that rates of interruptible resources and services (spare capacity, spot) fall into category of dynamically priced SKU rates? (do we plan to cover this in the glossary?)
* OPTION B: The List Unit Price represents a suggested provider-published unit price for a single [Pricing Unit](#pricingunit) of the associated SKU, exclusive of any discounts.
* Is it ok to assume that practitioners perceive mentioned rates as reduced rates rather than discounts?
- * OPTION C: The List Unit Price represents a suggested provider-published unit price for a single [Pricing Unit](#pricingunit) of the associated SKU, exclusive of any negotiated or commitment-based discounts.
+ * OPTION C: The List Unit Price represents a suggested provider-published unit price for a single [Pricing Unit](#pricingunit) of the associated SKU, exclusive of any negotiated or commitment discounts.
* Is it ok to assume that those are the only two discounts?
* Being inclusive of free-tier, volume/tier-based, BYOL-based and dynamically priced SKU rates, the List Unit Price cannot be used for calculating savings based on volume/tier-based pricing, the use of pre-owned software licenses (BYOL - Bring Your Own License), leveraging interruptible resources and/or services, or optimizing usage to take advantage of dynamic pricing models.
diff --git a/supporting_content/columns/pricingcategory.md b/supporting_content/columns/pricingcategory.md
index d899a6e07..e99146935 100644
--- a/supporting_content/columns/pricingcategory.md
+++ b/supporting_content/columns/pricingcategory.md
@@ -34,7 +34,7 @@ Current values observed in billing data for various scenarios:
## Discussion Topics
* Goal of the column is to enable practitioners to identify charges that have reduced prices vs. not.
- * The most common question for this column is to identify commitment-based discounts and spot separate from on-demand.
+ * The most common question for this column is to identify commitment discounts and spot separate from on-demand.
* In 0.5, we didn't have enough time to close on how spot would be included:
* Someone mentioned that "spot" was a marketing term, so we tried to avoid it.
* We discussed values like "Preemptible" (confusing), "Interruptible" (not a pricing model), "Market-Based", "Variable", and "Dynamic". Ultimately, we agreed on "Dynamic".
@@ -64,7 +64,7 @@ Current values observed in billing data for various scenarios:
* We felt "Standard" was more clear as a differentiator from "Tiered" pricing. Another alternative was "Flat Rate".
* We also discussed whether to use "Commitment-Based" or "Discounted".
* If we use "Discounted", then any future discounting strategy could get rolled into a single column without the need to change values.
- * The main downside of this is that, given how important commitment-based discounts are (and the fact that they are one of the primary reasons for adding this column), we felt it was important to call them out explicitly.
+ * The main downside of this is that, given how important commitment discounts are (and the fact that they are one of the primary reasons for adding this column), we felt it was important to call them out explicitly.
* Additionally, given different discount strategies will price things differently, it's also important that we distinguish the separate pricing models at the top level.
* We also didn't have any other clear examples that would fall into "Discounted" pricing that would be meaningfully grouped together in a way that practitioners would want to see together and not distinguished separately from their committed costs.
* We also discussed the term "Dynamic" and whether it was clear enough.
diff --git a/supporting_content/columns/pricingquantity.md b/supporting_content/columns/pricingquantity.md
index ced9b2608..11598c403 100644
--- a/supporting_content/columns/pricingquantity.md
+++ b/supporting_content/columns/pricingquantity.md
@@ -9,7 +9,7 @@ Current column mappings found in available data sets:
| AWS | Cost and Usage Report | lineItem/UsageAmount (NOTE: how to handle reservation/TotalReservedUnits|
| GCP | BigQuery Billing Export | usage.amount_in_pricing_units (NOTE: usage.amount provides UsageQuantity) |
| Microsoft | Cost Details | Not available (NOTE: While Quantity is the closest, it provides UsageQuantity and not PricingQuantity) |
-| OCI | Cost and Usage Report | usage/billedQuantity Note: usage/billedQuantity preferred over usage/billedQuantityOverage since the latter does not include the quantity covered by Universal Credits (commitment-based discounts) |
+| OCI | Cost and Usage Report | usage/billedQuantity Note: usage/billedQuantity preferred over usage/billedQuantityOverage since the latter does not include the quantity covered by Universal Credits (commitment discounts) |
## References and Resources