From 812e80e2afd557b97dc1f69b7e752a1932705d91 Mon Sep 17 00:00:00 2001 From: ijurica Date: Tue, 10 Dec 2024 13:53:02 +0100 Subject: [PATCH 01/12] FOCUS #557: Normative requirements refinement - preview - part 1 --- specification/columns/availabilityzone.md | 10 ++++++++++ specification/columns/billedcost.md | 11 +++++++++++ specification/columns/billingaccountid.md | 10 ++++++++++ specification/columns/billingaccountname.md | 10 ++++++++++ specification/columns/billingcurrency.md | 10 ++++++++++ specification/columns/billingperiodend.md | 11 +++++++++++ specification/columns/billingperiodstart.md | 11 +++++++++++ specification/columns/capacityreservationid.md | 14 ++++++++++++++ specification/columns/capacityreservationstatus.md | 14 ++++++++++++++ specification/columns/chargecategory.md | 10 ++++++++++ specification/columns/chargeclass.md | 12 ++++++++++++ specification/columns/chargedescription.md | 10 ++++++++++ specification/columns/chargefrequency.md | 11 +++++++++++ specification/columns/chargeperiodend.md | 10 ++++++++++ specification/columns/chargeperiodstart.md | 10 ++++++++++ 15 files changed, 164 insertions(+) diff --git a/specification/columns/availabilityzone.md b/specification/columns/availabilityzone.md index f778f0c02..4244fba8b 100644 --- a/specification/columns/availabilityzone.md +++ b/specification/columns/availabilityzone.md @@ -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 MUST conform to the following additional requirements: + * AvailabilityZone MUST be of type String. + * AvailabilityZone MUST conform to [String Handling](#stringhandling) requirements. + * 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*. diff --git a/specification/columns/billedcost.md b/specification/columns/billedcost.md index 02e30222d..e221e644b 100644 --- a/specification/columns/billedcost.md +++ b/specification/columns/billedcost.md @@ -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. +--- +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. diff --git a/specification/columns/billingaccountid.md b/specification/columns/billingaccountid.md index c140f521e..26c0969b8 100644 --- a/specification/columns/billingaccountid.md +++ b/specification/columns/billingaccountid.md @@ -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). diff --git a/specification/columns/billingaccountname.md b/specification/columns/billingaccountname.md index ed536b02e..7ca94d02f 100644 --- a/specification/columns/billingaccountname.md +++ b/specification/columns/billingaccountname.md @@ -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*. diff --git a/specification/columns/billingcurrency.md b/specification/columns/billingcurrency.md index 1fa772ba9..af953fa00 100644 --- a/specification/columns/billingcurrency.md +++ b/specification/columns/billingcurrency.md @@ -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). diff --git a/specification/columns/billingperiodend.md b/specification/columns/billingperiodend.md index 1ea86e2cc..ecf8dc9be 100644 --- a/specification/columns/billingperiodend.md +++ b/specification/columns/billingperiodend.md @@ -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). diff --git a/specification/columns/billingperiodstart.md b/specification/columns/billingperiodstart.md index 6aa8e13f8..dd63a65a4 100644 --- a/specification/columns/billingperiodstart.md +++ b/specification/columns/billingperiodstart.md @@ -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. diff --git a/specification/columns/capacityreservationid.md b/specification/columns/capacityreservationid.md index bd87afd80..45f997de3 100644 --- a/specification/columns/capacityreservationid.md +++ b/specification/columns/capacityreservationid.md @@ -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 MUST conform 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. diff --git a/specification/columns/capacityreservationstatus.md b/specification/columns/capacityreservationstatus.md index afc139b2e..9cfa8640d 100644 --- a/specification/columns/capacityreservationstatus.md +++ b/specification/columns/capacityreservationstatus.md @@ -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 MUST conform 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: + * 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. diff --git a/specification/columns/chargecategory.md b/specification/columns/chargecategory.md index 9f85820f9..e96b0f65c 100644 --- a/specification/columns/chargecategory.md +++ b/specification/columns/chargecategory.md @@ -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. diff --git a/specification/columns/chargeclass.md b/specification/columns/chargeclass.md index 632cee0fa..d2a945678 100644 --- a/specification/columns/chargeclass.md +++ b/specification/columns/chargeclass.md @@ -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: + * 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). diff --git a/specification/columns/chargedescription.md b/specification/columns/chargedescription.md index 57ae510ec..c9a30d205 100644 --- a/specification/columns/chargedescription.md +++ b/specification/columns/chargedescription.md @@ -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. diff --git a/specification/columns/chargefrequency.md b/specification/columns/chargefrequency.md index 5bd54c58e..437f284ea 100644 --- a/specification/columns/chargefrequency.md +++ b/specification/columns/chargefrequency.md @@ -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 MUST conform 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. diff --git a/specification/columns/chargeperiodend.md b/specification/columns/chargeperiodend.md index 03ec8a399..2a3b3211b 100644 --- a/specification/columns/chargeperiodend.md +++ b/specification/columns/chargeperiodend.md @@ -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. diff --git a/specification/columns/chargeperiodstart.md b/specification/columns/chargeperiodstart.md index e69845fc6..92abda6eb 100644 --- a/specification/columns/chargeperiodstart.md +++ b/specification/columns/chargeperiodstart.md @@ -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. From 9f6ee2c99fdaa912d1dbe58bd31d1859d748b60b Mon Sep 17 00:00:00 2001 From: ijurica Date: Tue, 10 Dec 2024 14:10:49 +0100 Subject: [PATCH 02/12] FOCUS #557: Normative requirements refinement - preview - part 1 - adding new lines --- specification/columns/availabilityzone.md | 2 ++ specification/columns/billedcost.md | 2 ++ specification/columns/billingaccountid.md | 2 ++ specification/columns/billingaccountname.md | 2 ++ 4 files changed, 8 insertions(+) diff --git a/specification/columns/availabilityzone.md b/specification/columns/availabilityzone.md index 4244fba8b..d1404ee52 100644 --- a/specification/columns/availabilityzone.md +++ b/specification/columns/availabilityzone.md @@ -3,6 +3,7 @@ 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*. @@ -12,6 +13,7 @@ The AvailabilityZone column adheres to the following requirements: * 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*. diff --git a/specification/columns/billedcost.md b/specification/columns/billedcost.md index e221e644b..65bc3d1cc 100644 --- a/specification/columns/billedcost.md +++ b/specification/columns/billedcost.md @@ -3,6 +3,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 adheres to the following requirements: * BilledCost MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). @@ -13,6 +14,7 @@ The BilledCost column adheres to the following requirements: * 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. diff --git a/specification/columns/billingaccountid.md b/specification/columns/billingaccountid.md index 26c0969b8..3d7550ab3 100644 --- a/specification/columns/billingaccountid.md +++ b/specification/columns/billingaccountid.md @@ -3,6 +3,7 @@ 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). @@ -12,6 +13,7 @@ The BillingAccountId column adheres to the following requirements: * 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). diff --git a/specification/columns/billingaccountname.md b/specification/columns/billingaccountname.md index 7ca94d02f..6a1ebc2b2 100644 --- a/specification/columns/billingaccountname.md +++ b/specification/columns/billingaccountname.md @@ -3,6 +3,7 @@ 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). @@ -12,6 +13,7 @@ The BillingAccountName column adheres to the following requirements: * 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*. From 440de4a946e89ba66946ba8841a18c50317e4cfc Mon Sep 17 00:00:00 2001 From: ijurica Date: Tue, 10 Dec 2024 14:45:48 +0100 Subject: [PATCH 03/12] FOCUS #557: Normative requirements refinement - preview - part 2 --- specification/columns/availabilityzone.md | 2 -- specification/columns/billedcost.md | 2 -- specification/columns/billingaccountid.md | 2 -- specification/columns/billingaccountname.md | 2 -- specification/columns/commitmentdiscountcategory.md | 13 +++++++++++++ 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/specification/columns/availabilityzone.md b/specification/columns/availabilityzone.md index d1404ee52..4244fba8b 100644 --- a/specification/columns/availabilityzone.md +++ b/specification/columns/availabilityzone.md @@ -3,7 +3,6 @@ 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*. @@ -13,7 +12,6 @@ The AvailabilityZone column adheres to the following requirements: * 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*. diff --git a/specification/columns/billedcost.md b/specification/columns/billedcost.md index 65bc3d1cc..e221e644b 100644 --- a/specification/columns/billedcost.md +++ b/specification/columns/billedcost.md @@ -3,7 +3,6 @@ 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 adheres to the following requirements: * BilledCost MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). @@ -14,7 +13,6 @@ The BilledCost column adheres to the following requirements: * 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. diff --git a/specification/columns/billingaccountid.md b/specification/columns/billingaccountid.md index 3d7550ab3..26c0969b8 100644 --- a/specification/columns/billingaccountid.md +++ b/specification/columns/billingaccountid.md @@ -3,7 +3,6 @@ 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). @@ -13,7 +12,6 @@ The BillingAccountId column adheres to the following requirements: * 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). diff --git a/specification/columns/billingaccountname.md b/specification/columns/billingaccountname.md index 6a1ebc2b2..7ca94d02f 100644 --- a/specification/columns/billingaccountname.md +++ b/specification/columns/billingaccountname.md @@ -3,7 +3,6 @@ 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). @@ -13,7 +12,6 @@ The BillingAccountName column adheres to the following requirements: * 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*. diff --git a/specification/columns/commitmentdiscountcategory.md b/specification/columns/commitmentdiscountcategory.md index 1dc413489..f268ed2fd 100644 --- a/specification/columns/commitmentdiscountcategory.md +++ b/specification/columns/commitmentdiscountcategory.md @@ -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 MUST conform 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: + * 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*. From fb273d111344467ec174a367af0e32b423de95d0 Mon Sep 17 00:00:00 2001 From: ijurica Date: Tue, 10 Dec 2024 16:22:43 +0100 Subject: [PATCH 04/12] FOCUS #557: Normative requirements refinement - preview - part 3 --- specification/columns/commitmentdiscountid.md | 13 +++++++++++++ specification/columns/commitmentdiscountname.md | 13 +++++++++++++ specification/columns/commitmentdiscountstatus.md | 12 ++++++++++++ specification/columns/commitmentdiscounttype.md | 11 +++++++++++ specification/columns/invoiceissuer.md | 9 +++++++++ specification/columns/provider.md | 9 +++++++++ specification/columns/publisher.md | 9 +++++++++ 7 files changed, 76 insertions(+) diff --git a/specification/columns/commitmentdiscountid.md b/specification/columns/commitmentdiscountid.md index 5b7fd156a..34a696614 100644 --- a/specification/columns/commitmentdiscountid.md +++ b/specification/columns/commitmentdiscountid.md @@ -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 MUST conform 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*. diff --git a/specification/columns/commitmentdiscountname.md b/specification/columns/commitmentdiscountname.md index 79369725d..9a71bbe5b 100644 --- a/specification/columns/commitmentdiscountname.md +++ b/specification/columns/commitmentdiscountname.md @@ -2,6 +2,19 @@ A Commitment Discount Name is the display name assigned to a [*commitment discount*](#glossary:commitment-discount). The CommitmentDiscountName column is only applicable to *commitment discounts* and not [*negotiated discounts*](#glossary:negotiated-discount). +--- +The CommitmentDiscountName column adheres to the following requirements: + +* CommitmentDiscountName MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *commitment discounts*. +* If present, the column MUST conform to the following additional requirements: + * CommitmentDiscountName MUST be of type String. + * CommitmentDiscountName MUST conform to [String Handling](#stringhandling) requirements. + * CommitmentDiscountName MUST be null if [CommitmentDiscountId](#commitmentdiscountid) is null. + * If CommitmentDiscountId is not null, the following applies: + * CommitmentDiscountName MUST NOT be null when a display name can be assigned to a *commitment discount*. + * CommitmentDiscountName MAY be null when a display name cannot be assigned to a *commitment discount*. + +--- The CommitmentDiscountName column adheres to the following requirements: * The CommitmentDiscountName column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *commitment discounts*. diff --git a/specification/columns/commitmentdiscountstatus.md b/specification/columns/commitmentdiscountstatus.md index 3adca5b0d..9457f41fa 100644 --- a/specification/columns/commitmentdiscountstatus.md +++ b/specification/columns/commitmentdiscountstatus.md @@ -2,6 +2,18 @@ Commitment Discount Status indicates whether the charge corresponds with the consumption of a [*commitment discount*](#glossary:commitment-discount) identified in the CommitmentDiscountId column or the unused portion of the committed amount. The CommitmetnDiscountStatus column is only applicable to *commitment discounts* and not [*negotiated discounts*](#glossary:negotiated-discount). +--- +The CommitmentDiscountStatus column adheres to the following requirements: + +* CommitmentDiscountStatus MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *commitment discounts*. +* If present, the column MUST conform to the following additional requirements: + * CommitmentDiscountStatus MUST be of type String. + * CommitmentDiscountStatus MUST be null if [CommitmentDiscountId](#commitmentdiscountid) is null. + * If CommitmentDiscountId is not null and [Charge Category](#chargecategory) is "Usage", the following applies: + * CommitmentDiscountStatus MUST NOT be null. + * CommitmentDiscountStatus MUST be one of the allowed values. + +--- The CommitmentDiscountStatus column adheres to the following requirements: * The CommitmentDiscountStatus column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *commitment discounts*. diff --git a/specification/columns/commitmentdiscounttype.md b/specification/columns/commitmentdiscounttype.md index 3c3dfe746..746d15868 100644 --- a/specification/columns/commitmentdiscounttype.md +++ b/specification/columns/commitmentdiscounttype.md @@ -2,6 +2,17 @@ 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 is only applicable to *commitment discounts* and not [*negotiated discounts*](#glossary:negotiated-discount). +--- +The CommitmentDiscountType column adheres to the following requirements: + +* CommitmentDiscountType MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *commitment discounts*. +* If present, the column MUST conform to the following additional requirements: + * CommitmentDiscountType MUST be of type String. + * CommitmentDiscountType MUST conform to [String Handling](#stringhandling) requirements. + * CommitmentDiscountType MUST be null if [CommitmentDiscountId](#commitmentdiscountid) is null. + * CommitmentDiscountType MUST NOT be null if CommitmentDiscountId is not null. + +--- The CommitmentDiscountType column adheres to the following requirements: * The CommitmentDiscountType column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *commitment discounts*. diff --git a/specification/columns/invoiceissuer.md b/specification/columns/invoiceissuer.md index ccc89482b..527dd6b99 100644 --- a/specification/columns/invoiceissuer.md +++ b/specification/columns/invoiceissuer.md @@ -3,6 +3,15 @@ An Invoice Issuer is an entity responsible for invoicing for the [*resources*](#glossary:resource) or [*services*](#glossary:service) consumed. It is commonly used for cost analysis and reporting scenarios. +--- +The InvoiceIssuerName column adheres to the following requirements: + +* InvoiceIssuerName MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). +* InvoiceIssuerName MUST be of type String. +* InvoiceIssuerName MUST conform to [String Handling](#stringhandling) requirements. +* InvoiceIssuerName MUST NOT be null. + +--- The InvoiceIssuer column adheres to the following requirements: * The InvoiceIssuer column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). diff --git a/specification/columns/provider.md b/specification/columns/provider.md index a838fe476..e5bca27bd 100644 --- a/specification/columns/provider.md +++ b/specification/columns/provider.md @@ -2,6 +2,15 @@ A Provider is an entity that makes the [*resources*](#glossary:resource) or [*services*](#glossary:service) available for purchase. It is commonly used for cost analysis and reporting scenarios. +--- +The ProviderName column adheres to the following requirements: + +* ProviderName MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). +* ProviderName MUST be of type String. +* ProviderName MUST conform to [String Handling](#stringhandling) requirements. +* ProviderName MUST NOT be null. + +--- The Provider column adheres to the following requirements: * The Provider column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). diff --git a/specification/columns/publisher.md b/specification/columns/publisher.md index 33b1e73c6..46c0c0e43 100644 --- a/specification/columns/publisher.md +++ b/specification/columns/publisher.md @@ -2,6 +2,15 @@ A Publisher is an entity that produces the [*resources*](#glossary:resource) or [*services*](#glossary:service) that were purchased. It is commonly used for cost analysis and reporting scenarios. +--- +The PublisherName column adheres to the following requirements: + +* PublisherName MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). +* PublisherName MUST be of type String. +* PublisherName MUST conform to [String Handling](#stringhandling) requirements. +* PublisherName MUST NOT be null. + +--- The Publisher column adheres to the following requirements: * The Publisher column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). From 287a6fa80f70705b6b5dd6346a0d9a04eeb322b6 Mon Sep 17 00:00:00 2001 From: ijurica Date: Tue, 10 Dec 2024 16:56:08 +0100 Subject: [PATCH 05/12] FOCUS #557: Normative requirements refinement - preview - part 4 --- specification/columns/regionid.md | 11 +++++++++++ specification/columns/regionname.md | 11 +++++++++++ specification/columns/resourceid.md | 13 +++++++++++++ specification/columns/resourcename.md | 12 ++++++++++++ specification/columns/skuid.md | 13 +++++++++++++ specification/columns/skupriceid.md | 16 ++++++++++++++++ 6 files changed, 76 insertions(+) diff --git a/specification/columns/regionid.md b/specification/columns/regionid.md index 7d6d459db..a0cb37ff9 100644 --- a/specification/columns/regionid.md +++ b/specification/columns/regionid.md @@ -2,6 +2,17 @@ A Region ID is a provider-assigned identifier for an isolated geographic area where a [*resource*](#glossary:resource) is provisioned or a [*service*](#glossary:service) is provided. The region is commonly used for scenarios like analyzing cost and unit prices based on where *resources* are deployed. +--- +The RegionId column adheres to the following requirements: + +* RegionId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports deploying resources or services within a region. +* If present, the column MUST conform to the following additional requirements: + * RegionId MUST be of type String. + * RegionId MUST conform to [String Handling](#stringhandling) requirements. + * RegionId MUST NOT be null when a *resource* or *service* is operated in or managed from a distinct region by the Provider. + * RegionId MAY be null when a *resource* or *service* is not restricted to an isolated geographic area. + +--- The RegionId column adheres to the following requirements: * The RegionId column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports deploying resources or services within a region and MUST be of type String. diff --git a/specification/columns/regionname.md b/specification/columns/regionname.md index dcce41c0c..c274c56b9 100644 --- a/specification/columns/regionname.md +++ b/specification/columns/regionname.md @@ -2,6 +2,17 @@ Region Name is a provider-assigned display name for an isolated geographic area where a [*resource*](#glossary:resource) is provisioned or a [*service*](#glossary:service) is provided. Region Name is commonly used for scenarios like analyzing cost and unit prices based on where *resources* are deployed. +--- +The RegionName column adheres to the following requirements: + +* RegionName MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports deploying resources or services within a region. +* If present, the column MUST conform to the following additional requirements: + * RegionName MUST be of type String. + * RegionName MUST conform to [String Handling](#stringhandling) requirements. + * RegionName MUST be null if [RegionId](#regionid) is null. + * RegionName MUST NOT be null if RegionId is not null. + +--- The RegionName column adheres to the following requirements: * The RegionName column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports deploying resources or services within a region and MUST be of type String. diff --git a/specification/columns/resourceid.md b/specification/columns/resourceid.md index 764be72d2..4dfe52a29 100644 --- a/specification/columns/resourceid.md +++ b/specification/columns/resourceid.md @@ -2,6 +2,19 @@ A Resource ID is an identifier assigned to a [*resource*](#glossary:resource) by the provider. The Resource ID is commonly used for cost reporting, analysis, and allocation scenarios. +--- +The ResourceId column adheres to the following requirements: + +* ResourceId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources. +* If present, the column MUST conform to the following additional requirements: + * ResourceId MUST be of type String. + * ResourceId MUST conform to [String Handling](#stringhandling) requirements. + * ResourceId MUST be null when a charge is not related to a *resource*. + * ResourceId MUST NOT be null when a charge is related to a *resource*. + * ResourceId MUST ensure global uniqueness within the provider. + * ResourceId SHOULD be a fully-qualified identifier. + +--- The ResourceId column adheres to the following requirements: * The ResourceId column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources. diff --git a/specification/columns/resourcename.md b/specification/columns/resourcename.md index bb41c6182..358badc07 100644 --- a/specification/columns/resourcename.md +++ b/specification/columns/resourcename.md @@ -2,6 +2,18 @@ The Resource Name is a display name assigned to a [*resource*](#glossary:resource). It is commonly used for cost analysis, reporting, and allocation scenarios. +--- +The ResourceName column adheres to the following requirements: + +* ResourceName MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources. +* If present, the column MUST conform to the following additional requirements: + * ResourceName MUST be of type String. + * ResourceName MUST conform to [String Handling](#stringhandling) requirements. + * ResourceName MUST be null if [ResourceId](#resourceid) is null or when the *resource* only has a system-generated ResourceId without an assigned display name. + * ResourceName MUST NOT be null if ResourceId is not null and the *resource* has an assigned display name. + * ResourceName SHOULD NOT duplicate ResourceId. + +--- The ResourceName column adheres to the following requirements: * The ResourceName column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources. diff --git a/specification/columns/skuid.md b/specification/columns/skuid.md index c6bcd380a..2b52ac287 100644 --- a/specification/columns/skuid.md +++ b/specification/columns/skuid.md @@ -2,6 +2,19 @@ A SKU ID is a unique identifier that defines a provider-supported construct for organizing properties that are common across one or more [*SKU Prices*](#glossary:sku-price). SKU ID can be referenced on a catalog or [*price list*](#glossary:price-list) published by a provider to look up detailed information about the SKU. The composition of the properties associated with the SKU ID may differ across providers. Some providers may not support the [*SKU*](#glossary:sku) construct and instead associate all such properties directly with the *SKU Price*. SKU ID is commonly used for analyzing cost based on *SKU*-related properties above the pricing constructs. +--- +The SkuId column adheres to the following requirements: + +* SkuId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider publishes a SKU list. +* If present, the column MUST conform to the following additional requirements: + * SkuId MUST be of type String. + * SkuId MUST conform to [String Handling](#stringhandling) requirements. + * SkuId MUST be null if [ChargeCategory](#chargecategory) is "Tax". + * SkuId MUST NOT be null if ChargeCategory is "Usage" or "Purchase" and [ChargeClass](#chargeclass) is not "Correction". + * SkuId MAY be null in all other cases. + * SkuId MUST equal SkuPriceId when a provider does not support an overarching SKU ID construct. + +--- The SkuId column adheres to the following requirements: * The SkuId column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider publishes a SKU list. diff --git a/specification/columns/skupriceid.md b/specification/columns/skupriceid.md index 69bf70a87..f57cd4635 100644 --- a/specification/columns/skupriceid.md +++ b/specification/columns/skupriceid.md @@ -2,6 +2,22 @@ A SKU Price ID is a unique identifier that defines the unit price used to calculate the charge. SKU Price ID can be referenced on a [*price list*](#glossary:price-list) published by a provider to look up detailed information, including a corresponding list unit price. The composition of the properties associated with the SKU Price ID may differ across providers. SKU Price ID is commonly used for analyzing cost based on pricing properties such as Terms and Tiers. +--- +The SkuPriceId column adheres to the following requirements: + +* SkuPriceId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider publishes a SKU price list. +* If present, the column MUST conform to the following additional requirements: + * SkuPriceId MUST be of type String. + * SkuPriceId MUST conform to [String Handling](#stringhandling) requirements. + * SkuPriceId MUST be null if [ChargeCategory](#chargecategory) is "Tax". + * SkuPriceId MUST NOT be null if ChargeCategory is "Usage" or "Purchase" and [ChargeClass](#chargeclass) is not "Correction". + * SkuPriceId MAY be null in all other cases. + * SkuPriceId MUST be associated with one and only one [SkuId](#skuid), except in cases of [commitment discount flexibility](#glossary:commitment-discount-flexibility). + * SkuPriceId MUST define a single unit price used for calculating the charge. + * [ListUnitPrice](#listunitprice) MUST be associated with the SkuPriceId in the provider published price list. + * When a provider does not have a SkuPriceId and wants to include information in columns linked to SkuPriceId such as ListUnitPrice or [SkuPriceDetails](#skupricedetails), the SkuId MAY be used in the SkuPriceId column as long as it adheres to the above conditions. + +--- The SkuPriceId column adheres to the following requirements: * SkuPriceId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider publishes a SKU price list and MUST be of type String. From 6f4c08ef91b045138656e48da051a994ca15308f Mon Sep 17 00:00:00 2001 From: ijurica Date: Wed, 11 Dec 2024 01:43:30 +0100 Subject: [PATCH 06/12] FOCUS #557: Normative requirements refinement - preview - part 5 --- specification/columns/resourcetype.md | 11 +++++++++++ specification/columns/servicecategory.md | 9 +++++++++ specification/columns/servicename.md | 9 +++++++++ specification/columns/servicesubcategory.md | 12 ++++++++++++ specification/columns/subaccountid.md | 11 +++++++++++ specification/columns/subaccountname.md | 11 +++++++++++ 6 files changed, 63 insertions(+) diff --git a/specification/columns/resourcetype.md b/specification/columns/resourcetype.md index 0d7e6c079..50a9251f2 100644 --- a/specification/columns/resourcetype.md +++ b/specification/columns/resourcetype.md @@ -2,6 +2,17 @@ Resource Type describes the kind of [*resource*](#glossary:resource) the charge applies to. A Resource Type is commonly used for scenarios like identifying cost changes in groups of similar *resources* and may include values like Virtual Machine, Data Warehouse, and Load Balancer. +--- +The ResourceType column adheres to the following requirements: + +* ResourceType MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources and supports assigning types to resources. +* If present, the column MUST conform to the following additional requirements: + * ResourceType MUST be of type String. + * ResourceType MUST conform to [String Handling](#stringhandling) requirements. + * ResourceType MUST be null if [ResourceId](#resourceid) is null. + * ResourceType MUST NOT be null if ResourceId is not null. + +--- The ResourceType column adheres to the following requirements: * The ResourceType column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources and supports assigning a type for resources. diff --git a/specification/columns/servicecategory.md b/specification/columns/servicecategory.md index 90925b24e..f8f64bccf 100644 --- a/specification/columns/servicecategory.md +++ b/specification/columns/servicecategory.md @@ -2,6 +2,15 @@ The Service Category is the highest-level classification of a [*service*](#glossary:service) based on the core function of the *service*. Each *service* should have one and only one category that best aligns with its primary purpose. The Service Category is commonly used for scenarios like analyzing costs across providers and tracking the migration of workloads across fundamentally different architectures. +--- +The ServiceCategory column adheres to the following requirements: + +* ServiceCategory MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). +* ServiceCategory MUST be of type String. +* ServiceCategory MUST NOT be null. +* ServiceCategory MUST be one of the allowed values. + +--- The ServiceCategory column adheres to the following requirements: * The ServiceCategory column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) and MUST NOT be null. diff --git a/specification/columns/servicename.md b/specification/columns/servicename.md index b5a0d7af4..fd0d9aa7b 100644 --- a/specification/columns/servicename.md +++ b/specification/columns/servicename.md @@ -2,6 +2,15 @@ A [*service*](#glossary:service) represents an offering that can be purchased from a provider (e.g., cloud virtual machine, SaaS database, professional services from a systems integrator). A *service* offering can include various types of usage or other charges. For example, a cloud database *service* may include compute, storage, and networking charges. +--- +The ServiceName column adheres to the following requirements: + +* ServiceName MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). +* ServiceName MUST be of type String. +* ServiceName MUST conform to [String Handling](#stringhandling) requirements. +* ServiceName MUST NOT be null. + +--- The Service Name is a display name for the offering that was purchased. The Service Name is commonly used for scenarios like analyzing aggregate cost trends over time and filtering data to investigate anomalies. The ServiceName column adheres to the following requirements: diff --git a/specification/columns/servicesubcategory.md b/specification/columns/servicesubcategory.md index 8452e588b..c6dc2e1b1 100644 --- a/specification/columns/servicesubcategory.md +++ b/specification/columns/servicesubcategory.md @@ -2,6 +2,18 @@ The Service Subcategory is a secondary classification of the [Service Category](#servicecategory) for a [*service*](#glossary:service) based on its core function. The Service Subcategory (in conjunction with the Service Category) is commonly used for scenarios like analyzing spend and usage for specific workload types across providers and tracking the migration of workloads across fundamentally different architectures. +--- +The ServiceSubcategory column adheres to the following requirements: + +* ServiceSubcategory is RECOMMENDED to be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). +* If present, the column MUST conform to the following additional requirements: + * ServiceSubcategory MUST be of type String. + * ServiceSubcategory MUST NOT be null. + * ServiceSubcategory MUST be one of the allowed values. + * ServiceSubcategory MUST have one and only one parent ServiceCategory as specified in the allowed values below. + * Though a given *service* can have multiple purposes, each *service* SHOULD have one and only one ServiceSubcategory that best aligns with its primary purpose + +--- The ServiceSubcategory column adheres to the following requirements: * ServiceSubcategory is RECOMMENDED to be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) and MUST NOT be null. diff --git a/specification/columns/subaccountid.md b/specification/columns/subaccountid.md index 94f7fa7ba..0fcfb4c4b 100644 --- a/specification/columns/subaccountid.md +++ b/specification/columns/subaccountid.md @@ -2,6 +2,17 @@ A Sub Account ID is a provider-assigned identifier assigned to a [*sub account*](#glossary:sub-account). Sub Account ID is commonly used for scenarios like grouping based on organizational constructs, access management needs, and cost allocation strategies. +--- +The SubAccountId column adheres to the following requirements: + +* SubAccountId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports a *sub account* construct. +* If present, the column MUST conform to the following additional requirements: + * SubAccountId MUST be of type String. + * SubAccountId MUST conform to [String Handling](#stringhandling) requirements. + * SubAccountId MUST be null when a charge is not related to a *sub account*. + * SubAccountId MUST NOT be null when a charge is related to a *sub account*. + +--- The SubAccountId column adheres to the following requirements: * The SubAccountId column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports a *sub account* construct. diff --git a/specification/columns/subaccountname.md b/specification/columns/subaccountname.md index 7fcd2caaf..34419b2ea 100644 --- a/specification/columns/subaccountname.md +++ b/specification/columns/subaccountname.md @@ -2,6 +2,17 @@ A Sub Account Name is a display name assigned to a [*sub account*](#glossary:sub-account). Sub account Name is commonly used for scenarios like grouping based on organizational constructs, access management needs, and cost allocation strategies. +--- +The SubAccountName column adheres to the following requirements: + +* SubAccountName MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports a *sub account* construct. +* If present, the column MUST conform to the following additional requirements: + * SubAccountName MUST be of type String. + * SubAccountName MUST conform to [String Handling](#stringhandling) requirements. + * SubAccountName MUST be null if [SubAccountId](#subaccountid) is null. + * SubAccountName MUST NOT be null if SubAccountId is not null. + +--- The SubAccountName column adheres to the following requirements: * The SubAccountName column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports a *sub account* construct. From 2de3c143a7d7b2639c441fe9963b1a02ed6d9784 Mon Sep 17 00:00:00 2001 From: ijurica Date: Thu, 12 Dec 2024 15:49:06 +0100 Subject: [PATCH 07/12] FOCUS #557: Normative requirements refinement - preview - part 6 --- specification/columns/pricingcategory.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/specification/columns/pricingcategory.md b/specification/columns/pricingcategory.md index 504c807e9..5ce5faca5 100644 --- a/specification/columns/pricingcategory.md +++ b/specification/columns/pricingcategory.md @@ -2,6 +2,23 @@ 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: + +* PricingCategory MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports more than one pricing category across all SKUs. +* If present, the column MUST conform to the following additional requirements: + * PricingCategory MUST be of type String. + * PricingCategory MUST be null if [ChargeCategory](#chargecategory) is "Tax". + * PricingCategory MUST NOT be null if ChargeCategory is "Usage" or "Purchase" and [ChargeClass](#chargeclass) is not "Correction". + * PricingCategory MAY be null in all other cases. + * If PricingCategory is not null, the following applies: + * PricingCategory MUST be one of the allowed values. + * PricingCategory MUST be "Standard" when pricing is predetermined at the agreed upon rate for the [billing account](#glossary:billing-account). + * PricingCategory MUST be "Committed" when the charge is subject to an existing *commitment discount* and is not the purchase of the *commitment discount*. + * PricingCategory MUST be "Dynamic" when pricing is determined by the provider and may change over time, regardless of predetermined agreement pricing. + * PricingCategory MUST be "Other" when there is a pricing model but none of the allowed values apply. + +--- The PricingCategory column adheres to the following requirements: * PricingCategory MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports more than one pricing category across all SKUs and MUST be of type String. From 0ce1c0079df52b16c493ba9689dafb9b10bb4b68 Mon Sep 17 00:00:00 2001 From: ijurica Date: Thu, 12 Dec 2024 16:04:45 +0100 Subject: [PATCH 08/12] FOCUS #557: Normative requirements refinement - preview - MUST conform -> adheres --- specification/columns/availabilityzone.md | 2 +- specification/columns/capacityreservationid.md | 2 +- specification/columns/capacityreservationstatus.md | 2 +- specification/columns/chargefrequency.md | 2 +- specification/columns/commitmentdiscountcategory.md | 2 +- specification/columns/commitmentdiscountid.md | 2 +- specification/columns/commitmentdiscountname.md | 2 +- specification/columns/commitmentdiscountstatus.md | 2 +- specification/columns/commitmentdiscounttype.md | 2 +- specification/columns/pricingcategory.md | 2 +- specification/columns/regionid.md | 2 +- specification/columns/regionname.md | 2 +- specification/columns/resourceid.md | 2 +- specification/columns/resourcename.md | 2 +- specification/columns/resourcetype.md | 2 +- specification/columns/servicesubcategory.md | 2 +- specification/columns/skuid.md | 2 +- specification/columns/skupriceid.md | 2 +- specification/columns/subaccountid.md | 2 +- specification/columns/subaccountname.md | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/specification/columns/availabilityzone.md b/specification/columns/availabilityzone.md index 4244fba8b..9d9a4a6ea 100644 --- a/specification/columns/availabilityzone.md +++ b/specification/columns/availabilityzone.md @@ -6,7 +6,7 @@ An [*availability zone*](#glossary:availability-zone) is a provider-assigned ide 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 MUST conform to the following additional requirements: +* If present, the column adheres to the following additional requirements: * AvailabilityZone MUST be of type String. * AvailabilityZone MUST conform to [String Handling](#stringhandling) requirements. * AvailabilityZone MAY be null if a charge is not specific to an *availability zone*. diff --git a/specification/columns/capacityreservationid.md b/specification/columns/capacityreservationid.md index 45f997de3..3f7ec0b51 100644 --- a/specification/columns/capacityreservationid.md +++ b/specification/columns/capacityreservationid.md @@ -6,7 +6,7 @@ A Capacity Reservation ID is the identifier assigned to a [*capacity reservation 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 MUST conform to the following additional requirements: +* 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*. diff --git a/specification/columns/capacityreservationstatus.md b/specification/columns/capacityreservationstatus.md index 9cfa8640d..067f237a9 100644 --- a/specification/columns/capacityreservationstatus.md +++ b/specification/columns/capacityreservationstatus.md @@ -6,7 +6,7 @@ Capacity Reservation Status indicates whether the charge represents either the c 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 MUST conform to the following additional requirements: +* 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: diff --git a/specification/columns/chargefrequency.md b/specification/columns/chargefrequency.md index 437f284ea..522387dac 100644 --- a/specification/columns/chargefrequency.md +++ b/specification/columns/chargefrequency.md @@ -6,7 +6,7 @@ Charge Frequency indicates how often a charge will occur. Along with the [charge 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 MUST conform to the following additional requirements: +* 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. diff --git a/specification/columns/commitmentdiscountcategory.md b/specification/columns/commitmentdiscountcategory.md index f268ed2fd..ae3e74baa 100644 --- a/specification/columns/commitmentdiscountcategory.md +++ b/specification/columns/commitmentdiscountcategory.md @@ -6,7 +6,7 @@ Commitment Discount Category indicates whether the [*commitment discount*](#glos 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 MUST conform to the following additional requirements: +* 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. diff --git a/specification/columns/commitmentdiscountid.md b/specification/columns/commitmentdiscountid.md index 34a696614..f94f07bf2 100644 --- a/specification/columns/commitmentdiscountid.md +++ b/specification/columns/commitmentdiscountid.md @@ -6,7 +6,7 @@ A Commitment Discount ID is the identifier assigned to a [*commitment 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 MUST conform to the following additional requirements: +* 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*. diff --git a/specification/columns/commitmentdiscountname.md b/specification/columns/commitmentdiscountname.md index 9a71bbe5b..10681f73b 100644 --- a/specification/columns/commitmentdiscountname.md +++ b/specification/columns/commitmentdiscountname.md @@ -6,7 +6,7 @@ A Commitment Discount Name is the display name assigned to a [*commitment discou The CommitmentDiscountName column adheres to the following requirements: * CommitmentDiscountName MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *commitment discounts*. -* If present, the column MUST conform to the following additional requirements: +* If present, the column adheres to the following additional requirements: * CommitmentDiscountName MUST be of type String. * CommitmentDiscountName MUST conform to [String Handling](#stringhandling) requirements. * CommitmentDiscountName MUST be null if [CommitmentDiscountId](#commitmentdiscountid) is null. diff --git a/specification/columns/commitmentdiscountstatus.md b/specification/columns/commitmentdiscountstatus.md index 9457f41fa..c370914c9 100644 --- a/specification/columns/commitmentdiscountstatus.md +++ b/specification/columns/commitmentdiscountstatus.md @@ -6,7 +6,7 @@ Commitment Discount Status indicates whether the charge corresponds with the con The CommitmentDiscountStatus column adheres to the following requirements: * CommitmentDiscountStatus MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *commitment discounts*. -* If present, the column MUST conform to the following additional requirements: +* If present, the column adheres to the following additional requirements: * CommitmentDiscountStatus MUST be of type String. * CommitmentDiscountStatus MUST be null if [CommitmentDiscountId](#commitmentdiscountid) is null. * If CommitmentDiscountId is not null and [Charge Category](#chargecategory) is "Usage", the following applies: diff --git a/specification/columns/commitmentdiscounttype.md b/specification/columns/commitmentdiscounttype.md index 746d15868..1c20c1f88 100644 --- a/specification/columns/commitmentdiscounttype.md +++ b/specification/columns/commitmentdiscounttype.md @@ -6,7 +6,7 @@ Commitment Discount Type is a provider-assigned name to identify the type of [*c The CommitmentDiscountType column adheres to the following requirements: * CommitmentDiscountType MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports *commitment discounts*. -* If present, the column MUST conform to the following additional requirements: +* If present, the column adheres to the following additional requirements: * CommitmentDiscountType MUST be of type String. * CommitmentDiscountType MUST conform to [String Handling](#stringhandling) requirements. * CommitmentDiscountType MUST be null if [CommitmentDiscountId](#commitmentdiscountid) is null. diff --git a/specification/columns/pricingcategory.md b/specification/columns/pricingcategory.md index 5ce5faca5..cc38f2d86 100644 --- a/specification/columns/pricingcategory.md +++ b/specification/columns/pricingcategory.md @@ -6,7 +6,7 @@ Pricing Category describes the pricing model used for a charge at the time of us The PricingCategory column adheres to the following requirements: * PricingCategory MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports more than one pricing category across all SKUs. -* If present, the column MUST conform to the following additional requirements: +* If present, the column adheres to the following additional requirements: * PricingCategory MUST be of type String. * PricingCategory MUST be null if [ChargeCategory](#chargecategory) is "Tax". * PricingCategory MUST NOT be null if ChargeCategory is "Usage" or "Purchase" and [ChargeClass](#chargeclass) is not "Correction". diff --git a/specification/columns/regionid.md b/specification/columns/regionid.md index a0cb37ff9..9170ba291 100644 --- a/specification/columns/regionid.md +++ b/specification/columns/regionid.md @@ -6,7 +6,7 @@ A Region ID is a provider-assigned identifier for an isolated geographic area wh The RegionId column adheres to the following requirements: * RegionId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports deploying resources or services within a region. -* If present, the column MUST conform to the following additional requirements: +* If present, the column adheres to the following additional requirements: * RegionId MUST be of type String. * RegionId MUST conform to [String Handling](#stringhandling) requirements. * RegionId MUST NOT be null when a *resource* or *service* is operated in or managed from a distinct region by the Provider. diff --git a/specification/columns/regionname.md b/specification/columns/regionname.md index c274c56b9..e374b903b 100644 --- a/specification/columns/regionname.md +++ b/specification/columns/regionname.md @@ -6,7 +6,7 @@ Region Name is a provider-assigned display name for an isolated geographic area The RegionName column adheres to the following requirements: * RegionName MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports deploying resources or services within a region. -* If present, the column MUST conform to the following additional requirements: +* If present, the column adheres to the following additional requirements: * RegionName MUST be of type String. * RegionName MUST conform to [String Handling](#stringhandling) requirements. * RegionName MUST be null if [RegionId](#regionid) is null. diff --git a/specification/columns/resourceid.md b/specification/columns/resourceid.md index 4dfe52a29..b912a6560 100644 --- a/specification/columns/resourceid.md +++ b/specification/columns/resourceid.md @@ -6,7 +6,7 @@ A Resource ID is an identifier assigned to a [*resource*](#glossary:resource) by The ResourceId column adheres to the following requirements: * ResourceId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources. -* If present, the column MUST conform to the following additional requirements: +* If present, the column adheres to the following additional requirements: * ResourceId MUST be of type String. * ResourceId MUST conform to [String Handling](#stringhandling) requirements. * ResourceId MUST be null when a charge is not related to a *resource*. diff --git a/specification/columns/resourcename.md b/specification/columns/resourcename.md index 358badc07..d63e0e862 100644 --- a/specification/columns/resourcename.md +++ b/specification/columns/resourcename.md @@ -6,7 +6,7 @@ The Resource Name is a display name assigned to a [*resource*](#glossary:resourc The ResourceName column adheres to the following requirements: * ResourceName MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources. -* If present, the column MUST conform to the following additional requirements: +* If present, the column adheres to the following additional requirements: * ResourceName MUST be of type String. * ResourceName MUST conform to [String Handling](#stringhandling) requirements. * ResourceName MUST be null if [ResourceId](#resourceid) is null or when the *resource* only has a system-generated ResourceId without an assigned display name. diff --git a/specification/columns/resourcetype.md b/specification/columns/resourcetype.md index 50a9251f2..8e6ea809a 100644 --- a/specification/columns/resourcetype.md +++ b/specification/columns/resourcetype.md @@ -6,7 +6,7 @@ Resource Type describes the kind of [*resource*](#glossary:resource) the charge The ResourceType column adheres to the following requirements: * ResourceType MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources and supports assigning types to resources. -* If present, the column MUST conform to the following additional requirements: +* If present, the column adheres to the following additional requirements: * ResourceType MUST be of type String. * ResourceType MUST conform to [String Handling](#stringhandling) requirements. * ResourceType MUST be null if [ResourceId](#resourceid) is null. diff --git a/specification/columns/servicesubcategory.md b/specification/columns/servicesubcategory.md index c6dc2e1b1..bc6d59a9e 100644 --- a/specification/columns/servicesubcategory.md +++ b/specification/columns/servicesubcategory.md @@ -6,7 +6,7 @@ The Service Subcategory is a secondary classification of the [Service Category]( The ServiceSubcategory column adheres to the following requirements: * ServiceSubcategory is RECOMMENDED to be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). -* If present, the column MUST conform to the following additional requirements: +* If present, the column adheres to the following additional requirements: * ServiceSubcategory MUST be of type String. * ServiceSubcategory MUST NOT be null. * ServiceSubcategory MUST be one of the allowed values. diff --git a/specification/columns/skuid.md b/specification/columns/skuid.md index 2b52ac287..e35b58a28 100644 --- a/specification/columns/skuid.md +++ b/specification/columns/skuid.md @@ -6,7 +6,7 @@ A SKU ID is a unique identifier that defines a provider-supported construct for The SkuId column adheres to the following requirements: * SkuId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider publishes a SKU list. -* If present, the column MUST conform to the following additional requirements: +* If present, the column adheres to the following additional requirements: * SkuId MUST be of type String. * SkuId MUST conform to [String Handling](#stringhandling) requirements. * SkuId MUST be null if [ChargeCategory](#chargecategory) is "Tax". diff --git a/specification/columns/skupriceid.md b/specification/columns/skupriceid.md index f57cd4635..11e53399e 100644 --- a/specification/columns/skupriceid.md +++ b/specification/columns/skupriceid.md @@ -6,7 +6,7 @@ A SKU Price ID is a unique identifier that defines the unit price used to calcul The SkuPriceId column adheres to the following requirements: * SkuPriceId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider publishes a SKU price list. -* If present, the column MUST conform to the following additional requirements: +* If present, the column adheres to the following additional requirements: * SkuPriceId MUST be of type String. * SkuPriceId MUST conform to [String Handling](#stringhandling) requirements. * SkuPriceId MUST be null if [ChargeCategory](#chargecategory) is "Tax". diff --git a/specification/columns/subaccountid.md b/specification/columns/subaccountid.md index 0fcfb4c4b..31b9b8b8b 100644 --- a/specification/columns/subaccountid.md +++ b/specification/columns/subaccountid.md @@ -6,7 +6,7 @@ A Sub Account ID is a provider-assigned identifier assigned to a [*sub account*] The SubAccountId column adheres to the following requirements: * SubAccountId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports a *sub account* construct. -* If present, the column MUST conform to the following additional requirements: +* If present, the column adheres to the following additional requirements: * SubAccountId MUST be of type String. * SubAccountId MUST conform to [String Handling](#stringhandling) requirements. * SubAccountId MUST be null when a charge is not related to a *sub account*. diff --git a/specification/columns/subaccountname.md b/specification/columns/subaccountname.md index 34419b2ea..dad961353 100644 --- a/specification/columns/subaccountname.md +++ b/specification/columns/subaccountname.md @@ -6,7 +6,7 @@ A Sub Account Name is a display name assigned to a [*sub account*](#glossary:sub The SubAccountName column adheres to the following requirements: * SubAccountName MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports a *sub account* construct. -* If present, the column MUST conform to the following additional requirements: +* If present, the column adheres to the following additional requirements: * SubAccountName MUST be of type String. * SubAccountName MUST conform to [String Handling](#stringhandling) requirements. * SubAccountName MUST be null if [SubAccountId](#subaccountid) is null. From 1b6ee5d3ec8076c49d74a424232f75a44a23bb5e Mon Sep 17 00:00:00 2001 From: ijurica Date: Mon, 16 Dec 2024 09:52:33 +0100 Subject: [PATCH 09/12] FOCUS #557: Normative requirements refinement - preview - the following applies -> the column adheres to the following additional requirements: --- specification/columns/capacityreservationstatus.md | 2 +- specification/columns/chargeclass.md | 2 +- specification/columns/commitmentdiscountcategory.md | 2 +- specification/columns/commitmentdiscountname.md | 2 +- specification/columns/commitmentdiscountstatus.md | 2 +- specification/columns/commitmentdiscountunit.md | 2 +- specification/columns/pricingcategory.md | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/specification/columns/capacityreservationstatus.md b/specification/columns/capacityreservationstatus.md index 067f237a9..62c56efbd 100644 --- a/specification/columns/capacityreservationstatus.md +++ b/specification/columns/capacityreservationstatus.md @@ -9,7 +9,7 @@ The CapacityReservationStatus column adheres to the following requirements: * 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: + * If CapacityReservationId is not null and [ChargeCategory](#chargecategory) is "Usage", the column adheres to the following additional requirements: * 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*. diff --git a/specification/columns/chargeclass.md b/specification/columns/chargeclass.md index d2a945678..05d74b51d 100644 --- a/specification/columns/chargeclass.md +++ b/specification/columns/chargeclass.md @@ -8,7 +8,7 @@ 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: +* When 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". diff --git a/specification/columns/commitmentdiscountcategory.md b/specification/columns/commitmentdiscountcategory.md index ae3e74baa..674c55018 100644 --- a/specification/columns/commitmentdiscountcategory.md +++ b/specification/columns/commitmentdiscountcategory.md @@ -10,7 +10,7 @@ The CommitmentDiscountCategory column adheres to the following 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: + * If CommitmentDiscountId is not null, the column adheres to the following additional requirements: * CommitmentDiscountCategory MUST NOT be null. * CommitmentDiscountCategory MUST be one of the allowed values. diff --git a/specification/columns/commitmentdiscountname.md b/specification/columns/commitmentdiscountname.md index 10681f73b..bc2114400 100644 --- a/specification/columns/commitmentdiscountname.md +++ b/specification/columns/commitmentdiscountname.md @@ -10,7 +10,7 @@ The CommitmentDiscountName column adheres to the following requirements: * CommitmentDiscountName MUST be of type String. * CommitmentDiscountName MUST conform to [String Handling](#stringhandling) requirements. * CommitmentDiscountName MUST be null if [CommitmentDiscountId](#commitmentdiscountid) is null. - * If CommitmentDiscountId is not null, the following applies: + * If CommitmentDiscountId is not null, the column adheres to the following additional requirements: * CommitmentDiscountName MUST NOT be null when a display name can be assigned to a *commitment discount*. * CommitmentDiscountName MAY be null when a display name cannot be assigned to a *commitment discount*. diff --git a/specification/columns/commitmentdiscountstatus.md b/specification/columns/commitmentdiscountstatus.md index c370914c9..aee6bce8a 100644 --- a/specification/columns/commitmentdiscountstatus.md +++ b/specification/columns/commitmentdiscountstatus.md @@ -9,7 +9,7 @@ The CommitmentDiscountStatus column adheres to the following requirements: * If present, the column adheres to the following additional requirements: * CommitmentDiscountStatus MUST be of type String. * CommitmentDiscountStatus MUST be null if [CommitmentDiscountId](#commitmentdiscountid) is null. - * If CommitmentDiscountId is not null and [Charge Category](#chargecategory) is "Usage", the following applies: + * If CommitmentDiscountId is not null and [Charge Category](#chargecategory) is "Usage", the column adheres to the following additional requirements: * CommitmentDiscountStatus MUST NOT be null. * CommitmentDiscountStatus MUST be one of the allowed values. diff --git a/specification/columns/commitmentdiscountunit.md b/specification/columns/commitmentdiscountunit.md index 596f4df77..e971f0994 100644 --- a/specification/columns/commitmentdiscountunit.md +++ b/specification/columns/commitmentdiscountunit.md @@ -11,7 +11,7 @@ The CommitmentDiscountUnit column adheres to the following requirements: * CommitmentDiscountUnit MUST NOT be null when CommitmentDiscountId is not null and ChargeClass is not "Correction". * CommitmentDiscountUnit MUST be null in all other cases. -In cases where the CommitmentDiscountUnit is not null, the following applies: +In cases where the CommitmentDiscountUnit is not null, the column adheres to the following additional requirements: * The CommitmentDiscountUnit MUST represent the unit used to measure the *commitment discount*. * When accounting for [*commitment discount flexibility*](#glossary:commitment-discount-flexibility), the CommitmentDiscountUnit value SHOULD reflect this consideration. diff --git a/specification/columns/pricingcategory.md b/specification/columns/pricingcategory.md index cc38f2d86..ff32ab4f9 100644 --- a/specification/columns/pricingcategory.md +++ b/specification/columns/pricingcategory.md @@ -11,7 +11,7 @@ The PricingCategory column adheres to the following requirements: * PricingCategory MUST be null if [ChargeCategory](#chargecategory) is "Tax". * PricingCategory MUST NOT be null if ChargeCategory is "Usage" or "Purchase" and [ChargeClass](#chargeclass) is not "Correction". * PricingCategory MAY be null in all other cases. - * If PricingCategory is not null, the following applies: + * If PricingCategory is not null, the column adheres to the following additional requirements: * PricingCategory MUST be one of the allowed values. * PricingCategory MUST be "Standard" when pricing is predetermined at the agreed upon rate for the [billing account](#glossary:billing-account). * PricingCategory MUST be "Committed" when the charge is subject to an existing *commitment discount* and is not the purchase of the *commitment discount*. From 0d2501ee49f1d2c2ee0f9e16be1fb38a7d79ab6c Mon Sep 17 00:00:00 2001 From: ijurica Date: Mon, 16 Dec 2024 10:17:00 +0100 Subject: [PATCH 10/12] FOCUS #557: Normative requirements refinement - preview - Reverting change mistakenly applied to the original Normative Requirement --- specification/columns/commitmentdiscountunit.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/columns/commitmentdiscountunit.md b/specification/columns/commitmentdiscountunit.md index e971f0994..596f4df77 100644 --- a/specification/columns/commitmentdiscountunit.md +++ b/specification/columns/commitmentdiscountunit.md @@ -11,7 +11,7 @@ The CommitmentDiscountUnit column adheres to the following requirements: * CommitmentDiscountUnit MUST NOT be null when CommitmentDiscountId is not null and ChargeClass is not "Correction". * CommitmentDiscountUnit MUST be null in all other cases. -In cases where the CommitmentDiscountUnit is not null, the column adheres to the following additional requirements: +In cases where the CommitmentDiscountUnit is not null, the following applies: * The CommitmentDiscountUnit MUST represent the unit used to measure the *commitment discount*. * When accounting for [*commitment discount flexibility*](#glossary:commitment-discount-flexibility), the CommitmentDiscountUnit value SHOULD reflect this consideration. From e202cbb661391461575862d4b04cfec8c97fefb8 Mon Sep 17 00:00:00 2001 From: ijurica Date: Mon, 16 Dec 2024 12:37:34 +0100 Subject: [PATCH 11/12] FOCUS #557: Normative requirements refinement - preview - 'the column adheres to...' -> 'the XY adheres to...' --- specification/columns/availabilityzone.md | 2 +- specification/columns/capacityreservationid.md | 2 +- specification/columns/capacityreservationstatus.md | 4 ++-- specification/columns/chargeclass.md | 2 +- specification/columns/chargefrequency.md | 2 +- specification/columns/commitmentdiscountcategory.md | 4 ++-- specification/columns/commitmentdiscountid.md | 2 +- specification/columns/commitmentdiscountname.md | 4 ++-- specification/columns/commitmentdiscountstatus.md | 4 ++-- specification/columns/commitmentdiscounttype.md | 2 +- specification/columns/pricingcategory.md | 4 ++-- specification/columns/regionid.md | 2 +- specification/columns/regionname.md | 2 +- specification/columns/resourceid.md | 2 +- specification/columns/resourcename.md | 2 +- specification/columns/resourcetype.md | 2 +- specification/columns/servicesubcategory.md | 2 +- specification/columns/skuid.md | 2 +- specification/columns/skupriceid.md | 2 +- specification/columns/subaccountid.md | 2 +- specification/columns/subaccountname.md | 2 +- 21 files changed, 26 insertions(+), 26 deletions(-) diff --git a/specification/columns/availabilityzone.md b/specification/columns/availabilityzone.md index 9d9a4a6ea..62a1dcce9 100644 --- a/specification/columns/availabilityzone.md +++ b/specification/columns/availabilityzone.md @@ -6,7 +6,7 @@ An [*availability zone*](#glossary:availability-zone) is a provider-assigned ide 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: +* If present, AvailabilityZone adheres to the following additional requirements: * AvailabilityZone MUST be of type String. * AvailabilityZone MUST conform to [String Handling](#stringhandling) requirements. * AvailabilityZone MAY be null if a charge is not specific to an *availability zone*. diff --git a/specification/columns/capacityreservationid.md b/specification/columns/capacityreservationid.md index 3f7ec0b51..2b8b770d2 100644 --- a/specification/columns/capacityreservationid.md +++ b/specification/columns/capacityreservationid.md @@ -6,7 +6,7 @@ A Capacity Reservation ID is the identifier assigned to a [*capacity reservation 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: +* If present, CapacityReservationId 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*. diff --git a/specification/columns/capacityreservationstatus.md b/specification/columns/capacityreservationstatus.md index 62c56efbd..5b51f0d9e 100644 --- a/specification/columns/capacityreservationstatus.md +++ b/specification/columns/capacityreservationstatus.md @@ -6,10 +6,10 @@ Capacity Reservation Status indicates whether the charge represents either the c 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: +* If present, CapacityReservationStatus 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 column adheres to the following additional requirements: + * If CapacityReservationId is not null and [ChargeCategory](#chargecategory) is "Usage", CapacityReservationStatus adheres to the following additional requirements: * 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*. diff --git a/specification/columns/chargeclass.md b/specification/columns/chargeclass.md index 05d74b51d..34f0c0579 100644 --- a/specification/columns/chargeclass.md +++ b/specification/columns/chargeclass.md @@ -8,7 +8,7 @@ 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 column adheres to the following additional requirements: +* When the row represents a correction to a previously invoiced *billing period*, ChargeClass adheres to the following additional requirements: * ChargeClass MUST NOT be null. * ChargeClass MUST be one of the allowed values. * ChargeClass MUST be "Correction". diff --git a/specification/columns/chargefrequency.md b/specification/columns/chargefrequency.md index 522387dac..9e97224f7 100644 --- a/specification/columns/chargefrequency.md +++ b/specification/columns/chargefrequency.md @@ -6,7 +6,7 @@ Charge Frequency indicates how often a charge will occur. Along with the [charge 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: +* If present, ChargeFrequency 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. diff --git a/specification/columns/commitmentdiscountcategory.md b/specification/columns/commitmentdiscountcategory.md index 674c55018..a488b7f66 100644 --- a/specification/columns/commitmentdiscountcategory.md +++ b/specification/columns/commitmentdiscountcategory.md @@ -6,11 +6,11 @@ Commitment Discount Category indicates whether the [*commitment discount*](#glos 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: +* If present, CommitmentDiscountCategory 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 column adheres to the following additional requirements: + * If CommitmentDiscountId is not null, CommitmentDiscountCategory adheres to the following additional requirements: * CommitmentDiscountCategory MUST NOT be null. * CommitmentDiscountCategory MUST be one of the allowed values. diff --git a/specification/columns/commitmentdiscountid.md b/specification/columns/commitmentdiscountid.md index f94f07bf2..30b82c82c 100644 --- a/specification/columns/commitmentdiscountid.md +++ b/specification/columns/commitmentdiscountid.md @@ -6,7 +6,7 @@ A Commitment Discount ID is the identifier assigned to a [*commitment 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: +* If present, CommitmentDiscountId 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*. diff --git a/specification/columns/commitmentdiscountname.md b/specification/columns/commitmentdiscountname.md index bc2114400..d3b10d295 100644 --- a/specification/columns/commitmentdiscountname.md +++ b/specification/columns/commitmentdiscountname.md @@ -6,11 +6,11 @@ A Commitment Discount Name is the display name assigned to a [*commitment discou The CommitmentDiscountName column adheres to the following requirements: * CommitmentDiscountName 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: +* If present, CommitmentDiscountName adheres to the following additional requirements: * CommitmentDiscountName MUST be of type String. * CommitmentDiscountName MUST conform to [String Handling](#stringhandling) requirements. * CommitmentDiscountName MUST be null if [CommitmentDiscountId](#commitmentdiscountid) is null. - * If CommitmentDiscountId is not null, the column adheres to the following additional requirements: + * If CommitmentDiscountId is not null, CommitmentDiscountName adheres to the following additional requirements: * CommitmentDiscountName MUST NOT be null when a display name can be assigned to a *commitment discount*. * CommitmentDiscountName MAY be null when a display name cannot be assigned to a *commitment discount*. diff --git a/specification/columns/commitmentdiscountstatus.md b/specification/columns/commitmentdiscountstatus.md index aee6bce8a..41ce336fa 100644 --- a/specification/columns/commitmentdiscountstatus.md +++ b/specification/columns/commitmentdiscountstatus.md @@ -6,10 +6,10 @@ Commitment Discount Status indicates whether the charge corresponds with the con The CommitmentDiscountStatus column adheres to the following requirements: * CommitmentDiscountStatus 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: +* If present, CommitmentDiscountStatus adheres to the following additional requirements: * CommitmentDiscountStatus MUST be of type String. * CommitmentDiscountStatus MUST be null if [CommitmentDiscountId](#commitmentdiscountid) is null. - * If CommitmentDiscountId is not null and [Charge Category](#chargecategory) is "Usage", the column adheres to the following additional requirements: + * If CommitmentDiscountId is not null and [Charge Category](#chargecategory) is "Usage", CommitmentDiscountStatus adheres to the following additional requirements: * CommitmentDiscountStatus MUST NOT be null. * CommitmentDiscountStatus MUST be one of the allowed values. diff --git a/specification/columns/commitmentdiscounttype.md b/specification/columns/commitmentdiscounttype.md index 1c20c1f88..51bdf6203 100644 --- a/specification/columns/commitmentdiscounttype.md +++ b/specification/columns/commitmentdiscounttype.md @@ -6,7 +6,7 @@ Commitment Discount Type is a provider-assigned name to identify the type of [*c The CommitmentDiscountType column adheres to the following requirements: * CommitmentDiscountType 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: +* If present, CommitmentDiscountType adheres to the following additional requirements: * CommitmentDiscountType MUST be of type String. * CommitmentDiscountType MUST conform to [String Handling](#stringhandling) requirements. * CommitmentDiscountType MUST be null if [CommitmentDiscountId](#commitmentdiscountid) is null. diff --git a/specification/columns/pricingcategory.md b/specification/columns/pricingcategory.md index ff32ab4f9..b28e7ee3d 100644 --- a/specification/columns/pricingcategory.md +++ b/specification/columns/pricingcategory.md @@ -6,12 +6,12 @@ Pricing Category describes the pricing model used for a charge at the time of us The PricingCategory column adheres to the following requirements: * PricingCategory MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports more than one pricing category across all SKUs. -* If present, the column adheres to the following additional requirements: +* If present, PricingCategory adheres to the following additional requirements: * PricingCategory MUST be of type String. * PricingCategory MUST be null if [ChargeCategory](#chargecategory) is "Tax". * PricingCategory MUST NOT be null if ChargeCategory is "Usage" or "Purchase" and [ChargeClass](#chargeclass) is not "Correction". * PricingCategory MAY be null in all other cases. - * If PricingCategory is not null, the column adheres to the following additional requirements: + * If PricingCategory is not null, PricingCategory adheres to the following additional requirements: * PricingCategory MUST be one of the allowed values. * PricingCategory MUST be "Standard" when pricing is predetermined at the agreed upon rate for the [billing account](#glossary:billing-account). * PricingCategory MUST be "Committed" when the charge is subject to an existing *commitment discount* and is not the purchase of the *commitment discount*. diff --git a/specification/columns/regionid.md b/specification/columns/regionid.md index 9170ba291..39e16c8de 100644 --- a/specification/columns/regionid.md +++ b/specification/columns/regionid.md @@ -6,7 +6,7 @@ A Region ID is a provider-assigned identifier for an isolated geographic area wh The RegionId column adheres to the following requirements: * RegionId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports deploying resources or services within a region. -* If present, the column adheres to the following additional requirements: +* If present, RegionId adheres to the following additional requirements: * RegionId MUST be of type String. * RegionId MUST conform to [String Handling](#stringhandling) requirements. * RegionId MUST NOT be null when a *resource* or *service* is operated in or managed from a distinct region by the Provider. diff --git a/specification/columns/regionname.md b/specification/columns/regionname.md index e374b903b..7479b6685 100644 --- a/specification/columns/regionname.md +++ b/specification/columns/regionname.md @@ -6,7 +6,7 @@ Region Name is a provider-assigned display name for an isolated geographic area The RegionName column adheres to the following requirements: * RegionName MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports deploying resources or services within a region. -* If present, the column adheres to the following additional requirements: +* If present, RegionName adheres to the following additional requirements: * RegionName MUST be of type String. * RegionName MUST conform to [String Handling](#stringhandling) requirements. * RegionName MUST be null if [RegionId](#regionid) is null. diff --git a/specification/columns/resourceid.md b/specification/columns/resourceid.md index b912a6560..68fb8a1df 100644 --- a/specification/columns/resourceid.md +++ b/specification/columns/resourceid.md @@ -6,7 +6,7 @@ A Resource ID is an identifier assigned to a [*resource*](#glossary:resource) by The ResourceId column adheres to the following requirements: * ResourceId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources. -* If present, the column adheres to the following additional requirements: +* If present, ResourceId adheres to the following additional requirements: * ResourceId MUST be of type String. * ResourceId MUST conform to [String Handling](#stringhandling) requirements. * ResourceId MUST be null when a charge is not related to a *resource*. diff --git a/specification/columns/resourcename.md b/specification/columns/resourcename.md index d63e0e862..a2395c4a7 100644 --- a/specification/columns/resourcename.md +++ b/specification/columns/resourcename.md @@ -6,7 +6,7 @@ The Resource Name is a display name assigned to a [*resource*](#glossary:resourc The ResourceName column adheres to the following requirements: * ResourceName MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources. -* If present, the column adheres to the following additional requirements: +* If present, ResourceName adheres to the following additional requirements: * ResourceName MUST be of type String. * ResourceName MUST conform to [String Handling](#stringhandling) requirements. * ResourceName MUST be null if [ResourceId](#resourceid) is null or when the *resource* only has a system-generated ResourceId without an assigned display name. diff --git a/specification/columns/resourcetype.md b/specification/columns/resourcetype.md index 8e6ea809a..bf7779338 100644 --- a/specification/columns/resourcetype.md +++ b/specification/columns/resourcetype.md @@ -6,7 +6,7 @@ Resource Type describes the kind of [*resource*](#glossary:resource) the charge The ResourceType column adheres to the following requirements: * ResourceType MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources and supports assigning types to resources. -* If present, the column adheres to the following additional requirements: +* If present, ResourceType adheres to the following additional requirements: * ResourceType MUST be of type String. * ResourceType MUST conform to [String Handling](#stringhandling) requirements. * ResourceType MUST be null if [ResourceId](#resourceid) is null. diff --git a/specification/columns/servicesubcategory.md b/specification/columns/servicesubcategory.md index bc6d59a9e..b7de06b57 100644 --- a/specification/columns/servicesubcategory.md +++ b/specification/columns/servicesubcategory.md @@ -6,7 +6,7 @@ The Service Subcategory is a secondary classification of the [Service Category]( The ServiceSubcategory column adheres to the following requirements: * ServiceSubcategory is RECOMMENDED to be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). -* If present, the column adheres to the following additional requirements: +* If present, ServiceSubcategory adheres to the following additional requirements: * ServiceSubcategory MUST be of type String. * ServiceSubcategory MUST NOT be null. * ServiceSubcategory MUST be one of the allowed values. diff --git a/specification/columns/skuid.md b/specification/columns/skuid.md index e35b58a28..73bd0d49d 100644 --- a/specification/columns/skuid.md +++ b/specification/columns/skuid.md @@ -6,7 +6,7 @@ A SKU ID is a unique identifier that defines a provider-supported construct for The SkuId column adheres to the following requirements: * SkuId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider publishes a SKU list. -* If present, the column adheres to the following additional requirements: +* If present, SkuId adheres to the following additional requirements: * SkuId MUST be of type String. * SkuId MUST conform to [String Handling](#stringhandling) requirements. * SkuId MUST be null if [ChargeCategory](#chargecategory) is "Tax". diff --git a/specification/columns/skupriceid.md b/specification/columns/skupriceid.md index 11e53399e..68a7ff213 100644 --- a/specification/columns/skupriceid.md +++ b/specification/columns/skupriceid.md @@ -6,7 +6,7 @@ A SKU Price ID is a unique identifier that defines the unit price used to calcul The SkuPriceId column adheres to the following requirements: * SkuPriceId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider publishes a SKU price list. -* If present, the column adheres to the following additional requirements: +* If present, SkuPriceId adheres to the following additional requirements: * SkuPriceId MUST be of type String. * SkuPriceId MUST conform to [String Handling](#stringhandling) requirements. * SkuPriceId MUST be null if [ChargeCategory](#chargecategory) is "Tax". diff --git a/specification/columns/subaccountid.md b/specification/columns/subaccountid.md index 31b9b8b8b..14a9b2010 100644 --- a/specification/columns/subaccountid.md +++ b/specification/columns/subaccountid.md @@ -6,7 +6,7 @@ A Sub Account ID is a provider-assigned identifier assigned to a [*sub account*] The SubAccountId column adheres to the following requirements: * SubAccountId MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports a *sub account* construct. -* If present, the column adheres to the following additional requirements: +* If present, SubAccountId adheres to the following additional requirements: * SubAccountId MUST be of type String. * SubAccountId MUST conform to [String Handling](#stringhandling) requirements. * SubAccountId MUST be null when a charge is not related to a *sub account*. diff --git a/specification/columns/subaccountname.md b/specification/columns/subaccountname.md index dad961353..0c3e745f3 100644 --- a/specification/columns/subaccountname.md +++ b/specification/columns/subaccountname.md @@ -6,7 +6,7 @@ A Sub Account Name is a display name assigned to a [*sub account*](#glossary:sub The SubAccountName column adheres to the following requirements: * SubAccountName MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports a *sub account* construct. -* If present, the column adheres to the following additional requirements: +* If present, SubAccountName adheres to the following additional requirements: * SubAccountName MUST be of type String. * SubAccountName MUST conform to [String Handling](#stringhandling) requirements. * SubAccountName MUST be null if [SubAccountId](#subaccountid) is null. From 16160b1ac424aeaa57d1a288d68b2b8568820d62 Mon Sep 17 00:00:00 2001 From: ijurica Date: Mon, 16 Dec 2024 17:32:25 +0100 Subject: [PATCH 12/12] FOCUS #557: Normative requirements refinement preview - RegionId spec update --- specification/columns/regionid.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/specification/columns/regionid.md b/specification/columns/regionid.md index 39e16c8de..6199de0c3 100644 --- a/specification/columns/regionid.md +++ b/specification/columns/regionid.md @@ -9,8 +9,8 @@ The RegionId column adheres to the following requirements: * If present, RegionId adheres to the following additional requirements: * RegionId MUST be of type String. * RegionId MUST conform to [String Handling](#stringhandling) requirements. - * RegionId MUST NOT be null when a *resource* or *service* is operated in or managed from a distinct region by the Provider. - * RegionId MAY be null when a *resource* or *service* is not restricted to an isolated geographic area. + * RegionId MUST NOT be null when a *resource* or *service* is operated in or managed from a distinct region. + * RegionId MAY be null when a *resource* or *service* is operated in or managed from a distinct region. --- The RegionId column adheres to the following requirements: