Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FOCUS #557: Preview - Refinement of FOCUS Columns Normative Requirements #664

Open
wants to merge 14 commits into
base: working_draft
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions specification/columns/availabilityzone.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

An [*availability zone*](#glossary:availability-zone) is a provider-assigned identifier for a physically separated and isolated area within a Region that provides high availability and fault tolerance. Availability Zone is commonly used for scenarios like analyzing cross-zone data transfer usage and the corresponding cost based on where [*resources*](#glossary:resource) are deployed.

---
The AvailabilityZone column adheres to the following requirements:

* AvailabilityZone is RECOMMENDED to be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports deploying resources or services within an *availability zone*.
* If present, the column adheres to the following additional requirements:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Personally, I would rather not have this line and keep all requirements at the root level. The requirements are all valid whether the column is present or not, so I'm not sure what the value of nesting these requirements is.

* AvailabilityZone MUST be of type String.
* AvailabilityZone MUST conform to [String Handling](#stringhandling) requirements.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* AvailabilityZone MUST conform to [String Handling](#stringhandling) requirements.

Discussed in Dec 10 TF1. Propose postponing adding such requirements until lower-hanging fruit of consistency is collected.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I must have missed something. Why is linking attributes contentious?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Talking to Irena - she suggested postponing this due to provider conformance concerns.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggest we discuss this in the TF-1 meeting. This sheet can serve as the basis for our discussion.

* AvailabilityZone MAY be null if a charge is not specific to an *availability zone*.

---
The AvailabilityZone column adheres to the following requirements:

* The AvailabilityZone column is RECOMMENDED to be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports deploying resources or services within an *availability zone*.
Expand Down
11 changes: 11 additions & 0 deletions specification/columns/billedcost.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,17 @@

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.

---
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Do we have a requirement that these lines be here? Do we require them to have specific spacing before/after? I don't mind them. I would just ask that they have empty lines before and after to align to existing markdown linting rules. (Although, I don't think we've implemented any yet.)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These lines are just temporary separators surrounding the candidate versions of the normative requirements (helping us to more easily spot the before/after differences).

The BilledCost column adheres to the following requirements:

* BilledCost MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset).
* BilledCost MUST be of type Decimal.
* BilledCost MUST conform to [Numeric Format](#numericformat) requirements.
* BilledCost MAY be null if a charge is not specific to an *availability zone*.
* BilledCost MUST 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 adheres to the following requirements:

* The BilledCost column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) and MUST NOT be null.
Expand Down
10 changes: 10 additions & 0 deletions specification/columns/billingaccountid.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

A Billing Account ID is a provider-assigned identifier for a [*billing account*](#glossary:billing-account). *Billing accounts* are commonly used for scenarios like grouping based on organizational constructs, invoice reconciliation and cost allocation strategies.

---
The BillingAccountId column adheres to the following requirements:

* BillingAccountId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset).
* BillingAccountId MUST be of type String.
* BillingAccountId MUST conform to [String Handling](#stringhandling) requirements.
* BillingAccountId MUST NOT be null.
* BillingAccountId MUST be a globally unique identifier within a provider.

---
The BillingAccountId column adheres to the following requirements:

* The BillingAccountId column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset).
Expand Down
10 changes: 10 additions & 0 deletions specification/columns/billingaccountname.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

A Billing Account Name is a display name assigned to a [*billing account*](#glossary:billing-account). *Billing accounts* are commonly used for scenarios like grouping based on organizational constructs, invoice reconciliation and cost allocation strategies.

---
The BillingAccountName column adheres to the following requirements:

* BillingAccountName MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset).
* BillingAccountName MUST be of type String.
* BillingAccountName MUST conform to [String Handling](#stringhandling) requirements.
* BillingAccountName MUST NOT be null when the provider supports assigning a display name for the *billing account*.
* BillingAccountName MUST be unique within a customer.

---
The BillingAccountName column adheres to the following requirements:

* The BillingAccountName column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) and MUST NOT be null when the provider supports assigning a display name for the *billing account*.
Expand Down
10 changes: 10 additions & 0 deletions specification/columns/billingcurrency.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

[*Billing currency*](#glossary:billing-currency) is an identifier that represents the currency that a charge for [*resources*](#glossary:resource) or [*services*](#glossary:service) was billed in. Billing Currency is commonly used in scenarios where costs need to be grouped or aggregated.

---
The BillingCurrency column adheres to the following requirements:

* BillingCurrency MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset).
* BillingCurrency MUST be of type String.
* BillingCurrency MUST conform to [Currency Code Format](#currencycodeformat) requirements.
* BillingCurrency MUST NOT be null.
* BillingCurrency MUST match the currency used in the invoice generated by the invoice issuer.

---
The BillingCurrency column adheres to the following requirements:

* The BillingCurrency column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset).
Expand Down
11 changes: 11 additions & 0 deletions specification/columns/billingperiodend.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,17 @@

Billing Period End represents the [*exclusive*](#glossary:exclusivebound) end date and time of a [*billing period*](#glossary:billing-period). For example, a time period where [BillingPeriodStart](#glossary:billingperiodstart) is '2024-01-01T00:00:00Z' and BillingPeriodEnd is '2024-02-01T00:00:00Z' includes charges for January, since BillingPeriodStart is [*inclusive*](#glossary:inclusivebound), but does not include charges for February since BillingPeriodEnd is *exclusive*.

---
The BillingPeriodEnd column adheres to the following requirements:

* BillingPeriodEnd MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset).
* BillingPeriodEnd MUST be of type Date/Time.
* BillingPeriodEnd MUST conform to [Date/Time Format](#date/timeformat) requirements.
* BillingPeriodEnd MUST NOT be null.
* BillingPeriodEnd MUST be the *exclusive ending bound* of the *billing period*.
* The sum of the [BilledCost](#billedcost) for [*rows*](#glossary:row) in a given *billing period* MUST match the sum of the invoices received for that *billing period* for a [*billing account*](#glossary:billing-account).

---
The BillingPeriodEnd column adheres to the following requirements:

* The BillingPeriodEnd column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset).
Expand Down
11 changes: 11 additions & 0 deletions specification/columns/billingperiodstart.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,17 @@

Billing Period Start represents the [*inclusive*](#glossary:inclusivebound) start date and time of a [*billing period*](#glossary:billing-period). For example, a time period where BillingPeriodStart is '2024-01-01T00:00:00Z' and [BillingPeriodEnd](#billingperiodend) is '2024-02-01T00:00:00Z' includes charges for January, since BillingPeriodStart is inclusive, but does not include charges for February since BillingPeriodEnd is [*exclusive*](#glossary:exclusivebound).

---
The BillingPeriodStart column adheres to the following requirements:

* BillingPeriodStart MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset).
* BillingPeriodStart MUST be of type Date/Time.
* BillingPeriodStart MUST conform to [Date/Time Format](#date/timeformat) requirements.
* BillingPeriodStart MUST NOT be null.
* BillingPeriodStart MUST be the *inclusive beginning bound* of the *billing period*.
* The sum of the [BilledCost](#billedcost) for [*rows*](#glossary:row) in a given *billing period* MUST match the sum of the invoices received for that *billing period* for a [*billing account*](#glossary:billing-account).

---
The BillingPeriodStart column adheres to the following requirements:

* The BillingPeriodStart column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset), MUST be of type [Date/Time Format](#date/timeformat), MUST be an *inclusive* value, and MUST NOT contain null values.
Expand Down
14 changes: 14 additions & 0 deletions specification/columns/capacityreservationid.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,20 @@

A Capacity Reservation ID is the identifier assigned to a [*capacity reservation*](#glossary:capacity-reservation) by the provider. Capacity Reservation ID is commonly used for scenarios to allocate charges for capacity reservation usage.

---
The CapacityReservationId column adheres to the following requirements:

* CapacityReservationId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *capacity reservations*.
* If present, the column adheres to the following additional requirements:
* CapacityReservationId MUST be of type String.
* CapacityReservationId MUST conform to [String Handling](#stringhandling) requirements.
* CapacityReservationId MUST be null when a charge is not related to a *capacity reservation*.
* CapacityReservationId SHOULD NOT be null when a charge is related to a capacity reservation.
* CapacityReservationId MUST NOT be null when a charge represents the unused portion of a *capacity reservation*.
* CapacityReservationId MUST ensure global uniqueness within the provider.
* CapacityReservationId SHOULD be a fully-qualified identifier.

---
The CapacityReservationId column adheres to the following requirements:

* CapacityReservationId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *capacity reservations* and MUST be of type String.
Expand Down
14 changes: 14 additions & 0 deletions specification/columns/capacityreservationstatus.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,20 @@

Capacity Reservation Status indicates whether the charge represents either the consumption of the [*capacity reservation*](#glossary:capacity-reservation) identified in the CapacityReservationId column or when the *capacity reservation* is unused.

---
The CapacityReservationStatus column adheres to the following requirements:

* CapacityReservationStatus MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *capacity reservations*.
* If present, the column adheres to the following additional requirements:
* CapacityReservationStatus MUST be of type String.
* CapacityReservationStatus MUST be null if CapacityReservationId is null.
* If CapacityReservationId is not null and [ChargeCategory](#chargecategory) is "Usage", the following applies:
ijurica marked this conversation as resolved.
Show resolved Hide resolved
* CapacityReservationStatus MUST NOT be null.
* CapacityReservationStatus MUST be one of the allowed values.
* CapacityReservationStatus MUST be "Unused" when the charge represents the unused portion of a *capacity reservation*.
* CapacityReservationStatus MUST be "Used" when the charge represents the used portion of a *capacity reservation*.

---
The CapacityReservationStatus column adheres to the following requirements:

* CapacityReservationStatus MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *capacity reservations* and MUST be of type String.
Expand Down
10 changes: 10 additions & 0 deletions specification/columns/chargecategory.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

Charge Category represents the highest-level classification of a charge based on the nature of how it is billed. Charge Category is commonly used to identify and distinguish between types of charges that may require different handling.

---
The ChargeCategory column adheres to the following requirements:

* ChargeCategory MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset).
* ChargeCategory MUST be of type String.
* ChargeCategory MUST NOT be null.
* ChargeCategory MUST be one of the allowed values.

---

The ChargeCategory column adheres to the following requirements:

* The ChargeCategory column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) and MUST NOT be null.
Expand Down
12 changes: 12 additions & 0 deletions specification/columns/chargeclass.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,18 @@

Charge Class indicates whether the row represents a correction to a previously invoiced [*billing period*](#glossary:billing-period). Charge Class is commonly used to differentiate corrections from regularly incurred charges.

---
The ChargeClass column adheres to the following requirements:

* ChargeClass MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset).
* ChargeClass MUST be of type String.
* ChargeClass MUST be null when the row does not represent a correction or when it represents a correction within the current *billing period*.
* When the row represents a correction to a previously invoiced *billing period*, the following applies:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be "If"? Also aligning to a previous suggestion...

Suggested change
* When the row represents a correction to a previously invoiced *billing period*, the following applies:
* If the row represents a correction to a previously invoiced *billing period*, the column adheres to the following additional requirements:

* ChargeClass MUST NOT be null.
* ChargeClass MUST be one of the allowed values.
* ChargeClass MUST be "Correction".

---
The ChargeClass column adheres to the following requirements:

* The ChargeClass column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset).
Expand Down
10 changes: 10 additions & 0 deletions specification/columns/chargedescription.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

A Charge Description provides a high-level context of a [*row*](#glossary:row) without requiring additional discovery. This column is a self-contained summary of the charge's purpose and price. It typically covers a select group of corresponding details across a billing dataset or provides information not otherwise available.

---
The ChargeDescription column adheres to the following requirements:

* ChargeDescription MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset).
* ChargeDescription MUST be of type String.
* ChargeDescription MUST conform to [String Handling](#stringhandling) requirements.
* ChargeDescription SHOULD NOT be null.
* ChargeDescription length SHOULD be specified by providers in their publicly available documentation.

---
The ChargeDescription column adheres to the following requirements:

* The ChargeDescription column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset), MUST be of type String, and SHOULD NOT be null.
Expand Down
11 changes: 11 additions & 0 deletions specification/columns/chargefrequency.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,17 @@

Charge Frequency indicates how often a charge will occur. Along with the [charge period](#glossary:chargeperiod) related columns, the Charge Frequency is commonly used to understand recurrence periods (e.g., monthly, yearly), forecast upcoming charges, and differentiate between one-time and recurring fees for purchases.

---
The ChargeFrequency column adheres to the following requirements:

* ChargeFrequency is RECOMMENDED to be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset).
* If present, the column adheres to the following additional requirements:
* ChargeFrequency MUST be of type String.
* ChargeFrequency MUST NOT be null.
* ChargeFrequency MUST be one of the allowed values.
* ChargeFrequency MUST NOT be "Usage-Based" if [ChargeCategory](#chargecategory) is "Purchase".

---
The ChargeFrequency column adheres to the following requirements:

* The ChargeFrequency column is RECOMMENDED be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) and MUST NOT be null.
Expand Down
10 changes: 10 additions & 0 deletions specification/columns/chargeperiodend.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

Charge Period End represents the [*exclusive*](#glossary:exclusivebound) end date and time of a [*charge period*](#glossary:chargeperiod). For example, a time period where [ChargePeriodStart](#chargeperiodstart) is '2024-01-01T00:00:00Z' and ChargePeriodEnd is '2024-01-02T00:00:00Z' includes charges for January 1, since ChargePeriodStart is [*inclusive*](#glossary:inclusivebound), but does not include charges for January 2 since ChargePeriodEnd is *exclusive*.

---
The ChargePeriodEnd column adheres to the following requirements:

* ChargePeriodEnd MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset).
* ChargePeriodEnd MUST be of type Date/Time.
* ChargePeriodEnd MUST conform to [Date/Time Format](#date/timeformat) requirements.
* ChargePeriodEnd MUST NOT be null.
* ChargePeriodEnd MUST be the *exclusive ending bound* of the effective period of the charge.

---
The ChargePeriodEnd column adheres to the following requirements:

* ChargePeriodEnd MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset), MUST be of type Date/Time, MUST be an *exclusive* value, and MUST NOT contain null values.
Expand Down
10 changes: 10 additions & 0 deletions specification/columns/chargeperiodstart.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

Charge Period Start represents the [*inclusive*](#glossary:inclusivebound) start date and time within a [*charge period*](#glossary:chargeperiod). For example, a time period where ChargePeriodStart is '2024-01-01T00:00:00Z' and [ChargePeriodEnd](#chargeperiodend) is '2024-01-02T00:00:00Z' includes charges for January 1, since ChargePeriodStart is *inclusive*, but does not include charges for January 2 since ChargePeriodEnd is [*exclusive*](#glossary:exclusivebound).

---
The ChargePeriodStart column adheres to the following requirements:

* ChargePeriodStart MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset).
* ChargePeriodStart MUST be of type Date/Time.
* ChargePeriodStart MUST conform to [Date/Time Format](#date/timeformat) requirements.
* ChargePeriodStart MUST NOT be null.
* ChargePeriodStart MUST be the *inclusive beginning bound* of the effective period of the charge.

---
The ChargePeriodStart column adheres to the following requirements:

* ChargePeriodStart MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset), MUST be of type Date/Time, MUST be an *inclusive* value, and MUST NOT contain null values.
Expand Down
13 changes: 13 additions & 0 deletions specification/columns/commitmentdiscountcategory.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,19 @@

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 is only applicable to *commitment discounts* and not [*negotiated discounts*](#glossary:negotiated-discount).

---
The CommitmentDiscountCategory column adheres to the following requirements:

* CommitmentDiscountCategory MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *commitment discounts*.
* If present, the column adheres to the following additional requirements:
* CommitmentDiscountCategory MUST be of type String.
* CommitmentDiscountCategory MUST conform to [String Handling](#stringhandling) requirements.
* CommitmentDiscountCategory MUST be null if [CommitmentDiscountId](#commitmentdiscountid) is null.
* If CommitmentDiscountId is not null, the following applies:
ijurica marked this conversation as resolved.
Show resolved Hide resolved
* CommitmentDiscountCategory MUST NOT be null.
* CommitmentDiscountCategory MUST be one of the allowed values.

---
The CommitmentDiscountCategory column adheres to the following requirements:

* The CommitmentDiscountCategory column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *commitment discounts*.
Expand Down
13 changes: 13 additions & 0 deletions specification/columns/commitmentdiscountid.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,19 @@

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 is only applicable to *commitment discounts* and not [*negotiated discounts*](#glossary:negotiated-discount).

---
The CommitmentDiscountId column adheres to the following requirements:

* CommitmentDiscountId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *commitment discounts*.
* If present, the column adheres to the following additional requirements:
* CommitmentDiscountId MUST be of type String.
* CommitmentDiscountId MUST conform to [String Handling](#stringhandling) requirements.
* CommitmentDiscountId MUST be null when a charge is not related to a *commitment discount*.
* CommitmentDiscountId MUST NOT be null when a charge is related to a *commitment discount*.
* CommitmentDiscountId MUST ensure global uniqueness within the provider.
* CommitmentDiscountId SHOULD be a fully-qualified identifier.

---
The CommitmentDiscountId column adheres to the following requirements:

* The CommitmentDiscountId column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *commitment discounts*.
Expand Down
Loading
Loading