Skip to content

Commit

Permalink
Merge branch 'working_draft' into update-release-planning
Browse files Browse the repository at this point in the history
  • Loading branch information
jpradocueva authored Oct 11, 2024
2 parents 9f5f79f + c6fb404 commit 00e2dad
Show file tree
Hide file tree
Showing 76 changed files with 140 additions and 140 deletions.
2 changes: 1 addition & 1 deletion EDITORIAL_GUIDELINES.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ These guidelines can be modified through a Pull Request (PR), which the members
>
> The **[Pricing Quantity](#pricing-quantity)** represents the volume of a given [SKU](#glossary:sku) associated with a [resource](#glossary:resource) or [service](#glossary:service) used or purchased, based on the **[Pricing Unit](#pricing-unit)**. Distinct from **[Consumed Quantity](#consumed-quantity)** (complementary to **[Consumed Unit](#consumed-unit)**), it focuses on pricing and cost, not resource and service consumption.
>
> * The PricingQuantity column MUST be present in the billing data.
> * The PricingQuantity column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset).
> * This column MUST be of type Decimal and MUST conform to Numeric Format requirements.
> * The value MAY be negative in cases where ChargeClass is "Correction".
>
Expand Down
16 changes: 8 additions & 8 deletions specification/appendix/commitment_discounts.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
# Commitment Discounts

A [*commitment discount*](glossary:commitment-discount) is a billing discount model that offers reduced rates on preselected [*SKUs*](#glossary:sku) in exchange for an obligated usage or spend amount over a predefined [*term*](glossary:term). *Commitment discounts* typically consist of purchase and usage records within cost and usage datasets.
A [*commitment discount*](#glossary:commitment-discount) is a billing discount model that offers reduced rates on preselected [*SKUs*](#glossary:sku) in exchange for an obligated usage or spend amount over a predefined [*term*](#glossary:term). *Commitment discounts* typically consist of purchase and usage records within cost and usage datasets.

Usage-based *commitment discounts* obligate a customer to a predetermined amount of usage over a preselected *term*. In some cases, usage-based *commitment discounts* also feature [*commitment discount flexibility*](glossary:commitment-discount-flexibility) which may expand the types of *resources* that a *commitment discount* can cover. It is important to note when mixing *commitment discounts* with and without *commitment discount flexibility*, the `CommitmentDiscountUnit` should reflect this difference.
Usage-based *commitment discounts* obligate a customer to a predetermined amount of usage over a preselected *term*. In some cases, usage-based *commitment discounts* also feature [*commitment discount flexibility*](#glossary:commitment-discount-flexibility) which may expand the types of [*resources*](#glossary:resource) that a *commitment discount* can cover. It is important to note when mixing *commitment discounts* with and without *commitment discount flexibility*, the [CommitmentDiscountUnit](#commitmentdiscountunit) should reflect this difference.

Spend-based commitment discounts obligate a customer to a predetermined amount of spend over a preselected *term*. In the usage examples below, each [*row*](glossary:row) measures the monetary amount of the hourly commit consumed by the *commitment discount*, so the `CommitmentDiscountUnit` chosen is "USD", or the [*billing currency*](glossary:billing-currency).
Spend-based commitment discounts obligate a customer to a predetermined amount of spend over a preselected *term*. In the usage examples below, each [*row*](#glossary:row) measures the monetary amount of the hourly commit consumed by the *commitment discount*, so the CommitmentDiscountUnit chosen is "USD", or the [*billing currency*](#glossary:billing-currency).

## Purchasing

While customers are bound to the *term* of a *commitment discounts*, providers offer some or all of the following payment options before and/or during the *term*:

* *All Upfront* - The *commitment discounts* is paid in full before the *term* begins.
* *No Upfront* - The *commitment discounts* is paid on a repeated basis, typically over each [*billing period*](glossary:billing-period) of the *term*.
* *No Upfront* - The *commitment discounts* is paid on a repeated basis, typically over each [*billing period*](#glossary:billing-period) of the *term*.
* *Partial Upfront* - Some of the *commitment discounts* is paid before the *term* begins, and the rest is paid repeatedly over the *term*.

For example, if a customer buys a 1-year, spend-based *commitment discount* with a $1.00 hourly commit and pays with the partial option, the *commitment discount's* payment consists of a one-time purchase in the beginning of the *term* *and* monthly recurring purchases with the following totals:
Expand All @@ -21,7 +21,7 @@ For example, if a customer buys a 1-year, spend-based *commitment discount* with

## Usage

Commitment discounts follow a "use-it-or-lose-it" model where the [*amortization*](glossary:amortization) of a *commitment discount's* purchase applies evenly to eligible *resources* over each [*charge period*](glossary:charge-period) of the *term*.
Commitment discounts follow a "use-it-or-lose-it" model where the [*amortization*](#glossary:amortization) of a *commitment discount's* purchase applies evenly to eligible *resources* over each [*charge period*](#glossary:charge-period) of the *term*.

For example, if a customer buys a spend-based *commitment discount* with a $1.00 hourly commit in January (31 days), only $1.00 is eligible for consumption for each hourly *charge period*. If a customer has eligible *resources* running during this *charge period*, an amount of up to $1.00 will be allocated to these *resources*. Conversely, if a customer does have eligible *resources* running that fully take advantage of this $1.00 during this *charge period*, then some or all of this amount will go to waste.

Expand All @@ -31,9 +31,9 @@ Within the FOCUS specification, the following examples demonstrate how a *commit

### Purchase *Rows*

All *commitment discount* purchases appear with a positive `BilledCost`, `PricingCategory` as "Standard", and with the *commitment discount's* id populating both the `ResourceId` and `CommitmentDiscountId` value. One-time purchases appear as a single record with `ChargeCategory` as "Purchase", `ChargeFrequency` as "One-Time", and the total quantity and units for *commitment discount's* *term* reflected as `CommitmentDiscountQuantity` and `CommitmentDiscountUnit`, respectively.
All *commitment discount* purchases appear with a positive [BilledCost](#billedcost), [PricingCategory](#pricingcategory) as "Standard", and with the *commitment discount's* id populating both the [ResourceId](#resourceid) and [CommitmentDiscountId](#commitmentdiscountid) value. One-time purchases appear as a single record with [ChargeCategory](#chargecategory) as "Purchase", [ChargeFrequency](#chargefrequency) as "One-Time", and the total quantity and units for *commitment discount's* *term* reflected as [CommitmentDiscountQuantity](#commitmentdiscountquantity) and CommitmentDiscountUnit, respectively.

Recurring purchases are allocated across all corresponding *charge periods* of the *term* when `ChargeCategory` is "Purchase", `ChargeFrequency` is "Recurring", and `CommitmentDiscountQuantity` and `CommitmentDiscountUnit` are reflected only for that *charge period*.
Recurring purchases are allocated across all corresponding *charge periods* of the *term* when ChargeCategory is "Purchase", ChargeFrequency is "Recurring", and CommitmentDiscountQuantity and CommitmentDiscountUnit are reflected only for that *charge period*.

Using the same *commitment discount* example as above with a one-year, spend-based *commitment discount* with a $1.00 hourly commit purchased on Jan 1, 2023, various purchase options are available:

Expand Down Expand Up @@ -166,7 +166,7 @@ In this scenario, one eligible *resource* runs for the full hour and consumes &d

#### Scenario #2: No eligible *resource* consumes the allocated amount (0% utilization)

In this situation, the full eligible, $1.00 amount remained unutilized and results in 1 unused *row*. In this scenario, it is important to note that while `CommitmentDiscountQuantity` is not because $1 was still drawn down by the *commitment discount* even though, no *resource* was allocated, so `ConsumedQuantity` and `ConsumedUnit` are null.
In this situation, the full eligible, $1.00 amount remained unutilized and results in 1 unused *row*. In this scenario, it is important to note that while CommitmentDiscountQuantity is not because $1 was still drawn down by the *commitment discount* even though, no *resource* was allocated, so [ConsumedQuantity](#consumedquantity) and [ConsumedUnit](#consumedunit) are null.

```json
[
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Metadata Examples

The following sections contain examples of metadata provided by a hypothetical FOCUS data provider called ACME to supply the required reference between the FOCUS dataset and the schema metadata. Provider implementations will vary on how the metadata is disseminated; however, the provider's chosen metadata delivery approach should be able to support the structure represented in this example.
The following sections contain examples of metadata provided by a hypothetical FOCUS data provider called ACME to supply the required reference between the [*FOCUS dataset*](#glossary:FOCUS-dataset) and the schema metadata. Provider implementations will vary on how the metadata is disseminated; however, the provider's chosen metadata delivery approach should be able to support the structure represented in this example.

In this example, the provider supports delivery of FOCUS data via file export to a data storage system. It uses JSON as the format for providing the metadata. The provider delivers data every 12 hours into a path structure described below:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Scenario

ACME specifies the optional metadata property [Provider Version](#providerversion) in their [Schema](#schema) object. They made a change to the FOCUS dataset they produce that does not adopt a new FOCUS Version, nor make a change the included columns but does impact values in the data. This example illustrates that Provider Version changes are independent of column changes, however provider version changes may include column changes.
ACME specifies the optional metadata property [Provider Version](#providerversion) in their [Schema](#schema) object. They made a change to the [*FOCUS dataset*](#glossary:FOCUS-dataset) they produce that does not adopt a new FOCUS Version, nor make a change the included columns but does impact values in the data. This example illustrates that Provider Version changes are independent of column changes, however provider version changes may include column changes.

The provider creates a new schema object to represent the new schema. The provider includes both the FOCUS Version and Provider Version in the schema object.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# Grouping constructs for resources or services

Providers natively support various constructs for grouping resources or services. These grouping constructs are often used to mimic organizational structures, technical architectures, cost attribution/allocation and access management boundaries, or other customer-specific structures based on requirements.
Providers natively support various constructs for grouping [*resources*](#glossary:resource) or [*services*](#glossary:service). These grouping constructs are often used to mimic organizational structures, technical architectures, cost attribution/allocation and access management boundaries, or other customer-specific structures based on requirements.

Providers may support multiple levels of resource or service grouping mechanisms. FOCUS supports two distinct levels of groupings that are commonly needed for FinOps capabilities like chargeback, invoice reconciliation and cost allocation.

* Billing account: A mandatory container for resources or services that are billed together in an invoice. Billing accounts are commonly used for scenarios like grouping based on organizational constructs, invoice reconciliation and cost allocation strategies.
* Sub account: An optional provider-supported construct for organizing resources and services connected to a billing account. Sub accounts are commonly used for scenarios like grouping based on organizational constructs, access management needs and cost allocation strategies. Sub accounts must be associated with a billing account as they do not receive invoices.
* [*Billing account*](#glossary:billing-account): A mandatory container for *resources* or *services* that are billed together in an invoice. *Billing accounts* are commonly used for scenarios like grouping based on organizational constructs, invoice reconciliation and cost allocation strategies.
* [Sub account](#glossary:sub-account): An optional provider-supported construct for organizing *resources* and *services* connected to a *billing account*. *Sub accounts* are commonly used for scenarios like grouping based on organizational constructs, access management needs and cost allocation strategies. *Sub accounts* must be associated with a *billing account* as they do not receive invoices.

The table below highlights key properties of the two grouping constructs supported by FOCUS.

Expand Down
8 changes: 4 additions & 4 deletions specification/appendix/origination_of_cost_data.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

Cost data presented in the billing datasets originates from various sources depending on the purchasing mechanism. There are at least 3 different pieces of information that are important for understanding where cost originated from.

* Provider: The entity that made the resources or services available for purchase.
* Publisher: The entity that produced the resources or services that were purchased.
* Invoice Issuer: The entity responsible for invoicing for the resources or services consumed.
* [Provider](#provider): The entity that made the [*resources*](#glossary:resource) or [*services*](#glossary:service) available for purchase.
* [Publisher](#publisher): The entity that produced the *resources* or *services* that were purchased.
* [Invoice Issuer](#invoiceissuer): The entity responsible for invoicing for the *resources* or *services* consumed.

The value for each of these may be different depending on the various purchasing scenarios for resources or services. Use cases for purchasing direct, via a Managed Service Provider (MSP), via a cloud marketplace, and from internal service offerings were considered. The table below presents a few scenarios to show how the value for each dimension may change based on the purchasing scenario.
The value for each of these may be different depending on the various purchasing scenarios for *resources* or *services*. Use cases for purchasing direct, via a Managed Service Provider (MSP), via a cloud marketplace, and from internal service offerings were considered. The table below presents a few scenarios to show how the value for each dimension may change based on the purchasing scenario.

| # | Scenario | Provider | Publisher | Invoice Issuer |
|:----|:----------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------|:-----------------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------|
Expand Down
2 changes: 1 addition & 1 deletion specification/attributes/attributes.mdpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Attributes

Attributes are requirements that apply across a FOCUS dataset instead of an individual column level. Requirements on data content can include naming
Attributes are requirements that apply across a [*FOCUS dataset*](#glossary:FOCUS-dataset) instead of an individual column level. Requirements on data content can include naming
conventions, data types, formatting standardizations, etc. Attributes may introduce high-level requirements
for data granularity, recency, frequency, etc. Requirements defined in attributes are necessary for servicing
[FinOps capabilities][FODOFC] accurately using a standard set of instructions regardless of the origin of the data.
Expand Down
2 changes: 1 addition & 1 deletion specification/attributes/column_naming_and_ordering.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Column Naming and Ordering

## Description

Naming and ordering convention for columns appearing in a FOCUS dataset.
Naming and ordering convention for columns appearing in a [*FOCUS dataset*](#glossary:FOCUS-dataset).

## Requirements

Expand Down
2 changes: 1 addition & 1 deletion specification/attributes/currency_code_format.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Currency Code Format

## Description

Formatting for currency columns appearing in a FOCUS dataset.
Formatting for currency columns appearing in a [*FOCUS dataset*](#glossary:FOCUS-dataset).

## Requirements

Expand Down
2 changes: 1 addition & 1 deletion specification/attributes/datetime_format.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Date/Time Format

## Description

Rules and formatting requirements for date/time-related columns appearing in a FOCUS dataset.
Rules and formatting requirements for date/time-related columns appearing in a [*FOCUS dataset*](#glossary:FOCUS-dataset).

## Requirements

Expand Down
2 changes: 1 addition & 1 deletion specification/attributes/key_value_format.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Key-Value Format

## Description

Rules and formatting requirements for columns appearing in a FOCUS dataset that convey data as key-value pairs.
Rules and formatting requirements for columns appearing in a [*FOCUS dataset*](#glossary:FOCUS-dataset) that convey data as key-value pairs.

## Requirements

Expand Down
2 changes: 1 addition & 1 deletion specification/attributes/numeric_format.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Numeric Format

## Description

Rules and formatting requirements for numeric columns appearing in a FOCUS dataset.
Rules and formatting requirements for numeric columns appearing in a [*FOCUS dataset*](#glossary:FOCUS-dataset).

## Requirements

Expand Down
2 changes: 1 addition & 1 deletion specification/attributes/string_handling.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ String Handling

## Description

Requirements for string-capturing columns appearing in a FOCUS dataset.
Requirements for string-capturing columns appearing in a [*FOCUS dataset*](#glossary:FOCUS-dataset).

## Requirements

Expand Down
4 changes: 2 additions & 2 deletions specification/attributes/unit_format.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Unit Format

Billing data frequently captures data measured in units related to data size, count, time, and other [*dimensions*](#glossary:dimension). The Unit Format attribute provides a standard for expressing units of measure in columns appearing in a FOCUS dataset.
Billing data frequently captures data measured in units related to data size, count, time, and other [*dimensions*](#glossary:dimension). The Unit Format attribute provides a standard for expressing units of measure in columns appearing in a [*FOCUS dataset*](#glossary:FOCUS-dataset).

All columns defined in FOCUS specifying Unit Format as a value format MUST follow the requirements listed below.

Expand All @@ -14,7 +14,7 @@ Unit Format

## Description

Indicates standards for expressing measurement units in columns appearing in a FOCUS dataset.
Indicates standards for expressing measurement units in columns appearing in a *FOCUS dataset*.

## Requirements

Expand Down
2 changes: 1 addition & 1 deletion specification/columns/billedcost.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

The [*billed cost*](#glossary:billed-cost) represents a charge serving as the basis for invoicing, inclusive of the impacts of all reduced rates and discounts while excluding the [*amortization*](#glossary:amortization) of relevant purchases (one-time or recurring) paid to cover future eligible charges. This cost is denominated in the [Billing Currency](#billingcurrency). The Billed Cost is commonly used to perform FinOps capabilities that require cash-basis accounting such as cost allocation, budgeting, and invoice reconciliation.

The BilledCost 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), and be denominated in the BillingCurrency. The sum of the BilledCost for [*rows*](#glossary:row) in a given [*billing period*](#glossary:billing-period) MUST match the sum of the invoices received for that *billing period* for a [*billing account*](#glossary:billing-account).
The BilledCost column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) and MUST NOT be null. This column MUST be of type Decimal, MUST conform to [Numeric Format](#numericformat), and be denominated in the BillingCurrency. The sum of the BilledCost for [*rows*](#glossary:row) in a given [*billing period*](#glossary:billing-period) MUST match the sum of the invoices received for that *billing period* for a [*billing account*](#glossary:billing-account).

## Column ID

Expand Down
Loading

0 comments on commit 00e2dad

Please sign in to comment.