From 99466c7093633970b62e5819cff393ddb38598c7 Mon Sep 17 00:00:00 2001 From: Mike Fuller Date: Thu, 26 Feb 2026 10:56:44 +1100 Subject: [PATCH 1/6] Patched the version management to handle the newer method FOCUS is using with hosting Requirements Model files. Enabling users to find the latest patched version of RM. Bumped version to 2.0.2 for release Signed-off-by: Mike Fuller --- .bumpversion.cfg | 2 +- focus_validator/rules/spec_rules.py | 218 +++++++++++++++++++++++----- pyproject.toml | 2 +- 3 files changed, 187 insertions(+), 35 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 5972f21..3a77685 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 2.0.1 +current_version = 2.0.2 commit = True tag = True parse = (?P\d+)\.(?P\d+)\.(?P\d+)(\-(?P(rc|dev))(?P\d+))? diff --git a/focus_validator/rules/spec_rules.py b/focus_validator/rules/spec_rules.py index c14af87..7c58961 100644 --- a/focus_validator/rules/spec_rules.py +++ b/focus_validator/rules/spec_rules.py @@ -55,8 +55,8 @@ def __init__( ): self.rule_set_path = rule_set_path self.rules_file_prefix = rules_file_prefix - self.rules_version = rules_version - self.model_version = "Unknown" # Will be loaded from JSON file + self.rules_version = rules_version # Will be overridden by FOCUSVersion from JSON Details + self.model_version = "Unknown" # Will be loaded from ModelVersion in JSON Details self.rules_file_suffix = rules_file_suffix self.focus_dataset = focus_dataset self.filter_rules = filter_rules @@ -82,9 +82,18 @@ def __init__( self.local_supported_versions, ) self.remote_versions = {} - if self.rules_block_remote_download and ( - self.rules_version not in self.local_supported_versions - ): + + # Build dict of local versions for semantic matching + local_versions_dict = { + v: {"source": "local"} for v in self.local_supported_versions + } + + # Try semantic version matching for local versions first + matched_version = self._find_best_version_match( + self.rules_version, local_versions_dict + ) + + if self.rules_block_remote_download and matched_version is None: self.log.error( "Version %s not found in local versions and remote download blocked", self.rules_version, @@ -92,14 +101,11 @@ def __init__( raise UnsupportedVersion( f"FOCUS version {self.rules_version} not supported. Supported versions: local {self.local_supported_versions}" ) - elif ( - self.rules_force_remote_download - or self.rules_version not in self.local_supported_versions - ): + elif self.rules_force_remote_download or matched_version is None: self.log.info( "Remote rule download needed (force: %s, version available locally: %s)", self.rules_force_remote_download, - self.rules_version in self.local_supported_versions, + matched_version is not None, ) self.log.debug("Fetching remote supported versions...") @@ -110,7 +116,12 @@ def __init__( self.remote_supported_versions, ) - if self.rules_version not in self.remote_supported_versions: + # Try semantic version matching for remote versions + matched_version = self._find_best_version_match( + self.rules_version, self.remote_versions + ) + + if matched_version is None: self.log.error( "Version %s not found in remote versions", self.rules_version ) @@ -119,13 +130,19 @@ def __init__( ) else: self.log.info( - "Downloading remote rules for version %s...", self.rules_version + "Matched requested version %s to %s from remote", + self.rules_version, + matched_version, ) - download_url = self.remote_versions[self.rules_version][ + download_url = self.remote_versions[matched_version][ "asset_browser_download_url" ] + filename = self.remote_versions[matched_version]["filename"] self.log.debug("Download URL: %s", download_url) + # Update json_rule_file path to use matched version filename + self.json_rule_file = os.path.join(self.rule_set_path, filename) + if not self.download_remote_version( remote_url=download_url, save_path=self.json_rule_file ): @@ -135,6 +152,18 @@ def __init__( ) else: self.log.info("Remote rules downloaded successfully") + else: + # Using local version + self.log.info( + "Matched requested version %s to %s from local files", + self.rules_version, + matched_version, + ) + # Update json_rule_file path to use matched version + self.json_rule_file = os.path.join( + self.rule_set_path, + f"{self.rules_file_prefix}{matched_version}{self.rules_file_suffix}", + ) self.rules = {} self.column_namespace = column_namespace self.json_rules = {} @@ -143,7 +172,12 @@ def __init__( self.column_types = {} def supported_local_versions(self) -> List[str]: - """Return list of versions from files in rule_set_path.""" + """Return list of highest versions from files in rule_set_path. + + Only returns the highest semantic version for each major.minor prefix. + For example, if both model-1.2.json and model-1.2.0.1.json exist, + only 1.2.0.1 will be returned. + """ versions = [] for filename in os.listdir(self.rule_set_path): if filename.startswith(self.rules_file_prefix) and filename.endswith( @@ -154,7 +188,91 @@ def supported_local_versions(self) -> List[str]: len(self.rules_file_prefix) : -len(self.rules_file_suffix) ] versions.append(version) - return versions + return self._filter_to_highest_versions(versions) + + def _parse_version_from_filename(self, filename: str) -> Optional[str]: + """Extract version from filename like 'model-1.2.0.1.json' -> '1.2.0.1'.""" + if not filename.startswith(self.rules_file_prefix) or not filename.endswith( + self.rules_file_suffix + ): + return None + version = filename[len(self.rules_file_prefix) : -len(self.rules_file_suffix)] + return version if version else None + + def _parse_version_tuple(self, version: str) -> Tuple[int, ...]: + """Convert version string '1.2.0.1' to tuple (1, 2, 0, 1) for comparison.""" + try: + return tuple(int(x) for x in version.split(".")) + except (ValueError, AttributeError): + return (0,) # Fallback for invalid versions + + def _find_best_version_match( + self, requested: str, available: Dict[str, Dict[str, Any]] + ) -> Optional[str]: + """ + Find the best (highest) semantic version matching the requested prefix. + + Args: + requested: Version prefix like '1.2' or '1.3' + available: Dict of available versions with metadata + + Returns: + Best matching version string, or None if no match found + """ + # Filter versions that match the requested prefix + matching = [ + v + for v in available.keys() + if v.startswith(requested + ".") or v == requested + ] + + if not matching: + return None + + # Sort by semantic version (highest first) + matching.sort(key=self._parse_version_tuple, reverse=True) + return matching[0] + + def _filter_to_highest_versions(self, versions: List[str]) -> List[str]: + """ + Filter version list to only include the highest version for each major.minor prefix. + + For example, given ['1.2', '1.2.0', '1.2.0.1', '1.3', '1.3.0.1']: + Returns: ['1.2.0.1', '1.3.0.1'] + + This ensures the supported versions list only shows versions that would + actually be used (since semantic matching always picks the highest). + + Args: + versions: List of version strings + + Returns: + Filtered list with only highest version per major.minor + """ + # Group versions by major.minor prefix + prefix_groups: Dict[str, List[str]] = {} + for v in versions: + # Extract major.minor (first two components) + parts = v.split(".") + if len(parts) >= 2: + prefix = f"{parts[0]}.{parts[1]}" + else: + prefix = v + + if prefix not in prefix_groups: + prefix_groups[prefix] = [] + prefix_groups[prefix].append(v) + + # For each prefix, keep only the highest version + highest_versions = [] + for prefix, group_versions in prefix_groups.items(): + # Sort by semantic version and take the highest + group_versions.sort(key=self._parse_version_tuple, reverse=True) + highest_versions.append(group_versions[0]) + + # Return sorted by semantic version + highest_versions.sort(key=self._parse_version_tuple) + return highest_versions def find_release_assets( self, @@ -164,22 +282,28 @@ def find_release_assets( timeout: float = 15.0, ) -> Dict[str, Dict[str, Any]]: """ - Search GitHub releases for assets whose names start with - self.rules_files_prefix and end with self.rules_files_suffix. + Search GitHub releases for ALL model files across all releases. - Returns a dict of dicts: + Returns a dict keyed by model VERSION (not release tag): { - "version": { - "release_tag": "v1.2", - "asset_browser_download_url": "" + "1.2.0.1": { + "release_tag": "v1.3", + "filename": "model-1.2.0.1.json", + "asset_browser_download_url": "" + }, + "1.3": { + "release_tag": "v1.3", + "filename": "model-1.3.json", + "asset_browser_download_url": "" } } + + When multiple releases contain the same model version, the latest release wins. """ session = requests.Session() headers = { "Accept": "application/vnd.github+json", "X-GitHub-Api-Version": "2022-11-28", - # Optional but helps with routing "User-Agent": "focus-validator/asset-scan", } @@ -194,7 +318,6 @@ def find_release_assets( if resp.status_code == 401: raise PermissionError("Unauthorized (bad or missing token)") if resp.status_code == 403: - # Could be secondary rate limiting or scope issue raise RuntimeError(f"Forbidden / rate limited: {resp.text}") resp.raise_for_status() @@ -209,24 +332,41 @@ def find_release_assets( if not self.allow_prerelease_releases and rel.get("prerelease"): continue + release_tag = rel.get("tag_name", "") assets = rel.get("assets", []) or [] + + # Scan ALL model files in this release for asset in assets: - name = asset.get("name", "") - if name.startswith(self.rules_file_prefix) and name.endswith( - self.rules_file_suffix - ): - results[rel.get("tag_name", "").removeprefix("v")] = { - "release_tag": rel.get("tag_name"), + filename = asset.get("name", "") + model_version = self._parse_version_from_filename(filename) + + if model_version: + # Store by model version (later releases will override earlier ones) + # This ensures we get the latest release containing each model version + results[model_version] = { + "release_tag": release_tag, + "filename": filename, "asset_browser_download_url": asset.get( "browser_download_url" ), } + page += 1 + self.log.debug( + "Found %d model versions across releases: %s", + len(results), + list(results.keys()), + ) return results def supported_remote_versions(self) -> List[str]: - """Return list of versions from remote source.""" + """Return list of highest versions from remote source. + + Only returns the highest semantic version for each major.minor prefix. + For example, if both 1.2 and 1.2.0.1 are available remotely, + only 1.2.0.1 will be returned since that's what semantic matching would use. + """ # Respect block download setting if self.rules_block_remote_download: self.log.debug( @@ -236,7 +376,8 @@ def supported_remote_versions(self) -> List[str]: # Implement logic to fetch supported remote versions self.remote_versions = self.find_release_assets() - return [v for v in self.remote_versions.keys()] + all_versions = list(self.remote_versions.keys()) + return self._filter_to_highest_versions(all_versions) def download_remote_version(self, remote_url: str, save_path: str) -> bool: """Download the file from remote_url and save it to save_path. @@ -266,14 +407,25 @@ def load_rules(self) -> ValidationPlan: applicability_criteria_list=self.applicability_criteria_list, ) - # Load model version from the JSON file Details section + # Load FOCUS version and model version from the JSON file Details section try: model_data = JsonLoader.load_json_rules(self.json_rule_file) details = model_data.get("Details", {}) + # Override rules_version with FOCUSVersion from model file + focus_version = details.get("FOCUSVersion", None) + if focus_version: + self.rules_version = focus_version + self.log.debug("Loaded FOCUS version: %s", self.rules_version) + else: + self.log.warning( + "FOCUSVersion not found in Details, using requested version: %s", + self.rules_version, + ) + # Load model version self.model_version = details.get("ModelVersion", "Unknown") self.log.debug("Loaded model version: %s", self.model_version) except Exception as e: - self.log.warning("Failed to load model version: %s", e) + self.log.warning("Failed to load FOCUS/model version: %s", e) self.model_version = "Unknown" self.plan = val_plan diff --git a/pyproject.toml b/pyproject.toml index d0eeb4c..1008c62 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "focus_validator" -version = "2.0.1" +version = "2.0.2" description = "FOCUS spec validator." authors = [] readme = "README.md" From 81c3500ceb3011eb37d2f9cddb97a1298df7802a Mon Sep 17 00:00:00 2001 From: Mike Fuller Date: Thu, 26 Feb 2026 10:59:14 +1100 Subject: [PATCH 2/6] Clean up for lint checks Signed-off-by: Mike Fuller --- focus_validator/rules/spec_rules.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/focus_validator/rules/spec_rules.py b/focus_validator/rules/spec_rules.py index 7c58961..a193daf 100644 --- a/focus_validator/rules/spec_rules.py +++ b/focus_validator/rules/spec_rules.py @@ -55,8 +55,12 @@ def __init__( ): self.rule_set_path = rule_set_path self.rules_file_prefix = rules_file_prefix - self.rules_version = rules_version # Will be overridden by FOCUSVersion from JSON Details - self.model_version = "Unknown" # Will be loaded from ModelVersion in JSON Details + self.rules_version = ( + rules_version # Will be overridden by FOCUSVersion from JSON Details + ) + self.model_version = ( + "Unknown" # Will be loaded from ModelVersion in JSON Details + ) self.rules_file_suffix = rules_file_suffix self.focus_dataset = focus_dataset self.filter_rules = filter_rules From 3f9570d276f4baa841dfb724ffa503c3e8e027f1 Mon Sep 17 00:00:00 2001 From: Mike Fuller Date: Thu, 26 Feb 2026 13:02:40 +1100 Subject: [PATCH 3/6] Update json loader to return extra data need to avoid duplicate JSON loads Added warning for malformed versions Added unittests for new version handling Dropped old model file from repo Signed-off-by: Mike Fuller --- focus_validator/config_objects/json_loader.py | 6 +- focus_validator/rules/model-1.2.json | 18578 ---------------- focus_validator/rules/spec_rules.py | 21 +- tests/test_spec_rules_unsupported_version.py | 205 + 4 files changed, 222 insertions(+), 18588 deletions(-) delete mode 100644 focus_validator/rules/model-1.2.json diff --git a/focus_validator/config_objects/json_loader.py b/focus_validator/config_objects/json_loader.py index 0c318bc..96d191c 100644 --- a/focus_validator/config_objects/json_loader.py +++ b/focus_validator/config_objects/json_loader.py @@ -129,14 +129,14 @@ def load_json_rules_with_dependencies_and_types( focus_dataset: Optional[str] = "", filter_rules: Optional[str] = None, applicability_criteria_list: Optional[List[str]] = None, - ) -> Tuple[ValidationPlan, Dict[str, str]]: + ) -> Tuple[ValidationPlan, Dict[str, str], Dict[str, Any]]: """ Load CR JSON, build the dependency graph with RuleDependencyResolver, select relevant rules, and return both an execution-ready ValidationPlan (parents preserved, topo-ordered nodes + layers) and a column type mapping. Returns: - Tuple of (ValidationPlan, Dict[column_name, pandas_dtype]) + Tuple of (ValidationPlan, Dict[column_name, pandas_dtype], Dict[model_data]) """ model_data = JsonLoader.load_json_rules(json_rule_file) @@ -227,4 +227,4 @@ def load_json_rules_with_dependencies_and_types( exec_ctx=None, # supply a runtime context later if you want gated edges ) - return val_plan, column_types + return val_plan, column_types, model_data diff --git a/focus_validator/rules/model-1.2.json b/focus_validator/rules/model-1.2.json deleted file mode 100644 index c301ada..0000000 --- a/focus_validator/rules/model-1.2.json +++ /dev/null @@ -1,18578 +0,0 @@ -{ - "Details": { - "ModelVersion": "1.2", - "FOCUSVersion": "1.2" - }, - "ApplicabilityCriteria": { - "ACCOUNT_NAMING_SUPPORTED": { - "Description": "Provider supports assigning a display name for the billing account" - }, - "AVAILABILITY_ZONE_SUPPORTED": { - "Description": "Provider supports deploying resources or services within an availability zone" - }, - "CAPACITY_RESERVATION_SUPPORTED": { - "Description": "Provider supports capacity reservations" - }, - "COMMITMENT_DISCOUNT_SUPPORTED": { - "Description": "Provider supports commitment discounts" - }, - "MULTIPLE_PRICING_CATEGORIES_SUPPORTED": { - "Description": "Provider supports more than one pricing category across all SKUs" - }, - "MULTIPLE_SUB_ACCOUNT_TYPES_SUPPORTED": { - "Description": "Provider supports more than one possible SubAccountType value" - }, - "MULTIPLE_BILLING_ACCOUNT_TYPES_SUPPORTED": { - "Description": "Provider supports more than one possible BillingAccountType value" - }, - "NEGOTIATED_PRICING_SUPPORTED": { - "Description": "Provider supports negotiated pricing concepts" - }, - "PUBLIC_PRICE_LIST_SUPPORTED": { - "Description": "Provider publishes public price lists" - }, - "USAGE_MEASUREMENT_SUPPORTED": { - "Description": "Provider supports the measurement of usage" - }, - "UNIT_PRICING_SUPPORTED": { - "Description": "Provider supports unit pricing concepts" - }, - "SUB_ACCOUNT_SUPPORTED": { - "Description": "Provider supports a sub account construct" - }, - "BILLING_BASED_ON_PROVISIONED_RESOURCES_SUPPORTED": { - "Description": "Provider supports billing based on provisioned resources" - }, - "RESOURCE_TYPE_ASSIGNMENT_SUPPORTED": { - "Description": "Provider supports assigning types to resources" - }, - "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED": { - "Description": "Provider supports pricing and billing in different currencies" - }, - "VIRTUAL_CURRENCY_SUPPORTED": { - "Description": "Provider supports prices in virtual currency" - }, - "REGION_SUPPORTED": { - "Description": "Provider supports deploying resources or services within a region" - }, - "TAGGING_SUPPORTED": { - "Description": "Provider supports setting user or provider-defined tags" - } - }, - "CheckFunctions": { - "OR": { - "Description": "OR check items, will return true on ANY check passing", - "Arguments": [ - "Items" - ], - "FormatAttributes": [] - }, - "AND": { - "Description": "AND check items, will return true on ALL checks passing", - "Arguments": [ - "Items" - ], - "FormatAttributes": [] - }, - "ColumnPresent": { - "Description": "Check if column is present in the dataset", - "Arguments": [ - "ColumnName" - ], - "FormatAttributes": [ - "ColumnHandling-A-000-M" - ] - }, - "CheckDistinctCount": { - "Description": "Check if two columns have a distinct count equal to a value", - "Arguments": [ - "ColumnAName", - "ColumnBName", - "ExpectedCount" - ], - "FormatAttributes": [] - }, - "FormatKeyValue": { - "Description": "Check a column has a key value format", - "Arguments": [ - "ColumnName" - ], - "FormatAttributes": [ - "KeyValueFormat-A-000-M" - ] - }, - "CheckValue": { - "Description": "Check if column has a particular value", - "Arguments": [ - "ColumnName", - "Value" - ], - "FormatAttributes": [] - }, - "CheckNotValue": { - "Description": "Check if column does not have a particular value", - "Arguments": [ - "ColumnName", - "Value" - ], - "FormatAttributes": [] - }, - "CheckNotSameValue": { - "Description": "Check if column does not have the same value as another column", - "Arguments": [ - "ColumnAName", - "ColumnBName" - ], - "FormatAttributes": [] - }, - "CheckSameValue": { - "Description": "Check if column does have the same value as another column", - "Arguments": [ - "ColumnAName", - "ColumnBName" - ], - "FormatAttributes": [] - }, - "CheckDecimalValue": { - "Description": "Check if column has a valid decimal value", - "Arguments": [ - "ColumnName" - ], - "FormatAttributes": [] - }, - "CheckGreaterOrEqualThanValue": { - "Description": "Check if column has value equal or greater than a value", - "Arguments": [ - "ColumnName", - "Value" - ], - "FormatAttributes": [] - }, - "CheckModelRule": { - "Description": "Check another ModelRule and turn its value", - "Arguments": [ - "ModelRuleId" - ], - "FormatAttributes": [] - }, - "CheckNationalCurrency": { - "Description": "Check column has a valid national currency code", - "Arguments": [ - "ColumnName" - ], - "FormatAttributes": [ - "CurrencyFormat-A-000-C" - ] - }, - "TypeDecimal": { - "Description": "Check column has the data type of decimal", - "Arguments": [ - "ColumnName" - ], - "FormatAttributes": [] - }, - "TypeString": { - "Description": "Check column has the data type of string", - "Arguments": [ - "ColumnName" - ], - "FormatAttributes": [] - }, - "FormatDateTime": { - "Description": "Check column has the format of datetime", - "Arguments": [ - "ColumnName" - ], - "FormatAttributes": [ - "DateTimeFormat-A-000-M" - ] - }, - "FormatNumeric": { - "Description": "Check a column has a numeric format", - "Arguments": [ - "ColumnName" - ], - "FormatAttributes": [ - "NumericFormat-A-000-M" - ] - }, - "FormatString": { - "Description": "Check a column has a string format", - "Arguments": [ - "ColumnName" - ], - "FormatAttributes": [ - "StringHandling-A-000-M" - ] - }, - "FormatUnit": { - "Description": "Check a column has a unit format", - "Arguments": [ - "ColumnName" - ], - "FormatAttributes": [ - "UnitFormat-A-000-M" - ] - }, - "FormatCurrency": { - "Description": "Check a column has a currency format", - "Arguments": [ - "ColumnName" - ], - "FormatAttributes": [ - "CurrencyFormat-A-000-C" - ] - }, - "ColumnByColumnEqualsColumnValue": { - "Description": "Check the result of a column value times by another column value and confirm if it matches the value of third column", - "Arguments": [ - "ColumnAName", - "ColumnBName", - "ResultColumnName" - ], - "FormatAttributes": [] - }, - "TypeDateTime": { - "Description": "Check column has the data type of datetime", - "Arguments": [ - "ColumnName" - ], - "FormatAttributes": [] - } - }, - "ModelDatasets": { - "CostAndUsage": { - "ModelRules": [ - "CostAndUsage-D-000-M" - ] - } - }, - "ModelRules": { - "CostAndUsage-D-000-M": { - "Function": "Composite", - "Reference": "CostAndUsage", - "EntityType": "Dataset", - "Notes": "Main dataset composite rule", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The CostAndUsage dataset adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-002-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-001-M", - "CostAndUsage-D-002-M", - "DiscountHandling-A-000-C", - "NullHandling-A-000-M", - "ColumnHandling-A-000-M" - ] - } - }, - "CostAndUsage-D-001-M": { - "Function": "Composite", - "Reference": "CostAndUsage", - "EntityType": "Dataset", - "Notes": "Columns present composite rule", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The CostAndUsage dataset adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-005-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-006-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-007-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-008-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-009-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-010-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-011-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-012-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-013-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-014-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-015-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-016-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-017-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-018-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-019-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-020-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-021-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-022-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-023-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-024-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-025-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-026-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-027-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-028-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-029-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-030-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-031-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-032-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-033-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-034-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-035-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-036-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-037-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-038-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-039-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-040-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-041-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-042-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-043-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-044-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-045-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-046-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-050-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-054-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-058-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-059-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-060-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-061-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-062-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-063-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-064-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-065-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-066-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-067-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-068-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-003-C", - "CostAndUsage-D-004-C", - "CostAndUsage-D-005-M", - "CostAndUsage-D-006-M", - "CostAndUsage-D-007-C", - "CostAndUsage-D-008-M", - "CostAndUsage-D-009-M", - "CostAndUsage-D-010-M", - "CostAndUsage-D-011-C", - "CostAndUsage-D-012-C", - "CostAndUsage-D-013-C", - "CostAndUsage-D-014-C", - "CostAndUsage-D-015-C", - "CostAndUsage-D-016-C", - "CostAndUsage-D-017-C", - "CostAndUsage-D-018-C", - "CostAndUsage-D-019-C", - "CostAndUsage-D-020-C", - "CostAndUsage-D-021-M", - "CostAndUsage-D-022-C", - "CostAndUsage-D-023-M", - "CostAndUsage-D-024-M", - "CostAndUsage-D-025-M", - "CostAndUsage-D-026-M", - "CostAndUsage-D-027-O", - "CostAndUsage-D-028-M", - "CostAndUsage-D-029-C", - "CostAndUsage-D-030-M", - "CostAndUsage-D-031-M", - "CostAndUsage-D-032-M", - "CostAndUsage-D-033-O", - "CostAndUsage-D-034-C", - "CostAndUsage-D-035-M", - "CostAndUsage-D-036-M", - "CostAndUsage-D-037-M", - "CostAndUsage-D-038-M", - "CostAndUsage-D-039-C", - "CostAndUsage-D-040-M", - "CostAndUsage-D-041-M", - "CostAndUsage-D-042-O", - "CostAndUsage-D-043-C", - "CostAndUsage-D-044-C", - "CostAndUsage-D-045-C", - "CostAndUsage-D-046-C", - "CostAndUsage-D-050-C", - "CostAndUsage-D-054-C", - "CostAndUsage-D-058-C", - "CostAndUsage-D-059-C", - "CostAndUsage-D-060-C", - "CostAndUsage-D-061-C", - "CostAndUsage-D-062-C", - "CostAndUsage-D-063-C", - "CostAndUsage-D-064-C", - "CostAndUsage-D-065-C", - "CostAndUsage-D-066-C", - "CostAndUsage-D-067-C", - "CostAndUsage-D-068-M" - ] - } - }, - "CostAndUsage-D-002-M": { - "Function": "Composite", - "Reference": "CostAndUsage", - "EntityType": "Dataset", - "Notes": "Columns composite rule", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The CostAndUsage dataset adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "AvailabilityZone-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BilledCost-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingAccountId-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingAccountName-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingAccountType-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingCurrency-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingPeriodEnd-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingPeriodStart-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationId-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationStatus-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeCategory-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeClass-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeFrequency-C-000-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeDescription-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargePeriodEnd-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargePeriodStart-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountCategory-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountId-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountName-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountStatus-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountType-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountUnit-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountQuantity-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ConsumedUnit-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ConsumedQuantity-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedCost-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedUnitPrice-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "EffectiveCost-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "InvoiceId-C-000-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "InvoiceIssuerName-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListCost-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListUnitPrice-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCategory-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrency-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyEffectiveCost-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyListUnitPrice-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingQuantity-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingUnit-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ProviderName-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PublisherName-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "RegionId-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "RegionName-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceId-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceName-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceType-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountId-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountName-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceCategory-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceName-C-000-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceSubcategory-C-000-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuId-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuMeter-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceId-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountType-C-000-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-000-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "AvailabilityZone-C-000-C", - "BilledCost-C-000-M", - "BillingAccountId-C-000-M", - "BillingAccountName-C-000-M", - "BillingAccountType-C-000-C", - "BillingCurrency-C-000-M", - "BillingPeriodEnd-C-000-M", - "BillingPeriodStart-C-000-M", - "CapacityReservationId-C-000-C", - "CapacityReservationStatus-C-000-C", - "ChargeCategory-C-000-M", - "ChargeClass-C-000-M", - "ChargeFrequency-C-000-O", - "ChargeDescription-C-000-M", - "ChargePeriodEnd-C-000-M", - "ChargePeriodStart-C-000-M", - "CommitmentDiscountCategory-C-000-C", - "CommitmentDiscountId-C-000-C", - "CommitmentDiscountName-C-000-C", - "CommitmentDiscountStatus-C-000-C", - "CommitmentDiscountType-C-000-C", - "CommitmentDiscountUnit-C-000-C", - "CommitmentDiscountQuantity-C-000-C", - "ConsumedUnit-C-000-C", - "ConsumedQuantity-C-000-C", - "ContractedCost-C-000-M", - "ContractedUnitPrice-C-000-C", - "EffectiveCost-C-000-M", - "InvoiceId-C-000-O", - "InvoiceIssuerName-C-000-M", - "ListCost-C-000-M", - "ListUnitPrice-C-000-C", - "PricingCategory-C-000-M", - "PricingCurrency-C-000-C", - "PricingCurrencyContractedUnitPrice-C-000-C", - "PricingCurrencyEffectiveCost-C-000-C", - "PricingCurrencyListUnitPrice-C-000-C", - "PricingQuantity-C-000-M", - "PricingUnit-C-000-M", - "ProviderName-C-000-M", - "RegionId-C-000-C", - "RegionName-C-000-C", - "ResourceId-C-000-C", - "ResourceName-C-000-C", - "ResourceType-C-000-C", - "PublisherName-C-000-M", - "SubAccountId-C-000-C", - "SubAccountName-C-000-C", - "ServiceCategory-C-000-M", - "ServiceName-C-000-M", - "ServiceSubcategory-C-000-O", - "SkuId-C-000-C", - "SkuMeter-C-000-C", - "SkuPriceDetails-C-000-C", - "SkuPriceId-C-000-C", - "SubAccountType-C-000-C", - "Tags-C-000-C" - ] - } - }, - "CostAndUsage-D-003-C": { - "Function": "Presence", - "Reference": "AvailabilityZone", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "AVAILABILITY_ZONE_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "AvailabilityZone is RECOMMENDED to be present in a FOCUS dataset when the provider supports deploying resources or services within an availability zone.", - "Keyword": "RECOMMENDED", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "AvailabilityZone" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-004-C": { - "Function": "Presence", - "Reference": "ListUnitPrice", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ListUnitPrice MUST be present in a FOCUS dataset when the provider publishes unit prices exclusive of discounts.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ListUnitPrice" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-005-M": { - "Function": "Presence", - "Reference": "BillingAccountName", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingAccountName MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "BillingAccountName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-006-M": { - "Function": "Presence", - "Reference": "BilledCost", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BilledCost MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "BilledCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-007-C": { - "Function": "Presence", - "Reference": "BillingAccountType", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "MULTIPLE_BILLING_ACCOUNT_TYPES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingAccountType MUST be present in a FOCUS dataset when the provider supports more than one possible BillingAccountType value.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "BillingAccountType" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-008-M": { - "Function": "Presence", - "Reference": "ChargeCategory", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargeCategory MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ChargeCategory" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-009-M": { - "Function": "Presence", - "Reference": "BillingPeriodStart", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingPeriodStart MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "BillingPeriodStart" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-010-M": { - "Function": "Presence", - "Reference": "BillingPeriodEnd", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingPeriodEnd MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "BillingPeriodEnd" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-011-C": { - "Function": "Presence", - "Reference": "ConsumedQuantity", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "USAGE_MEASUREMENT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ConsumedQuantity MUST be present in a FOCUS dataset when the provider supports the measurement of usage.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ConsumedQuantity" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-012-C": { - "Function": "Presence", - "Reference": "CommitmentDiscountName", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountName MUST be present in a FOCUS dataset when the provider supports commitment discounts.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "CommitmentDiscountName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-013-C": { - "Function": "Presence", - "Reference": "CommitmentDiscountId", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountId MUST be present in a FOCUS dataset when the provider supports commitment discounts.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "CommitmentDiscountId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-014-C": { - "Function": "Presence", - "Reference": "CommitmentDiscountType", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountType MUST be present in a FOCUS dataset when the provider supports commitment discounts.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "CommitmentDiscountType" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-015-C": { - "Function": "Presence", - "Reference": "CommitmentDiscountUnit", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountUnit MUST be present in a FOCUS dataset when the provider supports commitment discounts.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "CommitmentDiscountUnit" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-016-C": { - "Function": "Presence", - "Reference": "CommitmentDiscountCategory", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountCategory MUST be present in a FOCUS dataset when the provider supports commitment discounts.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "CommitmentDiscountCategory" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-017-C": { - "Function": "Presence", - "Reference": "CommitmentDiscountStatus", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountStatus MUST be present in a FOCUS dataset when the provider supports commitment discounts.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "CommitmentDiscountStatus" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-018-C": { - "Function": "Presence", - "Reference": "CommitmentDiscountQuantity", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountQuantity MUST be present in a FOCUS dataset when the provider supports commitment discounts.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "CommitmentDiscountQuantity" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-019-C": { - "Function": "Presence", - "Reference": "SubAccountId", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "SUB_ACCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SubAccountId MUST be present in a FOCUS dataset when the provider supports a sub account construct.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "SubAccountId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-020-C": { - "Function": "Presence", - "Reference": "CapacityReservationStatus", - "EntityType": "Dataset", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "CAPACITY_RESERVATION_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CapacityReservationStatus MUST be present in a FOCUS dataset when the provider supports capacity reservations.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "CapacityReservationStatus" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-021-M": { - "Function": "Presence", - "Reference": "PublisherName", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PublisherName MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "PublisherName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-022-C": { - "Function": "Presence", - "Reference": "PricingCategory", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "MULTIPLE_PRICING_CATEGORIES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCategory MUST be present in a FOCUS dataset when the provider supports more than one pricing category across all SKUs.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "PricingCategory" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-023-M": { - "Function": "Presence", - "Reference": "InvoiceIssuerName", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "InvoiceIssuerName MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "InvoiceIssuerName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-024-M": { - "Function": "Presence", - "Reference": "BillingAccountId", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingAccountId MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "BillingAccountId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-025-M": { - "Function": "Presence", - "Reference": "ChargeDescription", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargeDescription MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ChargeDescription" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-026-M": { - "Function": "Presence", - "Reference": "ChargeClass", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargeClass MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ChargeClass" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-027-O": { - "Function": "Presence", - "Reference": "ChargeFrequency", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargeFrequency is RECOMMENDED to be present in a FOCUS dataset.", - "Keyword": "RECOMMENDED", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ChargeFrequency" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-028-M": { - "Function": "Presence", - "Reference": "ChargePeriodEnd", - "EntityType": "Dataset", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargePeriodEnd MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ChargePeriodEnd" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-029-C": { - "Function": "Presence", - "Reference": "SubAccountName", - "EntityType": "Dataset", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "SUB_ACCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SubAccountName MUST be present in a FOCUS dataset when the provider supports a sub account construct.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "SubAccountName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-030-M": { - "Function": "Presence", - "Reference": "ContractedCost", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ContractedCost MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ContractedCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-031-M": { - "Function": "Presence", - "Reference": "EffectiveCost", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "EffectiveCost MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "EffectiveCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-032-M": { - "Function": "Presence", - "Reference": "ListCost", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ListCost MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ListCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-033-O": { - "Function": "Presence", - "Reference": "InvoiceId", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "InvoiceId is RECOMMENDED to be present in a FOCUS dataset.", - "Keyword": "RECOMMENDED", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "InvoiceId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-034-C": { - "Function": "Presence", - "Reference": "ContractedUnitPrice", - "EntityType": "Dataset", - "Notes": "Presence rule", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "NEGOTIATED_PRICING_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ContractedUnitPrice MUST be present in a FOCUS dataset when the provider supports negotiated pricing concepts.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ContractedUnitPrice" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-035-M": { - "Function": "Presence", - "Reference": "BillingCurrency", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingCurrency MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "BillingCurrency" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-036-M": { - "Function": "Presence", - "Reference": "PricingQuantity", - "EntityType": "Dataset", - "Notes": "PricingQuantity must be present in dataset", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingQuantity MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "PricingQuantity" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-037-M": { - "Function": "Presence", - "Reference": "ChargePeriodStart", - "EntityType": "Dataset", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargePeriodStart MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ChargePeriodStart" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-038-M": { - "Function": "Presence", - "Reference": "ProviderName", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ProviderName MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ProviderName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-039-C": { - "Function": "Presence", - "Reference": "ResourceType", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "BILLING_BASED_ON_PROVISIONED_RESOURCES_SUPPORTED", - "RESOURCE_TYPE_ASSIGNMENT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ResourceType MUST be present in a FOCUS dataset when the provider supports billing based on provisioned resources and supports assigning types to resources.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ResourceType" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-040-M": { - "Function": "Presence", - "Reference": "ServiceCategory", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ServiceCategory MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ServiceCategory" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-041-M": { - "Function": "Presence", - "Reference": "ServiceName", - "EntityType": "Dataset", - "Notes": "ServiceName must be present in dataset", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ServiceName MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ServiceName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-042-O": { - "Function": "Presence", - "Reference": "ServiceSubcategory", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ServiceSubcategory is RECOMMENDED to be present in a FOCUS dataset.", - "Keyword": "RECOMMENDED", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ServiceSubcategory" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-043-C": { - "Function": "Presence", - "Reference": "ResourceId", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "BILLING_BASED_ON_PROVISIONED_RESOURCES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ResourceId MUST be present in a FOCUS dataset when the provider supports billing based on provisioned resources.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ResourceId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-044-C": { - "Function": "Presence", - "Reference": "ResourceName", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "BILLING_BASED_ON_PROVISIONED_RESOURCES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ResourceName MUST be present in a FOCUS dataset when the provider supports billing based on provisioned resources.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ResourceName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-045-C": { - "Function": "Presence", - "Reference": "PricingCurrency", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrency MUST be present in a FOCUS dataset when the provider supports pricing and billing in different currencies.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "PricingCurrency" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-046-C": { - "Function": "Composite", - "Reference": "PricingCurrencyContractedUnitPrice", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyContractedUnitPrice presence in a FOCUS dataset is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-047-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-048-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-049-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-047-C", - "CostAndUsage-D-048-C", - "CostAndUsage-D-049-C" - ] - } - }, - "CostAndUsage-D-047-C": { - "Function": "Presence", - "Reference": "PricingCurrencyContractedUnitPrice", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED", - "VIRTUAL_CURRENCY_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyContractedUnitPrice MUST be present in a FOCUS dataset when the provider supports prices in virtual currency and publishes unit prices exclusive of discounts.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "PricingCurrencyContractedUnitPrice" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-048-C": { - "Function": "Presence", - "Reference": "PricingCurrencyContractedUnitPrice", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED", - "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyContractedUnitPrice is RECOMMENDED to be present in a FOCUS dataset when the provider supports pricing and billing in different currencies and publishes unit prices exclusive of discounts.", - "Keyword": "RECOMMENDED", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "PricingCurrencyContractedUnitPrice" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-049-C": { - "Function": "Presence", - "Reference": "PricingCurrencyContractedUnitPrice", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED", - "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyContractedUnitPrice MAY be present in a FOCUS dataset in all other cases.", - "Keyword": "MAY", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "PricingCurrencyContractedUnitPrice" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-050-C": { - "Function": "Composite", - "Reference": "PricingCurrencyEffectiveCost", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyEffectiveCost presence in a FOCUS dataset is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-051-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-052-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-053-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-051-C", - "CostAndUsage-D-052-C", - "CostAndUsage-D-053-C" - ] - } - }, - "CostAndUsage-D-051-C": { - "Function": "Presence", - "Reference": "PricingCurrencyEffectiveCost", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED", - "VIRTUAL_CURRENCY_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyEffectiveCost MUST be present in a FOCUS dataset when the provider supports prices in virtual currency and publishes unit prices exclusive of discounts.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "PricingCurrencyEffectiveCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-052-C": { - "Function": "Presence", - "Reference": "PricingCurrencyEffectiveCost", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED", - "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyEffectiveCost is RECOMMENDED to be present in a FOCUS dataset when the provider supports pricing and billing in different currencies and publishes unit prices exclusive of discounts.", - "Keyword": "RECOMMENDED", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "PricingCurrencyEffectiveCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-053-C": { - "Function": "Presence", - "Reference": "PricingCurrencyEffectiveCost", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED", - "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyEffectiveCost MAY be present in a FOCUS dataset in all other cases.", - "Keyword": "MAY", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "PricingCurrencyEffectiveCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-054-C": { - "Function": "Composite", - "Reference": "PricingCurrencyListUnitPrice", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyListUnitPrice presence in a FOCUS dataset is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-055-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-056-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CostAndUsage-D-057-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-055-C", - "CostAndUsage-D-056-C", - "CostAndUsage-D-057-C" - ] - } - }, - "CostAndUsage-D-055-C": { - "Function": "Presence", - "Reference": "PricingCurrencyListUnitPrice", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED", - "VIRTUAL_CURRENCY_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyListUnitPrice MUST be present in a FOCUS dataset when the provider supports prices in virtual currency and publishes unit prices exclusive of discounts.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "PricingCurrencyListUnitPrice" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-056-C": { - "Function": "Presence", - "Reference": "PricingCurrencyListUnitPrice", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED", - "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyListUnitPrice is RECOMMENDED to be present in a FOCUS dataset when the provider supports pricing and billing in different currencies and publishes unit prices exclusive of discounts.", - "Keyword": "RECOMMENDED", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "PricingCurrencyListUnitPrice" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-057-C": { - "Function": "Presence", - "Reference": "PricingCurrencyListUnitPrice", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED", - "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyListUnitPrice MAY be present in a FOCUS dataset in all other cases.", - "Keyword": "MAY", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "PricingCurrencyListUnitPrice" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-058-C": { - "Function": "Presence", - "Reference": "SkuPriceId", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED", - "UNIT_PRICING_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceId MUST be present in a FOCUS dataset when the provider supports unit pricing concepts and publishes price lists, publicly or as part of contracting.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "SkuPriceId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-059-C": { - "Function": "Presence", - "Reference": "SkuMeter", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED", - "UNIT_PRICING_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuMeter MUST be present in a FOCUS dataset when the provider supports unit pricing concepts and publishes price lists, publicly or as part of contracting.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "SkuMeter" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-060-C": { - "Function": "Presence", - "Reference": "SkuId", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED", - "UNIT_PRICING_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuId MUST be present in a FOCUS dataset when the provider supports unit pricing concepts and publishes price lists, publicly or as part of contracting.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "SkuId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-061-C": { - "Function": "Presence", - "Reference": "SkuPriceDetails", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED", - "UNIT_PRICING_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceDetails MUST be present in a FOCUS dataset when the provider supports unit pricing concepts and publishes price lists, publicly or as part of contracting.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "SkuPriceDetails" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-062-C": { - "Function": "Presence", - "Reference": "RegionName", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "REGION_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "RegionName MUST be present in a FOCUS dataset when the provider supports deploying resources or services within a region.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "RegionName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-063-C": { - "Function": "Presence", - "Reference": "RegionId", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "REGION_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "RegionId MUST be present in a FOCUS dataset when the provider supports deploying resources or services within a region.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "RegionId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-064-C": { - "Function": "Presence", - "Reference": "Tags", - "EntityType": "Dataset", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "TAGGING_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "Tags MUST be present in a FOCUS dataset when the provider supports setting user or provider-defined tags.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "Tags" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-065-C": { - "Function": "Presence", - "Reference": "CapacityReservationId", - "EntityType": "Dataset", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "CAPACITY_RESERVATION_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CapacityReservationId MUST be present in a FOCUS dataset when the provider supports capacity reservations.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "CapacityReservationId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-066-C": { - "Function": "Presence", - "Reference": "ConsumedUnit", - "EntityType": "Dataset", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "USAGE_MEASUREMENT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ConsumedUnit MUST be present in a FOCUS dataset when the provider supports the measurement of usage.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "ConsumedUnit" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-067-C": { - "Function": "Presence", - "Reference": "SubAccountType", - "EntityType": "Dataset", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "MULTIPLE_SUB_ACCOUNT_TYPES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SubAccountType MUST be present in a FOCUS dataset when the provider supports more than one possible SubAccountType value.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "SubAccountType" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CostAndUsage-D-068-M": { - "Function": "Presence", - "Reference": "PricingUnit", - "EntityType": "Dataset", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingUnit MUST be present in a FOCUS dataset.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnPresent", - "ColumnName": "PricingUnit" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "DateTimeFormat-A-000-M": { - "Function": "Composite", - "Reference": "DateTimeFormat", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The DateTimeFormat attribute adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DateTimeFormat-A-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DateTimeFormat-A-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DateTimeFormat-A-003-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "DateTimeFormat-A-001-M", - "DateTimeFormat-A-002-M", - "DateTimeFormat-A-003-M" - ] - } - }, - "DateTimeFormat-A-001-M": { - "Function": "Validation", - "Reference": "DateTimeFormat", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Date/time values MUST be in UTC (Coordinated Universal Time) to avoid ambiguity and ensure consistency across different time zones.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DateTimeFormat-A-002-M": { - "Function": "Format", - "Reference": "DateTimeFormat", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Date/time values format MUST be aligned with ISO 8601 standard, which provides a globally recognized format for representing dates and times (see ISO 8601-1:2019 governing document for details).", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DateTimeFormat-A-003-M": { - "Function": "Composite", - "Reference": "DateTimeFormat", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "Values providing information about a specific moment in time MUST be represented in the extended ISO 8601 format with UTC offset ('YYYY-MM-DDTHH:mm:ssZ') and conform to the following guidelines:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DateTimeFormat-A-004-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DateTimeFormat-A-005-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DateTimeFormat-A-006-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "DateTimeFormat-A-004-M", - "DateTimeFormat-A-005-M", - "DateTimeFormat-A-006-M" - ] - } - }, - "DateTimeFormat-A-004-M": { - "Function": "Validation", - "Reference": "DateTimeFormat", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "MUST Include the date and time components, separated with the letter \u2018T\u2019.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DateTimeFormat-A-005-M": { - "Function": "Validation", - "Reference": "DateTimeFormat", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "MUST Use two-digit hours (HH), minutes (mm), and seconds (ss).", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DateTimeFormat-A-006-M": { - "Function": "Validation", - "Reference": "DateTimeFormat", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "MUST End with the \u2018Z\u2019 indicator to denote UTC (Coordinated Universal Time).", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "CurrencyFormat-A-000-C": { - "Function": "Composite", - "Reference": "CurrencyFormat", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The CurrencyFormat attribute adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CurrencyFormat-A-001-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CurrencyFormat-A-002-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CurrencyFormat-A-001-C", - "CurrencyFormat-A-002-C" - ] - } - }, - "CurrencyFormat-A-001-C": { - "Function": "Validation", - "Reference": "CurrencyFormat", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Currency-related columns MUST be represented as a three-letter alphabetic code as dictated in the governing document ISO 4217:2015 when the value is presented in national currency (e.g., USD, EUR).", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "CurrencyFormat-A-002-C": { - "Function": "Validation", - "Reference": "CurrencyFormat", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Currency-related columns MUST conform to StringHandling requirements when the value is presented in virtual currency (e.g., credits, tokens).", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "NumericFormat-A-000-M": { - "Function": "Composite", - "Reference": "NumericFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "Root composite capturing all NumericFormat requirements", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "All columns capturing a numeric value, defined in the FOCUS specification, MUST follow the formatting requirements listed below.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "NumericFormat-A-001-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "NumericFormat-A-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "NumericFormat-A-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "NumericFormat-A-004-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "NumericFormat-A-005-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "NumericFormat-A-006-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "NumericFormat-A-007-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "NumericFormat-A-008-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "NumericFormat-A-009-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "NumericFormat-A-010-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "NumericFormat-A-011-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "NumericFormat-A-012-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "NumericFormat-A-013-O" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "NumericFormat-A-001-O", - "NumericFormat-A-002-M", - "NumericFormat-A-003-M", - "NumericFormat-A-004-M", - "NumericFormat-A-005-M", - "NumericFormat-A-006-M", - "NumericFormat-A-007-M", - "NumericFormat-A-008-M", - "NumericFormat-A-009-M", - "NumericFormat-A-010-M", - "NumericFormat-A-011-M", - "NumericFormat-A-012-M", - "NumericFormat-A-013-O" - ] - } - }, - "NumericFormat-A-001-O": { - "Function": "Format", - "Reference": "NumericFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Custom numeric value capturing columns SHOULD adopt the same format requirements over time.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "NumericFormat-A-002-M": { - "Function": "Format", - "Reference": "NumericFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Columns with a Numeric value format MUST contain a single numeric value.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "NumericFormat-A-003-M": { - "Function": "Format", - "Reference": "NumericFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Numeric values MUST be expressed as an integer value, a decimal value, or a value expressed in scientific notation.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "NumericFormat-A-004-M": { - "Function": "Format", - "Reference": "NumericFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Fractional notation MUST NOT be used.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "NumericFormat-A-005-M": { - "Function": "Format", - "Reference": "NumericFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Numeric values expressed using scientific notation MUST be expressed using E notation \"mEn\" with a real number m and an integer n indicating a value of \"m x 10^n\".", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "NumericFormat-A-006-M": { - "Function": "Format", - "Reference": "NumericFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "The sign of the exponent MUST only be expressed as part of the exponent value if n is negative.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "NumericFormat-A-007-M": { - "Function": "Format", - "Reference": "NumericFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Numeric values MUST NOT be expressed with mathematical symbols, functions, or operators.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "NumericFormat-A-008-M": { - "Function": "Format", - "Reference": "NumericFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Numeric values MUST NOT contain qualifiers or additional characters (e.g., currency symbols, units of measure, etc.).", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "NumericFormat-A-009-M": { - "Function": "Format", - "Reference": "NumericFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Numeric values MUST NOT contain commas or punctuation marks except for a single decimal point (\".\") if required to express a decimal value.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "NumericFormat-A-010-M": { - "Function": "Format", - "Reference": "NumericFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Numeric values MUST NOT include a character to represent a sign for a positive value.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "NumericFormat-A-011-M": { - "Function": "Format", - "Reference": "NumericFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "A negative sign (-) MUST indicate a negative value.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "NumericFormat-A-012-M": { - "Function": "Format", - "Reference": "NumericFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "Allowed values are Integer and Decimal per normative text table", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Columns with a Numeric value format MUST present one of the following values as the \"Data type\" in the column definition.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "NumericFormat-A-013-O": { - "Function": "Format", - "Reference": "NumericFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "Allowed precision values: Integer (Short, Long, Extended), Decimal (Single, Double, Extended)", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Providers SHOULD define precision and scale for Numeric Format columns using one of the following precision values in a data definition document that providers publish.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "StringHandling-A-000-M": { - "Function": "Composite", - "Reference": "StringHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "Root composite capturing all StringHandling requirements", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "All columns of type String defined in the FOCUS specification MUST follow the string handling requirements listed below.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "StringHandling-A-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "StringHandling-A-002-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "StringHandling-A-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "StringHandling-A-004-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "StringHandling-A-005-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "StringHandling-A-006-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "StringHandling-A-007-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "StringHandling-A-008-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "StringHandling-A-001-M", - "StringHandling-A-002-O", - "StringHandling-A-003-M", - "StringHandling-A-004-M", - "StringHandling-A-005-M", - "StringHandling-A-006-M", - "StringHandling-A-007-M", - "StringHandling-A-008-C" - ] - } - }, - "StringHandling-A-001-M": { - "Function": "Format", - "Reference": "StringHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "String values MUST be valid Unicode strings.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "StringHandling-A-002-O": { - "Function": "Format", - "Reference": "StringHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Custom string value capturing columns SHOULD adopt the same requirements over time.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "StringHandling-A-003-M": { - "Function": "Format", - "Reference": "StringHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "String values MUST maintain the original casing, spacing, and other relevant consistency factors as specified by providers and end-users.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "StringHandling-A-004-M": { - "Function": "Format", - "Reference": "StringHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Charges to mutable entities (e.g., resource names) MUST be accurately reflected in corresponding charges incurred after the change.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "StringHandling-A-005-M": { - "Function": "Format", - "Reference": "StringHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Charges to mutable entities MUST NOT alter charges incurred before the change, preserving data integrity and auditability for all charge records.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "StringHandling-A-006-M": { - "Function": "Format", - "Reference": "StringHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Immutable string values that refer to the same entity (e.g., resource identifiers, region identifiers, etc.) MUST remain consistent and unchanged across all billing periods.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "StringHandling-A-007-M": { - "Function": "Format", - "Reference": "StringHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Empty strings and strings consisting solely of spaces SHOULD NOT be used in not-nullable string columns.", - "Keyword": "SHOULD NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "StringHandling-A-008-C": { - "Function": "Format", - "Reference": "StringHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "When a record is provided after a change to a mutable string value and the ChargeClass is \u201cCorrection\u201d, the record MAY contain the altered value.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ColumnHandling-A-000-M": { - "Function": "Composite", - "Reference": "ColumnHandling", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "All columns defined by FOCUS MUST follow the following rules:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ColumnHandling-A-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ColumnHandling-A-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ColumnHandling-A-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ColumnHandling-A-004-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ColumnHandling-A-005-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ColumnHandling-A-006-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ColumnHandling-A-007-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ColumnHandling-A-008-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ColumnHandling-A-009-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ColumnHandling-A-012-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ColumnHandling-A-013-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ColumnHandling-A-014-O" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "ColumnHandling-A-001-M", - "ColumnHandling-A-002-M", - "ColumnHandling-A-003-M", - "ColumnHandling-A-004-O", - "ColumnHandling-A-005-O", - "ColumnHandling-A-006-M", - "ColumnHandling-A-007-O", - "ColumnHandling-A-008-M", - "ColumnHandling-A-009-M", - "ColumnHandling-A-012-O", - "ColumnHandling-A-013-O", - "ColumnHandling-A-014-O" - ] - } - }, - "ColumnHandling-A-001-M": { - "Function": "Validation", - "Reference": "ColumnHandling", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Column IDs MUST use Pascal case.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ColumnHandling-A-002-M": { - "Function": "Validation", - "Reference": "ColumnHandling", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Column IDs MUST NOT use abbreviations.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ColumnHandling-A-003-M": { - "Function": "Validation", - "Reference": "ColumnHandling", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Column IDs MUST be alphanumeric with no special characters.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ColumnHandling-A-004-O": { - "Function": "Validation", - "Reference": "ColumnHandling", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Column IDs SHOULD NOT use acronyms.", - "Keyword": "SHOULD NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ColumnHandling-A-005-O": { - "Function": "Validation", - "Reference": "ColumnHandling", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Column IDs SHOULD NOT exceed 50 characters to accommodate column length restrictions of various data repositories.", - "Keyword": "SHOULD NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ColumnHandling-A-006-M": { - "Function": "Validation", - "Reference": "ColumnHandling", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Columns that have an ID and a Name MUST have the Id or Name suffix in the Column ID.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ColumnHandling-A-007-O": { - "Function": "Validation", - "Reference": "ColumnHandling", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Column display names MAY avoid the Name suffix if there are no other columns with the same name prefix.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ColumnHandling-A-008-M": { - "Function": "Validation", - "Reference": "ColumnHandling", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Columns with the Category suffix MUST be normalized.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ColumnHandling-A-009-M": { - "Function": "Composite", - "Reference": "ColumnHandling", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "Custom (e.g., provider-defined) columns that are not defined by FOCUS but included in a FOCUS dataset MUST follow the following rules:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ColumnHandling-A-010-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ColumnHandling-A-011-O" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "ColumnHandling-A-010-M", - "ColumnHandling-A-011-O" - ] - } - }, - "ColumnHandling-A-010-M": { - "Function": "Validation", - "Reference": "ColumnHandling", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Custom columns MUST be prefixed with a consistent x_ prefix to identify them as external, custom columns and distinguish them from FOCUS columns to avoid conflicts in future releases.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ColumnHandling-A-011-O": { - "Function": "Validation", - "Reference": "ColumnHandling", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Custom columns SHOULD follow the same rules listed above for FOCUS columns.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ColumnHandling-A-012-O": { - "Function": "Validation", - "Reference": "ColumnHandling", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "All FOCUS columns SHOULD be first in the provided dataset.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ColumnHandling-A-013-O": { - "Function": "Validation", - "Reference": "ColumnHandling", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Custom columns SHOULD be listed after all FOCUS columns and SHOULD NOT be intermixed.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ColumnHandling-A-014-O": { - "Function": "Validation", - "Reference": "ColumnHandling", - "EntityType": "Attribute", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Columns MAY be sorted alphabetically, but custom columns SHOULD be after all FOCUS columns.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "UnitFormat-A-000-M": { - "Function": "Composite", - "Reference": "UnitFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "Root composite capturing all UnitFormat requirements", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "All columns defined in FOCUS specifying Unit Format as a value format MUST follow the requirements listed below.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "UnitFormat-A-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "UnitFormat-A-002-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "UnitFormat-A-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "UnitFormat-A-004-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "UnitFormat-A-001-M", - "UnitFormat-A-002-O", - "UnitFormat-A-003-M", - "UnitFormat-A-004-C" - ] - } - }, - "UnitFormat-A-001-M": { - "Function": "Format", - "Reference": "UnitFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Units SHOULD be expressed as a single unit of measure adhering to one of the following three formats.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "UnitFormat-A-002-O": { - "Function": "Format", - "Reference": "UnitFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Units MAY be expressed with a unit quantity or time interval. If a unit quantity or time interval is used, the unit quantity or time interval MUST be expressed as a whole number.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "UnitFormat-A-003-M": { - "Function": "Format", - "Reference": "UnitFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Unit values and components of columns using the Unit Format MUST use a capitalization scheme that is consistent with the capitalization scheme used in this attribute if that term is listed in this section.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "UnitFormat-A-004-C": { - "Function": "Format", - "Reference": "UnitFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Units SHOULD be composed of the list of recommended units listed in this section unless the unit value covers a dimension not listed in the recommended unit set, or if the unit covers a count-based unit distinct from recommended values in the count dimension listed in this section.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "KeyValueFormat-A-000-M": { - "Function": "Composite", - "Reference": "KeyValueFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "All key-value related columns defined in the FOCUS specification MUST follow the key-value formatting requirements listed below.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "KeyValueFormat-A-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "KeyValueFormat-A-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "KeyValueFormat-A-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "KeyValueFormat-A-004-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "KeyValueFormat-A-001-M", - "KeyValueFormat-A-002-M", - "KeyValueFormat-A-003-M", - "KeyValueFormat-A-004-M" - ] - } - }, - "KeyValueFormat-A-001-M": { - "Function": "Format", - "Reference": "KeyValueFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Key-Value Format columns MUST contain a serialized JSON string, consistent with the ECMA 404 definition of an object.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "KeyValueFormat-A-002-M": { - "Function": "Validation", - "Reference": "KeyValueFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Keys in a key-value pair MUST be unique within an object.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "KeyValueFormat-A-003-M": { - "Function": "Validation", - "Reference": "KeyValueFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Values in a key-value pair MUST be one of the following types: number, string, true, false, or null.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "KeyValueFormat-A-004-M": { - "Function": "Validation", - "Reference": "KeyValueFormat", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Values in a key-value pair MUST NOT be an object or an array.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DiscountHandling-A-000-C": { - "Function": "Composite", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The DiscountHandling attribute adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-001-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-002-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-005-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-008-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-020-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "DiscountHandling-A-001-C", - "DiscountHandling-A-002-C", - "DiscountHandling-A-005-C", - "DiscountHandling-A-008-C", - "DiscountHandling-A-020-C" - ] - } - }, - "DiscountHandling-A-001-C": { - "Function": "Validation", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "All applicable discounts SHOULD be applied to each row they pertain to and SHOULD NOT be negated in a separate row.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DiscountHandling-A-002-C": { - "Function": "Composite", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "All discounts applied to a row MUST apply to the entire charge.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-004-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "DiscountHandling-A-003-C", - "DiscountHandling-A-004-C" - ] - } - }, - "DiscountHandling-A-003-C": { - "Function": "Validation", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Multiple discounts MAY apply to a row, but they MUST apply to the entire charge covered by that row.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DiscountHandling-A-004-C": { - "Function": "Validation", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "If a discount only applies to a portion of a charge, then the discounted portion of the charge MUST be split into a separate row.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DiscountHandling-A-005-C": { - "Function": "Composite", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "Each discount MUST be identifiable using existing FOCUS columns.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-006-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-007-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "DiscountHandling-A-006-C", - "DiscountHandling-A-007-C" - ] - } - }, - "DiscountHandling-A-006-C": { - "Function": "Validation", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Rows with a commitment discount applied to them MUST include a CommitmentDiscountId.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DiscountHandling-A-007-C": { - "Function": "Validation", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "If a provider applies a discount that cannot be represented by a FOCUS column, they SHOULD include additional columns to identify the source of the discount.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DiscountHandling-A-008-C": { - "Function": "Composite", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "Purchased discounts (e.g., commitment discounts) MUST be amortized.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-009-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-010-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-011-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-012-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-013-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-014-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-015-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-016-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-017-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-018-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "DiscountHandling-A-019-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "DiscountHandling-A-009-C", - "DiscountHandling-A-010-C", - "DiscountHandling-A-011-C", - "DiscountHandling-A-012-C", - "DiscountHandling-A-013-C", - "DiscountHandling-A-014-C", - "DiscountHandling-A-015-C", - "DiscountHandling-A-016-C", - "DiscountHandling-A-017-C", - "DiscountHandling-A-018-C", - "DiscountHandling-A-019-C" - ] - } - }, - "DiscountHandling-A-009-C": { - "Function": "Validation", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "The BilledCost MUST be 0 for any row where the commitment covers the entire cost for the charge period.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DiscountHandling-A-010-C": { - "Function": "Validation", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "The EffectiveCost MUST include the portion of the amortized purchase cost that applies to this row.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DiscountHandling-A-011-C": { - "Function": "Validation", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "The sum of the EffectiveCost for all rows where CommitmentDiscountStatus is \"Used\" or \"Unused\" for each CommitmentDiscountId over the entire duration of the commitment MUST be the same as the total BilledCost of the commitment discount.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DiscountHandling-A-012-C": { - "Function": "Validation", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "The CommitmentDiscountId and ResourceId MUST be set to the ID assigned to the commitment discount.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DiscountHandling-A-013-C": { - "Function": "Validation", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ChargeCategory MUST be set to \"Purchase\" on rows that represent a purchase of a commitment discount.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DiscountHandling-A-014-C": { - "Function": "Validation", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountStatus MUST be \"Used\" for ChargeCategory \"Usage\" rows that received a reduced price from a commitment.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DiscountHandling-A-015-C": { - "Function": "Validation", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountId MUST be set to the ID assigned to the discount.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DiscountHandling-A-016-C": { - "Function": "Validation", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ResourceId MUST be set to the ID of the resource that received the discount.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DiscountHandling-A-017-C": { - "Function": "Validation", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "If a commitment is not fully utilized, the provider MUST include a row that represents the unused portion of the commitment for that charge period.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DiscountHandling-A-018-C": { - "Function": "Validation", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "These rows MUST be represented with CommitmentDiscountStatus set to \"Unused\" and ChargeCategory set to \"Usage\".", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DiscountHandling-A-019-C": { - "Function": "Validation", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Such rows MUST have their CommitmentDiscountId and ResourceId set to the ID assigned to the commitment discount.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "DiscountHandling-A-020-C": { - "Function": "Validation", - "Reference": "DiscountHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Credits that are applied after the fact MUST use a ChargeCategory of \"Credit\".", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "NullHandling-A-000-M": { - "Function": "Composite", - "Reference": "NullHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "All columns defined in the FOCUS specification MUST follow the null handling requirements listed below.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "NullHandling-A-001-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "NullHandling-A-002-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "NullHandling-A-001-C", - "NullHandling-A-002-M" - ] - } - }, - "NullHandling-A-001-C": { - "Function": "Validation", - "Reference": "NullHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Columns MUST use NULL when there isn\u2019t a value that can be specified for a nullable column.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "NullHandling-A-002-M": { - "Function": "Validation", - "Reference": "NullHandling", - "EntityType": "Attribute", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Columns MUST NOT use empty strings or placeholder values such as 0 for numeric columns or \u201cNot Applicable\u201d for string columns to represent a null or not having a value, regardless of whether the column allows nulls or not.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountName-C-000-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The CommitmentDiscountName column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountName-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountName-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountName-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountName-C-004-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-012-C", - "CommitmentDiscountName-C-001-M", - "CommitmentDiscountName-C-002-M", - "CommitmentDiscountName-C-003-C", - "CommitmentDiscountName-C-004-C" - ] - } - }, - "CommitmentDiscountName-C-001-M": { - "Function": "Type", - "Reference": "CommitmentDiscountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountName MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "CommitmentDiscountName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountName-C-002-M": { - "Function": "Format", - "Reference": "CommitmentDiscountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountName MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "CommitmentDiscountName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountName-C-003-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountName nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountName-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountName-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CommitmentDiscountName-C-004-C", - "CommitmentDiscountName-C-005-C" - ] - } - }, - "CommitmentDiscountName-C-004-C": { - "Function": "Nullability", - "Reference": "CommitmentDiscountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountName MUST be null when CommitmentDiscountId is null.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountName", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountId", - "Value": null - }, - "Dependencies": [] - } - }, - "CommitmentDiscountName-C-005-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When CommitmentDiscountId is not null, CommitmentDiscountName adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountName-C-006-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountName-C-007-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "CommitmentDiscountId", - "Value": null - }, - "Dependencies": [ - "CommitmentDiscountName-C-006-C", - "CommitmentDiscountName-C-007-C" - ] - } - }, - "CommitmentDiscountName-C-006-C": { - "Function": "Nullability", - "Reference": "CommitmentDiscountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountName MUST NOT be null when a display name can be assigned to a commitment discount.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountName-C-007-C": { - "Function": "Nullability", - "Reference": "CommitmentDiscountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountName MAY be null when a display name cannot be assigned to a commitment discount.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "InvoiceIssuerName-C-000-M": { - "Function": "Composite", - "Reference": "InvoiceIssuerName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The InvoiceIssuerName column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "InvoiceIssuerName-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "InvoiceIssuerName-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "InvoiceIssuerName-C-003-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-023-M", - "InvoiceIssuerName-C-001-M", - "InvoiceIssuerName-C-002-M", - "InvoiceIssuerName-C-003-M" - ] - } - }, - "InvoiceIssuerName-C-001-M": { - "Function": "Type", - "Reference": "InvoiceIssuerName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "InvoiceIssuerName MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "InvoiceIssuerName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "InvoiceIssuerName-C-002-M": { - "Function": "Format", - "Reference": "InvoiceIssuerName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "InvoiceIssuerName MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "InvoiceIssuerName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "InvoiceIssuerName-C-003-M": { - "Function": "Nullability", - "Reference": "InvoiceIssuerName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "InvoiceIssuerName MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "InvoiceIssuerName", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ProviderName-C-000-M": { - "Function": "Composite", - "Reference": "ProviderName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ProviderName column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ProviderName-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ProviderName-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ProviderName-C-003-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-038-M", - "ProviderName-C-001-M", - "ProviderName-C-002-M", - "ProviderName-C-003-M" - ] - } - }, - "ProviderName-C-001-M": { - "Function": "Type", - "Reference": "ProviderName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ProviderName MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "ProviderName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ProviderName-C-002-M": { - "Function": "Format", - "Reference": "ProviderName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ProviderName MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "ProviderName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ProviderName-C-003-M": { - "Function": "Nullability", - "Reference": "ProviderName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ProviderName MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ProviderName", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingAccountId-C-000-M": { - "Function": "Composite", - "Reference": "BillingAccountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The BillingAccountId column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingAccountId-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingAccountId-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingAccountId-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingAccountId-C-004-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingAccountId-C-005-O" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-024-M", - "BillingAccountId-C-001-M", - "BillingAccountId-C-002-M", - "BillingAccountId-C-003-M", - "BillingAccountId-C-004-M", - "BillingAccountId-C-005-O" - ] - } - }, - "BillingAccountId-C-001-M": { - "Function": "Nullability", - "Reference": "BillingAccountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingAccountId MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "BillingAccountId", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingAccountId-C-002-M": { - "Function": "Type", - "EntityType": "Column", - "Reference": "BillingAccountId", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingAccountId MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "BillingAccountId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingAccountId-C-003-M": { - "Function": "Format", - "EntityType": "Column", - "Reference": "BillingAccountId", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingAccountId MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "BillingAccountId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingAccountId-C-004-M": { - "Function": "Validation", - "Reference": "BillingAccountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "BillingAccountId MUST be a unique identifier within a provider.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingAccountId-C-005-O": { - "Function": "Validation", - "Reference": "BillingAccountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "BillingAccountId SHOULD be a fully-qualified identifier.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingAccountName-C-000-M": { - "Function": "Composite", - "Reference": "BillingAccountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The BillingAccountName column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingAccountName-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingAccountName-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingAccountName-C-003-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-005-M", - "BillingAccountName-C-001-M", - "BillingAccountName-C-002-M", - "BillingAccountName-C-003-C" - ] - } - }, - "BillingAccountName-C-001-M": { - "Function": "Type", - "Reference": "BillingAccountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingAccountName MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "BillingAccountName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingAccountName-C-002-M": { - "Function": "Format", - "Reference": "BillingAccountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingAccountName MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "BillingAccountName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingAccountName-C-003-C": { - "Function": "Nullability", - "Reference": "BillingAccountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "ACCOUNT_NAMING_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingAccountName MUST NOT be null when the provider supports assigning a display name for the billing account.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "BillingAccountName", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingPeriodStart-C-000-M": { - "Function": "Composite", - "Reference": "BillingPeriodStart", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The BillingPeriodStart column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingPeriodStart-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingPeriodStart-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingPeriodStart-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingPeriodStart-C-004-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-009-M", - "BillingPeriodStart-C-001-M", - "BillingPeriodStart-C-002-M", - "BillingPeriodStart-C-003-M", - "BillingPeriodStart-C-004-M" - ] - } - }, - "BillingPeriodStart-C-001-M": { - "Function": "Type", - "Reference": "BillingPeriodStart", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingPeriodStart MUST be of type Date/Time.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeDateTime", - "ColumnName": "BillingPeriodStart" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingPeriodStart-C-002-M": { - "Function": "Format", - "Reference": "BillingPeriodStart", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingPeriodStart MUST conform to DateTimeFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatDateTime", - "ColumnName": "BillingPeriodStart" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingPeriodStart-C-003-M": { - "Function": "Nullability", - "Reference": "BillingPeriodStart", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingPeriodStart MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "BillingPeriodStart", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingPeriodStart-C-004-M": { - "Function": "Validation", - "Reference": "BillingPeriodStart", - "EntityType": "Column", - "Notes": "Inclusive start bound of the billing period", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "BillingPeriodStart MUST be the inclusive start bound of the billing period.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargeCategory-C-000-M": { - "Function": "Composite", - "Reference": "ChargeCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ChargeCategory column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeCategory-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeCategory-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeCategory-C-003-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-008-M", - "ChargeCategory-C-001-M", - "ChargeCategory-C-002-M", - "ChargeCategory-C-003-M" - ] - } - }, - "ChargeCategory-C-001-M": { - "Function": "Type", - "Reference": "ChargeCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargeCategory MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "ChargeCategory" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargeCategory-C-002-M": { - "Function": "Nullability", - "Reference": "ChargeCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargeCategory MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeCategory", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargeCategory-C-003-M": { - "Function": "Validation", - "Reference": "ChargeCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargeCategory MUST be one of the allowed values.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Purchase" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Tax" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Credit" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Adjustment" - } - ] - }, - "Condition": {}, - "Dependencies": [] - } - }, - "AvailabilityZone-C-000-C": { - "Function": "Composite", - "Reference": "AvailabilityZone", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "AVAILABILITY_ZONE_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The AvailabilityZone column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "AvailabilityZone-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "AvailabilityZone-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "AvailabilityZone-C-003-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-003-C", - "AvailabilityZone-C-001-M", - "AvailabilityZone-C-002-M", - "AvailabilityZone-C-003-C" - ] - } - }, - "AvailabilityZone-C-001-M": { - "Function": "Type", - "Reference": "AvailabilityZone", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "AvailabilityZone MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "AvailabilityZone" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "AvailabilityZone-C-002-M": { - "Function": "Format", - "Reference": "AvailabilityZone", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "AvailabilityZone MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "AvailabilityZone" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "AvailabilityZone-C-003-C": { - "Function": "Nullability", - "Reference": "AvailabilityZone", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "AvailabilityZone MUST be null when a charge is not specific to an availability zone.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "PublisherName-C-000-M": { - "Function": "Composite", - "Reference": "PublisherName", - "EntityType": "Column", - "Notes": "Main composite rule for PublisherName column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The PublisherName column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PublisherName-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PublisherName-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PublisherName-C-003-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-021-M", - "PublisherName-C-001-M", - "PublisherName-C-002-M", - "PublisherName-C-003-M" - ] - } - }, - "PublisherName-C-001-M": { - "Function": "Type", - "Reference": "PublisherName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PublisherName MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "PublisherName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PublisherName-C-002-M": { - "Function": "Format", - "Reference": "PublisherName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PublisherName MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "PublisherName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PublisherName-C-003-M": { - "Function": "Nullability", - "Reference": "PublisherName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PublisherName MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "PublisherName", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ServiceCategory-C-000-M": { - "Function": "Composite", - "Reference": "ServiceCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ServiceCategory column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceCategory-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceCategory-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceCategory-C-003-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-040-M", - "ServiceCategory-C-001-M", - "ServiceCategory-C-002-M", - "ServiceCategory-C-003-M" - ] - } - }, - "ServiceCategory-C-001-M": { - "Function": "Type", - "Reference": "ServiceCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ServiceCategory MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "ServiceCategory" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ServiceCategory-C-002-M": { - "Function": "Nullability", - "Reference": "ServiceCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ServiceCategory MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ServiceCategory", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ServiceCategory-C-003-M": { - "Function": "Validation", - "Reference": "ServiceCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ServiceCategory MUST be one of the allowed values.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "AI and Machine Learning" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Analytics" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Business Applications" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Compute" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Databases" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Developer Tools" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Multicloud" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Identity" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Integration" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Internet of Things" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Management and Governance" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Media" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Migration" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Mobile" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Networking" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Security" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Storage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Web" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Other" - } - ] - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargePeriodStart-C-000-M": { - "Function": "Composite", - "Reference": "ChargePeriodStart", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ChargePeriodStart column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargePeriodStart-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargePeriodStart-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargePeriodStart-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargePeriodStart-C-004-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-037-M", - "ChargePeriodStart-C-001-M", - "ChargePeriodStart-C-002-M", - "ChargePeriodStart-C-003-M", - "ChargePeriodStart-C-004-M" - ] - } - }, - "ChargePeriodStart-C-001-M": { - "Function": "Type", - "Reference": "ChargePeriodStart", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargePeriodStart MUST be of type Date/Time.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeDateTime", - "ColumnName": "ChargePeriodStart", - "ExpectedType": "DateTime" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargePeriodStart-C-002-M": { - "Function": "Format", - "Reference": "ChargePeriodStart", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargePeriodStart MUST conform to DateTimeFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatDateTime", - "ColumnName": "ChargePeriodStart" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargePeriodStart-C-003-M": { - "Function": "Nullability", - "Reference": "ChargePeriodStart", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargePeriodStart MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargePeriodStart", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargePeriodStart-C-004-M": { - "Function": "Validation", - "Reference": "ChargePeriodStart", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ChargePeriodStart MUST be the inclusive start bound of the effective period of the charge.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuMeter-C-000-C": { - "Function": "Composite", - "Reference": "SkuMeter", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED", - "UNIT_PRICING_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The SkuMeter column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuMeter-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuMeter-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuMeter-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuMeter-C-006-O" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-059-C", - "SkuMeter-C-001-M", - "SkuMeter-C-002-M", - "SkuMeter-C-003-C", - "SkuMeter-C-006-O" - ] - } - }, - "SkuMeter-C-001-M": { - "Function": "Type", - "Reference": "SkuMeter", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuMeter MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "SkuMeter" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuMeter-C-002-M": { - "Function": "Format", - "Reference": "SkuMeter", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuMeter MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "SkuMeter" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuMeter-C-003-C": { - "Function": "Composite", - "Reference": "SkuMeter", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuMeter nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuMeter-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuMeter-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "SkuMeter-C-004-C", - "SkuMeter-C-005-C" - ] - } - }, - "SkuMeter-C-004-C": { - "Function": "Nullability", - "Reference": "SkuMeter", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuMeter MUST be null when SkuId is null.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "SkuMeter", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "SkuId", - "Value": null - }, - "Dependencies": [] - } - }, - "SkuMeter-C-005-C": { - "Function": "Nullability", - "Reference": "SkuMeter", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuMeter SHOULD NOT be null when SkuId is not null.", - "Keyword": "SHOULD NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "SkuMeter", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "SkuId", - "Value": null - }, - "Dependencies": [] - } - }, - "SkuMeter-C-006-O": { - "Function": "Validation", - "Reference": "SkuMeter", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuMeter SHOULD remain consistent over time for a given SkuId.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ListUnitPrice-C-000-C": { - "Function": "Composite", - "Reference": "ListUnitPrice", - "EntityType": "Column", - "Notes": null, - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ListUnitPrice column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListUnitPrice-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListUnitPrice-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListUnitPrice-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListUnitPrice-C-007-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-004-C", - "ListUnitPrice-C-001-M", - "ListUnitPrice-C-002-M", - "ListUnitPrice-C-003-M", - "ListUnitPrice-C-007-C" - ] - } - }, - "ListUnitPrice-C-001-M": { - "Function": "Type", - "Reference": "ListUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ListUnitPrice MUST be of type Decimal.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeDecimal", - "ColumnName": "ListUnitPrice" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ListUnitPrice-C-002-M": { - "Function": "Format", - "Reference": "ListUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ListUnitPrice MUST conform to NumericFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatNumeric", - "ColumnName": "ListUnitPrice" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ListUnitPrice-C-003-M": { - "Function": "Composite", - "Reference": "ListUnitPrice", - "EntityType": "Column", - "Notes": null, - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ListUnitPrice nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListUnitPrice-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListUnitPrice-C-005-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListUnitPrice-C-006-O" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "ChargeCategory-C-000-M", - "ListUnitPrice-C-004-C", - "ListUnitPrice-C-005-C", - "ListUnitPrice-C-006-O" - ] - } - }, - "ListUnitPrice-C-004-C": { - "Function": "Nullability", - "Reference": "ListUnitPrice", - "EntityType": "Column", - "Notes": null, - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ListUnitPrice MUST be null when ChargeCategory is \"Tax\".", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "ListUnitPrice", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Tax" - }, - "Dependencies": [ - "ChargeCategory-C-000-M" - ] - } - }, - "ListUnitPrice-C-005-C": { - "Function": "Nullability", - "Reference": "ListUnitPrice", - "EntityType": "Column", - "Notes": null, - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ListUnitPrice MUST NOT be null when ChargeCategory is \"Usage\" or \"Purchase\" and ChargeClass is not \"Correction\".", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ListUnitPrice", - "Value": null - }, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - }, - { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Purchase" - } - ] - } - ] - }, - "Dependencies": [ - "ChargeClass-C-000-M" - ] - } - }, - "ListUnitPrice-C-006-O": { - "Function": "Nullability", - "Reference": "ListUnitPrice", - "EntityType": "Column", - "Notes": null, - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ListUnitPrice MAY be null in all other cases.", - "Keyword": "MAY", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "ListUnitPrice", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ListUnitPrice-C-007-C": { - "Function": "Composite", - "Reference": "ListUnitPrice", - "EntityType": "Column", - "Notes": null, - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When ListUnitPrice is not null, ListUnitPrice adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListUnitPrice-C-008-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListUnitPrice-C-009-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListUnitPrice-C-010-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListUnitPrice-C-011-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ListUnitPrice", - "Value": null - }, - "Dependencies": [ - "ChargeCategory-C-000-M", - "ListUnitPrice-C-008-M", - "ListUnitPrice-C-009-M", - "ListUnitPrice-C-010-C", - "ListUnitPrice-C-011-C" - ] - } - }, - "ListUnitPrice-C-008-M": { - "Function": "Validation", - "Reference": "ListUnitPrice", - "EntityType": "Column", - "Notes": null, - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ListUnitPrice MUST be a non-negative decimal value.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckGreaterOrEqualThanValue", - "ColumnName": "ListUnitPrice", - "Value": 0 - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ListUnitPrice-C-009-M": { - "Function": "Validation", - "Reference": "ListUnitPrice", - "EntityType": "Column", - "Notes": null, - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ListUnitPrice MUST be denominated in the BillingCurrency.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ListUnitPrice-C-010-C": { - "Function": "Validation", - "Reference": "ListUnitPrice", - "EntityType": "Column", - "Notes": null, - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The product of ListUnitPrice and PricingQuantity MUST match the ListCost when PricingQuantity is not null and ChargeClass is not \"Correction\".", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnByColumnEqualsColumnValue", - "ColumnAName": "ListUnitPrice", - "ColumnBName": "PricingQuantity", - "ResultColumnName": "ListCost" - }, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ListUnitPrice", - "Value": null - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - } - ] - }, - "Dependencies": [ - "ChargeClass-C-000-M" - ] - } - }, - "ListUnitPrice-C-011-C": { - "Function": "Validation", - "Reference": "ListUnitPrice", - "EntityType": "Column", - "Notes": null, - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Discrepancies in ListUnitPrice, ListCost, or PricingQuantity MAY exist when ChargeClass is \"Correction\".", - "Keyword": "MAY", - "Requirement": {}, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - }, - "Dependencies": [ - "ChargeClass-C-000-M" - ] - } - }, - "PricingQuantity-C-000-M": { - "Function": "Composite", - "Reference": "PricingQuantity", - "EntityType": "Column", - "Notes": "Main composite rule for PricingQuantity column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The PricingQuantity column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingQuantity-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingQuantity-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingQuantity-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingQuantity-C-007-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-036-M", - "PricingQuantity-C-001-M", - "PricingQuantity-C-002-M", - "PricingQuantity-C-003-M", - "PricingQuantity-C-007-C" - ] - } - }, - "PricingQuantity-C-001-M": { - "Function": "Type", - "Reference": "PricingQuantity", - "EntityType": "Column", - "Notes": "PricingQuantity must be of type Decimal", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingQuantity MUST be of type Decimal.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeDecimal", - "ColumnName": "PricingQuantity" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingQuantity-C-002-M": { - "Function": "Format", - "Reference": "PricingQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingQuantity MUST conform to NumericFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatNumeric", - "ColumnName": "PricingQuantity" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingQuantity-C-003-M": { - "Function": "Composite", - "Reference": "PricingQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingQuantity nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingQuantity-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingQuantity-C-005-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingQuantity-C-006-O" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "PricingQuantity-C-004-C", - "PricingQuantity-C-005-C", - "PricingQuantity-C-006-O" - ] - } - }, - "PricingQuantity-C-004-C": { - "Function": "Nullability", - "Reference": "PricingQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingQuantity MUST be null when ChargeCategory is \"Tax\".", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "PricingQuantity", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Tax" - }, - "Dependencies": [ - "ChargeCategory-C-000-M" - ] - } - }, - "PricingQuantity-C-005-C": { - "Function": "Nullability", - "Reference": "PricingQuantity", - "EntityType": "Column", - "Notes": "PricingQuantity must not be null when ChargeCategory is Usage or Purchase and ChargeClass is not Correction", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingQuantity MUST NOT be null when ChargeCategory is \"Usage\" or \"Purchase\" and ChargeClass is not \"Correction\".", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingQuantity", - "Value": null - }, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Purchase" - } - ] - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - } - ] - }, - "Dependencies": [ - "ChargeCategory-C-000-M", - "ChargeClass-C-000-M" - ] - } - }, - "PricingQuantity-C-006-O": { - "Function": "Nullability", - "Reference": "PricingQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "PricingQuantity MAY be null in all other cases.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingQuantity-C-007-C": { - "Function": "Composite", - "Reference": "PricingQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When PricingQuantity is not null, PricingQuantity adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingQuantity-C-008-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingQuantity-C-009-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingQuantity-C-010-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingQuantity", - "Value": null - }, - "Dependencies": [ - "PricingQuantity-C-008-M", - "PricingQuantity-C-009-C", - "PricingQuantity-C-010-C" - ] - } - }, - "PricingQuantity-C-008-M": { - "Function": "Validation", - "Reference": "PricingQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingQuantity MUST be a valid decimal value.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingQuantity", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingQuantity-C-009-C": { - "Function": "Validation", - "Reference": "PricingQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "The product of PricingQuantity and a unit price (e.g., ContractedUnitPrice) MUST match the corresponding cost metric (e.g., ContractedCost) when the unit price is not null and ChargeClass is not \"Correction\".", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingQuantity-C-010-C": { - "Function": "Validation", - "Reference": "PricingQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Discrepancies in PricingQuantity, unit prices (e.g., ContractedUnitPrice), or costs (e.g., ContractedCost) MAY exist when ChargeClass is \"Correction\".", - "Keyword": "MAY", - "Requirement": {}, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - }, - "Dependencies": [ - "ChargeClass-C-005-C" - ] - } - }, - "CommitmentDiscountId-C-000-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The CommitmentDiscountId column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountId-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountId-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountId-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountId-C-006-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-013-C", - "CommitmentDiscountId-C-001-M", - "CommitmentDiscountId-C-002-M", - "CommitmentDiscountId-C-003-C", - "CommitmentDiscountId-C-006-C" - ] - } - }, - "CommitmentDiscountId-C-001-M": { - "Function": "Type", - "Reference": "CommitmentDiscountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountId MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "CommitmentDiscountId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountId-C-002-M": { - "Function": "Format", - "Reference": "CommitmentDiscountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountId MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "CommitmentDiscountId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountId-C-003-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountId nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountId-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountId-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CommitmentDiscountId-C-004-C", - "CommitmentDiscountId-C-005-C" - ] - } - }, - "CommitmentDiscountId-C-004-C": { - "Function": "Nullability", - "Reference": "CommitmentDiscountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountId MUST be null when a charge is not related to a commitment discount.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountId-C-005-C": { - "Function": "Nullability", - "Reference": "CommitmentDiscountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountId MUST NOT be null when a charge is related to a commitment discount.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountId-C-006-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When CommitmentDiscountId is not null, CommitmentDiscountId adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountId-C-007-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountId-C-008-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "CommitmentDiscountId", - "Value": null - }, - "Dependencies": [ - "CommitmentDiscountId-C-007-M", - "CommitmentDiscountId-C-008-C" - ] - } - }, - "CommitmentDiscountId-C-007-M": { - "Function": "Validation", - "Reference": "CommitmentDiscountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountId MUST be a unique identifier within the provider.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountId-C-008-C": { - "Function": "Validation", - "Reference": "CommitmentDiscountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountId SHOULD be a fully-qualified identifier.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ResourceId-C-000-C": { - "Function": "Composite", - "Reference": "ResourceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "BILLING_BASED_ON_PROVISIONED_RESOURCES_SUPPORTED", - "RESOURCE_TYPE_ASSIGNMENT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ResourceId column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceId-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceId-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceId-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceId-C-006-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-043-C", - "ResourceId-C-001-M", - "ResourceId-C-002-M", - "ResourceId-C-003-C", - "ResourceId-C-006-C" - ] - } - }, - "ResourceId-C-001-M": { - "Function": "Type", - "Reference": "ResourceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ResourceId MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "ResourceId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ResourceId-C-002-M": { - "Function": "Format", - "Reference": "ResourceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ResourceId MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "ResourceId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ResourceId-C-003-C": { - "Function": "Composite", - "Reference": "ResourceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ResourceId nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceId-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceId-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "ResourceId-C-004-C", - "ResourceId-C-005-C" - ] - } - }, - "ResourceId-C-004-C": { - "Function": "Nullability", - "Reference": "ResourceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ResourceId MUST be null when a charge is not related to a resource.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ResourceId-C-005-C": { - "Function": "Nullability", - "Reference": "ResourceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ResourceId MUST NOT be null when a charge is related to a resource.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ResourceId-C-006-C": { - "Function": "Composite", - "Reference": "ResourceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When ResourceId is not null, ResourceId adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceId-C-007-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceId-C-008-O" - } - ] - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "CheckCondition": "ResourceId", - "Value": null - }, - "Dependencies": [ - "ResourceId-C-007-M", - "ResourceId-C-008-O" - ] - } - }, - "ResourceId-C-007-M": { - "Function": "Validation", - "Reference": "ResourceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ResourceId MUST be a unique identifier within the provider.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ResourceId-C-008-O": { - "Function": "Validation", - "Reference": "ResourceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ResourceId SHOULD be a fully-qualified identifier.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargeDescription-C-000-M": { - "Function": "Composite", - "Reference": "ChargeDescription", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ChargeDescription column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeDescription-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeDescription-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeDescription-C-003-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeDescription-C-004-O" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-025-M", - "ChargeDescription-C-001-M", - "ChargeDescription-C-002-M", - "ChargeDescription-C-003-O", - "ChargeDescription-C-004-O" - ] - } - }, - "ChargeDescription-C-001-M": { - "Function": "Type", - "EntityType": "Column", - "Reference": "ChargeDescription", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargeDescription MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "ChargeDescription" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargeDescription-C-002-M": { - "Function": "Format", - "EntityType": "Column", - "Reference": "ChargeDescription", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargeDescription MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "ChargeDescription" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargeDescription-C-003-O": { - "Function": "Nullability", - "Reference": "ChargeDescription", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargeDescription SHOULD NOT be null.", - "Keyword": "SHOULD NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeDescription", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargeDescription-C-004-O": { - "Function": "Validation", - "Reference": "ChargeDescription", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ChargeDescription maximum length SHOULD be provided in the corresponding FOCUS Metadata Schema.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceId-C-000-C": { - "Function": "Composite", - "Reference": "SkuPriceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED", - "UNIT_PRICING_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The SkuPriceId column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceId-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceId-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceId-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceId-C-007-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-058-C", - "SkuPriceId-C-001-M", - "SkuPriceId-C-002-M", - "SkuPriceId-C-003-M", - "SkuPriceId-C-007-C" - ] - } - }, - "SkuPriceId-C-001-M": { - "Function": "Type", - "Reference": "SkuPriceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceId MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "SkuPriceId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceId-C-002-M": { - "Function": "Format", - "Reference": "SkuPriceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceId MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "SkuPriceId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceId-C-003-M": { - "Function": "Composite", - "Reference": "SkuPriceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceId nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceId-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceId-C-005-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceId-C-006-O" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "SkuPriceId-C-004-C", - "SkuPriceId-C-005-C", - "SkuPriceId-C-006-O" - ] - } - }, - "SkuPriceId-C-004-C": { - "Function": "Nullability", - "Reference": "SkuPriceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceId MUST be null when ChargeCategory is \"Tax\".", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "SkuPriceId", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Tax" - }, - "Dependencies": [] - } - }, - "SkuPriceId-C-005-C": { - "Function": "Nullability", - "Reference": "SkuPriceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceId MUST NOT be null when ChargeCategory is \"Usage\" or \"Purchase\" and ChargeClass is not \"Correction\".", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "SkuPriceId", - "Value": null - }, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Purchase" - } - ] - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - } - ] - }, - "Dependencies": [ - "ChargeClass-C-000-M", - "ChargeCategory-C-000-M" - ] - } - }, - "SkuPriceId-C-006-O": { - "Function": "Nullability", - "Reference": "SkuPriceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceId MAY be null in all other cases.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceId-C-007-C": { - "Function": "Composite", - "Reference": "SkuPriceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When SkuPriceId is not null, SkuPriceId adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceId-C-008-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceId-C-009-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceId-C-010-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceId-C-011-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceId-C-012-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceId-C-013-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceId-C-014-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceId-C-015-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "SkuPriceId", - "Value": null - }, - "Dependencies": [ - "SkuPriceId-C-008-M", - "SkuPriceId-C-009-M", - "SkuPriceId-C-010-M", - "SkuPriceId-C-011-O", - "SkuPriceId-C-012-C", - "SkuPriceId-C-013-M", - "SkuPriceId-C-014-C", - "SkuPriceId-C-015-C" - ] - } - }, - "SkuPriceId-C-008-M": { - "Function": "Validation", - "Reference": "SkuPriceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceId MUST have one and only one parent SkuId.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckDistinctCount", - "ColumnAName": "SkuPriceId", - "ColumnBName": "SkuId", - "ExpectedCount": 1 - }, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceId-C-009-M": { - "Function": "Validation", - "Reference": "SkuPriceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceId MUST remain consistent over time.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceId-C-010-M": { - "Function": "Validation", - "Reference": "SkuPriceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceId MUST remain consistent across billing accounts or contracts.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceId-C-011-O": { - "Function": "Validation", - "Reference": "SkuPriceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceId MAY equal SkuId.", - "Keyword": "MAY", - "Requirement": { - "CheckFunction": "CheckSameValue", - "ColumnAName": "SkuPriceId", - "ColumnBName": "SkuId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceId-C-012-C": { - "Function": "Validation", - "Reference": "SkuPriceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceId MUST be associated with a given resource or service when ChargeCategory is \"Usage\" or \"Purchase\".", - "Keyword": "MUST", - "Requirement": {}, - "Condition": { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Purchase" - } - ] - }, - "Dependencies": [ - "ChargeCategory-C-003-M" - ] - } - }, - "SkuPriceId-C-013-M": { - "Function": "Validation", - "Reference": "SkuPriceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceId MUST reference a SKU Price in a provider-supplied price list, enabling the lookup of detailed information about the SKU Price.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceId-C-014-C": { - "Function": "Validation", - "Reference": "SkuPriceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceId MUST support the lookup of the ListUnitPrice when the provider publishes unit prices exclusive of discounts.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceId-C-015-C": { - "Function": "Validation", - "Reference": "SkuPriceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "NEGOTIATED_PRICING_SUPPORTED" - ], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceId MUST support the verification of the given ContractedUnitPrice when the provider supports negotiated pricing concepts.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "InvoiceId-C-000-O": { - "Function": "Composite", - "Reference": "InvoiceId", - "EntityType": "Column", - "Notes": "Root composite for column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The InvoiceId column adheres to the following requirements:", - "Keyword": "SHOULD", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "InvoiceId-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "InvoiceId-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "InvoiceId-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "InvoiceId-C-006-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "InvoiceId-C-007-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-033-O", - "InvoiceId-C-001-M", - "InvoiceId-C-002-M", - "InvoiceId-C-003-C", - "InvoiceId-C-006-O", - "InvoiceId-C-007-C" - ] - } - }, - "InvoiceId-C-001-M": { - "Function": "Type", - "Reference": "InvoiceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "InvoiceId MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "InvoiceId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "InvoiceId-C-002-M": { - "Function": "Format", - "Reference": "InvoiceId", - "EntityType": "Column", - "Notes": "Cross-attribute reference: StringHandling", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "InvoiceId MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "InvoiceId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "InvoiceId-C-003-C": { - "Function": "Composite", - "Reference": "InvoiceId", - "EntityType": "Column", - "Notes": "Composite for nullability rules", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "InvoiceId nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "InvoiceId-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "InvoiceId-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "InvoiceId-C-004-C", - "InvoiceId-C-005-C" - ] - } - }, - "InvoiceId-C-004-C": { - "Function": "Nullability", - "Reference": "InvoiceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "InvoiceId MUST be null when the charge is not associated either with an invoice or with a pre-generated provisional invoice.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "InvoiceId", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "InvoiceId-C-005-C": { - "Function": "Nullability", - "Reference": "InvoiceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "InvoiceId MUST NOT be null when the charge is associated with either an issued invoice or a pre-generated provisional invoice.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "InvoiceId", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "InvoiceId-C-006-O": { - "Function": "Validation", - "Reference": "InvoiceId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "InvoiceId MAY be generated prior to an invoice being issued.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "InvoiceId-C-007-C": { - "Function": "Validation", - "Reference": "InvoiceId", - "EntityType": "Column", - "Notes": "Cross-column reference: BillingAccountId", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "InvoiceId MUST be associated with the related charge and BillingAccountId when a pre-generated invoice or provisional invoice exists.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [ - "BillingAccountId-C-000-M" - ] - } - }, - "PricingCurrencyListUnitPrice-C-000-C": { - "Function": "Composite", - "Reference": "PricingCurrencyListUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The PricingCurrencyListUnitPrice column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyListUnitPrice-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyListUnitPrice-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyListUnitPrice-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyListUnitPrice-C-007-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-054-C", - "PricingCurrencyListUnitPrice-C-001-M", - "PricingCurrencyListUnitPrice-C-002-M", - "PricingCurrencyListUnitPrice-C-003-M", - "PricingCurrencyListUnitPrice-C-007-C" - ] - } - }, - "PricingCurrencyListUnitPrice-C-001-M": { - "Function": "Type", - "Reference": "PricingCurrencyListUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyListUnitPrice MUST be of type Decimal.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeDecimal", - "ColumnName": "PricingCurrencyListUnitPrice" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrencyListUnitPrice-C-002-M": { - "Function": "Format", - "Reference": "PricingCurrencyListUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyListUnitPrice MUST conform to NumericFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatNumeric", - "ColumnName": "PricingCurrencyListUnitPrice" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrencyListUnitPrice-C-003-M": { - "Function": "Composite", - "Reference": "PricingCurrencyListUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyListUnitPrice nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyListUnitPrice-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyListUnitPrice-C-005-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyListUnitPrice-C-006-O" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "PricingCurrencyListUnitPrice-C-004-C", - "PricingCurrencyListUnitPrice-C-005-C", - "PricingCurrencyListUnitPrice-C-006-O" - ] - } - }, - "PricingCurrencyListUnitPrice-C-004-C": { - "Function": "Nullability", - "Reference": "PricingCurrencyListUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyListUnitPrice MUST be null when ChargeCategory is \"Tax\".", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "PricingCurrencyListUnitPrice", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Tax" - }, - "Dependencies": [] - } - }, - "PricingCurrencyListUnitPrice-C-005-C": { - "Function": "Nullability", - "Reference": "PricingCurrencyListUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyListUnitPrice MUST NOT be null when ChargeCategory is \"Usage\" or \"Purchase\" and ChargeClass is not \"Correction\".", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingCurrencyListUnitPrice", - "Value": null - }, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Purchase" - } - ] - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - } - ] - }, - "Dependencies": [] - } - }, - "PricingCurrencyListUnitPrice-C-006-O": { - "Function": "Nullability", - "Reference": "PricingCurrencyListUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyListUnitPrice MAY be null in all other cases.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrencyListUnitPrice-C-007-C": { - "Function": "Composite", - "Reference": "PricingCurrencyListUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When PricingCurrencyListUnitPrice is not null, PricingCurrencyListUnitPrice adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyListUnitPrice-C-008-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyListUnitPrice-C-009-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyListUnitPrice-C-010-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingCurrencyListUnitPrice", - "Value": null - }, - "Dependencies": [ - "PricingCurrencyListUnitPrice-C-008-M", - "PricingCurrencyListUnitPrice-C-009-M", - "PricingCurrencyListUnitPrice-C-010-C" - ] - } - }, - "PricingCurrencyListUnitPrice-C-008-M": { - "Function": "Validation", - "Reference": "PricingCurrencyListUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyListUnitPrice MUST be a non-negative decimal value.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckGreaterOrEqualThanValue", - "ColumnName": "PricingCurrencyListUnitPrice", - "Value": 0 - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrencyListUnitPrice-C-009-M": { - "Function": "Validation", - "Reference": "PricingCurrencyListUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyListUnitPrice MUST be denominated in the PricingCurrency.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrencyListUnitPrice-C-010-C": { - "Function": "Validation", - "Reference": "PricingCurrencyListUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Discrepancies in PricingCurrencyListUnitPrice, ListCost, or PricingQuantity MAY be addressed independently when ChargeClass is \"Correction\".", - "Keyword": "MAY", - "Requirement": {}, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - }, - "Dependencies": [ - "ChargeClass-C-005-C" - ] - } - }, - "ConsumedUnit-C-000-C": { - "Function": "Composite", - "Reference": "ConsumedUnit", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "USAGE_MEASUREMENT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ConsumedUnit column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ConsumedUnit-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ConsumedUnit-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ConsumedUnit-C-003-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ConsumedUnit-C-004-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-066-C", - "ConsumedUnit-C-001-M", - "ConsumedUnit-C-002-M", - "ConsumedUnit-C-003-O", - "ConsumedUnit-C-004-C" - ] - } - }, - "ConsumedUnit-C-001-M": { - "Function": "Type", - "Reference": "ConsumedUnit", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ConsumedUnit MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "ConsumedUnit" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ConsumedUnit-C-002-M": { - "Function": "Format", - "Reference": "ConsumedUnit", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ConsumedUnit MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "ConsumedUnit" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ConsumedUnit-C-003-O": { - "Function": "Format", - "Reference": "ConsumedUnit", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ConsumedUnit SHOULD conform to UnitFormat requirements.", - "Keyword": "SHOULD", - "Requirement": { - "CheckFunction": "FormatUnit", - "ColumnName": "ConsumedUnit" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ConsumedUnit-C-004-C": { - "Function": "Composite", - "Reference": "ConsumedUnit", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "USAGE_MEASUREMENT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ConsumedUnit nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ConsumedUnit-C-005-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ConsumedUnit-C-006-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "ConsumedUnit-C-005-C", - "ConsumedUnit-C-006-C" - ] - } - }, - "ConsumedUnit-C-005-C": { - "Function": "Nullability", - "Reference": "ConsumedUnit", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ConsumedUnit MUST be null when ConsumedQuantity is null.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "ConsumedUnit", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ConsumedQuantity", - "Value": null - }, - "Dependencies": [ - "ConsumedQuantity-C-000-C" - ] - } - }, - "ConsumedUnit-C-006-C": { - "Function": "Nullability", - "Reference": "ConsumedUnit", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ConsumedUnit MUST NOT be null when ConsumedQuantity is not null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ConsumedUnit", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ConsumedQuantity", - "Value": null - }, - "Dependencies": [ - "ConsumedQuantity-C-000-C" - ] - } - }, - "ChargeFrequency-C-000-O": { - "Function": "Composite", - "Reference": "ChargeFrequency", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ChargeFrequency column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeFrequency-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeFrequency-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeFrequency-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeFrequency-C-004-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-027-O", - "ChargeFrequency-C-001-M", - "ChargeFrequency-C-002-M", - "ChargeFrequency-C-003-M", - "ChargeFrequency-C-004-C" - ] - } - }, - "ChargeFrequency-C-001-M": { - "Function": "Type", - "Reference": "ChargeFrequency", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargeFrequency MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "ChargeFrequency" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargeFrequency-C-002-M": { - "Function": "Nullability", - "Reference": "ChargeFrequency", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargeFrequency MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeFrequency", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargeFrequency-C-003-M": { - "Function": "Validation", - "Reference": "ChargeFrequency", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargeFrequency MUST be one of the allowed values.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeFrequency", - "Value": "One-Time" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeFrequency", - "Value": "Recurring" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeFrequency", - "Value": "Usage-Based" - } - ] - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargeFrequency-C-004-C": { - "Function": "Validation", - "Reference": "ChargeFrequency", - "EntityType": "Column", - "Notes": "Cross-column reference to ChargeCategory", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargeFrequency MUST NOT be \"Usage-Based\" when ChargeCategory is \"Purchase\".", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeFrequency", - "Value": "Usage-Based" - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Purchase" - }, - "Dependencies": [ - "ChargeCategory-C-000-M" - ] - } - }, - "SkuPriceDetails-C-000-C": { - "Function": "Composite", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED", - "UNIT_PRICING_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The SkuPriceDetails column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-002-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-006-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-019-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-061-C", - "SkuPriceDetails-C-001-M", - "SkuPriceDetails-C-002-O", - "SkuPriceDetails-C-003-C", - "SkuPriceDetails-C-006-C", - "SkuPriceDetails-C-019-M" - ] - } - }, - "SkuPriceDetails-C-001-M": { - "Function": "Format", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceDetails MUST conform to KeyValueFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatKeyValue", - "ColumnName": "SkuPriceDetails" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceDetails-C-002-O": { - "Function": "Format", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceDetails property keys SHOULD conform to PascalCase format.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceDetails-C-003-C": { - "Function": "Composite", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceDetails nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "SkuPriceDetails-C-004-C", - "SkuPriceDetails-C-005-C" - ] - } - }, - "SkuPriceDetails-C-004-C": { - "Function": "Nullability", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceDetails MUST be null when SkuPriceId is null.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "SkuPriceDetails", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "SkuPriceId", - "Value": null - }, - "Dependencies": [] - } - }, - "SkuPriceDetails-C-005-C": { - "Function": "Nullability", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceDetails MAY be null when SkuPriceId is not null.", - "Keyword": "MAY", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "SkuPriceDetails", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "SkuPriceId", - "Value": null - }, - "Dependencies": [] - } - }, - "SkuPriceDetails-C-006-C": { - "Function": "Composite", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When SkuPriceDetails is not null, SkuPriceDetails adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-007-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-008-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-009-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-010-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-011-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-012-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-016-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-017-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-018-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "SkuPriceDetails", - "Value": null - }, - "Dependencies": [ - "SkuPriceDetails-C-007-M", - "SkuPriceDetails-C-008-M", - "SkuPriceDetails-C-009-C", - "SkuPriceDetails-C-010-C", - "SkuPriceDetails-C-011-O", - "SkuPriceDetails-C-012-O", - "SkuPriceDetails-C-016-O", - "SkuPriceDetails-C-017-C", - "SkuPriceDetails-C-018-C" - ] - } - }, - "SkuPriceDetails-C-007-M": { - "Function": "Validation", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceDetails MUST be associated with a given SkuPriceId.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceDetails-C-008-M": { - "Function": "Validation", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceDetails MUST NOT include properties that are not applicable to the corresponding SkuPriceId.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceDetails-C-009-C": { - "Function": "Validation", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceDetails SHOULD include all FOCUS-defined SKU Price properties listed below that are applicable to the corresponding SkuPriceId.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceDetails-C-010-C": { - "Function": "Validation", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceDetails MUST include the FOCUS-defined SKU Price property when an equivalent property is included as a Provider-defined property.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceDetails-C-011-O": { - "Function": "Validation", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceDetails MAY include properties that are already captured in other dedicated columns.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceDetails-C-012-O": { - "Function": "Composite", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuPriceDetails properties for a given SkuPriceId adhere to the following additional requirements:", - "Keyword": "SHOULD", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-013-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-014-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-015-O" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "SkuPriceDetails-C-013-O", - "SkuPriceDetails-C-014-O", - "SkuPriceDetails-C-015-O" - ] - } - }, - "SkuPriceDetails-C-013-O": { - "Function": "Validation", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Existing SkuPriceDetails properties SHOULD remain consistent over time.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceDetails-C-014-O": { - "Function": "Validation", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Existing SkuPriceDetails properties SHOULD NOT be removed.", - "Keyword": "SHOULD NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceDetails-C-015-O": { - "Function": "Validation", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Additional SkuPriceDetails properties MAY be added over time.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceDetails-C-016-O": { - "Function": "Format", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Property key SHOULD remain consistent across comparable SKUs having that property, and the values for this key SHOULD remain in a consistent format.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceDetails-C-017-C": { - "Function": "Format", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Property key MUST begin with the string \"x_\" unless it is a FOCUS-defined property.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceDetails-C-018-C": { - "Function": "Validation", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Property value MUST represent the value for a single PricingUnit when the property holds a numeric value.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceDetails-C-019-M": { - "Function": "Composite", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "FOCUS-defined SKU Price properties adhere to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-020-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-021-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuPriceDetails-C-022-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "SkuPriceDetails-C-020-M", - "SkuPriceDetails-C-021-M", - "SkuPriceDetails-C-022-C" - ] - } - }, - "SkuPriceDetails-C-020-M": { - "Function": "Format", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Property key MUST match the spelling and casing specified for the FOCUS-defined property.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceDetails-C-021-M": { - "Function": "Type", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Property value MUST be of the type specified for that property.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuPriceDetails-C-022-C": { - "Function": "Validation", - "Reference": "SkuPriceDetails", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Property value MUST represent the value for a single PricingUnit, denominated in the unit of measure specified for that property when the property holds a numeric value.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ConsumedQuantity-C-000-C": { - "Function": "Composite", - "Reference": "ConsumedQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "USAGE_MEASUREMENT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ConsumedQuantity column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ConsumedQuantity-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ConsumedQuantity-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ConsumedQuantity-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ConsumedQuantity-C-008-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-011-C", - "ConsumedQuantity-C-001-M", - "ConsumedQuantity-C-002-M", - "ConsumedQuantity-C-003-C", - "ConsumedQuantity-C-008-C" - ] - } - }, - "ConsumedQuantity-C-001-M": { - "Function": "Type", - "Reference": "ConsumedQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ConsumedQuantity MUST be of type Decimal.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeDecimal", - "ColumnName": "ConsumedQuantity" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ConsumedQuantity-C-002-M": { - "Function": "Format", - "Reference": "ConsumedQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ConsumedQuantity MUST conform to NumericFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatNumeric", - "ColumnName": "ConsumedQuantity" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ConsumedQuantity-C-003-C": { - "Function": "Composite", - "Reference": "ConsumedQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ConsumedQuantity nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ConsumedQuantity-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ConsumedQuantity-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "ConsumedQuantity-C-004-C", - "ConsumedQuantity-C-005-C" - ] - } - }, - "ConsumedQuantity-C-004-C": { - "Function": "Nullability", - "Reference": "ConsumedQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ConsumedQuantity MUST be null when ChargeCategory is not \"Usage\", or when ChargeCategory is \"Usage\" and CommitmentDiscountStatus is \"Unused\".", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "ConsumedQuantity", - "Value": null - }, - "Condition": { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountStatus", - "Value": "Unused" - } - ] - } - ] - }, - "Dependencies": [] - } - }, - "ConsumedQuantity-C-005-C": { - "Function": "Composite", - "Reference": "ConsumedQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When ChargeCategory is \"Usage\" and CommitmentDiscountStatus is not \"Unused\", ConsumedQuantity adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ConsumedQuantity-C-006-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ConsumedQuantity-C-007-C" - } - ] - }, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "CommitmentDiscountStatus", - "Value": "Unused" - } - ] - }, - "Dependencies": [ - "ConsumedQuantity-C-006-C", - "ConsumedQuantity-C-007-C" - ] - } - }, - "ConsumedQuantity-C-006-C": { - "Function": "Nullability", - "Reference": "ConsumedQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ConsumedQuantity MUST NOT be null when ChargeClass is not \"Correction\".", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ConsumedQuantity", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - }, - "Dependencies": [] - } - }, - "ConsumedQuantity-C-007-C": { - "Function": "Nullability", - "Reference": "ConsumedQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ConsumedQuantity MAY be null when ChargeClass is \"Correction\".", - "Keyword": "MAY", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "ConsumedQuantity", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - }, - "Dependencies": [] - } - }, - "ConsumedQuantity-C-008-C": { - "Function": "Validation", - "Reference": "ConsumedQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ConsumedQuantity MUST be a valid decimal value when not null.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ConsumedQuantity", - "Value": null - }, - "Dependencies": [] - } - }, - "SkuId-C-000-C": { - "Function": "Composite", - "Reference": "SkuId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PUBLIC_PRICE_LIST_SUPPORTED", - "UNIT_PRICING_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The SkuId column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuId-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuId-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuId-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuId-C-007-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuId-C-011-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuId-C-012-O" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-060-C", - "SkuId-C-001-M", - "SkuId-C-002-M", - "SkuId-C-003-M", - "SkuId-C-007-M", - "SkuId-C-011-C", - "SkuId-C-012-O" - ] - } - }, - "SkuId-C-001-M": { - "Function": "Type", - "Reference": "SkuId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuId MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "SkuId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuId-C-002-M": { - "Function": "Format", - "Reference": "SkuId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuId MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "SkuId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuId-C-003-M": { - "Function": "Composite", - "Reference": "SkuId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuId nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuId-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuId-C-005-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuId-C-006-O" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "SkuId-C-004-C", - "SkuId-C-005-C", - "SkuId-C-006-O" - ] - } - }, - "SkuId-C-004-C": { - "Function": "Nullability", - "Reference": "SkuId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuId MUST be null when ChargeCategory is \"Tax\".", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "SkuId", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Tax" - }, - "Dependencies": [] - } - }, - "SkuId-C-005-C": { - "Function": "Nullability", - "Reference": "SkuId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuId MUST NOT be null when ChargeCategory is \"Usage\" or \"Purchase\" and ChargeClass is not \"Correction\".", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "SkuId", - "Value": null - }, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Purchase" - } - ] - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - } - ] - }, - "Dependencies": [] - } - }, - "SkuId-C-006-O": { - "Function": "Nullability", - "Reference": "SkuId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuId MAY be null in all other cases.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuId-C-007-M": { - "Function": "Composite", - "Reference": "SkuId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SkuId for a given SKU adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuId-C-008-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuId-C-009-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SkuId-C-010-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "SkuId-C-008-M", - "SkuId-C-009-M", - "SkuId-C-010-M" - ] - } - }, - "SkuId-C-008-M": { - "Function": "Validation", - "Reference": "SkuId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuId MUST remain consistent across billing accounts or contracts.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuId-C-009-M": { - "Function": "Validation", - "Reference": "SkuId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuId MUST remain consistent across PricingCategory values.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuId-C-010-M": { - "Function": "Validation", - "Reference": "SkuId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuId MUST remain consistent regardless of any other factors that might impact the price but do not affect the functionality of the SKU.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SkuId-C-011-C": { - "Function": "Validation", - "Reference": "SkuId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuId MUST be associated with a given resource or service when ChargeCategory is \"Usage\" or \"Purchase\".", - "Keyword": "MUST", - "Requirement": {}, - "Condition": { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Purchase" - } - ] - }, - "Dependencies": [ - "ChargeCategory-C-003-M" - ] - } - }, - "SkuId-C-012-O": { - "Function": "Validation", - "Reference": "SkuId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SkuId MAY equal SkuPriceId.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ResourceType-C-000-C": { - "Function": "Composite", - "Reference": "ResourceType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "BILLING_BASED_ON_PROVISIONED_RESOURCES_SUPPORTED", - "RESOURCE_TYPE_ASSIGNMENT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ResourceType column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceType-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceType-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceType-C-003-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-039-C", - "ResourceType-C-001-M", - "ResourceType-C-002-M", - "ResourceType-C-003-C" - ] - } - }, - "ResourceType-C-001-M": { - "Function": "Type", - "Reference": "ResourceType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ResourceType MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "ResourceType" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ResourceType-C-002-M": { - "Function": "Format", - "Reference": "ResourceType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ResourceType MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "ResourceType" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ResourceType-C-003-C": { - "Function": "Composite", - "Reference": "ResourceType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ResourceType nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceType-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceType-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "ResourceType-C-004-C", - "ResourceType-C-005-C" - ] - } - }, - "ResourceType-C-004-C": { - "Function": "Nullability", - "Reference": "ResourceType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ResourceType MUST be null when ResourceId is null.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "ResourceType", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ResourceId", - "Value": null - }, - "Dependencies": [ - "ResourceId-C-000-C" - ] - } - }, - "ResourceType-C-005-C": { - "Function": "Nullability", - "Reference": "ResourceType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ResourceType MUST NOT be null when ResourceId is not null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ResourceType", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "CheckCondition": "ResourceId", - "Value": null - }, - "Dependencies": [ - "ResourceId-C-000-C" - ] - } - }, - "SubAccountType-C-000-C": { - "Function": "Composite", - "Reference": "SubAccountType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "MULTIPLE_SUB_ACCOUNT_TYPES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The SubAccountType column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountType-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountType-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountType-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountType-C-006-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-067-C", - "SubAccountType-C-001-M", - "SubAccountType-C-002-M", - "SubAccountType-C-003-C", - "SubAccountType-C-006-M" - ] - } - }, - "SubAccountType-C-001-M": { - "Function": "Type", - "Reference": "SubAccountType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SubAccountType MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "SubAccountType" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "SubAccountType-C-002-M": { - "Function": "Format", - "Reference": "SubAccountType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SubAccountType MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "SubAccountType" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "SubAccountType-C-003-C": { - "Function": "Composite", - "Reference": "SubAccountType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SubAccountType nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountType-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountType-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "SubAccountType-C-004-C", - "SubAccountType-C-005-C" - ] - } - }, - "SubAccountType-C-004-C": { - "Function": "Nullability", - "Reference": "SubAccountType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SubAccountType MUST be null when SubAccountId is null.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "SubAccountType", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "SubAccountId", - "Value": null - }, - "Dependencies": [ - "SubAccountId-C-000-C" - ] - } - }, - "SubAccountType-C-005-C": { - "Function": "Nullability", - "Reference": "SubAccountType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SubAccountType MUST NOT be null when SubAccountId is not null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "SubAccountType", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "SubAccountId", - "Value": null - }, - "Dependencies": [ - "SubAccountId-C-000-C" - ] - } - }, - "SubAccountType-C-006-M": { - "Function": "Validation", - "Reference": "SubAccountType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SubAccountType MUST be a consistent, readable display value.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCategory-C-000-M": { - "Function": "Composite", - "Reference": "PricingCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The PricingCategory column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCategory-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCategory-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCategory-C-006-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-022-C", - "PricingCategory-C-001-M", - "PricingCategory-C-002-M", - "PricingCategory-C-006-C" - ] - } - }, - "PricingCategory-C-001-M": { - "Function": "Type", - "Reference": "PricingCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCategory MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "PricingCategory" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCategory-C-002-M": { - "Function": "Composite", - "Reference": "PricingCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCategory nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCategory-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCategory-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCategory-C-005-O" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "PricingCategory-C-003-C", - "PricingCategory-C-004-C", - "PricingCategory-C-005-O" - ] - } - }, - "PricingCategory-C-003-C": { - "Function": "Nullability", - "Reference": "PricingCategory", - "EntityType": "Column", - "Notes": "Cross-column reference: ChargeCategory", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCategory MUST be null when ChargeCategory is \"Tax\".", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "PricingCategory", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Tax" - }, - "Dependencies": [ - "ChargeCategory-C-000-M" - ] - } - }, - "PricingCategory-C-004-C": { - "Function": "Nullability", - "Reference": "PricingCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCategory MUST NOT be null when ChargeCategory is \"Usage\" or \"Purchase\" and ChargeClass is not \"Correction\".", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingCategory", - "Value": null - }, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Purchase" - } - ] - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - } - ] - }, - "Dependencies": [ - "ChargeCategory-C-000-M", - "ChargeClass-C-000-M" - ] - } - }, - "PricingCategory-C-005-O": { - "Function": "Nullability", - "Reference": "PricingCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "PricingCategory MAY be null in all other cases.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCategory-C-006-C": { - "Function": "Composite", - "Reference": "PricingCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When PricingCategory is not null, PricingCategory adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCategory-C-007-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCategory-C-008-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCategory-C-009-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCategory-C-010-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCategory-C-011-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingCategory", - "Value": null - }, - "Dependencies": [ - "PricingCategory-C-007-M", - "PricingCategory-C-008-C", - "PricingCategory-C-009-C", - "PricingCategory-C-010-C", - "PricingCategory-C-011-C" - ] - } - }, - "PricingCategory-C-007-M": { - "Function": "Validation", - "Reference": "PricingCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCategory MUST be one of the allowed values.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "PricingCategory", - "Value": "Standard" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "PricingCategory", - "Value": "Committed" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "PricingCategory", - "Value": "Dynamic" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "PricingCategory", - "Value": "Other" - } - ] - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCategory-C-008-C": { - "Function": "Validation", - "Reference": "PricingCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "PricingCategory MUST be \"Standard\" when pricing is predetermined at the agreed upon rate for the billing account.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingCategory", - "Value": null - }, - "Dependencies": [] - } - }, - "PricingCategory-C-009-C": { - "Function": "Validation", - "Reference": "PricingCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "PricingCategory MUST be \"Committed\" when the charge is subject to an existing commitment discount and is not the purchase of the commitment discount.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCategory-C-010-C": { - "Function": "Validation", - "Reference": "PricingCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "PricingCategory MUST be \"Dynamic\" when pricing is determined by the provider and may change over time, regardless of predetermined agreement pricing.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCategory-C-011-C": { - "Function": "Validation", - "Reference": "PricingCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "PricingCategory MUST be \"Other\" when there is a pricing model but none of the allowed values apply.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrency-C-000-C": { - "Function": "Composite", - "Reference": "PricingCurrency", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The PricingCurrency column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrency-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrency-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrency-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrency-C-004-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-045-C", - "PricingCurrency-C-001-M", - "PricingCurrency-C-002-M", - "PricingCurrency-C-003-M", - "PricingCurrency-C-004-M" - ] - } - }, - "PricingCurrency-C-001-M": { - "Function": "Type", - "Reference": "PricingCurrency", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrency MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "PricingCurrency" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrency-C-002-M": { - "Function": "Format", - "Reference": "PricingCurrency", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrency MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "PricingCurrency" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrency-C-003-M": { - "Function": "Format", - "Reference": "PricingCurrency", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrency MUST conform to CurrencyFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatCurrency", - "ColumnName": "PricingCurrency" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrency-C-004-M": { - "Function": "Nullability", - "Reference": "PricingCurrency", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrency MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingCurrency", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountUnit-C-000-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountUnit", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The CommitmentDiscountUnit column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountUnit-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountUnit-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountUnit-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountUnit-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountUnit-C-007-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-015-C", - "CommitmentDiscountUnit-C-001-M", - "CommitmentDiscountUnit-C-002-M", - "CommitmentDiscountUnit-C-003-M", - "CommitmentDiscountUnit-C-004-C", - "CommitmentDiscountUnit-C-007-C" - ] - } - }, - "CommitmentDiscountUnit-C-001-M": { - "Function": "Type", - "Reference": "CommitmentDiscountUnit", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountUnit MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "CommitmentDiscountUnit" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountUnit-C-002-M": { - "Function": "Format", - "Reference": "CommitmentDiscountUnit", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountUnit MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "CommitmentDiscountUnit" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountUnit-C-003-M": { - "Function": "Format", - "Reference": "CommitmentDiscountUnit", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountUnit SHOULD conform to UnitFormat requirements.", - "Keyword": "SHOULD", - "Requirement": { - "CheckFunction": "FormatUnit", - "ColumnName": "CommitmentDiscountUnit" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountUnit-C-004-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountUnit", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountUnit nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountUnit-C-005-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountUnit-C-006-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CommitmentDiscountUnit-C-005-C", - "CommitmentDiscountUnit-C-006-C" - ] - } - }, - "CommitmentDiscountUnit-C-005-C": { - "Function": "Nullability", - "Reference": "CommitmentDiscountUnit", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountUnit MUST be null when CommitmentDiscountQuantity is null.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountUnit", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountQuantity", - "Value": null - }, - "Dependencies": [ - "CommitmentDiscountQuantity-C-000-C" - ] - } - }, - "CommitmentDiscountUnit-C-006-C": { - "Function": "Nullability", - "Reference": "CommitmentDiscountUnit", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountUnit MUST NOT be null when CommitmentDiscountQuantity is not null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "CommitmentDiscountUnit", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "CommitmentDiscountQuantity", - "Value": null - }, - "Dependencies": [ - "CommitmentDiscountQuantity-C-000-C" - ] - } - }, - "CommitmentDiscountUnit-C-007-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountUnit", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When CommitmentDiscountUnit is not null, CommitmentDiscountUnit adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountUnit-C-008-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountUnit-C-009-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountUnit-C-010-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "CommitmentDiscountUnit", - "Value": null - }, - "Dependencies": [ - "CommitmentDiscountUnit-C-008-M", - "CommitmentDiscountUnit-C-009-M", - "CommitmentDiscountUnit-C-010-C" - ] - } - }, - "CommitmentDiscountUnit-C-008-M": { - "Function": "Validation", - "Reference": "CommitmentDiscountUnit", - "EntityType": "Column", - "Notes": "Mirrors cross-column dependency on CommitmentDiscountId", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountUnit MUST remain consistent over time for a given CommitmentDiscountId.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountUnit-C-009-M": { - "Function": "Validation", - "Reference": "CommitmentDiscountUnit", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountUnit MUST represent the unit used to measure the commitment discount.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountUnit-C-010-C": { - "Function": "Validation", - "Reference": "CommitmentDiscountUnit", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "When accounting for commitment discount flexibility, the CommitmentDiscountUnit value SHOULD reflect this consideration.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingAccountType-C-000-C": { - "Function": "Composite", - "Reference": "BillingAccountType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "MULTIPLE_BILLING_ACCOUNT_TYPES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The BillingAccountType column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingAccountType-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingAccountType-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingAccountType-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingAccountType-C-006-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-007-C", - "BillingAccountType-C-001-M", - "BillingAccountType-C-002-M", - "BillingAccountType-C-003-C", - "BillingAccountType-C-006-M" - ] - } - }, - "BillingAccountType-C-001-M": { - "Function": "Type", - "Reference": "BillingAccountType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingAccountType MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "BillingAccountType" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingAccountType-C-002-M": { - "Function": "Format", - "Reference": "BillingAccountType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingAccountType MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "BillingAccountType" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingAccountType-C-003-C": { - "Function": "Composite", - "Reference": "BillingAccountType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingAccountType nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingAccountType-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingAccountType-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "BillingAccountType-C-004-C", - "BillingAccountType-C-005-C" - ] - } - }, - "BillingAccountType-C-004-C": { - "Function": "Nullability", - "Reference": "BillingAccountType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingAccountType MUST be null when BillingAccountId is null.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "BillingAccountType", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "BillingAccountId", - "Value": null - }, - "Dependencies": [] - } - }, - "BillingAccountType-C-005-C": { - "Function": "Nullability", - "Reference": "BillingAccountType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingAccountType MUST NOT be null when BillingAccountId is not null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "BillingAccountType", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "BillingAccountId", - "Value": null - }, - "Dependencies": [] - } - }, - "BillingAccountType-C-006-M": { - "Function": "Validation", - "Reference": "BillingAccountType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "BillingAccountType MUST be a consistent, readable display value.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrencyContractedUnitPrice-C-000-C": { - "Function": "Composite", - "Reference": "PricingCurrencyContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The PricingCurrencyContractedUnitPrice column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-007-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-046-C", - "PricingCurrencyContractedUnitPrice-C-001-M", - "PricingCurrencyContractedUnitPrice-C-002-M", - "PricingCurrencyContractedUnitPrice-C-003-M", - "PricingCurrencyContractedUnitPrice-C-007-C" - ] - } - }, - "PricingCurrencyContractedUnitPrice-C-001-M": { - "Function": "Type", - "Reference": "PricingCurrencyContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyContractedUnitPrice MUST be of type Decimal.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeDecimal", - "ColumnName": "PricingCurrencyContractedUnitPrice" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrencyContractedUnitPrice-C-002-M": { - "Function": "Format", - "Reference": "PricingCurrencyContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyContractedUnitPrice MUST conform to NumericFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatNumeric", - "ColumnName": "PricingCurrencyContractedUnitPrice" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrencyContractedUnitPrice-C-003-M": { - "Function": "Composite", - "Reference": "PricingCurrencyContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyContractedUnitPrice nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-005-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-006-O" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "PricingCurrencyContractedUnitPrice-C-004-C", - "PricingCurrencyContractedUnitPrice-C-005-C", - "PricingCurrencyContractedUnitPrice-C-006-O" - ] - } - }, - "PricingCurrencyContractedUnitPrice-C-004-C": { - "Function": "Nullability", - "Reference": "PricingCurrencyContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyContractedUnitPrice MUST be null when ChargeCategory is \"Tax\".", - "Keyword": "MUST", - "Requirement": {}, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Tax" - }, - "Dependencies": [ - "ChargeCategory-C-003-M" - ] - } - }, - "PricingCurrencyContractedUnitPrice-C-005-C": { - "Function": "Nullability", - "Reference": "PricingCurrencyContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyContractedUnitPrice MUST NOT be null when ChargeCategory is \"Usage\" or \"Purchase\" and ChargeClass is not \"Correction\".", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Purchase" - } - ] - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - } - ] - }, - "Dependencies": [] - } - }, - "PricingCurrencyContractedUnitPrice-C-006-O": { - "Function": "Nullability", - "Reference": "PricingCurrencyContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyContractedUnitPrice MAY be null in all other cases.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrencyContractedUnitPrice-C-007-C": { - "Function": "Composite", - "Reference": "PricingCurrencyContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When PricingCurrencyContractedUnitPrice is not null, PricingCurrencyContractedUnitPrice adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-008-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-009-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-010-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingCurrencyContractedUnitPrice", - "Value": null - }, - "Dependencies": [ - "PricingCurrencyContractedUnitPrice-C-008-C", - "PricingCurrencyContractedUnitPrice-C-009-C", - "PricingCurrencyContractedUnitPrice-C-010-C" - ] - } - }, - "PricingCurrencyContractedUnitPrice-C-008-C": { - "Function": "Validation", - "Reference": "PricingCurrencyContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyContractedUnitPrice MUST be a non-negative decimal value.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingCurrencyContractedUnitPrice", - "Value": null - }, - "Dependencies": [] - } - }, - "PricingCurrencyContractedUnitPrice-C-009-C": { - "Function": "Validation", - "Reference": "PricingCurrencyContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyContractedUnitPrice MUST be denominated in the PricingCurrency.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingCurrencyContractedUnitPrice", - "Value": null - }, - "Dependencies": [] - } - }, - "PricingCurrencyContractedUnitPrice-C-010-C": { - "Function": "Validation", - "Reference": "PricingCurrencyContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Discrepancies in PricingCurrencyContractedUnitPrice, ContractedCost, or PricingQuantity MAY exist when ChargeClass is \"Correction\".", - "Keyword": "MAY", - "Requirement": {}, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - }, - "Dependencies": [ - "ChargeClass-C-005-C" - ] - } - }, - "PricingCurrencyEffectiveCost-C-000-C": { - "Function": "Composite", - "Reference": "PricingCurrencyEffectiveCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The PricingCurrencyEffectiveCost column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyEffectiveCost-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyEffectiveCost-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyEffectiveCost-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyEffectiveCost-C-004-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyEffectiveCost-C-005-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingCurrencyEffectiveCost-C-006-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-050-C", - "PricingCurrencyEffectiveCost-C-001-M", - "PricingCurrencyEffectiveCost-C-002-M", - "PricingCurrencyEffectiveCost-C-003-M", - "PricingCurrencyEffectiveCost-C-004-M", - "PricingCurrencyEffectiveCost-C-005-M", - "PricingCurrencyEffectiveCost-C-006-M" - ] - } - }, - "PricingCurrencyEffectiveCost-C-001-M": { - "Function": "Type", - "Reference": "PricingCurrencyEffectiveCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyEffectiveCost MUST be of type Decimal.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeDecimal", - "ColumnName": "PricingCurrencyEffectiveCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrencyEffectiveCost-C-002-M": { - "Function": "Format", - "Reference": "PricingCurrencyEffectiveCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyEffectiveCost MUST conform to NumericFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatNumeric", - "ColumnName": "PricingCurrencyEffectiveCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrencyEffectiveCost-C-003-M": { - "Function": "Nullability", - "Reference": "PricingCurrencyEffectiveCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyEffectiveCost MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingCurrencyEffectiveCost", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrencyEffectiveCost-C-004-M": { - "Function": "Validation", - "Reference": "PricingCurrencyEffectiveCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyEffectiveCost MUST be a valid decimal value.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckGreaterOrEqualThanValue", - "ColumnName": "PricingCurrencyListUnitPrice", - "Value": 0 - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrencyEffectiveCost-C-005-M": { - "Function": "Validation", - "Reference": "PricingCurrencyEffectiveCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyEffectiveCost MUST be 0 in the event of prepaid purchases or purchases that are applicable to previous usage.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingCurrencyEffectiveCost-C-006-M": { - "Function": "Validation", - "Reference": "PricingCurrencyEffectiveCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "PricingCurrencyEffectiveCost MUST be denominated in the PricingCurrency.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountCategory-C-000-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The CommitmentDiscountCategory column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountCategory-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountCategory-C-002-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountCategory-C-005-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-016-C", - "CommitmentDiscountCategory-C-001-M", - "CommitmentDiscountCategory-C-002-C", - "CommitmentDiscountCategory-C-005-M" - ] - } - }, - "CommitmentDiscountCategory-C-001-M": { - "Function": "Type", - "Reference": "CommitmentDiscountCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountCategory MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "CommitmentDiscountCategory" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountCategory-C-002-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountCategory nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountCategory-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountCategory-C-004-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CommitmentDiscountCategory-C-003-C", - "CommitmentDiscountCategory-C-004-C" - ] - } - }, - "CommitmentDiscountCategory-C-003-C": { - "Function": "Nullability", - "Reference": "CommitmentDiscountCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountCategory MUST be null when CommitmentDiscountId is null.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountCategory", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountId", - "Value": null - }, - "Dependencies": [ - "CommitmentDiscountId-C-000-C" - ] - } - }, - "CommitmentDiscountCategory-C-004-C": { - "Function": "Nullability", - "Reference": "CommitmentDiscountCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountCategory MUST NOT be null when CommitmentDiscountId is not null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "CommitmentDiscountCategory", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "CommitmentDiscountId", - "Value": null - }, - "Dependencies": [ - "CommitmentDiscountId-C-000-C" - ] - } - }, - "CommitmentDiscountCategory-C-005-M": { - "Function": "Validation", - "Reference": "CommitmentDiscountCategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountCategory MUST be one of the allowed values.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountCategory", - "Value": "Spend" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountCategory", - "Value": "Usage" - } - ] - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountType-C-000-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The CommitmentDiscountType column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountType-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountType-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountType-C-003-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-014-C", - "CommitmentDiscountType-C-001-M", - "CommitmentDiscountType-C-002-M", - "CommitmentDiscountType-C-003-C" - ] - } - }, - "CommitmentDiscountType-C-001-M": { - "Function": "Type", - "Reference": "CommitmentDiscountType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountType MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "CommitmentDiscountType" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountType-C-002-M": { - "Function": "Format", - "Reference": "CommitmentDiscountType", - "EntityType": "Column", - "Notes": "Cross-column reference: StringHandling", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountType MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "CommitmentDiscountType" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountType-C-003-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountType", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountType nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountType-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountType-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CommitmentDiscountType-C-004-C", - "CommitmentDiscountType-C-005-C" - ] - } - }, - "CommitmentDiscountType-C-004-C": { - "Function": "Nullability", - "Reference": "CommitmentDiscountType", - "EntityType": "Column", - "Notes": "Cross-column reference: CommitmentDiscountId", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountType MUST be null when CommitmentDiscountId is null.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountType", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountId", - "Value": null - }, - "Dependencies": [ - "CommitmentDiscountId-C-000-C" - ] - } - }, - "CommitmentDiscountType-C-005-C": { - "Function": "Nullability", - "Reference": "CommitmentDiscountType", - "EntityType": "Column", - "Notes": "Cross-column reference: CommitmentDiscountId", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountType MUST NOT be null when CommitmentDiscountId is not null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "CommitmentDiscountType", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "CommitmentDiscountId", - "Value": null - }, - "Dependencies": [ - "CommitmentDiscountId-C-000-C" - ] - } - }, - "CommitmentDiscountQuantity-C-000-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The CommitmentDiscountQuantity column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountQuantity-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountQuantity-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountQuantity-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountQuantity-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountQuantity-C-008-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-018-C", - "CommitmentDiscountQuantity-C-001-M", - "CommitmentDiscountQuantity-C-002-M", - "CommitmentDiscountQuantity-C-003-C", - "CommitmentDiscountQuantity-C-004-C", - "CommitmentDiscountQuantity-C-008-C" - ] - } - }, - "CommitmentDiscountQuantity-C-001-M": { - "Function": "Type", - "Reference": "CommitmentDiscountQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountQuantity MUST be of type Decimal.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeDecimal", - "ColumnName": "CommitmentDiscountQuantity" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountQuantity-C-002-M": { - "Function": "Format", - "Reference": "CommitmentDiscountQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountQuantity MUST conform to NumericFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatNumeric", - "ColumnName": "CommitmentDiscountQuantity" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountQuantity-C-003-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountQuantity nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountQuantity-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountQuantity-C-007-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CommitmentDiscountQuantity-C-004-C", - "CommitmentDiscountQuantity-C-007-C" - ] - } - }, - "CommitmentDiscountQuantity-C-004-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When ChargeCategory is \"Usage\" or \"Purchase\" and CommitmentDiscountId is not null, CommitmentDiscountQuantity adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountQuantity-C-005-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountQuantity-C-006-C" - } - ] - }, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Purchase" - } - ] - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "CommitmentDiscountId", - "Value": null - } - ] - }, - "Dependencies": [ - "CommitmentDiscountId-C-000-C", - "ChargeCategory-C-000-M", - "CommitmentDiscountQuantity-C-005-C", - "CommitmentDiscountQuantity-C-006-C" - ] - } - }, - "CommitmentDiscountQuantity-C-005-C": { - "Function": "Nullability", - "Reference": "CommitmentDiscountQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountQuantity MUST NOT be null when ChargeClass is not \"Correction\".", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "CommitmentDiscountQuantity", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - }, - "Dependencies": [] - } - }, - "CommitmentDiscountQuantity-C-006-C": { - "Function": "Nullability", - "Reference": "CommitmentDiscountQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountQuantity MAY be null when ChargeClass is \"Correction\".", - "Keyword": "MAY", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountQuantity", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - }, - "Dependencies": [] - } - }, - "CommitmentDiscountQuantity-C-007-C": { - "Function": "Nullability", - "Reference": "CommitmentDiscountQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountQuantity MUST be null in all other cases.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountQuantity", - "Value": null - }, - "Condition": { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeCategory", - "Value": "Purchase" - } - ] - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountId", - "Value": null - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - } - ] - }, - "Dependencies": [] - } - }, - "CommitmentDiscountQuantity-C-008-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When CommitmentDiscountQuantity is not null, CommitmentDiscountQuantity adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountQuantity-C-009-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountQuantity-C-010-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountQuantity-C-013-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CommitmentDiscountQuantity-C-009-M", - "CommitmentDiscountQuantity-C-010-C", - "CommitmentDiscountQuantity-C-013-C" - ] - } - }, - "CommitmentDiscountQuantity-C-009-M": { - "Function": "Validation", - "Reference": "CommitmentDiscountQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountQuantity MUST be a valid decimal value.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountQuantity-C-010-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When ChargeCategory is \"Purchase\", CommitmentDiscountQuantity adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountQuantity-C-011-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountQuantity-C-012-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": null - }, - "Dependencies": [ - "CommitmentDiscountQuantity-C-011-C", - "CommitmentDiscountQuantity-C-012-C" - ] - } - }, - "CommitmentDiscountQuantity-C-011-C": { - "Function": "Validation", - "Reference": "CommitmentDiscountQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountQuantity MUST be the quantity of CommitmentDiscountUnit, paid fully or partially upfront, that is eligible for consumption over the commitment discount's term when ChargeFrequency is \"One-Time\".", - "Keyword": "MUST", - "Requirement": {}, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeFrequency", - "Value": "One-Time" - }, - "Dependencies": [ - "ChargeFrequency-C-003-M" - ] - } - }, - "CommitmentDiscountQuantity-C-012-C": { - "Function": "Validation", - "Reference": "CommitmentDiscountQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountQuantity MUST be the quantity of CommitmentDiscountUnit that is eligible for consumption for each charge period that corresponds with the purchase when ChargeFrequency is \"Recurring\".", - "Keyword": "MUST", - "Requirement": {}, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeFrequency", - "Value": "Recurring" - }, - "Dependencies": [ - "ChargeFrequency-C-003-M" - ] - } - }, - "CommitmentDiscountQuantity-C-013-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When ChargeCategory is \"Usage\", CommitmentDiscountQuantity adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountQuantity-C-014-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountQuantity-C-015-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - "Dependencies": [ - "CommitmentDiscountQuantity-C-014-C", - "CommitmentDiscountQuantity-C-015-C" - ] - } - }, - "CommitmentDiscountQuantity-C-014-C": { - "Function": "Validation", - "Reference": "CommitmentDiscountQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountQuantity MUST be the metered quantity of CommitmentDiscountUnit that is consumed in a given charge period when CommitmentDiscountStatus is \"Used\".", - "Keyword": "MUST", - "Requirement": {}, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountStatus", - "Value": "Used" - } - ] - }, - "Dependencies": [] - } - }, - "CommitmentDiscountQuantity-C-015-C": { - "Function": "Validation", - "Reference": "CommitmentDiscountQuantity", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountQuantity MUST be the remaining, unused quantity of CommitmentDiscountUnit in a given charge period when CommitmentDiscountStatus is \"Unused\".", - "Keyword": "MUST", - "Requirement": {}, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountStatus", - "Value": "Unused" - } - ] - }, - "Dependencies": [] - } - }, - "BillingPeriodEnd-C-000-M": { - "Function": "Composite", - "Reference": "BillingPeriodEnd", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The BillingPeriodEnd column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingPeriodEnd-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingPeriodEnd-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingPeriodEnd-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingPeriodEnd-C-004-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-010-M", - "BillingPeriodEnd-C-001-M", - "BillingPeriodEnd-C-002-M", - "BillingPeriodEnd-C-003-M", - "BillingPeriodEnd-C-004-M" - ] - } - }, - "BillingPeriodEnd-C-001-M": { - "Function": "Type", - "Reference": "BillingPeriodEnd", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingPeriodEnd MUST be of type Date/Time.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeDateTime", - "ColumnName": "BillingPeriodEnd" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingPeriodEnd-C-002-M": { - "Function": "Format", - "Reference": "BillingPeriodEnd", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingPeriodEnd MUST conform to DateTimeFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatDateTime", - "ColumnName": "BillingPeriodEnd" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingPeriodEnd-C-003-M": { - "Function": "Nullability", - "Reference": "BillingPeriodEnd", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingPeriodEnd MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "BillingPeriodEnd", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingPeriodEnd-C-004-M": { - "Function": "Validation", - "Reference": "BillingPeriodEnd", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "BillingPeriodEnd MUST be the exclusive end bound of the billing period.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ServiceName-C-000-M": { - "Function": "Composite", - "Reference": "ServiceName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ServiceName column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceName-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceName-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceName-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceName-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceName-C-007-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-041-M", - "ServiceName-C-001-M", - "ServiceName-C-002-M", - "ServiceName-C-003-M", - "ServiceName-C-004-C", - "ServiceName-C-007-C" - ] - } - }, - "ServiceName-C-001-M": { - "Function": "Type", - "Reference": "ServiceName", - "EntityType": "Column", - "Notes": "ServiceName must be of type String", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ServiceName MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "ServiceName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ServiceName-C-002-M": { - "Function": "Format", - "Reference": "ServiceName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ServiceName MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "ServiceName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ServiceName-C-003-M": { - "Function": "Nullability", - "Reference": "ServiceName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ServiceName MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ServiceName", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ServiceName-C-004-C": { - "Function": "Composite", - "Reference": "ServiceName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The relationship between ServiceName and ServiceCategory is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceName-C-005-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceName-C-006-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "ServiceCategory-C-000-M", - "ServiceName-C-005-C", - "ServiceName-C-006-C" - ] - } - }, - "ServiceName-C-005-C": { - "Function": "Validation", - "Reference": "ServiceName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ServiceName MUST have one and only one ServiceCategory that best aligns with its primary purpose, except when no suitable ServiceCategory is available.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckDistinctCount", - "ColumnAName": "ServiceName", - "ColumnBName": "ServiceCategory", - "ExpectedCount": 1 - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ServiceName-C-006-C": { - "Function": "Validation", - "Reference": "ServiceName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ServiceName MUST be associated with the ServiceCategory \"Other\" when no suitable ServiceCategory is available.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ServiceName-C-007-C": { - "Function": "Composite", - "Reference": "ServiceName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The relationship between ServiceName and ServiceSubcategory is defined as follows:", - "Keyword": "SHOULD", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceName-C-008-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceName-C-009-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "ServiceSubcategory-C-000-O", - "ServiceName-C-008-C", - "ServiceName-C-009-C" - ] - } - }, - "ServiceName-C-008-C": { - "Function": "Validation", - "Reference": "ServiceName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ServiceName SHOULD have one and only one ServiceSubcategory that best aligns with its primary purpose, except when no suitable ServiceSubcategory is available.", - "Keyword": "SHOULD", - "Requirement": { - "CheckFunction": "CheckDistinctCount", - "ColumnAName": "ServiceName", - "ColumnBName": "ServiceSubcategory", - "ExpectedCount": 1 - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ServiceName-C-009-C": { - "Function": "Validation", - "Reference": "ServiceName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ServiceName SHOULD be associated with the ServiceSubcategory \"Other\" when no suitable ServiceSubcategory is available.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountStatus-C-000-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountStatus", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "COMMITMENT_DISCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The CommitmentDiscountStatus column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountStatus-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountStatus-C-002-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountStatus-C-005-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-017-C", - "CommitmentDiscountStatus-C-001-M", - "CommitmentDiscountStatus-C-002-C", - "CommitmentDiscountStatus-C-005-M" - ] - } - }, - "CommitmentDiscountStatus-C-001-M": { - "Function": "Type", - "Reference": "CommitmentDiscountStatus", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountStatus MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "CommitmentDiscountStatus" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CommitmentDiscountStatus-C-002-C": { - "Function": "Composite", - "Reference": "CommitmentDiscountStatus", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountStatus nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountStatus-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CommitmentDiscountStatus-C-004-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CommitmentDiscountStatus-C-003-C", - "CommitmentDiscountStatus-C-004-C" - ] - } - }, - "CommitmentDiscountStatus-C-003-C": { - "Function": "Nullability", - "Reference": "CommitmentDiscountStatus", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountStatus MUST be null when CommitmentDiscountId is null.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "CommitmentDiscountStatus", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountId", - "Value": null - }, - "Dependencies": [ - "CommitmentDiscountId-C-000-C" - ] - } - }, - "CommitmentDiscountStatus-C-004-C": { - "Function": "Nullability", - "Reference": "CommitmentDiscountStatus", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountStatus MUST NOT be null when CommitmentDiscountId is not null and Charge Category is \"Usage\".", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "CommitmentDiscountStatus", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountId", - "Value": null - }, - "Dependencies": [ - "CommitmentDiscountId-C-000-C" - ] - } - }, - "CommitmentDiscountStatus-C-005-M": { - "Function": "Validation", - "Reference": "CommitmentDiscountStatus", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CommitmentDiscountStatus MUST be one of the allowed values.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountStatus", - "Value": "Active" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountStatus", - "Value": "Expired" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "CommitmentDiscountStatus", - "Value": "Pending" - } - ] - }, - "Condition": {}, - "Dependencies": [] - } - }, - "RegionId-C-000-C": { - "Function": "Composite", - "Reference": "RegionId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "REGION_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The RegionId column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "RegionId-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "RegionId-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "RegionId-C-003-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-063-C", - "RegionId-C-001-M", - "RegionId-C-002-M", - "RegionId-C-003-C" - ] - } - }, - "RegionId-C-001-M": { - "Function": "Type", - "Reference": "RegionId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "RegionId MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "RegionId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "RegionId-C-002-M": { - "Function": "Format", - "Reference": "RegionId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "RegionId MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "RegionId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "RegionId-C-003-C": { - "Function": "Composite", - "Reference": "RegionId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "RegionId nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "RegionId-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "RegionId-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "RegionId-C-004-C", - "RegionId-C-005-C" - ] - } - }, - "RegionId-C-004-C": { - "Function": "Nullability", - "Reference": "RegionId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "RegionId MUST NOT be null when a resource or service is operated in or managed from a distinct region.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "RegionId-C-005-C": { - "Function": "Nullability", - "Reference": "RegionId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "RegionId MAY be null when a resource or service is not operated in or managed from a distinct region.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingUnit-C-000-M": { - "Function": "Composite", - "Reference": "PricingUnit", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The PricingUnit column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingUnit-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingUnit-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingUnit-C-003-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingUnit-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingUnit-C-007-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-068-M", - "PricingUnit-C-001-M", - "PricingUnit-C-002-M", - "PricingUnit-C-003-O", - "PricingUnit-C-004-C", - "PricingUnit-C-007-C" - ] - } - }, - "PricingUnit-C-001-M": { - "Function": "Type", - "Reference": "PricingUnit", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingUnit MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "PricingUnit" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingUnit-C-002-M": { - "Function": "Format", - "Reference": "PricingUnit", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingUnit MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "PricingUnit" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingUnit-C-003-O": { - "Function": "Format", - "Reference": "PricingUnit", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingUnit SHOULD conform to UnitFormat requirements.", - "Keyword": "SHOULD", - "Requirement": { - "CheckFunction": "FormatUnit", - "ColumnName": "PricingUnit" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingUnit-C-004-C": { - "Function": "Composite", - "Reference": "PricingUnit", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingUnit nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingUnit-C-005-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingUnit-C-006-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "PricingUnit-C-005-C", - "PricingUnit-C-006-C" - ] - } - }, - "PricingUnit-C-005-C": { - "Function": "Nullability", - "Reference": "PricingUnit", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingUnit MUST be null when PricingQuantity is null.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "PricingUnit", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "PricingQuantity", - "Value": null - }, - "Dependencies": [] - } - }, - "PricingUnit-C-006-C": { - "Function": "Nullability", - "Reference": "PricingUnit", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "PricingUnit MUST NOT be null when PricingQuantity is not null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingUnit", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingQuantity", - "Value": null - }, - "Dependencies": [] - } - }, - "PricingUnit-C-007-C": { - "Function": "Composite", - "Reference": "PricingUnit", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When PricingUnit is not null, PricingUnit adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingUnit-C-008-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "PricingUnit-C-009-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingUnit", - "Value": null - }, - "Dependencies": [ - "PricingUnit-C-008-M", - "PricingUnit-C-009-C" - ] - } - }, - "PricingUnit-C-008-M": { - "Function": "Validation", - "Reference": "PricingUnit", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "Cross-attribute reference: PriceList", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "PricingUnit MUST be semantically equal to the corresponding pricing measurement unit provided in provider-published price list.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "PricingUnit-C-009-C": { - "Function": "Validation", - "Reference": "PricingUnit", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "Cross-attribute reference: Invoice", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "PricingUnit MUST be semantically equal to the corresponding pricing measurement unit provided in invoice, when the invoice includes a pricing measurement unit.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingCurrency-C-000-M": { - "Function": "Composite", - "Reference": "BillingCurrency", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The BillingCurrency column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingCurrency-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingCurrency-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingCurrency-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingCurrency-C-004-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingCurrency-C-005-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BillingCurrency-C-006-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-035-M", - "BillingCurrency-C-001-M", - "BillingCurrency-C-002-M", - "BillingCurrency-C-003-M", - "BillingCurrency-C-004-M", - "BillingCurrency-C-005-M", - "BillingCurrency-C-006-M" - ] - } - }, - "BillingCurrency-C-001-M": { - "Function": "Type", - "Reference": "BillingCurrency", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingCurrency MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "BillingCurrency" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingCurrency-C-002-M": { - "Function": "Format", - "Reference": "BillingCurrency", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingCurrency MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "BillingCurrency" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingCurrency-C-003-M": { - "Function": "Format", - "Reference": "BillingCurrency", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingCurrency MUST conform to CurrencyFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatCurrency", - "ColumnName": "BillingCurrency" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingCurrency-C-004-M": { - "Function": "Nullability", - "Reference": "BillingCurrency", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingCurrency MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "BillingCurrency", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingCurrency-C-005-M": { - "Function": "Validation", - "Reference": "BillingCurrency", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "BillingCurrency MUST match the currency used in the invoice generated by the invoice issuer.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "BillingCurrency-C-006-M": { - "Function": "Validation", - "Reference": "BillingCurrency", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BillingCurrency MUST be expressed in national currency (e.g., USD, EUR).", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckNationalCurrency", - "ColumnName": "BillingCurrency" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ServiceSubcategory-C-000-O": { - "Function": "Composite", - "Reference": "ServiceSubcategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ServiceSubcategory column adheres to the following requirements:", - "Keyword": "SHOULD", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceSubcategory-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceSubcategory-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceSubcategory-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ServiceSubcategory-C-004-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-042-O", - "ServiceSubcategory-C-001-M", - "ServiceSubcategory-C-002-M", - "ServiceSubcategory-C-003-M", - "ServiceSubcategory-C-004-M" - ] - } - }, - "ServiceSubcategory-C-001-M": { - "Function": "Type", - "Reference": "ServiceSubcategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ServiceSubcategory MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "ServiceSubcategory" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ServiceSubcategory-C-002-M": { - "Function": "Nullability", - "Reference": "ServiceSubcategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ServiceSubcategory MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ServiceSubcategory", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ServiceSubcategory-C-003-M": { - "Function": "Validation", - "Reference": "ServiceSubcategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ServiceSubcategory MUST be one of the allowed values.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "AI Platforms" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Bots" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Generative AI" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Machine Learning" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Natural Language Processing" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (AI and Machine Learning)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Analytics Platforms" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Business Intelligence" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Data Processing" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Search" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Streaming Analytics" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Analytics)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Productivity and Collaboration" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Business Applications)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Containers" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "End User Computing" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Quantum Compute" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Serverless Compute" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Virtual Machines" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Compute)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Caching" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Data Warehouses" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Ledger Databases" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "NoSQL Databases" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Relational Databases" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Time Series Databases" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Databases)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Developer Platforms" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Continuous Integration and Deployment" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Development Environments" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Source Code Management" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Quality Assurance" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Developer Tools)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Identity and Access Management" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Identity)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "API Management" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Messaging" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Workflow Orchestration" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Integration)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "IoT Analytics" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "IoT Platforms" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Internet of Things)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Architecture" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Compliance" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Cost Management" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Data Governance" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Disaster Recovery" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Endpoint Management" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Observability" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Support" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Management and Governance)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Content Creation" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Gaming" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Media Streaming" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Mixed Reality" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Media)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Data Migration" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Resource Migration" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Migration)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Mobile)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Multicloud Integration" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Multicloud)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Application Networking" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Content Delivery" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Network Connectivity" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Network Infrastructure" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Network Routing" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Network Security" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Networking)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Secret Management" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Security Posture Management" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Threat Detection and Response" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Security)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Backup Storage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Block Storage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "File Storage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Object Storage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Storage Platforms" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Storage)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Application Platforms" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Web)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Other)" - } - ] - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ServiceSubcategory-C-004-M": { - "Function": "Validation", - "Reference": "ServiceSubcategory", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ServiceSubcategory MUST have one and only one parent ServiceCategory as specified in the allowed values below.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "AI Platforms" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "AI and Machine Learning" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Bots" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "AI and Machine Learning" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Generative AI" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "AI and Machine Learning" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Machine Learning" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "AI and Machine Learning" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Natural Language Processing" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "AI and Machine Learning" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (AI and Machine Learning)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "AI and Machine Learning" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Analytics Platforms" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Analytics" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Business Intelligence" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Analytics" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Data Processing" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Analytics" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Search" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Analytics" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Streaming Analytics" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Analytics" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Analytics)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Analytics" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Productivity and Collaboration" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Business Applications" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Business Applications)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Business Applications" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Containers" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Compute" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "End User Computing" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Compute" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Quantum Compute" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Compute" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Serverless Compute" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Compute" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Virtual Machines" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Compute" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Compute)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Compute" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Caching" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Databases" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Data Warehouses" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Databases" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Ledger Databases" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Databases" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "NoSQL Databases" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Databases" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Relational Databases" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Databases" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Time Series Databases" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Databases" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Databases)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Databases" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Developer Platforms" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Developer Tools" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Continuous Integration and Deployment" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Developer Tools" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Development Environments" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Developer Tools" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Source Code Management" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Developer Tools" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Quality Assurance" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Developer Tools" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Developer Tools)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Developer Tools" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Identity and Access Management" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Identity" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Identity)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Identity" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "API Management" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Integration" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Messaging" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Integration" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Workflow Orchestration" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Integration" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Integration)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Integration" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "IoT Analytics" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Internet of Things" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "IoT Platforms" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Internet of Things" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Internet of Things)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Internet of Things" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Architecture" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Management and Governance" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Compliance" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Management and Governance" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Cost Management" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Management and Governance" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Data Governance" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Management and Governance" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Disaster Recovery" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Management and Governance" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Endpoint Management" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Management and Governance" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Observability" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Management and Governance" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Support" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Management and Governance" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Management and Governance)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Management and Governance" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Content Creation" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Media" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Gaming" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Media" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Media Streaming" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Media" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Mixed Reality" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Media" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Media)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Media" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Data Migration" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Migration" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Resource Migration" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Migration" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Migration)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Migration" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Mobile)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Mobile" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Multicloud Integration" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Multicloud" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Multicloud)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Multicloud" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Application Networking" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Networking" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Content Delivery" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Networking" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Network Connectivity" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Networking" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Network Infrastructure" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Networking" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Network Routing" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Networking" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Network Security" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Networking" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Networking)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Networking" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Secret Management" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Security" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Security Posture Management" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Security" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Threat Detection and Response" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Security" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Security)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Security" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Backup Storage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Storage" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Block Storage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Storage" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "File Storage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Storage" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Object Storage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Storage" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Storage Platforms" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Storage" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Storage)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Storage" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Application Platforms" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Web" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Web)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Web" - } - ] - }, - { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceSubcategory", - "Value": "Other (Other)" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ServiceCategory", - "Value": "Other" - } - ] - } - ] - }, - "Condition": {}, - "Dependencies": [] - } - }, - "EffectiveCost-C-000-M": { - "Function": "Composite", - "Reference": "EffectiveCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The EffectiveCost column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "EffectiveCost-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "EffectiveCost-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "EffectiveCost-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "EffectiveCost-C-004-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "EffectiveCost-C-005-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "EffectiveCost-C-006-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "EffectiveCost-C-007-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "EffectiveCost-C-008-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "EffectiveCost-C-011-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-031-M", - "EffectiveCost-C-001-M", - "EffectiveCost-C-002-M", - "EffectiveCost-C-003-M", - "EffectiveCost-C-004-M", - "EffectiveCost-C-005-C", - "EffectiveCost-C-006-M", - "EffectiveCost-C-007-O", - "EffectiveCost-C-008-C", - "EffectiveCost-C-011-C" - ] - } - }, - "EffectiveCost-C-001-M": { - "Function": "Type", - "Reference": "EffectiveCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "EffectiveCost MUST be of type Decimal.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeDecimal", - "ColumnName": "EffectiveCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "EffectiveCost-C-002-M": { - "Function": "Format", - "Reference": "EffectiveCost", - "EntityType": "Column", - "Notes": "Cross-attribute reference: NumericFormat", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "EffectiveCost MUST conform to NumericFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatNumeric", - "ColumnName": "EffectiveCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "EffectiveCost-C-003-M": { - "Function": "Nullability", - "Reference": "EffectiveCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "EffectiveCost MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "EffectiveCost", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "EffectiveCost-C-004-M": { - "Function": "Validation", - "Reference": "EffectiveCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "EffectiveCost MUST be a valid decimal value.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "EffectiveCost", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "EffectiveCost-C-005-C": { - "Function": "Validation", - "Reference": "EffectiveCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "EffectiveCost MUST be 0 when ChargeCategory is \"Purchase\" and the purchase is intended to cover future eligible charges.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "EffectiveCost", - "Value": 0 - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Purchase" - }, - "Dependencies": [ - "ChargeCategory-C-000-M" - ] - } - }, - "EffectiveCost-C-006-M": { - "Function": "Validation", - "Reference": "EffectiveCost", - "EntityType": "Column", - "Notes": "Cross-column reference: BillingCurrency", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "EffectiveCost MUST be denominated in the BillingCurrency.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [ - "BillingCurrency-C-000-M" - ] - } - }, - "EffectiveCost-C-007-O": { - "Function": "Validation", - "Reference": "EffectiveCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "The sum of EffectiveCost in a given billing period MAY not match the sum of the invoices received for the same billing period for a billing account.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "EffectiveCost-C-008-C": { - "Function": "Composite", - "Reference": "EffectiveCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When ChargeCategory is not \"Usage\" or \"Purchase\", EffectiveCost adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "EffectiveCost-C-009-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "EffectiveCost-C-010-C" - } - ] - }, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeCategory", - "Value": "Purchase" - } - ] - }, - "Dependencies": [ - "ChargeCategory-C-000-M", - "EffectiveCost-C-009-C", - "EffectiveCost-C-010-C" - ] - } - }, - "EffectiveCost-C-009-C": { - "Function": "Validation", - "Reference": "EffectiveCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "EffectiveCost of a charge calculated based on other charges (e.g., when the ChargeCategory is \"Tax\") MUST be calculated based on the EffectiveCost of those related charges.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "EffectiveCost-C-010-C": { - "Function": "Validation", - "Reference": "EffectiveCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "EffectiveCost of a charge unrelated to other charges (e.g., when the ChargeCategory is \"Credit\") MUST match the BilledCost.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [ - "ChargeCategory-C-000-M", - "BilledCost-C-000-M" - ] - } - }, - "EffectiveCost-C-011-C": { - "Function": "Composite", - "Reference": "EffectiveCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "Charges for a given CommitmentDiscountId adhere to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "EffectiveCost-C-012-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "EffectiveCost-C-013-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "CommitmentDiscountId", - "Value": null - }, - "Dependencies": [ - "CommitmentDiscountId-C-000-C", - "EffectiveCost-C-012-C", - "EffectiveCost-C-013-C" - ] - } - }, - "EffectiveCost-C-012-C": { - "Function": "Validation", - "Reference": "EffectiveCost", - "EntityType": "Column", - "Notes": "Scope alignment by CommitmentDiscountId", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "The sum of EffectiveCost where ChargeCategory is \"Usage\" MUST equal the sum of BilledCost where ChargeCategory is \"Purchase\".", - "Keyword": "MUST", - "Requirement": {}, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "CommitmentDiscountId", - "Value": null - } - ] - }, - "Dependencies": [ - "BilledCost-C-000-M", - "ChargeCategory-C-000-M", - "CommitmentDiscountId-C-000-C" - ] - } - }, - "EffectiveCost-C-013-C": { - "Function": "Validation", - "Reference": "EffectiveCost", - "EntityType": "Column", - "Notes": "Scope alignment by CommitmentDiscountId; no external CR dependency on EffectiveCost", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "The sum of EffectiveCost where ChargeCategory is \"Usage\" MUST equal the sum of EffectiveCost where ChargeCategory is \"Usage\" and CommitmentDiscountStatus is \"Used\", plus the sum of EffectiveCost where ChargeCategory is \"Usage\" and CommitmentDiscountStatus is \"Unused\".", - "Keyword": "MUST", - "Requirement": {}, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "CommitmentDiscountId", - "Value": null - } - ] - }, - "Dependencies": [ - "CommitmentDiscountStatus-C-000-C", - "ChargeCategory-C-000-M", - "CommitmentDiscountId-C-000-C" - ] - } - }, - "BilledCost-C-000-M": { - "Function": "Composite", - "Reference": "BilledCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The BilledCost column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BilledCost-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BilledCost-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BilledCost-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BilledCost-C-004-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BilledCost-C-005-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BilledCost-C-006-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "BilledCost-C-007-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-006-M", - "BilledCost-C-001-M", - "BilledCost-C-002-M", - "BilledCost-C-003-M", - "BilledCost-C-004-M", - "BilledCost-C-005-C", - "BilledCost-C-006-M", - "BilledCost-C-007-M" - ] - } - }, - "BilledCost-C-001-M": { - "Function": "Type", - "EntityType": "Column", - "Reference": "BilledCost", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BilledCost MUST be of type Decimal.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeDecimal", - "ColumnName": "BilledCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BilledCost-C-002-M": { - "Function": "Format", - "EntityType": "Column", - "Reference": "BilledCost", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BilledCost MUST conform to NumericFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatNumeric", - "ColumnName": "BilledCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BilledCost-C-003-M": { - "Function": "Nullability", - "Reference": "BilledCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BilledCost MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "BilledCost", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BilledCost-C-004-M": { - "Function": "Validation", - "Reference": "BilledCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BilledCost MUST be a valid decimal value.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckDecimalValue", - "ColumnName": "BilledCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "BilledCost-C-005-C": { - "Function": "Validation", - "Reference": "BilledCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "BilledCost MUST be 0 for charges where payments are received by a third party (e.g., marketplace transactions).", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "BilledCost", - "Value": 0 - }, - "Condition": { - "CheckFunction": "CheckNotSameValue", - "ColumnAName": "ProviderName", - "ColumnBName": "InvoiceIssuerName" - }, - "Dependencies": [ - "ProviderName-C-000-M", - "InvoiceIssuerName-C-000-M" - ] - } - }, - "BilledCost-C-006-M": { - "Function": "Validation", - "Reference": "BilledCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "BilledCost MUST be denominated in the BillingCurrency.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "BilledCost-C-007-M": { - "Function": "Validation", - "Reference": "BilledCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "The sum of the BilledCost for a given InvoiceId MUST match the sum of the payable amount provided in the corresponding invoice with the same id generated by the InvoiceIssuer.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargeClass-C-000-M": { - "Function": "Composite", - "Reference": "ChargeClass", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ChargeClass column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeClass-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeClass-C-002-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeClass-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-026-M", - "ChargeClass-C-001-M", - "ChargeClass-C-002-C", - "ChargeClass-C-005-C" - ] - } - }, - "ChargeClass-C-001-M": { - "Function": "Type", - "Reference": "ChargeClass", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargeClass MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "ChargeClass" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargeClass-C-002-C": { - "Function": "Composite", - "Reference": "ChargeClass", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargeClass nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeClass-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargeClass-C-004-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "ChargeClass-C-003-C", - "ChargeClass-C-004-C" - ] - } - }, - "ChargeClass-C-003-C": { - "Function": "Nullability", - "Reference": "ChargeClass", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ChargeClass MUST be null when the row does not represent a correction or when it represents a correction within the current billing period.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargeClass-C-004-C": { - "Function": "Nullability", - "Reference": "ChargeClass", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ChargeClass MUST NOT be null when the row represents a correction to a previously invoiced billing period.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargeClass-C-005-C": { - "Function": "Validation", - "Reference": "ChargeClass", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargeClass MUST be \"Correction\" when ChargeClass is not null.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeClass", - "Value": null - }, - "Dependencies": [] - } - }, - "ChargePeriodEnd-C-000-M": { - "Function": "Composite", - "Reference": "ChargePeriodEnd", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ChargePeriodEnd column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargePeriodEnd-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargePeriodEnd-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargePeriodEnd-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ChargePeriodEnd-C-004-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-028-M", - "ChargePeriodEnd-C-001-M", - "ChargePeriodEnd-C-002-M", - "ChargePeriodEnd-C-003-M", - "ChargePeriodEnd-C-004-M" - ] - } - }, - "ChargePeriodEnd-C-001-M": { - "Function": "Type", - "Reference": "ChargePeriodEnd", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargePeriodEnd MUST be of type Date/Time.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeDateTime", - "ColumnName": "ChargePeriodEnd" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargePeriodEnd-C-002-M": { - "Function": "Format", - "Reference": "ChargePeriodEnd", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargePeriodEnd MUST conform to DateTimeFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatDateTime", - "ColumnName": "ChargePeriodEnd" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargePeriodEnd-C-003-M": { - "Function": "Nullability", - "Reference": "ChargePeriodEnd", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ChargePeriodEnd MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargePeriodEnd", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ChargePeriodEnd-C-004-M": { - "Function": "Validation", - "Reference": "ChargePeriodEnd", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ChargePeriodEnd MUST be the exclusive end bound of the effective period of the charge.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "CapacityReservationId-C-000-C": { - "Function": "Composite", - "Reference": "CapacityReservationId", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "CAPACITY_RESERVATION_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The CapacityReservationId column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationId-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationId-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationId-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationId-C-007-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-065-C", - "CapacityReservationId-C-001-M", - "CapacityReservationId-C-002-M", - "CapacityReservationId-C-003-C", - "CapacityReservationId-C-007-C" - ] - } - }, - "CapacityReservationId-C-001-M": { - "Function": "Type", - "Reference": "CapacityReservationId", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CapacityReservationId MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "CapacityReservationId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CapacityReservationId-C-002-M": { - "Function": "Format", - "Reference": "CapacityReservationId", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CapacityReservationId MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "CapacityReservationId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CapacityReservationId-C-003-C": { - "Function": "Composite", - "Reference": "CapacityReservationId", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CapacityReservationId nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationId-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationId-C-005-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationId-C-006-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CapacityReservationId-C-004-C", - "CapacityReservationId-C-005-C", - "CapacityReservationId-C-006-C" - ] - } - }, - "CapacityReservationId-C-004-C": { - "Function": "Nullability", - "Reference": "CapacityReservationId", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CapacityReservationId MUST be null when a charge is not related to a capacity reservation.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "CapacityReservationId-C-005-C": { - "Function": "Nullability", - "Reference": "CapacityReservationId", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CapacityReservationId MUST NOT be null when a charge represents the unused portion of a capacity reservation.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "CapacityReservationId", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "CapacityReservationStatus", - "Value": "Unused" - }, - "Dependencies": [ - "CapacityReservationStatus-C-006-M" - ] - } - }, - "CapacityReservationId-C-006-C": { - "Function": "Nullability", - "Reference": "CapacityReservationId", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CapacityReservationId SHOULD NOT be null when a charge is related to a capacity reservation.", - "Keyword": "SHOULD NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "CapacityReservationId-C-007-C": { - "Function": "Composite", - "Reference": "CapacityReservationId", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When CapacityReservationId is not null, CapacityReservationId adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationId-C-008-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationId-C-009-O" - } - ] - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "CapacityReservationId", - "Value": null - }, - "Dependencies": [ - "CapacityReservationId-C-008-M", - "CapacityReservationId-C-009-O" - ] - } - }, - "CapacityReservationId-C-008-M": { - "Function": "Validation", - "Reference": "CapacityReservationId", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CapacityReservationId MUST be a unique identifier within the provider.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "CapacityReservationId-C-009-O": { - "Function": "Validation", - "Reference": "CapacityReservationId", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CapacityReservationId SHOULD be a fully-qualified identifier.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "Tags-C-000-C": { - "Function": "Composite", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "TAGGING_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The Tags column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-002-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-011-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-014-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-064-C", - "Tags-C-001-M", - "Tags-C-002-O", - "Tags-C-003-C", - "Tags-C-011-M", - "Tags-C-014-M" - ] - } - }, - "Tags-C-001-M": { - "Function": "Format", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "Tags MUST conform to KeyValueFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatKeyValue", - "ColumnName": "Tags" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "Tags-C-002-O": { - "Function": "Nullability", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "Tags MAY be null.", - "Keyword": "MAY", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "Tags", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "Tags-C-003-C": { - "Function": "Composite", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When Tags is not null, Tags adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-004-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-005-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-006-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-007-O" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-008-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-009-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-010-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "Tags", - "Value": null - }, - "Dependencies": [ - "Tags-C-004-M", - "Tags-C-005-M", - "Tags-C-006-M", - "Tags-C-007-O", - "Tags-C-008-M", - "Tags-C-009-M", - "Tags-C-010-C" - ] - } - }, - "Tags-C-004-M": { - "Function": "Validation", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Tags MUST include all user-defined and provider-defined tags.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "Tags-C-005-M": { - "Function": "Validation", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Tags MUST only include finalized tags.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "Tags-C-006-M": { - "Function": "Validation", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Tags SHOULD include tag keys with corresponding non-null values for a given resource.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "Tags-C-007-O": { - "Function": "Nullability", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Tags MAY include tag keys with a null value for a given resource depending on the provider's tag finalization process.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "Tags-C-008-M": { - "Function": "Validation", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Tag keys that do not support corresponding values, MUST have a corresponding true (boolean) value set.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "Tags-C-009-M": { - "Function": "Validation", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Provider SHOULD publish tag finalization methods and semantics within their respective documentation.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "Tags-C-010-C": { - "Function": "Validation", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Provider MUST NOT alter tag values unless applying true (boolean) to valueless tags.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "Tags-C-011-M": { - "Function": "Composite", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "Provider-defined tags adhere to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-012-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-013-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "Tags-C-012-M", - "Tags-C-013-M" - ] - } - }, - "Tags-C-012-M": { - "Function": "Validation", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Provider-defined tag keys MUST be prefixed with a predetermined, provider-specified tag key prefix that is unique to each corresponding provider-specified tag scheme.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "Tags-C-013-M": { - "Function": "Validation", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Provider SHOULD publish all provider-specified tag key prefixes within their respective documentation.", - "Keyword": "SHOULD", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "Tags-C-014-M": { - "Function": "Composite", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "User-defined tags adhere to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-015-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-016-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "Tags-C-017-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "Tags-C-015-C", - "Tags-C-016-C", - "Tags-C-017-M" - ] - } - }, - "Tags-C-015-C": { - "Function": "Validation", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Provider MUST prefix all but one user-defined tag scheme with a predetermined, provider-specified tag key prefix that is unique to each corresponding user-defined tag scheme when the provider has more than one user-defined tag scheme.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "Tags-C-016-C": { - "Function": "Validation", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Provider MUST NOT prefix tag keys when the provider has only one user-defined tag scheme.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "Tags-C-017-M": { - "Function": "Validation", - "Reference": "Tags", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Provider MUST NOT allow reserved tag key prefixes to be used as prefixes for any user-defined tag keys within a prefixless user-defined tag scheme.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SubAccountName-C-000-C": { - "Function": "Composite", - "Reference": "SubAccountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "SUB_ACCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The SubAccountName column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountName-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountName-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountName-C-003-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-029-C", - "SubAccountName-C-001-M", - "SubAccountName-C-002-M", - "SubAccountName-C-003-C" - ] - } - }, - "SubAccountName-C-001-M": { - "Function": "Type", - "Reference": "SubAccountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SubAccountName MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "SubAccountName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "SubAccountName-C-002-M": { - "Function": "Format", - "Reference": "SubAccountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SubAccountName MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "SubAccountName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "SubAccountName-C-003-C": { - "Function": "Composite", - "Reference": "SubAccountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SubAccountName nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountName-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountName-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "SubAccountName-C-004-C", - "SubAccountName-C-005-C" - ] - } - }, - "SubAccountName-C-004-C": { - "Function": "Nullability", - "Reference": "SubAccountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SubAccountName MUST be null when SubAccountId is null.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "SubAccountName", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "SubAccountId", - "Value": null - }, - "Dependencies": [ - "SubAccountId-C-000-C" - ] - } - }, - "SubAccountName-C-005-C": { - "Function": "Nullability", - "Reference": "SubAccountName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SubAccountName MUST NOT be null when SubAccountId is not null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "SubAccountName", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "SubAccountId", - "Value": null - }, - "Dependencies": [ - "SubAccountId-C-000-C" - ] - } - }, - "ResourceName-C-000-C": { - "Function": "Composite", - "Reference": "ResourceName", - "EntityType": "Column", - "Notes": "Main composite rule for ResourceName column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "BILLING_BASED_ON_PROVISIONED_RESOURCES_SUPPORTED", - "RESOURCE_TYPE_ASSIGNMENT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ResourceName column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceName-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceName-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceName-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceName-C-006-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-044-C", - "ResourceName-C-001-M", - "ResourceName-C-002-M", - "ResourceName-C-003-C", - "ResourceName-C-006-C" - ] - } - }, - "ResourceName-C-001-M": { - "Function": "Type", - "Reference": "ResourceName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ResourceName MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "ResourceName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ResourceName-C-002-M": { - "Function": "Format", - "Reference": "ResourceName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ResourceName MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "ResourceName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ResourceName-C-003-C": { - "Function": "Composite", - "Reference": "ResourceName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ResourceName nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceName-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ResourceName-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "ResourceName-C-004-C", - "ResourceName-C-005-C" - ] - } - }, - "ResourceName-C-004-C": { - "Function": "Nullability", - "Reference": "ResourceName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ResourceName MUST be null when ResourceId is null or when the resource does not have an assigned display name.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ResourceId", - "Value": null - }, - "Dependencies": [ - "ResourceId-C-000-C" - ] - } - }, - "ResourceName-C-005-C": { - "Function": "Nullability", - "Reference": "ResourceName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ResourceName MUST NOT be null when ResourceId is not null and the resource has an assigned display name.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ResourceId", - "Value": null - }, - "Dependencies": [ - "ResourceId-C-000-C" - ] - } - }, - "ResourceName-C-006-C": { - "Function": "Validation", - "Reference": "ResourceName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ResourceName MUST NOT duplicate ResourceId when the resource is not provisioned interactively or only has a system-generated ResourceId.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [ - "ResourceId-C-000-C" - ] - } - }, - "ContractedUnitPrice-C-000-C": { - "Function": "Composite", - "Reference": "ContractedUnitPrice", - "EntityType": "Column", - "Notes": "Root composite gated by provider supports negotiated pricing concepts", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "NEGOTIATED_PRICING_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ContractedUnitPrice column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedUnitPrice-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedUnitPrice-C-004-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedUnitPrice-C-008-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedUnitPrice-C-012-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-034-C", - "ContractedUnitPrice-C-001-M", - "ContractedUnitPrice-C-004-M", - "ContractedUnitPrice-C-008-C", - "ContractedUnitPrice-C-012-C" - ] - } - }, - "ContractedUnitPrice-C-001-M": { - "Function": "Composite", - "Reference": "ContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ContractedUnitPrice adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedUnitPrice-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedUnitPrice-C-003-M" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "ContractedUnitPrice-C-002-M", - "ContractedUnitPrice-C-003-M" - ] - } - }, - "ContractedUnitPrice-C-002-M": { - "Function": "Type", - "Reference": "ContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ContractedUnitPrice MUST be of type Decimal.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeDecimal", - "ColumnName": "ContractedUnitPrice" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ContractedUnitPrice-C-003-M": { - "Function": "Format", - "Reference": "ContractedUnitPrice", - "EntityType": "Column", - "Notes": "Cross-attribute reference: NumericFormat", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ContractedUnitPrice MUST conform to NumericFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatNumeric", - "ColumnName": "ContractedUnitPrice" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ContractedUnitPrice-C-004-M": { - "Function": "Composite", - "Reference": "ContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ContractedUnitPrice nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedUnitPrice-C-005-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedUnitPrice-C-006-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedUnitPrice-C-007-O" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "ContractedUnitPrice-C-005-C", - "ContractedUnitPrice-C-006-C", - "ContractedUnitPrice-C-007-O" - ] - } - }, - "ContractedUnitPrice-C-005-C": { - "Function": "Nullability", - "Reference": "ContractedUnitPrice", - "EntityType": "Column", - "Notes": "Cross-column reference: ChargeCategory", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ContractedUnitPrice MUST be null when ChargeCategory is \"Tax\".", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "ContractedUnitPrice", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Tax" - }, - "Dependencies": [ - "ChargeCategory-C-000-M" - ] - } - }, - "ContractedUnitPrice-C-006-C": { - "Function": "Nullability", - "Reference": "ContractedUnitPrice", - "EntityType": "Column", - "Notes": "Cross-column references: ChargeCategory, ChargeClass", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ContractedUnitPrice MUST NOT be null when ChargeCategory is \"Usage\" or \"Purchase\" and ChargeClass is not \"Correction\".", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ContractedUnitPrice", - "Value": null - }, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Purchase" - } - ] - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - } - ] - }, - "Dependencies": [ - "ChargeCategory-C-000-M", - "ChargeClass-C-000-M" - ] - } - }, - "ContractedUnitPrice-C-007-O": { - "Function": "Nullability", - "Reference": "ContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ContractedUnitPrice MAY be null in all other cases.", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ContractedUnitPrice-C-008-C": { - "Function": "Composite", - "Reference": "ContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When ContractedUnitPrice is not null, ContractedUnitPrice adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedUnitPrice-C-009-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedUnitPrice-C-010-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedUnitPrice-C-011-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ContractedUnitPrice", - "Value": null - }, - "Dependencies": [ - "ContractedUnitPrice-C-009-C", - "ContractedUnitPrice-C-010-C", - "ContractedUnitPrice-C-011-C" - ] - } - }, - "ContractedUnitPrice-C-009-C": { - "Function": "Validation", - "Reference": "ContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ContractedUnitPrice MUST be a non-negative decimal value.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckGreaterOrEqualThanValue", - "ColumnName": "ContractedUnitPrice", - "Value": 0 - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ContractedUnitPrice", - "Value": null - }, - "Dependencies": [] - } - }, - "ContractedUnitPrice-C-010-C": { - "Function": "Validation", - "Reference": "ContractedUnitPrice", - "EntityType": "Column", - "Notes": "Cross-column reference: BillingCurrency", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ContractedUnitPrice MUST be denominated in the BillingCurrency.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ContractedUnitPrice", - "Value": null - }, - "Dependencies": [ - "BillingCurrency-C-000-M" - ] - } - }, - "ContractedUnitPrice-C-011-C": { - "Function": "Validation", - "Reference": "ContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The product of ContractedUnitPrice and PricingQuantity MUST match the ContractedCost when PricingQuantity is not null and ChargeClass is not \"Correction\".", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnByColumnEqualsColumnValue", - "ColumnAName": "ContractedUnitPrice", - "ColumnBName": "PricingQuantity", - "ResultColumnName": "ContractedCost" - }, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ContractedUnitPrice", - "Value": null - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingQuantity", - "Value": null - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - } - ] - }, - "Dependencies": [ - "PricingQuantity-C-000-M", - "ContractedCost-C-000-M", - "ChargeClass-C-000-M" - ] - } - }, - "ContractedUnitPrice-C-012-C": { - "Function": "Validation", - "Reference": "ContractedUnitPrice", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Discrepancies in ContractedUnitPrice, ContractedCost, or PricingQuantity MAY exist when ChargeClass is \"Correction\".", - "Keyword": "MAY", - "Requirement": {}, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - }, - "Dependencies": [ - "ChargeClass-C-005-C" - ] - } - }, - "CapacityReservationStatus-C-000-C": { - "Function": "Composite", - "Reference": "CapacityReservationStatus", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [ - "CAPACITY_RESERVATION_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The CapacityReservationStatus column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationStatus-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationStatus-C-002-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationStatus-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-020-C", - "CapacityReservationStatus-C-001-M", - "CapacityReservationStatus-C-002-C", - "CapacityReservationStatus-C-005-C" - ] - } - }, - "CapacityReservationStatus-C-001-M": { - "Function": "Type", - "Reference": "CapacityReservationStatus", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CapacityReservationStatus MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "CapacityReservationStatus" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CapacityReservationStatus-C-002-C": { - "Function": "Composite", - "Reference": "CapacityReservationStatus", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CapacityReservationStatus nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationStatus-C-003-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationStatus-C-004-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CapacityReservationStatus-C-003-C", - "CapacityReservationStatus-C-004-C" - ] - } - }, - "CapacityReservationStatus-C-003-C": { - "Function": "Nullability", - "Reference": "CapacityReservationStatus", - "EntityType": "Column", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CapacityReservationStatus MUST be null when CapacityReservationId is null.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "CapacityReservationStatus", - "Value": null - }, - "Condition": { - "AND": { - "CheckFunction": "CheckValue", - "ColumnName": "CapacityReservationId", - "Value": null - } - }, - "Dependencies": [ - "CapacityReservationId-C-003-C" - ] - }, - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "" - }, - "CapacityReservationStatus-C-004-C": { - "Function": "Nullability", - "Reference": "CapacityReservationStatus", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CapacityReservationStatus MUST NOT be null when CapacityReservationId is not null and ChargeCategory is \"Usage\".", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "CapacityReservationStatus", - "Value": null - }, - "Condition": { - "AND": [ - { - "CheckFunction": "CheckNotValue", - "ColumnName": "CapacityReservationId", - "Value": null - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeCategory", - "Value": "Usage" - } - ] - }, - "Dependencies": [ - "CapacityReservationId-C-003-C", - "ChargeCategory-C-000-M" - ] - } - }, - "CapacityReservationStatus-C-005-C": { - "Function": "Composite", - "Reference": "CapacityReservationStatus", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When CapacityReservationStatus is not null, CapacityReservationStatus adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationStatus-C-006-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationStatus-C-007-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "CapacityReservationStatus-C-008-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "CapacityReservationStatus", - "Value": null - }, - "Dependencies": [ - "CapacityReservationStatus-C-006-M", - "CapacityReservationStatus-C-007-C", - "CapacityReservationStatus-C-008-C" - ] - } - }, - "CapacityReservationStatus-C-006-M": { - "Function": "Validation", - "Reference": "CapacityReservationStatus", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "CapacityReservationStatus MUST be one of the allowed values.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "OR", - "Items": [ - { - "CheckFunction": "CheckValue", - "ColumnName": "CapacityReservationStatus", - "Value": "Used" - }, - { - "CheckFunction": "CheckValue", - "ColumnName": "CapacityReservationStatus", - "Value": "Unused" - } - ] - }, - "Condition": {}, - "Dependencies": [] - } - }, - "CapacityReservationStatus-C-007-C": { - "Function": "Validation", - "Reference": "CapacityReservationStatus", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CapacityReservationStatus MUST be \"Unused\" when the charge represents the unused portion of a capacity reservation.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "CapacityReservationStatus-C-008-C": { - "Function": "Validation", - "Reference": "CapacityReservationStatus", - "EntityType": "Column", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "Notes": "", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "CapacityReservationStatus MUST be \"Used\" when the charge represents the used portion of a capacity reservation.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ContractedCost-C-000-M": { - "Function": "Composite", - "Reference": "ContractedCost", - "EntityType": "Column", - "Notes": "Root composite rule", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ContractedCost column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedCost-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedCost-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedCost-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedCost-C-004-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedCost-C-005-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedCost-C-006-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedCost-C-009-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedCost-C-010-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-030-M", - "ContractedCost-C-001-M", - "ContractedCost-C-002-M", - "ContractedCost-C-003-M", - "ContractedCost-C-004-M", - "ContractedCost-C-005-M", - "ContractedCost-C-006-C", - "ContractedCost-C-009-C", - "ContractedCost-C-010-C" - ] - } - }, - "ContractedCost-C-001-M": { - "Function": "Type", - "Reference": "ContractedCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ContractedCost MUST be of type Decimal.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeDecimal", - "ColumnName": "ContractedCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ContractedCost-C-002-M": { - "Function": "Format", - "Reference": "ContractedCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ContractedCost MUST conform to NumericFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatNumeric", - "ColumnName": "ContractedCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ContractedCost-C-003-M": { - "Function": "Nullability", - "Reference": "ContractedCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ContractedCost MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ContractedCost", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ContractedCost-C-004-M": { - "Function": "Validation", - "Reference": "ContractedCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ContractedCost MUST be a valid decimal value.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ContractedCost", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ContractedCost-C-005-M": { - "Function": "Validation", - "Reference": "ContractedCost", - "EntityType": "Column", - "Notes": "Cross-column reference: BillingCurrency", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ContractedCost MUST be denominated in the BillingCurrency.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [ - "BillingCurrency-C-000-M" - ] - } - }, - "ContractedCost-C-006-C": { - "Function": "Composite", - "Reference": "ContractedCost", - "EntityType": "Column", - "Notes": "Lead-in composite", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When ContractedUnitPrice is null, ContractedCost adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedCost-C-007-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ContractedCost-C-008-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ContractedUnitPrice", - "Value": null - }, - "Dependencies": [ - "ContractedUnitPrice-C-004-M", - "ContractedCost-C-007-C", - "ContractedCost-C-008-C" - ] - } - }, - "ContractedCost-C-007-C": { - "Function": "Validation", - "Reference": "ContractedCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ContractedCost of a charge calculated based on other charges (e.g., when the ChargeCategory is \"Tax\") MUST be calculated based on the ContractedCost of those related charges.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ContractedCost-C-008-C": { - "Function": "Validation", - "Reference": "ContractedCost", - "EntityType": "Column", - "Notes": "Cross-column reference: BilledCost", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ContractedCost of a charge unrelated to other charges (e.g., when the ChargeCategory is \"Credit\") MUST match the BilledCost.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ContractedCost-C-009-C": { - "Function": "Validation", - "Reference": "ContractedCost", - "EntityType": "Column", - "Notes": "Cross-column references: ContractedUnitPrice, PricingQuantity, ContractedCost", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "The product of ContractedUnitPrice and PricingQuantity MUST match the ContractedCost when ContractedUnitPrice is not null, PricingQuantity is not null, and ChargeClass is not \"Correction\".", - "Keyword": "MUST", - "Requirement": {}, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ContractedUnitPrice", - "Value": null - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingQuantity", - "Value": null - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - } - ] - }, - "Dependencies": [ - "ContractedUnitPrice-C-004-M", - "PricingQuantity-C-000-M", - "ChargeClass-C-000-M" - ] - } - }, - "ContractedCost-C-010-C": { - "Function": "Validation", - "Reference": "ContractedCost", - "EntityType": "Column", - "Notes": "Cross-column references: ContractedCost, ContractedUnitPrice, PricingQuantity", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Discrepancies in ContractedCost, ContractedUnitPrice, or PricingQuantity MAY exist when ChargeClass is \"Correction\".", - "Keyword": "MAY", - "Requirement": {}, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - }, - "Dependencies": [ - "ChargeClass-C-005-C" - ] - } - }, - "RegionName-C-000-C": { - "Function": "Composite", - "Reference": "RegionName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "REGION_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The RegionName column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "RegionName-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "RegionName-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "RegionName-C-003-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-062-C", - "RegionName-C-001-M", - "RegionName-C-002-M", - "RegionName-C-003-C" - ] - } - }, - "RegionName-C-001-M": { - "Function": "Type", - "Reference": "RegionName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "RegionName MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "RegionName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "RegionName-C-002-M": { - "Function": "Format", - "Reference": "RegionName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "RegionName MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "RegionName" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "RegionName-C-003-C": { - "Function": "Composite", - "Reference": "RegionName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "RegionName nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "RegionName-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "RegionName-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "RegionName-C-004-C", - "RegionName-C-005-C" - ] - } - }, - "RegionName-C-004-C": { - "Function": "Nullability", - "Reference": "RegionName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "RegionName MUST be null when RegionId is null.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckValue", - "ColumnName": "RegionName", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "RegionId", - "Value": null - }, - "Dependencies": [ - "RegionId-C-000-C" - ] - } - }, - "RegionName-C-005-C": { - "Function": "Nullability", - "Reference": "RegionName", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "RegionName MUST NOT be null when RegionId is not null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "RegionName", - "Value": null - }, - "Condition": { - "CheckFunction": "CheckNotValue", - "ColumnName": "RegionId", - "Value": null - }, - "Dependencies": [ - "RegionId-C-000-C" - ] - } - }, - "ListCost-C-000-M": { - "Function": "Composite", - "Reference": "ListCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The ListCost column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListCost-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListCost-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListCost-C-003-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListCost-C-004-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListCost-C-005-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListCost-C-006-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListCost-C-009-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListCost-C-010-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-032-M", - "ListCost-C-001-M", - "ListCost-C-002-M", - "ListCost-C-003-M", - "ListCost-C-004-M", - "ListCost-C-005-M", - "ListCost-C-006-C", - "ListCost-C-007-C", - "ListCost-C-008-C", - "ListCost-C-009-C", - "ListCost-C-010-C" - ] - } - }, - "ListCost-C-001-M": { - "Function": "Type", - "Reference": "ListCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ListCost MUST be of type Decimal.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeDecimal", - "ColumnName": "ListCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ListCost-C-002-M": { - "Function": "Format", - "Reference": "ListCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ListCost MUST conform to NumericFormat requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatNumeric", - "ColumnName": "ListCost" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ListCost-C-003-M": { - "Function": "Nullability", - "Reference": "ListCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ListCost MUST NOT be null.", - "Keyword": "MUST NOT", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ListCost", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ListCost-C-004-M": { - "Function": "Validation", - "Reference": "ListCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "ListCost MUST be a valid decimal value.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "CheckNotValue", - "ColumnName": "ListCost", - "Value": null - }, - "Condition": {}, - "Dependencies": [] - } - }, - "ListCost-C-005-M": { - "Function": "Validation", - "Reference": "ListCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ListCost MUST be denominated in the BillingCurrency.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [ - "BillingCurrency-C-000-M" - ] - } - }, - "ListCost-C-006-C": { - "Function": "Composite", - "Reference": "ListCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "When ListUnitPrice is null, ListCost adheres to the following additional requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListCost-C-007-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "ListCost-C-008-C" - } - ] - }, - "Condition": { - "CheckFunction": "CheckValue", - "ColumnName": "ListUnitPrice", - "Value": null - }, - "Dependencies": [ - "ListUnitPrice-C-000-C", - "ListCost-C-007-C", - "ListCost-C-008-C" - ] - } - }, - "ListCost-C-007-C": { - "Function": "Validation", - "Reference": "ListCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ListCost of a charge calculated based on other charges (e.g., when the ChargeCategory is \"Tax\") MUST be calculated based on the ListCost of those related charges.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ListCost-C-008-C": { - "Function": "Validation", - "Reference": "ListCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "ListCost of a charge unrelated to other charges (e.g., when the ChargeCategory is \"Credit\") MUST match the BilledCost.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "ListCost-C-009-C": { - "Function": "Validation", - "Reference": "ListCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The product of ListUnitPrice and PricingQuantity MUST match the ListCost when ListUnitPrice is not null, PricingQuantity is not null, and ChargeClass is not \"Correction\".", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "ColumnByColumnEqualsColumnValue", - "ColumnAName": "ListUnitPrice", - "ColumnBName": "PricingQuantity", - "ResultColumnName": "ListCost" - }, - "Condition": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ListUnitPrice", - "Value": null - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "PricingQuantity", - "Value": null - }, - { - "CheckFunction": "CheckNotValue", - "ColumnName": "ChargeClass", - "Value": "Correction" - } - ] - }, - "Dependencies": [ - "ListUnitPrice-C-000-C", - "PricingQuantity-C-000-M", - "ChargeClass-C-000-M" - ] - } - }, - "ListCost-C-010-C": { - "Function": "Validation", - "Reference": "ListCost", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "Discrepancies in ListCost, ListUnitPrice, or PricingQuantity MAY exist when ChargeClass is \"Correction\".", - "Keyword": "MAY", - "Requirement": {}, - "Condition": {}, - "Dependencies": [ - "ChargeClass-C-000-M" - ] - } - }, - "SubAccountId-C-000-C": { - "Function": "Composite", - "Reference": "SubAccountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [ - "SUB_ACCOUNT_SUPPORTED" - ], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "The SubAccountId column adheres to the following requirements:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountId-C-001-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountId-C-002-M" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountId-C-003-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "CostAndUsage-D-019-C", - "SubAccountId-C-001-M", - "SubAccountId-C-002-M", - "SubAccountId-C-003-C" - ] - } - }, - "SubAccountId-C-001-M": { - "Function": "Type", - "Reference": "SubAccountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SubAccountId MUST be of type String.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "TypeString", - "ColumnName": "SubAccountId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "SubAccountId-C-002-M": { - "Function": "Format", - "Reference": "SubAccountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SubAccountId MUST conform to StringHandling requirements.", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "FormatString", - "ColumnName": "SubAccountId" - }, - "Condition": {}, - "Dependencies": [] - } - }, - "SubAccountId-C-003-C": { - "Function": "Composite", - "Reference": "SubAccountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Static", - "ValidationCriteria": { - "MustSatisfy": "SubAccountId nullability is defined as follows:", - "Keyword": "MUST", - "Requirement": { - "CheckFunction": "AND", - "Items": [ - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountId-C-004-C" - }, - { - "CheckFunction": "CheckModelRule", - "ModelRuleId": "SubAccountId-C-005-C" - } - ] - }, - "Condition": {}, - "Dependencies": [ - "SubAccountId-C-004-C", - "SubAccountId-C-005-C" - ] - } - }, - "SubAccountId-C-004-C": { - "Function": "Nullability", - "Reference": "SubAccountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SubAccountId MUST be null when a charge is not related to a sub account.", - "Keyword": "MUST", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - }, - "SubAccountId-C-005-C": { - "Function": "Nullability", - "Reference": "SubAccountId", - "EntityType": "Column", - "Notes": "", - "ModelVersionIntroduced": "1.2", - "Status": "Active", - "ApplicabilityCriteria": [], - "Type": "Dynamic", - "ValidationCriteria": { - "MustSatisfy": "SubAccountId MUST NOT be null when a charge is related to a sub account.", - "Keyword": "MUST NOT", - "Requirement": {}, - "Condition": {}, - "Dependencies": [] - } - } - } -} \ No newline at end of file diff --git a/focus_validator/rules/spec_rules.py b/focus_validator/rules/spec_rules.py index a193daf..861c7be 100644 --- a/focus_validator/rules/spec_rules.py +++ b/focus_validator/rules/spec_rules.py @@ -208,6 +208,11 @@ def _parse_version_tuple(self, version: str) -> Tuple[int, ...]: try: return tuple(int(x) for x in version.split(".")) except (ValueError, AttributeError): + self.log.warning( + "Malformed version string '%s' - cannot parse as semantic version. " + "Will sort to bottom. Check for corrupted model filenames.", + version, + ) return (0,) # Fallback for invalid versions def _find_best_version_match( @@ -404,16 +409,18 @@ def load(self) -> None: self.load_rules() def load_rules(self) -> ValidationPlan: - val_plan, column_types = JsonLoader.load_json_rules_with_dependencies_and_types( - json_rule_file=self.json_rule_file, - focus_dataset=self.focus_dataset, - filter_rules=self.filter_rules, - applicability_criteria_list=self.applicability_criteria_list, + # Load rules and parse JSON once + val_plan, column_types, model_data = ( + JsonLoader.load_json_rules_with_dependencies_and_types( + json_rule_file=self.json_rule_file, + focus_dataset=self.focus_dataset, + filter_rules=self.filter_rules, + applicability_criteria_list=self.applicability_criteria_list, + ) ) - # Load FOCUS version and model version from the JSON file Details section + # Extract FOCUS version and model version from Details (already parsed above) try: - model_data = JsonLoader.load_json_rules(self.json_rule_file) details = model_data.get("Details", {}) # Override rules_version with FOCUSVersion from model file focus_version = details.get("FOCUSVersion", None) diff --git a/tests/test_spec_rules_unsupported_version.py b/tests/test_spec_rules_unsupported_version.py index be2a8a8..0ad2a5b 100644 --- a/tests/test_spec_rules_unsupported_version.py +++ b/tests/test_spec_rules_unsupported_version.py @@ -1,4 +1,5 @@ from unittest import TestCase +from unittest.mock import MagicMock from focus_validator.exceptions import UnsupportedVersion from focus_validator.rules.spec_rules import SpecRules @@ -21,3 +22,207 @@ def test_load_unsupported_version(self): column_namespace=None, ) self.assertIn("FOCUS version 0.1 not supported.", str(cm.exception)) + + +class TestSpecRulesVersionMatching(TestCase): + """Test version-matching helper methods.""" + + def setUp(self): + """Create a SpecRules instance for testing helper methods.""" + self.spec = SpecRules( + rule_set_path="focus_validator/rules", + rules_file_prefix="model-", + rules_version="1.3", + rules_file_suffix=".json", + focus_dataset="CostAndUsage", + filter_rules=None, + rules_force_remote_download=False, + rules_block_remote_download=True, + allow_draft_releases=False, + allow_prerelease_releases=False, + column_namespace=None, + ) + + def test_parse_version_from_filename_valid(self): + """Test extracting version from valid filenames.""" + test_cases = [ + ("model-1.2.json", "1.2"), + ("model-1.2.0.1.json", "1.2.0.1"), + ("model-1.3.json", "1.3"), + ("model-2.0.0.json", "2.0.0"), + ] + for filename, expected in test_cases: + with self.subTest(filename=filename): + result = self.spec._parse_version_from_filename(filename) + self.assertEqual(result, expected) + + def test_parse_version_from_filename_invalid(self): + """Test that invalid filenames return None.""" + test_cases = [ + "requirements-1.3.json", # Wrong prefix + "model-1.3.txt", # Wrong suffix + "model-.json", # Empty version + "random.json", # No match + ] + for filename in test_cases: + with self.subTest(filename=filename): + result = self.spec._parse_version_from_filename(filename) + self.assertIsNone(result) + + def test_parse_version_tuple_valid(self): + """Test semantic version tuple parsing for valid versions.""" + test_cases = [ + ("1", (1,)), + ("1.2", (1, 2)), + ("1.2.0", (1, 2, 0)), + ("1.2.0.1", (1, 2, 0, 1)), + ("2.0.0.0", (2, 0, 0, 0)), + ] + for version, expected in test_cases: + with self.subTest(version=version): + result = self.spec._parse_version_tuple(version) + self.assertEqual(result, expected) + + def test_parse_version_tuple_comparison(self): + """Test that version tuples compare correctly.""" + versions = ["1.2", "1.2.0", "1.2.0.1", "1.3", "2.0"] + tuples = [self.spec._parse_version_tuple(v) for v in versions] + + # Verify they're in ascending order + for i in range(len(tuples) - 1): + with self.subTest(comparison=f"{versions[i]} < {versions[i + 1]}"): + self.assertLess(tuples[i], tuples[i + 1]) + + def test_parse_version_tuple_malformed_logs_warning(self): + """Test that malformed versions log warnings and return (0,).""" + # Mock the logger to capture warnings + self.spec.log = MagicMock() + + malformed_versions = [ + "1.2.abc", # Non-numeric component + "1.2.3.x", # Non-numeric component + "invalid", # Completely invalid + ] + + for version in malformed_versions: + with self.subTest(version=version): + result = self.spec._parse_version_tuple(version) + self.assertEqual(result, (0,)) + # Verify warning was logged + self.spec.log.warning.assert_called() + # Check warning message mentions the malformed version + call_args = str(self.spec.log.warning.call_args) + self.assertIn(version, call_args) + + def test_find_best_version_match_exact(self): + """Test finding exact version matches.""" + available = { + "1.2": {}, + "1.3": {}, + "2.0": {}, + } + + test_cases = [ + ("1.2", "1.2"), + ("1.3", "1.3"), + ("2.0", "2.0"), + ] + + for requested, expected in test_cases: + with self.subTest(requested=requested): + result = self.spec._find_best_version_match(requested, available) + self.assertEqual(result, expected) + + def test_find_best_version_match_prefix(self): + """Test finding highest version matching a prefix.""" + available = { + "1.2": {}, + "1.2.0": {}, + "1.2.0.1": {}, + "1.2.0.2": {}, + "1.3": {}, + } + + test_cases = [ + ("1.2", "1.2.0.2", "Should find highest 1.2.x version"), + ("1.2.0", "1.2.0.2", "Should find highest 1.2.0.x version"), + ("1.3", "1.3", "Should find exact match"), + ] + + for requested, expected, description in test_cases: + with self.subTest(description=description): + result = self.spec._find_best_version_match(requested, available) + self.assertEqual(result, expected) + + def test_find_best_version_match_ignores_higher_minor(self): + """Test that 1.2.0 request ignores 1.2.1 and higher.""" + available = { + "1.2.0": {}, + "1.2.0.1": {}, + "1.2.0.2": {}, + "1.2.1": {}, # Should be ignored + "1.2.1.1": {}, # Should be ignored + } + + result = self.spec._find_best_version_match("1.2.0", available) + self.assertEqual(result, "1.2.0.2") + + def test_find_best_version_match_short_prefix(self): + """Test matching with very short prefixes like '1'.""" + available = { + "1.0": {}, + "1.2": {}, + "1.2.0.1": {}, + "1.3": {}, + "2.0": {}, # Should be ignored + } + + result = self.spec._find_best_version_match("1", available) + self.assertEqual(result, "1.3") # Highest 1.x version + + def test_find_best_version_match_no_match(self): + """Test that non-existent versions return None.""" + available = { + "1.2": {}, + "1.3": {}, + } + + test_cases = [ + "2.0", # Major version doesn't exist + "1.4", # Minor version doesn't exist + "1.2.1", # Patch version doesn't exist + ] + + for requested in test_cases: + with self.subTest(requested=requested): + result = self.spec._find_best_version_match(requested, available) + self.assertIsNone(result) + + def test_filter_to_highest_versions_mixed(self): + """Test filtering to highest versions with mixed subversions.""" + versions = ["1.2", "1.2.0", "1.2.0.1", "1.3", "1.3.0.1"] + result = self.spec._filter_to_highest_versions(versions) + self.assertEqual(result, ["1.2.0.1", "1.3.0.1"]) + + def test_filter_to_highest_versions_no_subversions(self): + """Test filtering when no subversions exist.""" + versions = ["1.2", "1.3", "2.0"] + result = self.spec._filter_to_highest_versions(versions) + self.assertEqual(result, ["1.2", "1.3", "2.0"]) + + def test_filter_to_highest_versions_multiple_patches(self): + """Test filtering with multiple patch levels.""" + versions = ["1.2", "1.2.0", "1.2.0.1", "1.2.0.2", "1.2.1", "1.2.1.1"] + result = self.spec._filter_to_highest_versions(versions) + # Should keep highest for 1.2.0.x and highest for 1.2.1.x + # But since we group by major.minor only, should keep overall highest 1.2.x + # which is 1.2.1.1 + self.assertEqual(result, ["1.2.1.1"]) + + def test_filter_to_highest_versions_preserves_order(self): + """Test that filtered versions are sorted semantically.""" + versions = ["2.0", "1.3.0.1", "1.2.0.1", "1.2"] + result = self.spec._filter_to_highest_versions(versions) + # Should return semantically sorted + expected = sorted([v for v in result], key=self.spec._parse_version_tuple) + self.assertEqual(result, expected) From 4e4b2bd2ca04a550cd2364e3da66086fc33afd9b Mon Sep 17 00:00:00 2001 From: Mike Fuller Date: Thu, 26 Feb 2026 13:08:00 +1100 Subject: [PATCH 4/6] Fix so newest match wins Signed-off-by: Mike Fuller --- focus_validator/rules/spec_rules.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/focus_validator/rules/spec_rules.py b/focus_validator/rules/spec_rules.py index 861c7be..3822105 100644 --- a/focus_validator/rules/spec_rules.py +++ b/focus_validator/rules/spec_rules.py @@ -307,7 +307,8 @@ def find_release_assets( } } - When multiple releases contain the same model version, the latest release wins. + When multiple releases contain the same model version, the first (newest) + release wins, since GitHub API returns releases in reverse chronological order. """ session = requests.Session() headers = { @@ -349,9 +350,9 @@ def find_release_assets( filename = asset.get("name", "") model_version = self._parse_version_from_filename(filename) - if model_version: - # Store by model version (later releases will override earlier ones) - # This ensures we get the latest release containing each model version + if model_version and model_version not in results: + # First match wins = newest release, since GitHub API + # returns releases newest-first results[model_version] = { "release_tag": release_tag, "filename": filename, From c53c1cf0d0493c46ded963f33b39fcbfff01e6ac Mon Sep 17 00:00:00 2001 From: Mike Fuller Date: Thu, 26 Feb 2026 13:10:25 +1100 Subject: [PATCH 5/6] Updated model file is needed for github unittests to run Signed-off-by: Mike Fuller --- focus_validator/rules/model-1.2.0.1.json | 18578 +++++++++++++++++++++ 1 file changed, 18578 insertions(+) create mode 100644 focus_validator/rules/model-1.2.0.1.json diff --git a/focus_validator/rules/model-1.2.0.1.json b/focus_validator/rules/model-1.2.0.1.json new file mode 100644 index 0000000..d086427 --- /dev/null +++ b/focus_validator/rules/model-1.2.0.1.json @@ -0,0 +1,18578 @@ +{ + "Details": { + "ModelVersion": "1.2.0.1", + "FOCUSVersion": "1.2" + }, + "ApplicabilityCriteria": { + "ACCOUNT_NAMING_SUPPORTED": { + "Description": "Provider supports assigning a display name for the billing account" + }, + "AVAILABILITY_ZONE_SUPPORTED": { + "Description": "Provider supports deploying resources or services within an availability zone" + }, + "CAPACITY_RESERVATION_SUPPORTED": { + "Description": "Provider supports capacity reservations" + }, + "COMMITMENT_DISCOUNT_SUPPORTED": { + "Description": "Provider supports commitment discounts" + }, + "MULTIPLE_PRICING_CATEGORIES_SUPPORTED": { + "Description": "Provider supports more than one pricing category across all SKUs" + }, + "MULTIPLE_SUB_ACCOUNT_TYPES_SUPPORTED": { + "Description": "Provider supports more than one possible SubAccountType value" + }, + "MULTIPLE_BILLING_ACCOUNT_TYPES_SUPPORTED": { + "Description": "Provider supports more than one possible BillingAccountType value" + }, + "NEGOTIATED_PRICING_SUPPORTED": { + "Description": "Provider supports negotiated pricing concepts" + }, + "PUBLIC_PRICE_LIST_SUPPORTED": { + "Description": "Provider publishes public price lists" + }, + "USAGE_MEASUREMENT_SUPPORTED": { + "Description": "Provider supports the measurement of usage" + }, + "UNIT_PRICING_SUPPORTED": { + "Description": "Provider supports unit pricing concepts" + }, + "SUB_ACCOUNT_SUPPORTED": { + "Description": "Provider supports a sub account construct" + }, + "BILLING_BASED_ON_PROVISIONED_RESOURCES_SUPPORTED": { + "Description": "Provider supports billing based on provisioned resources" + }, + "RESOURCE_TYPE_ASSIGNMENT_SUPPORTED": { + "Description": "Provider supports assigning types to resources" + }, + "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED": { + "Description": "Provider supports pricing and billing in different currencies" + }, + "VIRTUAL_CURRENCY_SUPPORTED": { + "Description": "Provider supports prices in virtual currency" + }, + "REGION_SUPPORTED": { + "Description": "Provider supports deploying resources or services within a region" + }, + "TAGGING_SUPPORTED": { + "Description": "Provider supports setting user or provider-defined tags" + } + }, + "CheckFunctions": { + "OR": { + "Description": "OR check items, will return true on ANY check passing", + "Arguments": [ + "Items" + ], + "FormatAttributes": [] + }, + "AND": { + "Description": "AND check items, will return true on ALL checks passing", + "Arguments": [ + "Items" + ], + "FormatAttributes": [] + }, + "ColumnPresent": { + "Description": "Check if column is present in the dataset", + "Arguments": [ + "ColumnName" + ], + "FormatAttributes": [ + "ColumnHandling-A-000-M" + ] + }, + "CheckDistinctCount": { + "Description": "Check if two columns have a distinct count equal to a value", + "Arguments": [ + "ColumnAName", + "ColumnBName", + "ExpectedCount" + ], + "FormatAttributes": [] + }, + "FormatKeyValue": { + "Description": "Check a column has a key value format", + "Arguments": [ + "ColumnName" + ], + "FormatAttributes": [ + "KeyValueFormat-A-000-M" + ] + }, + "CheckValue": { + "Description": "Check if column has a particular value", + "Arguments": [ + "ColumnName", + "Value" + ], + "FormatAttributes": [] + }, + "CheckNotValue": { + "Description": "Check if column does not have a particular value", + "Arguments": [ + "ColumnName", + "Value" + ], + "FormatAttributes": [] + }, + "CheckNotSameValue": { + "Description": "Check if column does not have the same value as another column", + "Arguments": [ + "ColumnAName", + "ColumnBName" + ], + "FormatAttributes": [] + }, + "CheckSameValue": { + "Description": "Check if column does have the same value as another column", + "Arguments": [ + "ColumnAName", + "ColumnBName" + ], + "FormatAttributes": [] + }, + "CheckDecimalValue": { + "Description": "Check if column has a valid decimal value", + "Arguments": [ + "ColumnName" + ], + "FormatAttributes": [] + }, + "CheckGreaterOrEqualThanValue": { + "Description": "Check if column has value equal or greater than a value", + "Arguments": [ + "ColumnName", + "Value" + ], + "FormatAttributes": [] + }, + "CheckModelRule": { + "Description": "Check another ModelRule and turn its value", + "Arguments": [ + "ModelRuleId" + ], + "FormatAttributes": [] + }, + "CheckNationalCurrency": { + "Description": "Check column has a valid national currency code", + "Arguments": [ + "ColumnName" + ], + "FormatAttributes": [ + "CurrencyFormat-A-000-C" + ] + }, + "TypeDecimal": { + "Description": "Check column has the data type of decimal", + "Arguments": [ + "ColumnName" + ], + "FormatAttributes": [] + }, + "TypeString": { + "Description": "Check column has the data type of string", + "Arguments": [ + "ColumnName" + ], + "FormatAttributes": [] + }, + "FormatDateTime": { + "Description": "Check column has the format of datetime", + "Arguments": [ + "ColumnName" + ], + "FormatAttributes": [ + "DateTimeFormat-A-000-M" + ] + }, + "FormatNumeric": { + "Description": "Check a column has a numeric format", + "Arguments": [ + "ColumnName" + ], + "FormatAttributes": [ + "NumericFormat-A-000-M" + ] + }, + "FormatString": { + "Description": "Check a column has a string format", + "Arguments": [ + "ColumnName" + ], + "FormatAttributes": [ + "StringHandling-A-000-M" + ] + }, + "FormatUnit": { + "Description": "Check a column has a unit format", + "Arguments": [ + "ColumnName" + ], + "FormatAttributes": [ + "UnitFormat-A-000-M" + ] + }, + "FormatCurrency": { + "Description": "Check a column has a currency format", + "Arguments": [ + "ColumnName" + ], + "FormatAttributes": [ + "CurrencyFormat-A-000-C" + ] + }, + "ColumnByColumnEqualsColumnValue": { + "Description": "Check the result of a column value times by another column value and confirm if it matches the value of third column", + "Arguments": [ + "ColumnAName", + "ColumnBName", + "ResultColumnName" + ], + "FormatAttributes": [] + }, + "TypeDateTime": { + "Description": "Check column has the data type of datetime", + "Arguments": [ + "ColumnName" + ], + "FormatAttributes": [] + } + }, + "ModelDatasets": { + "CostAndUsage": { + "ModelRules": [ + "CostAndUsage-D-000-M" + ] + } + }, + "ModelRules": { + "CostAndUsage-D-000-M": { + "Function": "Composite", + "Reference": "CostAndUsage", + "EntityType": "Dataset", + "Notes": "Main dataset composite rule", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The CostAndUsage dataset adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-002-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-001-M", + "CostAndUsage-D-002-M", + "DiscountHandling-A-000-C", + "NullHandling-A-000-M", + "ColumnHandling-A-000-M" + ] + } + }, + "CostAndUsage-D-001-M": { + "Function": "Composite", + "Reference": "CostAndUsage", + "EntityType": "Dataset", + "Notes": "Columns present composite rule", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The CostAndUsage dataset adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-005-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-006-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-007-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-008-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-009-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-010-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-011-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-012-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-013-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-014-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-015-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-016-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-017-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-018-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-019-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-020-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-021-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-022-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-023-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-024-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-025-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-026-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-027-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-028-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-029-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-030-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-031-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-032-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-033-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-034-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-035-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-036-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-037-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-038-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-039-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-040-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-041-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-042-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-043-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-044-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-045-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-046-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-050-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-054-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-058-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-059-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-060-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-061-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-062-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-063-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-064-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-065-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-066-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-067-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-068-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-003-C", + "CostAndUsage-D-004-C", + "CostAndUsage-D-005-M", + "CostAndUsage-D-006-M", + "CostAndUsage-D-007-C", + "CostAndUsage-D-008-M", + "CostAndUsage-D-009-M", + "CostAndUsage-D-010-M", + "CostAndUsage-D-011-C", + "CostAndUsage-D-012-C", + "CostAndUsage-D-013-C", + "CostAndUsage-D-014-C", + "CostAndUsage-D-015-C", + "CostAndUsage-D-016-C", + "CostAndUsage-D-017-C", + "CostAndUsage-D-018-C", + "CostAndUsage-D-019-C", + "CostAndUsage-D-020-C", + "CostAndUsage-D-021-M", + "CostAndUsage-D-022-C", + "CostAndUsage-D-023-M", + "CostAndUsage-D-024-M", + "CostAndUsage-D-025-M", + "CostAndUsage-D-026-M", + "CostAndUsage-D-027-O", + "CostAndUsage-D-028-M", + "CostAndUsage-D-029-C", + "CostAndUsage-D-030-M", + "CostAndUsage-D-031-M", + "CostAndUsage-D-032-M", + "CostAndUsage-D-033-O", + "CostAndUsage-D-034-C", + "CostAndUsage-D-035-M", + "CostAndUsage-D-036-M", + "CostAndUsage-D-037-M", + "CostAndUsage-D-038-M", + "CostAndUsage-D-039-C", + "CostAndUsage-D-040-M", + "CostAndUsage-D-041-M", + "CostAndUsage-D-042-O", + "CostAndUsage-D-043-C", + "CostAndUsage-D-044-C", + "CostAndUsage-D-045-C", + "CostAndUsage-D-046-C", + "CostAndUsage-D-050-C", + "CostAndUsage-D-054-C", + "CostAndUsage-D-058-C", + "CostAndUsage-D-059-C", + "CostAndUsage-D-060-C", + "CostAndUsage-D-061-C", + "CostAndUsage-D-062-C", + "CostAndUsage-D-063-C", + "CostAndUsage-D-064-C", + "CostAndUsage-D-065-C", + "CostAndUsage-D-066-C", + "CostAndUsage-D-067-C", + "CostAndUsage-D-068-M" + ] + } + }, + "CostAndUsage-D-002-M": { + "Function": "Composite", + "Reference": "CostAndUsage", + "EntityType": "Dataset", + "Notes": "Columns composite rule", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The CostAndUsage dataset adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "AvailabilityZone-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BilledCost-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingAccountId-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingAccountName-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingAccountType-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingCurrency-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingPeriodEnd-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingPeriodStart-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationId-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationStatus-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeCategory-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeClass-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeFrequency-C-000-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeDescription-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargePeriodEnd-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargePeriodStart-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountCategory-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountId-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountName-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountStatus-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountType-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountUnit-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountQuantity-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ConsumedUnit-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ConsumedQuantity-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedCost-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedUnitPrice-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "EffectiveCost-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "InvoiceId-C-000-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "InvoiceIssuerName-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListCost-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListUnitPrice-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCategory-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrency-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyEffectiveCost-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyListUnitPrice-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingQuantity-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingUnit-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ProviderName-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PublisherName-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "RegionId-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "RegionName-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceId-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceName-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceType-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountId-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountName-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceCategory-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceName-C-000-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceSubcategory-C-000-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuId-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuMeter-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceId-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountType-C-000-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-000-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "AvailabilityZone-C-000-C", + "BilledCost-C-000-M", + "BillingAccountId-C-000-M", + "BillingAccountName-C-000-M", + "BillingAccountType-C-000-C", + "BillingCurrency-C-000-M", + "BillingPeriodEnd-C-000-M", + "BillingPeriodStart-C-000-M", + "CapacityReservationId-C-000-C", + "CapacityReservationStatus-C-000-C", + "ChargeCategory-C-000-M", + "ChargeClass-C-000-M", + "ChargeFrequency-C-000-O", + "ChargeDescription-C-000-M", + "ChargePeriodEnd-C-000-M", + "ChargePeriodStart-C-000-M", + "CommitmentDiscountCategory-C-000-C", + "CommitmentDiscountId-C-000-C", + "CommitmentDiscountName-C-000-C", + "CommitmentDiscountStatus-C-000-C", + "CommitmentDiscountType-C-000-C", + "CommitmentDiscountUnit-C-000-C", + "CommitmentDiscountQuantity-C-000-C", + "ConsumedUnit-C-000-C", + "ConsumedQuantity-C-000-C", + "ContractedCost-C-000-M", + "ContractedUnitPrice-C-000-C", + "EffectiveCost-C-000-M", + "InvoiceId-C-000-O", + "InvoiceIssuerName-C-000-M", + "ListCost-C-000-M", + "ListUnitPrice-C-000-C", + "PricingCategory-C-000-M", + "PricingCurrency-C-000-C", + "PricingCurrencyContractedUnitPrice-C-000-C", + "PricingCurrencyEffectiveCost-C-000-C", + "PricingCurrencyListUnitPrice-C-000-C", + "PricingQuantity-C-000-M", + "PricingUnit-C-000-M", + "ProviderName-C-000-M", + "RegionId-C-000-C", + "RegionName-C-000-C", + "ResourceId-C-000-C", + "ResourceName-C-000-C", + "ResourceType-C-000-C", + "PublisherName-C-000-M", + "SubAccountId-C-000-C", + "SubAccountName-C-000-C", + "ServiceCategory-C-000-M", + "ServiceName-C-000-M", + "ServiceSubcategory-C-000-O", + "SkuId-C-000-C", + "SkuMeter-C-000-C", + "SkuPriceDetails-C-000-C", + "SkuPriceId-C-000-C", + "SubAccountType-C-000-C", + "Tags-C-000-C" + ] + } + }, + "CostAndUsage-D-003-C": { + "Function": "Presence", + "Reference": "AvailabilityZone", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "AVAILABILITY_ZONE_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "AvailabilityZone is RECOMMENDED to be present in a FOCUS dataset when the provider supports deploying resources or services within an availability zone.", + "Keyword": "RECOMMENDED", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "AvailabilityZone" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-004-C": { + "Function": "Presence", + "Reference": "ListUnitPrice", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ListUnitPrice MUST be present in a FOCUS dataset when the provider publishes unit prices exclusive of discounts.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ListUnitPrice" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-005-M": { + "Function": "Presence", + "Reference": "BillingAccountName", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingAccountName MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "BillingAccountName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-006-M": { + "Function": "Presence", + "Reference": "BilledCost", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BilledCost MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "BilledCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-007-C": { + "Function": "Presence", + "Reference": "BillingAccountType", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "MULTIPLE_BILLING_ACCOUNT_TYPES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingAccountType MUST be present in a FOCUS dataset when the provider supports more than one possible BillingAccountType value.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "BillingAccountType" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-008-M": { + "Function": "Presence", + "Reference": "ChargeCategory", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargeCategory MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ChargeCategory" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-009-M": { + "Function": "Presence", + "Reference": "BillingPeriodStart", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingPeriodStart MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "BillingPeriodStart" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-010-M": { + "Function": "Presence", + "Reference": "BillingPeriodEnd", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingPeriodEnd MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "BillingPeriodEnd" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-011-C": { + "Function": "Presence", + "Reference": "ConsumedQuantity", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "USAGE_MEASUREMENT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ConsumedQuantity MUST be present in a FOCUS dataset when the provider supports the measurement of usage.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ConsumedQuantity" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-012-C": { + "Function": "Presence", + "Reference": "CommitmentDiscountName", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountName MUST be present in a FOCUS dataset when the provider supports commitment discounts.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "CommitmentDiscountName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-013-C": { + "Function": "Presence", + "Reference": "CommitmentDiscountId", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountId MUST be present in a FOCUS dataset when the provider supports commitment discounts.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "CommitmentDiscountId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-014-C": { + "Function": "Presence", + "Reference": "CommitmentDiscountType", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountType MUST be present in a FOCUS dataset when the provider supports commitment discounts.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "CommitmentDiscountType" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-015-C": { + "Function": "Presence", + "Reference": "CommitmentDiscountUnit", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountUnit MUST be present in a FOCUS dataset when the provider supports commitment discounts.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "CommitmentDiscountUnit" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-016-C": { + "Function": "Presence", + "Reference": "CommitmentDiscountCategory", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountCategory MUST be present in a FOCUS dataset when the provider supports commitment discounts.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "CommitmentDiscountCategory" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-017-C": { + "Function": "Presence", + "Reference": "CommitmentDiscountStatus", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountStatus MUST be present in a FOCUS dataset when the provider supports commitment discounts.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "CommitmentDiscountStatus" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-018-C": { + "Function": "Presence", + "Reference": "CommitmentDiscountQuantity", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountQuantity MUST be present in a FOCUS dataset when the provider supports commitment discounts.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "CommitmentDiscountQuantity" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-019-C": { + "Function": "Presence", + "Reference": "SubAccountId", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "SUB_ACCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SubAccountId MUST be present in a FOCUS dataset when the provider supports a sub account construct.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "SubAccountId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-020-C": { + "Function": "Presence", + "Reference": "CapacityReservationStatus", + "EntityType": "Dataset", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "CAPACITY_RESERVATION_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CapacityReservationStatus MUST be present in a FOCUS dataset when the provider supports capacity reservations.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "CapacityReservationStatus" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-021-M": { + "Function": "Presence", + "Reference": "PublisherName", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PublisherName MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "PublisherName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-022-C": { + "Function": "Presence", + "Reference": "PricingCategory", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "MULTIPLE_PRICING_CATEGORIES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCategory MUST be present in a FOCUS dataset when the provider supports more than one pricing category across all SKUs.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "PricingCategory" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-023-M": { + "Function": "Presence", + "Reference": "InvoiceIssuerName", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "InvoiceIssuerName MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "InvoiceIssuerName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-024-M": { + "Function": "Presence", + "Reference": "BillingAccountId", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingAccountId MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "BillingAccountId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-025-M": { + "Function": "Presence", + "Reference": "ChargeDescription", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargeDescription MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ChargeDescription" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-026-M": { + "Function": "Presence", + "Reference": "ChargeClass", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargeClass MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ChargeClass" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-027-O": { + "Function": "Presence", + "Reference": "ChargeFrequency", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargeFrequency is RECOMMENDED to be present in a FOCUS dataset.", + "Keyword": "RECOMMENDED", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ChargeFrequency" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-028-M": { + "Function": "Presence", + "Reference": "ChargePeriodEnd", + "EntityType": "Dataset", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargePeriodEnd MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ChargePeriodEnd" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-029-C": { + "Function": "Presence", + "Reference": "SubAccountName", + "EntityType": "Dataset", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "SUB_ACCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SubAccountName MUST be present in a FOCUS dataset when the provider supports a sub account construct.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "SubAccountName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-030-M": { + "Function": "Presence", + "Reference": "ContractedCost", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ContractedCost MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ContractedCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-031-M": { + "Function": "Presence", + "Reference": "EffectiveCost", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "EffectiveCost MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "EffectiveCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-032-M": { + "Function": "Presence", + "Reference": "ListCost", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ListCost MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ListCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-033-O": { + "Function": "Presence", + "Reference": "InvoiceId", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "InvoiceId is RECOMMENDED to be present in a FOCUS dataset.", + "Keyword": "RECOMMENDED", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "InvoiceId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-034-C": { + "Function": "Presence", + "Reference": "ContractedUnitPrice", + "EntityType": "Dataset", + "Notes": "Presence rule", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "NEGOTIATED_PRICING_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ContractedUnitPrice MUST be present in a FOCUS dataset when the provider supports negotiated pricing concepts.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ContractedUnitPrice" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-035-M": { + "Function": "Presence", + "Reference": "BillingCurrency", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingCurrency MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "BillingCurrency" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-036-M": { + "Function": "Presence", + "Reference": "PricingQuantity", + "EntityType": "Dataset", + "Notes": "PricingQuantity must be present in dataset", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingQuantity MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "PricingQuantity" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-037-M": { + "Function": "Presence", + "Reference": "ChargePeriodStart", + "EntityType": "Dataset", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargePeriodStart MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ChargePeriodStart" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-038-M": { + "Function": "Presence", + "Reference": "ProviderName", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ProviderName MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ProviderName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-039-C": { + "Function": "Presence", + "Reference": "ResourceType", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "BILLING_BASED_ON_PROVISIONED_RESOURCES_SUPPORTED", + "RESOURCE_TYPE_ASSIGNMENT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ResourceType MUST be present in a FOCUS dataset when the provider supports billing based on provisioned resources and supports assigning types to resources.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ResourceType" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-040-M": { + "Function": "Presence", + "Reference": "ServiceCategory", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ServiceCategory MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ServiceCategory" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-041-M": { + "Function": "Presence", + "Reference": "ServiceName", + "EntityType": "Dataset", + "Notes": "ServiceName must be present in dataset", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ServiceName MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ServiceName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-042-O": { + "Function": "Presence", + "Reference": "ServiceSubcategory", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ServiceSubcategory is RECOMMENDED to be present in a FOCUS dataset.", + "Keyword": "RECOMMENDED", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ServiceSubcategory" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-043-C": { + "Function": "Presence", + "Reference": "ResourceId", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "BILLING_BASED_ON_PROVISIONED_RESOURCES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ResourceId MUST be present in a FOCUS dataset when the provider supports billing based on provisioned resources.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ResourceId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-044-C": { + "Function": "Presence", + "Reference": "ResourceName", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "BILLING_BASED_ON_PROVISIONED_RESOURCES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ResourceName MUST be present in a FOCUS dataset when the provider supports billing based on provisioned resources.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ResourceName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-045-C": { + "Function": "Presence", + "Reference": "PricingCurrency", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrency MUST be present in a FOCUS dataset when the provider supports pricing and billing in different currencies.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "PricingCurrency" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-046-C": { + "Function": "Composite", + "Reference": "PricingCurrencyContractedUnitPrice", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyContractedUnitPrice presence in a FOCUS dataset is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-047-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-048-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-049-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-047-C", + "CostAndUsage-D-048-C", + "CostAndUsage-D-049-C" + ] + } + }, + "CostAndUsage-D-047-C": { + "Function": "Presence", + "Reference": "PricingCurrencyContractedUnitPrice", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED", + "VIRTUAL_CURRENCY_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyContractedUnitPrice MUST be present in a FOCUS dataset when the provider supports prices in virtual currency and publishes unit prices exclusive of discounts.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "PricingCurrencyContractedUnitPrice" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-048-C": { + "Function": "Presence", + "Reference": "PricingCurrencyContractedUnitPrice", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED", + "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyContractedUnitPrice is RECOMMENDED to be present in a FOCUS dataset when the provider supports pricing and billing in different currencies and publishes unit prices exclusive of discounts.", + "Keyword": "RECOMMENDED", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "PricingCurrencyContractedUnitPrice" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-049-C": { + "Function": "Presence", + "Reference": "PricingCurrencyContractedUnitPrice", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED", + "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyContractedUnitPrice MAY be present in a FOCUS dataset in all other cases.", + "Keyword": "MAY", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "PricingCurrencyContractedUnitPrice" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-050-C": { + "Function": "Composite", + "Reference": "PricingCurrencyEffectiveCost", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyEffectiveCost presence in a FOCUS dataset is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-051-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-052-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-053-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-051-C", + "CostAndUsage-D-052-C", + "CostAndUsage-D-053-C" + ] + } + }, + "CostAndUsage-D-051-C": { + "Function": "Presence", + "Reference": "PricingCurrencyEffectiveCost", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED", + "VIRTUAL_CURRENCY_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyEffectiveCost MUST be present in a FOCUS dataset when the provider supports prices in virtual currency and publishes unit prices exclusive of discounts.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "PricingCurrencyEffectiveCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-052-C": { + "Function": "Presence", + "Reference": "PricingCurrencyEffectiveCost", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED", + "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyEffectiveCost is RECOMMENDED to be present in a FOCUS dataset when the provider supports pricing and billing in different currencies and publishes unit prices exclusive of discounts.", + "Keyword": "RECOMMENDED", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "PricingCurrencyEffectiveCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-053-C": { + "Function": "Presence", + "Reference": "PricingCurrencyEffectiveCost", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED", + "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyEffectiveCost MAY be present in a FOCUS dataset in all other cases.", + "Keyword": "MAY", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "PricingCurrencyEffectiveCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-054-C": { + "Function": "Composite", + "Reference": "PricingCurrencyListUnitPrice", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyListUnitPrice presence in a FOCUS dataset is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-055-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-056-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CostAndUsage-D-057-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-055-C", + "CostAndUsage-D-056-C", + "CostAndUsage-D-057-C" + ] + } + }, + "CostAndUsage-D-055-C": { + "Function": "Presence", + "Reference": "PricingCurrencyListUnitPrice", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED", + "VIRTUAL_CURRENCY_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyListUnitPrice MUST be present in a FOCUS dataset when the provider supports prices in virtual currency and publishes unit prices exclusive of discounts.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "PricingCurrencyListUnitPrice" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-056-C": { + "Function": "Presence", + "Reference": "PricingCurrencyListUnitPrice", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED", + "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyListUnitPrice is RECOMMENDED to be present in a FOCUS dataset when the provider supports pricing and billing in different currencies and publishes unit prices exclusive of discounts.", + "Keyword": "RECOMMENDED", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "PricingCurrencyListUnitPrice" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-057-C": { + "Function": "Presence", + "Reference": "PricingCurrencyListUnitPrice", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED", + "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyListUnitPrice MAY be present in a FOCUS dataset in all other cases.", + "Keyword": "MAY", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "PricingCurrencyListUnitPrice" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-058-C": { + "Function": "Presence", + "Reference": "SkuPriceId", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED", + "UNIT_PRICING_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceId MUST be present in a FOCUS dataset when the provider supports unit pricing concepts and publishes price lists, publicly or as part of contracting.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "SkuPriceId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-059-C": { + "Function": "Presence", + "Reference": "SkuMeter", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED", + "UNIT_PRICING_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuMeter MUST be present in a FOCUS dataset when the provider supports unit pricing concepts and publishes price lists, publicly or as part of contracting.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "SkuMeter" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-060-C": { + "Function": "Presence", + "Reference": "SkuId", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED", + "UNIT_PRICING_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuId MUST be present in a FOCUS dataset when the provider supports unit pricing concepts and publishes price lists, publicly or as part of contracting.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "SkuId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-061-C": { + "Function": "Presence", + "Reference": "SkuPriceDetails", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED", + "UNIT_PRICING_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceDetails MUST be present in a FOCUS dataset when the provider supports unit pricing concepts and publishes price lists, publicly or as part of contracting.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "SkuPriceDetails" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-062-C": { + "Function": "Presence", + "Reference": "RegionName", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "REGION_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "RegionName MUST be present in a FOCUS dataset when the provider supports deploying resources or services within a region.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "RegionName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-063-C": { + "Function": "Presence", + "Reference": "RegionId", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "REGION_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "RegionId MUST be present in a FOCUS dataset when the provider supports deploying resources or services within a region.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "RegionId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-064-C": { + "Function": "Presence", + "Reference": "Tags", + "EntityType": "Dataset", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "TAGGING_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "Tags MUST be present in a FOCUS dataset when the provider supports setting user or provider-defined tags.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "Tags" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-065-C": { + "Function": "Presence", + "Reference": "CapacityReservationId", + "EntityType": "Dataset", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "CAPACITY_RESERVATION_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CapacityReservationId MUST be present in a FOCUS dataset when the provider supports capacity reservations.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "CapacityReservationId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-066-C": { + "Function": "Presence", + "Reference": "ConsumedUnit", + "EntityType": "Dataset", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "USAGE_MEASUREMENT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ConsumedUnit MUST be present in a FOCUS dataset when the provider supports the measurement of usage.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "ConsumedUnit" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-067-C": { + "Function": "Presence", + "Reference": "SubAccountType", + "EntityType": "Dataset", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "MULTIPLE_SUB_ACCOUNT_TYPES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SubAccountType MUST be present in a FOCUS dataset when the provider supports more than one possible SubAccountType value.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "SubAccountType" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CostAndUsage-D-068-M": { + "Function": "Presence", + "Reference": "PricingUnit", + "EntityType": "Dataset", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingUnit MUST be present in a FOCUS dataset.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnPresent", + "ColumnName": "PricingUnit" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "DateTimeFormat-A-000-M": { + "Function": "Composite", + "Reference": "DateTimeFormat", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The DateTimeFormat attribute adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DateTimeFormat-A-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DateTimeFormat-A-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DateTimeFormat-A-003-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "DateTimeFormat-A-001-M", + "DateTimeFormat-A-002-M", + "DateTimeFormat-A-003-M" + ] + } + }, + "DateTimeFormat-A-001-M": { + "Function": "Validation", + "Reference": "DateTimeFormat", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Date/time values MUST be in UTC (Coordinated Universal Time) to avoid ambiguity and ensure consistency across different time zones.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DateTimeFormat-A-002-M": { + "Function": "Format", + "Reference": "DateTimeFormat", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Date/time values format MUST be aligned with ISO 8601 standard, which provides a globally recognized format for representing dates and times (see ISO 8601-1:2019 governing document for details).", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DateTimeFormat-A-003-M": { + "Function": "Composite", + "Reference": "DateTimeFormat", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "Values providing information about a specific moment in time MUST be represented in the extended ISO 8601 format with UTC offset ('YYYY-MM-DDTHH:mm:ssZ') and conform to the following guidelines:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DateTimeFormat-A-004-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DateTimeFormat-A-005-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DateTimeFormat-A-006-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "DateTimeFormat-A-004-M", + "DateTimeFormat-A-005-M", + "DateTimeFormat-A-006-M" + ] + } + }, + "DateTimeFormat-A-004-M": { + "Function": "Validation", + "Reference": "DateTimeFormat", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "MUST Include the date and time components, separated with the letter \u2018T\u2019.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DateTimeFormat-A-005-M": { + "Function": "Validation", + "Reference": "DateTimeFormat", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "MUST Use two-digit hours (HH), minutes (mm), and seconds (ss).", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DateTimeFormat-A-006-M": { + "Function": "Validation", + "Reference": "DateTimeFormat", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "MUST End with the \u2018Z\u2019 indicator to denote UTC (Coordinated Universal Time).", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "CurrencyFormat-A-000-C": { + "Function": "Composite", + "Reference": "CurrencyFormat", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The CurrencyFormat attribute adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CurrencyFormat-A-001-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CurrencyFormat-A-002-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CurrencyFormat-A-001-C", + "CurrencyFormat-A-002-C" + ] + } + }, + "CurrencyFormat-A-001-C": { + "Function": "Validation", + "Reference": "CurrencyFormat", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Currency-related columns MUST be represented as a three-letter alphabetic code as dictated in the governing document ISO 4217:2015 when the value is presented in national currency (e.g., USD, EUR).", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "CurrencyFormat-A-002-C": { + "Function": "Validation", + "Reference": "CurrencyFormat", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Currency-related columns MUST conform to StringHandling requirements when the value is presented in virtual currency (e.g., credits, tokens).", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "NumericFormat-A-000-M": { + "Function": "Composite", + "Reference": "NumericFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "Root composite capturing all NumericFormat requirements", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "All columns capturing a numeric value, defined in the FOCUS specification, MUST follow the formatting requirements listed below.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "NumericFormat-A-001-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "NumericFormat-A-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "NumericFormat-A-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "NumericFormat-A-004-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "NumericFormat-A-005-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "NumericFormat-A-006-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "NumericFormat-A-007-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "NumericFormat-A-008-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "NumericFormat-A-009-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "NumericFormat-A-010-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "NumericFormat-A-011-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "NumericFormat-A-012-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "NumericFormat-A-013-O" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "NumericFormat-A-001-O", + "NumericFormat-A-002-M", + "NumericFormat-A-003-M", + "NumericFormat-A-004-M", + "NumericFormat-A-005-M", + "NumericFormat-A-006-M", + "NumericFormat-A-007-M", + "NumericFormat-A-008-M", + "NumericFormat-A-009-M", + "NumericFormat-A-010-M", + "NumericFormat-A-011-M", + "NumericFormat-A-012-M", + "NumericFormat-A-013-O" + ] + } + }, + "NumericFormat-A-001-O": { + "Function": "Format", + "Reference": "NumericFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Custom numeric value capturing columns SHOULD adopt the same format requirements over time.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "NumericFormat-A-002-M": { + "Function": "Format", + "Reference": "NumericFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Columns with a Numeric value format MUST contain a single numeric value.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "NumericFormat-A-003-M": { + "Function": "Format", + "Reference": "NumericFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Numeric values MUST be expressed as an integer value, a decimal value, or a value expressed in scientific notation.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "NumericFormat-A-004-M": { + "Function": "Format", + "Reference": "NumericFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Fractional notation MUST NOT be used.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "NumericFormat-A-005-M": { + "Function": "Format", + "Reference": "NumericFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Numeric values expressed using scientific notation MUST be expressed using E notation \"mEn\" with a real number m and an integer n indicating a value of \"m x 10^n\".", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "NumericFormat-A-006-M": { + "Function": "Format", + "Reference": "NumericFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "The sign of the exponent MUST only be expressed as part of the exponent value if n is negative.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "NumericFormat-A-007-M": { + "Function": "Format", + "Reference": "NumericFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Numeric values MUST NOT be expressed with mathematical symbols, functions, or operators.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "NumericFormat-A-008-M": { + "Function": "Format", + "Reference": "NumericFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Numeric values MUST NOT contain qualifiers or additional characters (e.g., currency symbols, units of measure, etc.).", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "NumericFormat-A-009-M": { + "Function": "Format", + "Reference": "NumericFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Numeric values MUST NOT contain commas or punctuation marks except for a single decimal point (\".\") if required to express a decimal value.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "NumericFormat-A-010-M": { + "Function": "Format", + "Reference": "NumericFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Numeric values MUST NOT include a character to represent a sign for a positive value.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "NumericFormat-A-011-M": { + "Function": "Format", + "Reference": "NumericFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "A negative sign (-) MUST indicate a negative value.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "NumericFormat-A-012-M": { + "Function": "Format", + "Reference": "NumericFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "Allowed values are Integer and Decimal per normative text table", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Columns with a Numeric value format MUST present one of the following values as the \"Data type\" in the column definition.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "NumericFormat-A-013-O": { + "Function": "Format", + "Reference": "NumericFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "Allowed precision values: Integer (Short, Long, Extended), Decimal (Single, Double, Extended)", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Providers SHOULD define precision and scale for Numeric Format columns using one of the following precision values in a data definition document that providers publish.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "StringHandling-A-000-M": { + "Function": "Composite", + "Reference": "StringHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "Root composite capturing all StringHandling requirements", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "All columns of type String defined in the FOCUS specification MUST follow the string handling requirements listed below.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "StringHandling-A-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "StringHandling-A-002-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "StringHandling-A-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "StringHandling-A-004-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "StringHandling-A-005-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "StringHandling-A-006-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "StringHandling-A-007-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "StringHandling-A-008-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "StringHandling-A-001-M", + "StringHandling-A-002-O", + "StringHandling-A-003-M", + "StringHandling-A-004-M", + "StringHandling-A-005-M", + "StringHandling-A-006-M", + "StringHandling-A-007-M", + "StringHandling-A-008-C" + ] + } + }, + "StringHandling-A-001-M": { + "Function": "Format", + "Reference": "StringHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "String values MUST be valid Unicode strings.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "StringHandling-A-002-O": { + "Function": "Format", + "Reference": "StringHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Custom string value capturing columns SHOULD adopt the same requirements over time.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "StringHandling-A-003-M": { + "Function": "Format", + "Reference": "StringHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "String values MUST maintain the original casing, spacing, and other relevant consistency factors as specified by providers and end-users.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "StringHandling-A-004-M": { + "Function": "Format", + "Reference": "StringHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Charges to mutable entities (e.g., resource names) MUST be accurately reflected in corresponding charges incurred after the change.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "StringHandling-A-005-M": { + "Function": "Format", + "Reference": "StringHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Charges to mutable entities MUST NOT alter charges incurred before the change, preserving data integrity and auditability for all charge records.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "StringHandling-A-006-M": { + "Function": "Format", + "Reference": "StringHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Immutable string values that refer to the same entity (e.g., resource identifiers, region identifiers, etc.) MUST remain consistent and unchanged across all billing periods.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "StringHandling-A-007-M": { + "Function": "Format", + "Reference": "StringHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Empty strings and strings consisting solely of spaces SHOULD NOT be used in not-nullable string columns.", + "Keyword": "SHOULD NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "StringHandling-A-008-C": { + "Function": "Format", + "Reference": "StringHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "When a record is provided after a change to a mutable string value and the ChargeClass is \u201cCorrection\u201d, the record MAY contain the altered value.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ColumnHandling-A-000-M": { + "Function": "Composite", + "Reference": "ColumnHandling", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "All columns defined by FOCUS MUST follow the following rules:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ColumnHandling-A-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ColumnHandling-A-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ColumnHandling-A-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ColumnHandling-A-004-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ColumnHandling-A-005-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ColumnHandling-A-006-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ColumnHandling-A-007-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ColumnHandling-A-008-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ColumnHandling-A-009-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ColumnHandling-A-012-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ColumnHandling-A-013-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ColumnHandling-A-014-O" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "ColumnHandling-A-001-M", + "ColumnHandling-A-002-M", + "ColumnHandling-A-003-M", + "ColumnHandling-A-004-O", + "ColumnHandling-A-005-O", + "ColumnHandling-A-006-M", + "ColumnHandling-A-007-O", + "ColumnHandling-A-008-M", + "ColumnHandling-A-009-M", + "ColumnHandling-A-012-O", + "ColumnHandling-A-013-O", + "ColumnHandling-A-014-O" + ] + } + }, + "ColumnHandling-A-001-M": { + "Function": "Validation", + "Reference": "ColumnHandling", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Column IDs MUST use Pascal case.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ColumnHandling-A-002-M": { + "Function": "Validation", + "Reference": "ColumnHandling", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Column IDs MUST NOT use abbreviations.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ColumnHandling-A-003-M": { + "Function": "Validation", + "Reference": "ColumnHandling", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Column IDs MUST be alphanumeric with no special characters.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ColumnHandling-A-004-O": { + "Function": "Validation", + "Reference": "ColumnHandling", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Column IDs SHOULD NOT use acronyms.", + "Keyword": "SHOULD NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ColumnHandling-A-005-O": { + "Function": "Validation", + "Reference": "ColumnHandling", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Column IDs SHOULD NOT exceed 50 characters to accommodate column length restrictions of various data repositories.", + "Keyword": "SHOULD NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ColumnHandling-A-006-M": { + "Function": "Validation", + "Reference": "ColumnHandling", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Columns that have an ID and a Name MUST have the Id or Name suffix in the Column ID.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ColumnHandling-A-007-O": { + "Function": "Validation", + "Reference": "ColumnHandling", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Column display names MAY avoid the Name suffix if there are no other columns with the same name prefix.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ColumnHandling-A-008-M": { + "Function": "Validation", + "Reference": "ColumnHandling", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Columns with the Category suffix MUST be normalized.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ColumnHandling-A-009-M": { + "Function": "Composite", + "Reference": "ColumnHandling", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "Custom (e.g., provider-defined) columns that are not defined by FOCUS but included in a FOCUS dataset MUST follow the following rules:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ColumnHandling-A-010-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ColumnHandling-A-011-O" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "ColumnHandling-A-010-M", + "ColumnHandling-A-011-O" + ] + } + }, + "ColumnHandling-A-010-M": { + "Function": "Validation", + "Reference": "ColumnHandling", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Custom columns MUST be prefixed with a consistent x_ prefix to identify them as external, custom columns and distinguish them from FOCUS columns to avoid conflicts in future releases.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ColumnHandling-A-011-O": { + "Function": "Validation", + "Reference": "ColumnHandling", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Custom columns SHOULD follow the same rules listed above for FOCUS columns.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ColumnHandling-A-012-O": { + "Function": "Validation", + "Reference": "ColumnHandling", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "All FOCUS columns SHOULD be first in the provided dataset.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ColumnHandling-A-013-O": { + "Function": "Validation", + "Reference": "ColumnHandling", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Custom columns SHOULD be listed after all FOCUS columns and SHOULD NOT be intermixed.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ColumnHandling-A-014-O": { + "Function": "Validation", + "Reference": "ColumnHandling", + "EntityType": "Attribute", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Columns MAY be sorted alphabetically, but custom columns SHOULD be after all FOCUS columns.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "UnitFormat-A-000-M": { + "Function": "Composite", + "Reference": "UnitFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "Root composite capturing all UnitFormat requirements", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "All columns defined in FOCUS specifying Unit Format as a value format MUST follow the requirements listed below.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "UnitFormat-A-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "UnitFormat-A-002-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "UnitFormat-A-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "UnitFormat-A-004-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "UnitFormat-A-001-M", + "UnitFormat-A-002-O", + "UnitFormat-A-003-M", + "UnitFormat-A-004-C" + ] + } + }, + "UnitFormat-A-001-M": { + "Function": "Format", + "Reference": "UnitFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Units SHOULD be expressed as a single unit of measure adhering to one of the following three formats.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "UnitFormat-A-002-O": { + "Function": "Format", + "Reference": "UnitFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Units MAY be expressed with a unit quantity or time interval. If a unit quantity or time interval is used, the unit quantity or time interval MUST be expressed as a whole number.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "UnitFormat-A-003-M": { + "Function": "Format", + "Reference": "UnitFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Unit values and components of columns using the Unit Format MUST use a capitalization scheme that is consistent with the capitalization scheme used in this attribute if that term is listed in this section.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "UnitFormat-A-004-C": { + "Function": "Format", + "Reference": "UnitFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Units SHOULD be composed of the list of recommended units listed in this section unless the unit value covers a dimension not listed in the recommended unit set, or if the unit covers a count-based unit distinct from recommended values in the count dimension listed in this section.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "KeyValueFormat-A-000-M": { + "Function": "Composite", + "Reference": "KeyValueFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "All key-value related columns defined in the FOCUS specification MUST follow the key-value formatting requirements listed below.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "KeyValueFormat-A-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "KeyValueFormat-A-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "KeyValueFormat-A-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "KeyValueFormat-A-004-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "KeyValueFormat-A-001-M", + "KeyValueFormat-A-002-M", + "KeyValueFormat-A-003-M", + "KeyValueFormat-A-004-M" + ] + } + }, + "KeyValueFormat-A-001-M": { + "Function": "Format", + "Reference": "KeyValueFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Key-Value Format columns MUST contain a serialized JSON string, consistent with the ECMA 404 definition of an object.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "KeyValueFormat-A-002-M": { + "Function": "Validation", + "Reference": "KeyValueFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Keys in a key-value pair MUST be unique within an object.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "KeyValueFormat-A-003-M": { + "Function": "Validation", + "Reference": "KeyValueFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Values in a key-value pair MUST be one of the following types: number, string, true, false, or null.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "KeyValueFormat-A-004-M": { + "Function": "Validation", + "Reference": "KeyValueFormat", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Values in a key-value pair MUST NOT be an object or an array.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DiscountHandling-A-000-C": { + "Function": "Composite", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The DiscountHandling attribute adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-001-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-002-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-005-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-008-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-020-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "DiscountHandling-A-001-C", + "DiscountHandling-A-002-C", + "DiscountHandling-A-005-C", + "DiscountHandling-A-008-C", + "DiscountHandling-A-020-C" + ] + } + }, + "DiscountHandling-A-001-C": { + "Function": "Validation", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "All applicable discounts SHOULD be applied to each row they pertain to and SHOULD NOT be negated in a separate row.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DiscountHandling-A-002-C": { + "Function": "Composite", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "All discounts applied to a row MUST apply to the entire charge.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-004-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "DiscountHandling-A-003-C", + "DiscountHandling-A-004-C" + ] + } + }, + "DiscountHandling-A-003-C": { + "Function": "Validation", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Multiple discounts MAY apply to a row, but they MUST apply to the entire charge covered by that row.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DiscountHandling-A-004-C": { + "Function": "Validation", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "If a discount only applies to a portion of a charge, then the discounted portion of the charge MUST be split into a separate row.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DiscountHandling-A-005-C": { + "Function": "Composite", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "Each discount MUST be identifiable using existing FOCUS columns.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-006-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-007-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "DiscountHandling-A-006-C", + "DiscountHandling-A-007-C" + ] + } + }, + "DiscountHandling-A-006-C": { + "Function": "Validation", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Rows with a commitment discount applied to them MUST include a CommitmentDiscountId.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DiscountHandling-A-007-C": { + "Function": "Validation", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "If a provider applies a discount that cannot be represented by a FOCUS column, they SHOULD include additional columns to identify the source of the discount.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DiscountHandling-A-008-C": { + "Function": "Composite", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "Purchased discounts (e.g., commitment discounts) MUST be amortized.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-009-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-010-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-011-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-012-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-013-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-014-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-015-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-016-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-017-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-018-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "DiscountHandling-A-019-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "DiscountHandling-A-009-C", + "DiscountHandling-A-010-C", + "DiscountHandling-A-011-C", + "DiscountHandling-A-012-C", + "DiscountHandling-A-013-C", + "DiscountHandling-A-014-C", + "DiscountHandling-A-015-C", + "DiscountHandling-A-016-C", + "DiscountHandling-A-017-C", + "DiscountHandling-A-018-C", + "DiscountHandling-A-019-C" + ] + } + }, + "DiscountHandling-A-009-C": { + "Function": "Validation", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "The BilledCost MUST be 0 for any row where the commitment covers the entire cost for the charge period.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DiscountHandling-A-010-C": { + "Function": "Validation", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "The EffectiveCost MUST include the portion of the amortized purchase cost that applies to this row.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DiscountHandling-A-011-C": { + "Function": "Validation", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "The sum of the EffectiveCost for all rows where CommitmentDiscountStatus is \"Used\" or \"Unused\" for each CommitmentDiscountId over the entire duration of the commitment MUST be the same as the total BilledCost of the commitment discount.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DiscountHandling-A-012-C": { + "Function": "Validation", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "The CommitmentDiscountId and ResourceId MUST be set to the ID assigned to the commitment discount.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DiscountHandling-A-013-C": { + "Function": "Validation", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ChargeCategory MUST be set to \"Purchase\" on rows that represent a purchase of a commitment discount.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DiscountHandling-A-014-C": { + "Function": "Validation", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountStatus MUST be \"Used\" for ChargeCategory \"Usage\" rows that received a reduced price from a commitment.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DiscountHandling-A-015-C": { + "Function": "Validation", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountId MUST be set to the ID assigned to the discount.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DiscountHandling-A-016-C": { + "Function": "Validation", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ResourceId MUST be set to the ID of the resource that received the discount.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DiscountHandling-A-017-C": { + "Function": "Validation", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "If a commitment is not fully utilized, the provider MUST include a row that represents the unused portion of the commitment for that charge period.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DiscountHandling-A-018-C": { + "Function": "Validation", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "These rows MUST be represented with CommitmentDiscountStatus set to \"Unused\" and ChargeCategory set to \"Usage\".", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DiscountHandling-A-019-C": { + "Function": "Validation", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Such rows MUST have their CommitmentDiscountId and ResourceId set to the ID assigned to the commitment discount.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "DiscountHandling-A-020-C": { + "Function": "Validation", + "Reference": "DiscountHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Credits that are applied after the fact MUST use a ChargeCategory of \"Credit\".", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "NullHandling-A-000-M": { + "Function": "Composite", + "Reference": "NullHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "All columns defined in the FOCUS specification MUST follow the null handling requirements listed below.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "NullHandling-A-001-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "NullHandling-A-002-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "NullHandling-A-001-C", + "NullHandling-A-002-M" + ] + } + }, + "NullHandling-A-001-C": { + "Function": "Validation", + "Reference": "NullHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Columns MUST use NULL when there isn\u2019t a value that can be specified for a nullable column.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "NullHandling-A-002-M": { + "Function": "Validation", + "Reference": "NullHandling", + "EntityType": "Attribute", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Columns MUST NOT use empty strings or placeholder values such as 0 for numeric columns or \u201cNot Applicable\u201d for string columns to represent a null or not having a value, regardless of whether the column allows nulls or not.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountName-C-000-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The CommitmentDiscountName column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountName-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountName-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountName-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountName-C-004-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-012-C", + "CommitmentDiscountName-C-001-M", + "CommitmentDiscountName-C-002-M", + "CommitmentDiscountName-C-003-C", + "CommitmentDiscountName-C-004-C" + ] + } + }, + "CommitmentDiscountName-C-001-M": { + "Function": "Type", + "Reference": "CommitmentDiscountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountName MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "CommitmentDiscountName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountName-C-002-M": { + "Function": "Format", + "Reference": "CommitmentDiscountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountName MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "CommitmentDiscountName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountName-C-003-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountName nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountName-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountName-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CommitmentDiscountName-C-004-C", + "CommitmentDiscountName-C-005-C" + ] + } + }, + "CommitmentDiscountName-C-004-C": { + "Function": "Nullability", + "Reference": "CommitmentDiscountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountName MUST be null when CommitmentDiscountId is null.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountName", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountId", + "Value": null + }, + "Dependencies": [] + } + }, + "CommitmentDiscountName-C-005-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When CommitmentDiscountId is not null, CommitmentDiscountName adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountName-C-006-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountName-C-007-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "CommitmentDiscountId", + "Value": null + }, + "Dependencies": [ + "CommitmentDiscountName-C-006-C", + "CommitmentDiscountName-C-007-C" + ] + } + }, + "CommitmentDiscountName-C-006-C": { + "Function": "Nullability", + "Reference": "CommitmentDiscountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountName MUST NOT be null when a display name can be assigned to a commitment discount.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountName-C-007-C": { + "Function": "Nullability", + "Reference": "CommitmentDiscountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountName MAY be null when a display name cannot be assigned to a commitment discount.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "InvoiceIssuerName-C-000-M": { + "Function": "Composite", + "Reference": "InvoiceIssuerName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The InvoiceIssuerName column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "InvoiceIssuerName-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "InvoiceIssuerName-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "InvoiceIssuerName-C-003-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-023-M", + "InvoiceIssuerName-C-001-M", + "InvoiceIssuerName-C-002-M", + "InvoiceIssuerName-C-003-M" + ] + } + }, + "InvoiceIssuerName-C-001-M": { + "Function": "Type", + "Reference": "InvoiceIssuerName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "InvoiceIssuerName MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "InvoiceIssuerName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "InvoiceIssuerName-C-002-M": { + "Function": "Format", + "Reference": "InvoiceIssuerName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "InvoiceIssuerName MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "InvoiceIssuerName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "InvoiceIssuerName-C-003-M": { + "Function": "Nullability", + "Reference": "InvoiceIssuerName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "InvoiceIssuerName MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "InvoiceIssuerName", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ProviderName-C-000-M": { + "Function": "Composite", + "Reference": "ProviderName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ProviderName column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ProviderName-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ProviderName-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ProviderName-C-003-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-038-M", + "ProviderName-C-001-M", + "ProviderName-C-002-M", + "ProviderName-C-003-M" + ] + } + }, + "ProviderName-C-001-M": { + "Function": "Type", + "Reference": "ProviderName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ProviderName MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "ProviderName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ProviderName-C-002-M": { + "Function": "Format", + "Reference": "ProviderName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ProviderName MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "ProviderName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ProviderName-C-003-M": { + "Function": "Nullability", + "Reference": "ProviderName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ProviderName MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ProviderName", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingAccountId-C-000-M": { + "Function": "Composite", + "Reference": "BillingAccountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The BillingAccountId column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingAccountId-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingAccountId-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingAccountId-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingAccountId-C-004-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingAccountId-C-005-O" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-024-M", + "BillingAccountId-C-001-M", + "BillingAccountId-C-002-M", + "BillingAccountId-C-003-M", + "BillingAccountId-C-004-M", + "BillingAccountId-C-005-O" + ] + } + }, + "BillingAccountId-C-001-M": { + "Function": "Nullability", + "Reference": "BillingAccountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingAccountId MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "BillingAccountId", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingAccountId-C-002-M": { + "Function": "Type", + "EntityType": "Column", + "Reference": "BillingAccountId", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingAccountId MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "BillingAccountId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingAccountId-C-003-M": { + "Function": "Format", + "EntityType": "Column", + "Reference": "BillingAccountId", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingAccountId MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "BillingAccountId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingAccountId-C-004-M": { + "Function": "Validation", + "Reference": "BillingAccountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "BillingAccountId MUST be a unique identifier within a provider.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingAccountId-C-005-O": { + "Function": "Validation", + "Reference": "BillingAccountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "BillingAccountId SHOULD be a fully-qualified identifier.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingAccountName-C-000-M": { + "Function": "Composite", + "Reference": "BillingAccountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The BillingAccountName column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingAccountName-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingAccountName-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingAccountName-C-003-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-005-M", + "BillingAccountName-C-001-M", + "BillingAccountName-C-002-M", + "BillingAccountName-C-003-C" + ] + } + }, + "BillingAccountName-C-001-M": { + "Function": "Type", + "Reference": "BillingAccountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingAccountName MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "BillingAccountName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingAccountName-C-002-M": { + "Function": "Format", + "Reference": "BillingAccountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingAccountName MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "BillingAccountName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingAccountName-C-003-C": { + "Function": "Nullability", + "Reference": "BillingAccountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "ACCOUNT_NAMING_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingAccountName MUST NOT be null when the provider supports assigning a display name for the billing account.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "BillingAccountName", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingPeriodStart-C-000-M": { + "Function": "Composite", + "Reference": "BillingPeriodStart", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The BillingPeriodStart column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingPeriodStart-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingPeriodStart-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingPeriodStart-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingPeriodStart-C-004-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-009-M", + "BillingPeriodStart-C-001-M", + "BillingPeriodStart-C-002-M", + "BillingPeriodStart-C-003-M", + "BillingPeriodStart-C-004-M" + ] + } + }, + "BillingPeriodStart-C-001-M": { + "Function": "Type", + "Reference": "BillingPeriodStart", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingPeriodStart MUST be of type Date/Time.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeDateTime", + "ColumnName": "BillingPeriodStart" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingPeriodStart-C-002-M": { + "Function": "Format", + "Reference": "BillingPeriodStart", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingPeriodStart MUST conform to DateTimeFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatDateTime", + "ColumnName": "BillingPeriodStart" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingPeriodStart-C-003-M": { + "Function": "Nullability", + "Reference": "BillingPeriodStart", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingPeriodStart MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "BillingPeriodStart", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingPeriodStart-C-004-M": { + "Function": "Validation", + "Reference": "BillingPeriodStart", + "EntityType": "Column", + "Notes": "Inclusive start bound of the billing period", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "BillingPeriodStart MUST be the inclusive start bound of the billing period.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargeCategory-C-000-M": { + "Function": "Composite", + "Reference": "ChargeCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ChargeCategory column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeCategory-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeCategory-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeCategory-C-003-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-008-M", + "ChargeCategory-C-001-M", + "ChargeCategory-C-002-M", + "ChargeCategory-C-003-M" + ] + } + }, + "ChargeCategory-C-001-M": { + "Function": "Type", + "Reference": "ChargeCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargeCategory MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "ChargeCategory" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargeCategory-C-002-M": { + "Function": "Nullability", + "Reference": "ChargeCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargeCategory MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeCategory", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargeCategory-C-003-M": { + "Function": "Validation", + "Reference": "ChargeCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargeCategory MUST be one of the allowed values.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Purchase" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Tax" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Credit" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Adjustment" + } + ] + }, + "Condition": {}, + "Dependencies": [] + } + }, + "AvailabilityZone-C-000-C": { + "Function": "Composite", + "Reference": "AvailabilityZone", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "AVAILABILITY_ZONE_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The AvailabilityZone column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "AvailabilityZone-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "AvailabilityZone-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "AvailabilityZone-C-003-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-003-C", + "AvailabilityZone-C-001-M", + "AvailabilityZone-C-002-M", + "AvailabilityZone-C-003-C" + ] + } + }, + "AvailabilityZone-C-001-M": { + "Function": "Type", + "Reference": "AvailabilityZone", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "AvailabilityZone MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "AvailabilityZone" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "AvailabilityZone-C-002-M": { + "Function": "Format", + "Reference": "AvailabilityZone", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "AvailabilityZone MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "AvailabilityZone" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "AvailabilityZone-C-003-C": { + "Function": "Nullability", + "Reference": "AvailabilityZone", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "AvailabilityZone MUST be null when a charge is not specific to an availability zone.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "PublisherName-C-000-M": { + "Function": "Composite", + "Reference": "PublisherName", + "EntityType": "Column", + "Notes": "Main composite rule for PublisherName column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The PublisherName column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PublisherName-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PublisherName-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PublisherName-C-003-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-021-M", + "PublisherName-C-001-M", + "PublisherName-C-002-M", + "PublisherName-C-003-M" + ] + } + }, + "PublisherName-C-001-M": { + "Function": "Type", + "Reference": "PublisherName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PublisherName MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "PublisherName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PublisherName-C-002-M": { + "Function": "Format", + "Reference": "PublisherName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PublisherName MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "PublisherName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PublisherName-C-003-M": { + "Function": "Nullability", + "Reference": "PublisherName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PublisherName MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "PublisherName", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ServiceCategory-C-000-M": { + "Function": "Composite", + "Reference": "ServiceCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ServiceCategory column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceCategory-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceCategory-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceCategory-C-003-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-040-M", + "ServiceCategory-C-001-M", + "ServiceCategory-C-002-M", + "ServiceCategory-C-003-M" + ] + } + }, + "ServiceCategory-C-001-M": { + "Function": "Type", + "Reference": "ServiceCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ServiceCategory MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "ServiceCategory" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ServiceCategory-C-002-M": { + "Function": "Nullability", + "Reference": "ServiceCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ServiceCategory MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ServiceCategory", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ServiceCategory-C-003-M": { + "Function": "Validation", + "Reference": "ServiceCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ServiceCategory MUST be one of the allowed values.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "AI and Machine Learning" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Analytics" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Business Applications" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Compute" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Databases" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Developer Tools" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Multicloud" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Identity" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Integration" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Internet of Things" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Management and Governance" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Media" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Migration" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Mobile" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Networking" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Security" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Storage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Web" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Other" + } + ] + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargePeriodStart-C-000-M": { + "Function": "Composite", + "Reference": "ChargePeriodStart", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ChargePeriodStart column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargePeriodStart-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargePeriodStart-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargePeriodStart-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargePeriodStart-C-004-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-037-M", + "ChargePeriodStart-C-001-M", + "ChargePeriodStart-C-002-M", + "ChargePeriodStart-C-003-M", + "ChargePeriodStart-C-004-M" + ] + } + }, + "ChargePeriodStart-C-001-M": { + "Function": "Type", + "Reference": "ChargePeriodStart", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargePeriodStart MUST be of type Date/Time.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeDateTime", + "ColumnName": "ChargePeriodStart", + "ExpectedType": "DateTime" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargePeriodStart-C-002-M": { + "Function": "Format", + "Reference": "ChargePeriodStart", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargePeriodStart MUST conform to DateTimeFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatDateTime", + "ColumnName": "ChargePeriodStart" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargePeriodStart-C-003-M": { + "Function": "Nullability", + "Reference": "ChargePeriodStart", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargePeriodStart MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargePeriodStart", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargePeriodStart-C-004-M": { + "Function": "Validation", + "Reference": "ChargePeriodStart", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ChargePeriodStart MUST be the inclusive start bound of the effective period of the charge.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuMeter-C-000-C": { + "Function": "Composite", + "Reference": "SkuMeter", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED", + "UNIT_PRICING_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The SkuMeter column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuMeter-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuMeter-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuMeter-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuMeter-C-006-O" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-059-C", + "SkuMeter-C-001-M", + "SkuMeter-C-002-M", + "SkuMeter-C-003-C", + "SkuMeter-C-006-O" + ] + } + }, + "SkuMeter-C-001-M": { + "Function": "Type", + "Reference": "SkuMeter", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuMeter MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "SkuMeter" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuMeter-C-002-M": { + "Function": "Format", + "Reference": "SkuMeter", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuMeter MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "SkuMeter" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuMeter-C-003-C": { + "Function": "Composite", + "Reference": "SkuMeter", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuMeter nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuMeter-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuMeter-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "SkuMeter-C-004-C", + "SkuMeter-C-005-C" + ] + } + }, + "SkuMeter-C-004-C": { + "Function": "Nullability", + "Reference": "SkuMeter", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuMeter MUST be null when SkuId is null.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "SkuMeter", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "SkuId", + "Value": null + }, + "Dependencies": [] + } + }, + "SkuMeter-C-005-C": { + "Function": "Nullability", + "Reference": "SkuMeter", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuMeter SHOULD NOT be null when SkuId is not null.", + "Keyword": "SHOULD NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "SkuMeter", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "SkuId", + "Value": null + }, + "Dependencies": [] + } + }, + "SkuMeter-C-006-O": { + "Function": "Validation", + "Reference": "SkuMeter", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuMeter SHOULD remain consistent over time for a given SkuId.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ListUnitPrice-C-000-C": { + "Function": "Composite", + "Reference": "ListUnitPrice", + "EntityType": "Column", + "Notes": null, + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ListUnitPrice column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListUnitPrice-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListUnitPrice-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListUnitPrice-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListUnitPrice-C-007-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-004-C", + "ListUnitPrice-C-001-M", + "ListUnitPrice-C-002-M", + "ListUnitPrice-C-003-M", + "ListUnitPrice-C-007-C" + ] + } + }, + "ListUnitPrice-C-001-M": { + "Function": "Type", + "Reference": "ListUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ListUnitPrice MUST be of type Decimal.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeDecimal", + "ColumnName": "ListUnitPrice" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ListUnitPrice-C-002-M": { + "Function": "Format", + "Reference": "ListUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ListUnitPrice MUST conform to NumericFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatNumeric", + "ColumnName": "ListUnitPrice" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ListUnitPrice-C-003-M": { + "Function": "Composite", + "Reference": "ListUnitPrice", + "EntityType": "Column", + "Notes": null, + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ListUnitPrice nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListUnitPrice-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListUnitPrice-C-005-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListUnitPrice-C-006-O" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "ChargeCategory-C-000-M", + "ListUnitPrice-C-004-C", + "ListUnitPrice-C-005-C", + "ListUnitPrice-C-006-O" + ] + } + }, + "ListUnitPrice-C-004-C": { + "Function": "Nullability", + "Reference": "ListUnitPrice", + "EntityType": "Column", + "Notes": null, + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ListUnitPrice MUST be null when ChargeCategory is \"Tax\".", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "ListUnitPrice", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Tax" + }, + "Dependencies": [ + "ChargeCategory-C-000-M" + ] + } + }, + "ListUnitPrice-C-005-C": { + "Function": "Nullability", + "Reference": "ListUnitPrice", + "EntityType": "Column", + "Notes": null, + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ListUnitPrice MUST NOT be null when ChargeCategory is \"Usage\" or \"Purchase\" and ChargeClass is not \"Correction\".", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ListUnitPrice", + "Value": null + }, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + }, + { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Purchase" + } + ] + } + ] + }, + "Dependencies": [ + "ChargeClass-C-000-M" + ] + } + }, + "ListUnitPrice-C-006-O": { + "Function": "Nullability", + "Reference": "ListUnitPrice", + "EntityType": "Column", + "Notes": null, + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ListUnitPrice MAY be null in all other cases.", + "Keyword": "MAY", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "ListUnitPrice", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ListUnitPrice-C-007-C": { + "Function": "Composite", + "Reference": "ListUnitPrice", + "EntityType": "Column", + "Notes": null, + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When ListUnitPrice is not null, ListUnitPrice adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListUnitPrice-C-008-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListUnitPrice-C-009-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListUnitPrice-C-010-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListUnitPrice-C-011-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ListUnitPrice", + "Value": null + }, + "Dependencies": [ + "ChargeCategory-C-000-M", + "ListUnitPrice-C-008-M", + "ListUnitPrice-C-009-M", + "ListUnitPrice-C-010-C", + "ListUnitPrice-C-011-C" + ] + } + }, + "ListUnitPrice-C-008-M": { + "Function": "Validation", + "Reference": "ListUnitPrice", + "EntityType": "Column", + "Notes": null, + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ListUnitPrice MUST be a non-negative decimal value.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckGreaterOrEqualThanValue", + "ColumnName": "ListUnitPrice", + "Value": 0 + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ListUnitPrice-C-009-M": { + "Function": "Validation", + "Reference": "ListUnitPrice", + "EntityType": "Column", + "Notes": null, + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ListUnitPrice MUST be denominated in the BillingCurrency.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ListUnitPrice-C-010-C": { + "Function": "Validation", + "Reference": "ListUnitPrice", + "EntityType": "Column", + "Notes": null, + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The product of ListUnitPrice and PricingQuantity MUST match the ListCost when PricingQuantity is not null and ChargeClass is not \"Correction\".", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnByColumnEqualsColumnValue", + "ColumnAName": "ListUnitPrice", + "ColumnBName": "PricingQuantity", + "ResultColumnName": "ListCost" + }, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ListUnitPrice", + "Value": null + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + } + ] + }, + "Dependencies": [ + "ChargeClass-C-000-M" + ] + } + }, + "ListUnitPrice-C-011-C": { + "Function": "Validation", + "Reference": "ListUnitPrice", + "EntityType": "Column", + "Notes": null, + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Discrepancies in ListUnitPrice, ListCost, or PricingQuantity MAY exist when ChargeClass is \"Correction\".", + "Keyword": "MAY", + "Requirement": {}, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + }, + "Dependencies": [ + "ChargeClass-C-000-M" + ] + } + }, + "PricingQuantity-C-000-M": { + "Function": "Composite", + "Reference": "PricingQuantity", + "EntityType": "Column", + "Notes": "Main composite rule for PricingQuantity column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The PricingQuantity column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingQuantity-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingQuantity-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingQuantity-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingQuantity-C-007-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-036-M", + "PricingQuantity-C-001-M", + "PricingQuantity-C-002-M", + "PricingQuantity-C-003-M", + "PricingQuantity-C-007-C" + ] + } + }, + "PricingQuantity-C-001-M": { + "Function": "Type", + "Reference": "PricingQuantity", + "EntityType": "Column", + "Notes": "PricingQuantity must be of type Decimal", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingQuantity MUST be of type Decimal.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeDecimal", + "ColumnName": "PricingQuantity" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingQuantity-C-002-M": { + "Function": "Format", + "Reference": "PricingQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingQuantity MUST conform to NumericFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatNumeric", + "ColumnName": "PricingQuantity" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingQuantity-C-003-M": { + "Function": "Composite", + "Reference": "PricingQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingQuantity nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingQuantity-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingQuantity-C-005-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingQuantity-C-006-O" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "PricingQuantity-C-004-C", + "PricingQuantity-C-005-C", + "PricingQuantity-C-006-O" + ] + } + }, + "PricingQuantity-C-004-C": { + "Function": "Nullability", + "Reference": "PricingQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingQuantity MUST be null when ChargeCategory is \"Tax\".", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "PricingQuantity", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Tax" + }, + "Dependencies": [ + "ChargeCategory-C-000-M" + ] + } + }, + "PricingQuantity-C-005-C": { + "Function": "Nullability", + "Reference": "PricingQuantity", + "EntityType": "Column", + "Notes": "PricingQuantity must not be null when ChargeCategory is Usage or Purchase and ChargeClass is not Correction", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingQuantity MUST NOT be null when ChargeCategory is \"Usage\" or \"Purchase\" and ChargeClass is not \"Correction\".", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingQuantity", + "Value": null + }, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Purchase" + } + ] + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + } + ] + }, + "Dependencies": [ + "ChargeCategory-C-000-M", + "ChargeClass-C-000-M" + ] + } + }, + "PricingQuantity-C-006-O": { + "Function": "Nullability", + "Reference": "PricingQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "PricingQuantity MAY be null in all other cases.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingQuantity-C-007-C": { + "Function": "Composite", + "Reference": "PricingQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When PricingQuantity is not null, PricingQuantity adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingQuantity-C-008-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingQuantity-C-009-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingQuantity-C-010-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingQuantity", + "Value": null + }, + "Dependencies": [ + "PricingQuantity-C-008-M", + "PricingQuantity-C-009-C", + "PricingQuantity-C-010-C" + ] + } + }, + "PricingQuantity-C-008-M": { + "Function": "Validation", + "Reference": "PricingQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingQuantity MUST be a valid decimal value.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingQuantity", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingQuantity-C-009-C": { + "Function": "Validation", + "Reference": "PricingQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "The product of PricingQuantity and a unit price (e.g., ContractedUnitPrice) MUST match the corresponding cost metric (e.g., ContractedCost) when the unit price is not null and ChargeClass is not \"Correction\".", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingQuantity-C-010-C": { + "Function": "Validation", + "Reference": "PricingQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Discrepancies in PricingQuantity, unit prices (e.g., ContractedUnitPrice), or costs (e.g., ContractedCost) MAY exist when ChargeClass is \"Correction\".", + "Keyword": "MAY", + "Requirement": {}, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + }, + "Dependencies": [ + "ChargeClass-C-005-C" + ] + } + }, + "CommitmentDiscountId-C-000-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The CommitmentDiscountId column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountId-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountId-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountId-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountId-C-006-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-013-C", + "CommitmentDiscountId-C-001-M", + "CommitmentDiscountId-C-002-M", + "CommitmentDiscountId-C-003-C", + "CommitmentDiscountId-C-006-C" + ] + } + }, + "CommitmentDiscountId-C-001-M": { + "Function": "Type", + "Reference": "CommitmentDiscountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountId MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "CommitmentDiscountId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountId-C-002-M": { + "Function": "Format", + "Reference": "CommitmentDiscountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountId MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "CommitmentDiscountId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountId-C-003-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountId nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountId-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountId-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CommitmentDiscountId-C-004-C", + "CommitmentDiscountId-C-005-C" + ] + } + }, + "CommitmentDiscountId-C-004-C": { + "Function": "Nullability", + "Reference": "CommitmentDiscountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountId MUST be null when a charge is not related to a commitment discount.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountId-C-005-C": { + "Function": "Nullability", + "Reference": "CommitmentDiscountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountId MUST NOT be null when a charge is related to a commitment discount.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountId-C-006-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When CommitmentDiscountId is not null, CommitmentDiscountId adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountId-C-007-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountId-C-008-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "CommitmentDiscountId", + "Value": null + }, + "Dependencies": [ + "CommitmentDiscountId-C-007-M", + "CommitmentDiscountId-C-008-C" + ] + } + }, + "CommitmentDiscountId-C-007-M": { + "Function": "Validation", + "Reference": "CommitmentDiscountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountId MUST be a unique identifier within the provider.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountId-C-008-C": { + "Function": "Validation", + "Reference": "CommitmentDiscountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountId SHOULD be a fully-qualified identifier.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ResourceId-C-000-C": { + "Function": "Composite", + "Reference": "ResourceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "BILLING_BASED_ON_PROVISIONED_RESOURCES_SUPPORTED", + "RESOURCE_TYPE_ASSIGNMENT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ResourceId column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceId-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceId-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceId-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceId-C-006-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-043-C", + "ResourceId-C-001-M", + "ResourceId-C-002-M", + "ResourceId-C-003-C", + "ResourceId-C-006-C" + ] + } + }, + "ResourceId-C-001-M": { + "Function": "Type", + "Reference": "ResourceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ResourceId MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "ResourceId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ResourceId-C-002-M": { + "Function": "Format", + "Reference": "ResourceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ResourceId MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "ResourceId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ResourceId-C-003-C": { + "Function": "Composite", + "Reference": "ResourceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ResourceId nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceId-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceId-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "ResourceId-C-004-C", + "ResourceId-C-005-C" + ] + } + }, + "ResourceId-C-004-C": { + "Function": "Nullability", + "Reference": "ResourceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ResourceId MUST be null when a charge is not related to a resource.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ResourceId-C-005-C": { + "Function": "Nullability", + "Reference": "ResourceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ResourceId MUST NOT be null when a charge is related to a resource.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ResourceId-C-006-C": { + "Function": "Composite", + "Reference": "ResourceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When ResourceId is not null, ResourceId adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceId-C-007-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceId-C-008-O" + } + ] + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "CheckCondition": "ResourceId", + "Value": null + }, + "Dependencies": [ + "ResourceId-C-007-M", + "ResourceId-C-008-O" + ] + } + }, + "ResourceId-C-007-M": { + "Function": "Validation", + "Reference": "ResourceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ResourceId MUST be a unique identifier within the provider.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ResourceId-C-008-O": { + "Function": "Validation", + "Reference": "ResourceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ResourceId SHOULD be a fully-qualified identifier.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargeDescription-C-000-M": { + "Function": "Composite", + "Reference": "ChargeDescription", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ChargeDescription column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeDescription-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeDescription-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeDescription-C-003-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeDescription-C-004-O" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-025-M", + "ChargeDescription-C-001-M", + "ChargeDescription-C-002-M", + "ChargeDescription-C-003-O", + "ChargeDescription-C-004-O" + ] + } + }, + "ChargeDescription-C-001-M": { + "Function": "Type", + "EntityType": "Column", + "Reference": "ChargeDescription", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargeDescription MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "ChargeDescription" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargeDescription-C-002-M": { + "Function": "Format", + "EntityType": "Column", + "Reference": "ChargeDescription", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargeDescription MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "ChargeDescription" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargeDescription-C-003-O": { + "Function": "Nullability", + "Reference": "ChargeDescription", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargeDescription SHOULD NOT be null.", + "Keyword": "SHOULD NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeDescription", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargeDescription-C-004-O": { + "Function": "Validation", + "Reference": "ChargeDescription", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ChargeDescription maximum length SHOULD be provided in the corresponding FOCUS Metadata Schema.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceId-C-000-C": { + "Function": "Composite", + "Reference": "SkuPriceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED", + "UNIT_PRICING_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The SkuPriceId column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceId-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceId-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceId-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceId-C-007-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-058-C", + "SkuPriceId-C-001-M", + "SkuPriceId-C-002-M", + "SkuPriceId-C-003-M", + "SkuPriceId-C-007-C" + ] + } + }, + "SkuPriceId-C-001-M": { + "Function": "Type", + "Reference": "SkuPriceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceId MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "SkuPriceId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceId-C-002-M": { + "Function": "Format", + "Reference": "SkuPriceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceId MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "SkuPriceId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceId-C-003-M": { + "Function": "Composite", + "Reference": "SkuPriceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceId nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceId-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceId-C-005-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceId-C-006-O" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "SkuPriceId-C-004-C", + "SkuPriceId-C-005-C", + "SkuPriceId-C-006-O" + ] + } + }, + "SkuPriceId-C-004-C": { + "Function": "Nullability", + "Reference": "SkuPriceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceId MUST be null when ChargeCategory is \"Tax\".", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "SkuPriceId", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Tax" + }, + "Dependencies": [] + } + }, + "SkuPriceId-C-005-C": { + "Function": "Nullability", + "Reference": "SkuPriceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceId MUST NOT be null when ChargeCategory is \"Usage\" or \"Purchase\" and ChargeClass is not \"Correction\".", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "SkuPriceId", + "Value": null + }, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Purchase" + } + ] + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + } + ] + }, + "Dependencies": [ + "ChargeClass-C-000-M", + "ChargeCategory-C-000-M" + ] + } + }, + "SkuPriceId-C-006-O": { + "Function": "Nullability", + "Reference": "SkuPriceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceId MAY be null in all other cases.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceId-C-007-C": { + "Function": "Composite", + "Reference": "SkuPriceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When SkuPriceId is not null, SkuPriceId adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceId-C-008-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceId-C-009-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceId-C-010-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceId-C-011-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceId-C-012-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceId-C-013-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceId-C-014-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceId-C-015-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "SkuPriceId", + "Value": null + }, + "Dependencies": [ + "SkuPriceId-C-008-M", + "SkuPriceId-C-009-M", + "SkuPriceId-C-010-M", + "SkuPriceId-C-011-O", + "SkuPriceId-C-012-C", + "SkuPriceId-C-013-M", + "SkuPriceId-C-014-C", + "SkuPriceId-C-015-C" + ] + } + }, + "SkuPriceId-C-008-M": { + "Function": "Validation", + "Reference": "SkuPriceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceId MUST have one and only one parent SkuId.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckDistinctCount", + "ColumnAName": "SkuPriceId", + "ColumnBName": "SkuId", + "ExpectedCount": 1 + }, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceId-C-009-M": { + "Function": "Validation", + "Reference": "SkuPriceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceId MUST remain consistent over time.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceId-C-010-M": { + "Function": "Validation", + "Reference": "SkuPriceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceId MUST remain consistent across billing accounts or contracts.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceId-C-011-O": { + "Function": "Validation", + "Reference": "SkuPriceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceId MAY equal SkuId.", + "Keyword": "MAY", + "Requirement": { + "CheckFunction": "CheckSameValue", + "ColumnAName": "SkuPriceId", + "ColumnBName": "SkuId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceId-C-012-C": { + "Function": "Validation", + "Reference": "SkuPriceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceId MUST be associated with a given resource or service when ChargeCategory is \"Usage\" or \"Purchase\".", + "Keyword": "MUST", + "Requirement": {}, + "Condition": { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Purchase" + } + ] + }, + "Dependencies": [ + "ChargeCategory-C-003-M" + ] + } + }, + "SkuPriceId-C-013-M": { + "Function": "Validation", + "Reference": "SkuPriceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceId MUST reference a SKU Price in a provider-supplied price list, enabling the lookup of detailed information about the SKU Price.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceId-C-014-C": { + "Function": "Validation", + "Reference": "SkuPriceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceId MUST support the lookup of the ListUnitPrice when the provider publishes unit prices exclusive of discounts.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceId-C-015-C": { + "Function": "Validation", + "Reference": "SkuPriceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "NEGOTIATED_PRICING_SUPPORTED" + ], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceId MUST support the verification of the given ContractedUnitPrice when the provider supports negotiated pricing concepts.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "InvoiceId-C-000-O": { + "Function": "Composite", + "Reference": "InvoiceId", + "EntityType": "Column", + "Notes": "Root composite for column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The InvoiceId column adheres to the following requirements:", + "Keyword": "SHOULD", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "InvoiceId-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "InvoiceId-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "InvoiceId-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "InvoiceId-C-006-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "InvoiceId-C-007-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-033-O", + "InvoiceId-C-001-M", + "InvoiceId-C-002-M", + "InvoiceId-C-003-C", + "InvoiceId-C-006-O", + "InvoiceId-C-007-C" + ] + } + }, + "InvoiceId-C-001-M": { + "Function": "Type", + "Reference": "InvoiceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "InvoiceId MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "InvoiceId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "InvoiceId-C-002-M": { + "Function": "Format", + "Reference": "InvoiceId", + "EntityType": "Column", + "Notes": "Cross-attribute reference: StringHandling", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "InvoiceId MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "InvoiceId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "InvoiceId-C-003-C": { + "Function": "Composite", + "Reference": "InvoiceId", + "EntityType": "Column", + "Notes": "Composite for nullability rules", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "InvoiceId nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "InvoiceId-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "InvoiceId-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "InvoiceId-C-004-C", + "InvoiceId-C-005-C" + ] + } + }, + "InvoiceId-C-004-C": { + "Function": "Nullability", + "Reference": "InvoiceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "InvoiceId MUST be null when the charge is not associated either with an invoice or with a pre-generated provisional invoice.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "InvoiceId", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "InvoiceId-C-005-C": { + "Function": "Nullability", + "Reference": "InvoiceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "InvoiceId MUST NOT be null when the charge is associated with either an issued invoice or a pre-generated provisional invoice.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "InvoiceId", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "InvoiceId-C-006-O": { + "Function": "Validation", + "Reference": "InvoiceId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "InvoiceId MAY be generated prior to an invoice being issued.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "InvoiceId-C-007-C": { + "Function": "Validation", + "Reference": "InvoiceId", + "EntityType": "Column", + "Notes": "Cross-column reference: BillingAccountId", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "InvoiceId MUST be associated with the related charge and BillingAccountId when a pre-generated invoice or provisional invoice exists.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [ + "BillingAccountId-C-000-M" + ] + } + }, + "PricingCurrencyListUnitPrice-C-000-C": { + "Function": "Composite", + "Reference": "PricingCurrencyListUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The PricingCurrencyListUnitPrice column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyListUnitPrice-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyListUnitPrice-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyListUnitPrice-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyListUnitPrice-C-007-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-054-C", + "PricingCurrencyListUnitPrice-C-001-M", + "PricingCurrencyListUnitPrice-C-002-M", + "PricingCurrencyListUnitPrice-C-003-M", + "PricingCurrencyListUnitPrice-C-007-C" + ] + } + }, + "PricingCurrencyListUnitPrice-C-001-M": { + "Function": "Type", + "Reference": "PricingCurrencyListUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyListUnitPrice MUST be of type Decimal.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeDecimal", + "ColumnName": "PricingCurrencyListUnitPrice" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrencyListUnitPrice-C-002-M": { + "Function": "Format", + "Reference": "PricingCurrencyListUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyListUnitPrice MUST conform to NumericFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatNumeric", + "ColumnName": "PricingCurrencyListUnitPrice" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrencyListUnitPrice-C-003-M": { + "Function": "Composite", + "Reference": "PricingCurrencyListUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyListUnitPrice nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyListUnitPrice-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyListUnitPrice-C-005-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyListUnitPrice-C-006-O" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "PricingCurrencyListUnitPrice-C-004-C", + "PricingCurrencyListUnitPrice-C-005-C", + "PricingCurrencyListUnitPrice-C-006-O" + ] + } + }, + "PricingCurrencyListUnitPrice-C-004-C": { + "Function": "Nullability", + "Reference": "PricingCurrencyListUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyListUnitPrice MUST be null when ChargeCategory is \"Tax\".", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "PricingCurrencyListUnitPrice", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Tax" + }, + "Dependencies": [] + } + }, + "PricingCurrencyListUnitPrice-C-005-C": { + "Function": "Nullability", + "Reference": "PricingCurrencyListUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyListUnitPrice MUST NOT be null when ChargeCategory is \"Usage\" or \"Purchase\" and ChargeClass is not \"Correction\".", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingCurrencyListUnitPrice", + "Value": null + }, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Purchase" + } + ] + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + } + ] + }, + "Dependencies": [] + } + }, + "PricingCurrencyListUnitPrice-C-006-O": { + "Function": "Nullability", + "Reference": "PricingCurrencyListUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyListUnitPrice MAY be null in all other cases.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrencyListUnitPrice-C-007-C": { + "Function": "Composite", + "Reference": "PricingCurrencyListUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When PricingCurrencyListUnitPrice is not null, PricingCurrencyListUnitPrice adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyListUnitPrice-C-008-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyListUnitPrice-C-009-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyListUnitPrice-C-010-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingCurrencyListUnitPrice", + "Value": null + }, + "Dependencies": [ + "PricingCurrencyListUnitPrice-C-008-M", + "PricingCurrencyListUnitPrice-C-009-M", + "PricingCurrencyListUnitPrice-C-010-C" + ] + } + }, + "PricingCurrencyListUnitPrice-C-008-M": { + "Function": "Validation", + "Reference": "PricingCurrencyListUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyListUnitPrice MUST be a non-negative decimal value.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckGreaterOrEqualThanValue", + "ColumnName": "PricingCurrencyListUnitPrice", + "Value": 0 + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrencyListUnitPrice-C-009-M": { + "Function": "Validation", + "Reference": "PricingCurrencyListUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyListUnitPrice MUST be denominated in the PricingCurrency.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrencyListUnitPrice-C-010-C": { + "Function": "Validation", + "Reference": "PricingCurrencyListUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Discrepancies in PricingCurrencyListUnitPrice, ListCost, or PricingQuantity MAY be addressed independently when ChargeClass is \"Correction\".", + "Keyword": "MAY", + "Requirement": {}, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + }, + "Dependencies": [ + "ChargeClass-C-005-C" + ] + } + }, + "ConsumedUnit-C-000-C": { + "Function": "Composite", + "Reference": "ConsumedUnit", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "USAGE_MEASUREMENT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ConsumedUnit column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ConsumedUnit-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ConsumedUnit-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ConsumedUnit-C-003-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ConsumedUnit-C-004-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-066-C", + "ConsumedUnit-C-001-M", + "ConsumedUnit-C-002-M", + "ConsumedUnit-C-003-O", + "ConsumedUnit-C-004-C" + ] + } + }, + "ConsumedUnit-C-001-M": { + "Function": "Type", + "Reference": "ConsumedUnit", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ConsumedUnit MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "ConsumedUnit" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ConsumedUnit-C-002-M": { + "Function": "Format", + "Reference": "ConsumedUnit", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ConsumedUnit MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "ConsumedUnit" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ConsumedUnit-C-003-O": { + "Function": "Format", + "Reference": "ConsumedUnit", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ConsumedUnit SHOULD conform to UnitFormat requirements.", + "Keyword": "SHOULD", + "Requirement": { + "CheckFunction": "FormatUnit", + "ColumnName": "ConsumedUnit" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ConsumedUnit-C-004-C": { + "Function": "Composite", + "Reference": "ConsumedUnit", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "USAGE_MEASUREMENT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ConsumedUnit nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ConsumedUnit-C-005-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ConsumedUnit-C-006-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "ConsumedUnit-C-005-C", + "ConsumedUnit-C-006-C" + ] + } + }, + "ConsumedUnit-C-005-C": { + "Function": "Nullability", + "Reference": "ConsumedUnit", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ConsumedUnit MUST be null when ConsumedQuantity is null.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "ConsumedUnit", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ConsumedQuantity", + "Value": null + }, + "Dependencies": [ + "ConsumedQuantity-C-000-C" + ] + } + }, + "ConsumedUnit-C-006-C": { + "Function": "Nullability", + "Reference": "ConsumedUnit", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ConsumedUnit MUST NOT be null when ConsumedQuantity is not null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ConsumedUnit", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ConsumedQuantity", + "Value": null + }, + "Dependencies": [ + "ConsumedQuantity-C-000-C" + ] + } + }, + "ChargeFrequency-C-000-O": { + "Function": "Composite", + "Reference": "ChargeFrequency", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ChargeFrequency column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeFrequency-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeFrequency-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeFrequency-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeFrequency-C-004-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-027-O", + "ChargeFrequency-C-001-M", + "ChargeFrequency-C-002-M", + "ChargeFrequency-C-003-M", + "ChargeFrequency-C-004-C" + ] + } + }, + "ChargeFrequency-C-001-M": { + "Function": "Type", + "Reference": "ChargeFrequency", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargeFrequency MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "ChargeFrequency" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargeFrequency-C-002-M": { + "Function": "Nullability", + "Reference": "ChargeFrequency", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargeFrequency MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeFrequency", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargeFrequency-C-003-M": { + "Function": "Validation", + "Reference": "ChargeFrequency", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargeFrequency MUST be one of the allowed values.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeFrequency", + "Value": "One-Time" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeFrequency", + "Value": "Recurring" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeFrequency", + "Value": "Usage-Based" + } + ] + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargeFrequency-C-004-C": { + "Function": "Validation", + "Reference": "ChargeFrequency", + "EntityType": "Column", + "Notes": "Cross-column reference to ChargeCategory", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargeFrequency MUST NOT be \"Usage-Based\" when ChargeCategory is \"Purchase\".", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeFrequency", + "Value": "Usage-Based" + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Purchase" + }, + "Dependencies": [ + "ChargeCategory-C-000-M" + ] + } + }, + "SkuPriceDetails-C-000-C": { + "Function": "Composite", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED", + "UNIT_PRICING_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The SkuPriceDetails column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-002-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-006-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-019-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-061-C", + "SkuPriceDetails-C-001-M", + "SkuPriceDetails-C-002-O", + "SkuPriceDetails-C-003-C", + "SkuPriceDetails-C-006-C", + "SkuPriceDetails-C-019-M" + ] + } + }, + "SkuPriceDetails-C-001-M": { + "Function": "Format", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceDetails MUST conform to KeyValueFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatKeyValue", + "ColumnName": "SkuPriceDetails" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceDetails-C-002-O": { + "Function": "Format", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceDetails property keys SHOULD conform to PascalCase format.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceDetails-C-003-C": { + "Function": "Composite", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceDetails nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "SkuPriceDetails-C-004-C", + "SkuPriceDetails-C-005-C" + ] + } + }, + "SkuPriceDetails-C-004-C": { + "Function": "Nullability", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceDetails MUST be null when SkuPriceId is null.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "SkuPriceDetails", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "SkuPriceId", + "Value": null + }, + "Dependencies": [] + } + }, + "SkuPriceDetails-C-005-C": { + "Function": "Nullability", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceDetails MAY be null when SkuPriceId is not null.", + "Keyword": "MAY", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "SkuPriceDetails", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "SkuPriceId", + "Value": null + }, + "Dependencies": [] + } + }, + "SkuPriceDetails-C-006-C": { + "Function": "Composite", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When SkuPriceDetails is not null, SkuPriceDetails adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-007-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-008-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-009-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-010-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-011-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-012-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-016-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-017-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-018-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "SkuPriceDetails", + "Value": null + }, + "Dependencies": [ + "SkuPriceDetails-C-007-M", + "SkuPriceDetails-C-008-M", + "SkuPriceDetails-C-009-C", + "SkuPriceDetails-C-010-C", + "SkuPriceDetails-C-011-O", + "SkuPriceDetails-C-012-O", + "SkuPriceDetails-C-016-O", + "SkuPriceDetails-C-017-C", + "SkuPriceDetails-C-018-C" + ] + } + }, + "SkuPriceDetails-C-007-M": { + "Function": "Validation", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceDetails MUST be associated with a given SkuPriceId.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceDetails-C-008-M": { + "Function": "Validation", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceDetails MUST NOT include properties that are not applicable to the corresponding SkuPriceId.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceDetails-C-009-C": { + "Function": "Validation", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceDetails SHOULD include all FOCUS-defined SKU Price properties listed below that are applicable to the corresponding SkuPriceId.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceDetails-C-010-C": { + "Function": "Validation", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceDetails MUST include the FOCUS-defined SKU Price property when an equivalent property is included as a Provider-defined property.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceDetails-C-011-O": { + "Function": "Validation", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceDetails MAY include properties that are already captured in other dedicated columns.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceDetails-C-012-O": { + "Function": "Composite", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuPriceDetails properties for a given SkuPriceId adhere to the following additional requirements:", + "Keyword": "SHOULD", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-013-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-014-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-015-O" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "SkuPriceDetails-C-013-O", + "SkuPriceDetails-C-014-O", + "SkuPriceDetails-C-015-O" + ] + } + }, + "SkuPriceDetails-C-013-O": { + "Function": "Validation", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Existing SkuPriceDetails properties SHOULD remain consistent over time.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceDetails-C-014-O": { + "Function": "Validation", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Existing SkuPriceDetails properties SHOULD NOT be removed.", + "Keyword": "SHOULD NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceDetails-C-015-O": { + "Function": "Validation", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Additional SkuPriceDetails properties MAY be added over time.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceDetails-C-016-O": { + "Function": "Format", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Property key SHOULD remain consistent across comparable SKUs having that property, and the values for this key SHOULD remain in a consistent format.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceDetails-C-017-C": { + "Function": "Format", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Property key MUST begin with the string \"x_\" unless it is a FOCUS-defined property.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceDetails-C-018-C": { + "Function": "Validation", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Property value MUST represent the value for a single PricingUnit when the property holds a numeric value.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceDetails-C-019-M": { + "Function": "Composite", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "FOCUS-defined SKU Price properties adhere to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-020-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-021-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuPriceDetails-C-022-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "SkuPriceDetails-C-020-M", + "SkuPriceDetails-C-021-M", + "SkuPriceDetails-C-022-C" + ] + } + }, + "SkuPriceDetails-C-020-M": { + "Function": "Format", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Property key MUST match the spelling and casing specified for the FOCUS-defined property.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceDetails-C-021-M": { + "Function": "Type", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Property value MUST be of the type specified for that property.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuPriceDetails-C-022-C": { + "Function": "Validation", + "Reference": "SkuPriceDetails", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Property value MUST represent the value for a single PricingUnit, denominated in the unit of measure specified for that property when the property holds a numeric value.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ConsumedQuantity-C-000-C": { + "Function": "Composite", + "Reference": "ConsumedQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "USAGE_MEASUREMENT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ConsumedQuantity column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ConsumedQuantity-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ConsumedQuantity-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ConsumedQuantity-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ConsumedQuantity-C-008-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-011-C", + "ConsumedQuantity-C-001-M", + "ConsumedQuantity-C-002-M", + "ConsumedQuantity-C-003-C", + "ConsumedQuantity-C-008-C" + ] + } + }, + "ConsumedQuantity-C-001-M": { + "Function": "Type", + "Reference": "ConsumedQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ConsumedQuantity MUST be of type Decimal.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeDecimal", + "ColumnName": "ConsumedQuantity" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ConsumedQuantity-C-002-M": { + "Function": "Format", + "Reference": "ConsumedQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ConsumedQuantity MUST conform to NumericFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatNumeric", + "ColumnName": "ConsumedQuantity" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ConsumedQuantity-C-003-C": { + "Function": "Composite", + "Reference": "ConsumedQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ConsumedQuantity nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ConsumedQuantity-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ConsumedQuantity-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "ConsumedQuantity-C-004-C", + "ConsumedQuantity-C-005-C" + ] + } + }, + "ConsumedQuantity-C-004-C": { + "Function": "Nullability", + "Reference": "ConsumedQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ConsumedQuantity MUST be null when ChargeCategory is not \"Usage\", or when ChargeCategory is \"Usage\" and CommitmentDiscountStatus is \"Unused\".", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "ConsumedQuantity", + "Value": null + }, + "Condition": { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountStatus", + "Value": "Unused" + } + ] + } + ] + }, + "Dependencies": [] + } + }, + "ConsumedQuantity-C-005-C": { + "Function": "Composite", + "Reference": "ConsumedQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When ChargeCategory is \"Usage\" and CommitmentDiscountStatus is not \"Unused\", ConsumedQuantity adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ConsumedQuantity-C-006-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ConsumedQuantity-C-007-C" + } + ] + }, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "CommitmentDiscountStatus", + "Value": "Unused" + } + ] + }, + "Dependencies": [ + "ConsumedQuantity-C-006-C", + "ConsumedQuantity-C-007-C" + ] + } + }, + "ConsumedQuantity-C-006-C": { + "Function": "Nullability", + "Reference": "ConsumedQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ConsumedQuantity MUST NOT be null when ChargeClass is not \"Correction\".", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ConsumedQuantity", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + }, + "Dependencies": [] + } + }, + "ConsumedQuantity-C-007-C": { + "Function": "Nullability", + "Reference": "ConsumedQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ConsumedQuantity MAY be null when ChargeClass is \"Correction\".", + "Keyword": "MAY", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "ConsumedQuantity", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + }, + "Dependencies": [] + } + }, + "ConsumedQuantity-C-008-C": { + "Function": "Validation", + "Reference": "ConsumedQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ConsumedQuantity MUST be a valid decimal value when not null.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ConsumedQuantity", + "Value": null + }, + "Dependencies": [] + } + }, + "SkuId-C-000-C": { + "Function": "Composite", + "Reference": "SkuId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PUBLIC_PRICE_LIST_SUPPORTED", + "UNIT_PRICING_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The SkuId column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuId-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuId-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuId-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuId-C-007-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuId-C-011-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuId-C-012-O" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-060-C", + "SkuId-C-001-M", + "SkuId-C-002-M", + "SkuId-C-003-M", + "SkuId-C-007-M", + "SkuId-C-011-C", + "SkuId-C-012-O" + ] + } + }, + "SkuId-C-001-M": { + "Function": "Type", + "Reference": "SkuId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuId MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "SkuId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuId-C-002-M": { + "Function": "Format", + "Reference": "SkuId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuId MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "SkuId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuId-C-003-M": { + "Function": "Composite", + "Reference": "SkuId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuId nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuId-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuId-C-005-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuId-C-006-O" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "SkuId-C-004-C", + "SkuId-C-005-C", + "SkuId-C-006-O" + ] + } + }, + "SkuId-C-004-C": { + "Function": "Nullability", + "Reference": "SkuId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuId MUST be null when ChargeCategory is \"Tax\".", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "SkuId", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Tax" + }, + "Dependencies": [] + } + }, + "SkuId-C-005-C": { + "Function": "Nullability", + "Reference": "SkuId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuId MUST NOT be null when ChargeCategory is \"Usage\" or \"Purchase\" and ChargeClass is not \"Correction\".", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "SkuId", + "Value": null + }, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Purchase" + } + ] + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + } + ] + }, + "Dependencies": [] + } + }, + "SkuId-C-006-O": { + "Function": "Nullability", + "Reference": "SkuId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuId MAY be null in all other cases.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuId-C-007-M": { + "Function": "Composite", + "Reference": "SkuId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SkuId for a given SKU adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuId-C-008-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuId-C-009-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SkuId-C-010-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "SkuId-C-008-M", + "SkuId-C-009-M", + "SkuId-C-010-M" + ] + } + }, + "SkuId-C-008-M": { + "Function": "Validation", + "Reference": "SkuId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuId MUST remain consistent across billing accounts or contracts.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuId-C-009-M": { + "Function": "Validation", + "Reference": "SkuId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuId MUST remain consistent across PricingCategory values.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuId-C-010-M": { + "Function": "Validation", + "Reference": "SkuId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuId MUST remain consistent regardless of any other factors that might impact the price but do not affect the functionality of the SKU.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SkuId-C-011-C": { + "Function": "Validation", + "Reference": "SkuId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuId MUST be associated with a given resource or service when ChargeCategory is \"Usage\" or \"Purchase\".", + "Keyword": "MUST", + "Requirement": {}, + "Condition": { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Purchase" + } + ] + }, + "Dependencies": [ + "ChargeCategory-C-003-M" + ] + } + }, + "SkuId-C-012-O": { + "Function": "Validation", + "Reference": "SkuId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SkuId MAY equal SkuPriceId.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ResourceType-C-000-C": { + "Function": "Composite", + "Reference": "ResourceType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "BILLING_BASED_ON_PROVISIONED_RESOURCES_SUPPORTED", + "RESOURCE_TYPE_ASSIGNMENT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ResourceType column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceType-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceType-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceType-C-003-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-039-C", + "ResourceType-C-001-M", + "ResourceType-C-002-M", + "ResourceType-C-003-C" + ] + } + }, + "ResourceType-C-001-M": { + "Function": "Type", + "Reference": "ResourceType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ResourceType MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "ResourceType" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ResourceType-C-002-M": { + "Function": "Format", + "Reference": "ResourceType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ResourceType MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "ResourceType" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ResourceType-C-003-C": { + "Function": "Composite", + "Reference": "ResourceType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ResourceType nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceType-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceType-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "ResourceType-C-004-C", + "ResourceType-C-005-C" + ] + } + }, + "ResourceType-C-004-C": { + "Function": "Nullability", + "Reference": "ResourceType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ResourceType MUST be null when ResourceId is null.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "ResourceType", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ResourceId", + "Value": null + }, + "Dependencies": [ + "ResourceId-C-000-C" + ] + } + }, + "ResourceType-C-005-C": { + "Function": "Nullability", + "Reference": "ResourceType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ResourceType MUST NOT be null when ResourceId is not null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ResourceType", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ResourceId", + "Value": null + }, + "Dependencies": [ + "ResourceId-C-000-C" + ] + } + }, + "SubAccountType-C-000-C": { + "Function": "Composite", + "Reference": "SubAccountType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "MULTIPLE_SUB_ACCOUNT_TYPES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The SubAccountType column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountType-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountType-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountType-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountType-C-006-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-067-C", + "SubAccountType-C-001-M", + "SubAccountType-C-002-M", + "SubAccountType-C-003-C", + "SubAccountType-C-006-M" + ] + } + }, + "SubAccountType-C-001-M": { + "Function": "Type", + "Reference": "SubAccountType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SubAccountType MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "SubAccountType" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "SubAccountType-C-002-M": { + "Function": "Format", + "Reference": "SubAccountType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SubAccountType MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "SubAccountType" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "SubAccountType-C-003-C": { + "Function": "Composite", + "Reference": "SubAccountType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SubAccountType nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountType-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountType-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "SubAccountType-C-004-C", + "SubAccountType-C-005-C" + ] + } + }, + "SubAccountType-C-004-C": { + "Function": "Nullability", + "Reference": "SubAccountType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SubAccountType MUST be null when SubAccountId is null.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "SubAccountType", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "SubAccountId", + "Value": null + }, + "Dependencies": [ + "SubAccountId-C-000-C" + ] + } + }, + "SubAccountType-C-005-C": { + "Function": "Nullability", + "Reference": "SubAccountType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SubAccountType MUST NOT be null when SubAccountId is not null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "SubAccountType", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "SubAccountId", + "Value": null + }, + "Dependencies": [ + "SubAccountId-C-000-C" + ] + } + }, + "SubAccountType-C-006-M": { + "Function": "Validation", + "Reference": "SubAccountType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SubAccountType MUST be a consistent, readable display value.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCategory-C-000-M": { + "Function": "Composite", + "Reference": "PricingCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The PricingCategory column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCategory-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCategory-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCategory-C-006-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-022-C", + "PricingCategory-C-001-M", + "PricingCategory-C-002-M", + "PricingCategory-C-006-C" + ] + } + }, + "PricingCategory-C-001-M": { + "Function": "Type", + "Reference": "PricingCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCategory MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "PricingCategory" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCategory-C-002-M": { + "Function": "Composite", + "Reference": "PricingCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCategory nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCategory-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCategory-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCategory-C-005-O" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "PricingCategory-C-003-C", + "PricingCategory-C-004-C", + "PricingCategory-C-005-O" + ] + } + }, + "PricingCategory-C-003-C": { + "Function": "Nullability", + "Reference": "PricingCategory", + "EntityType": "Column", + "Notes": "Cross-column reference: ChargeCategory", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCategory MUST be null when ChargeCategory is \"Tax\".", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "PricingCategory", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Tax" + }, + "Dependencies": [ + "ChargeCategory-C-000-M" + ] + } + }, + "PricingCategory-C-004-C": { + "Function": "Nullability", + "Reference": "PricingCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCategory MUST NOT be null when ChargeCategory is \"Usage\" or \"Purchase\" and ChargeClass is not \"Correction\".", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingCategory", + "Value": null + }, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Purchase" + } + ] + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + } + ] + }, + "Dependencies": [ + "ChargeCategory-C-000-M", + "ChargeClass-C-000-M" + ] + } + }, + "PricingCategory-C-005-O": { + "Function": "Nullability", + "Reference": "PricingCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "PricingCategory MAY be null in all other cases.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCategory-C-006-C": { + "Function": "Composite", + "Reference": "PricingCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When PricingCategory is not null, PricingCategory adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCategory-C-007-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCategory-C-008-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCategory-C-009-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCategory-C-010-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCategory-C-011-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingCategory", + "Value": null + }, + "Dependencies": [ + "PricingCategory-C-007-M", + "PricingCategory-C-008-C", + "PricingCategory-C-009-C", + "PricingCategory-C-010-C", + "PricingCategory-C-011-C" + ] + } + }, + "PricingCategory-C-007-M": { + "Function": "Validation", + "Reference": "PricingCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCategory MUST be one of the allowed values.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "PricingCategory", + "Value": "Standard" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "PricingCategory", + "Value": "Committed" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "PricingCategory", + "Value": "Dynamic" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "PricingCategory", + "Value": "Other" + } + ] + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCategory-C-008-C": { + "Function": "Validation", + "Reference": "PricingCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "PricingCategory MUST be \"Standard\" when pricing is predetermined at the agreed upon rate for the billing account.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingCategory", + "Value": null + }, + "Dependencies": [] + } + }, + "PricingCategory-C-009-C": { + "Function": "Validation", + "Reference": "PricingCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "PricingCategory MUST be \"Committed\" when the charge is subject to an existing commitment discount and is not the purchase of the commitment discount.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCategory-C-010-C": { + "Function": "Validation", + "Reference": "PricingCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "PricingCategory MUST be \"Dynamic\" when pricing is determined by the provider and may change over time, regardless of predetermined agreement pricing.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCategory-C-011-C": { + "Function": "Validation", + "Reference": "PricingCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "PricingCategory MUST be \"Other\" when there is a pricing model but none of the allowed values apply.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrency-C-000-C": { + "Function": "Composite", + "Reference": "PricingCurrency", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The PricingCurrency column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrency-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrency-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrency-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrency-C-004-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-045-C", + "PricingCurrency-C-001-M", + "PricingCurrency-C-002-M", + "PricingCurrency-C-003-M", + "PricingCurrency-C-004-M" + ] + } + }, + "PricingCurrency-C-001-M": { + "Function": "Type", + "Reference": "PricingCurrency", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrency MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "PricingCurrency" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrency-C-002-M": { + "Function": "Format", + "Reference": "PricingCurrency", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrency MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "PricingCurrency" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrency-C-003-M": { + "Function": "Format", + "Reference": "PricingCurrency", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrency MUST conform to CurrencyFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatCurrency", + "ColumnName": "PricingCurrency" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrency-C-004-M": { + "Function": "Nullability", + "Reference": "PricingCurrency", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrency MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingCurrency", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountUnit-C-000-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountUnit", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The CommitmentDiscountUnit column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountUnit-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountUnit-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountUnit-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountUnit-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountUnit-C-007-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-015-C", + "CommitmentDiscountUnit-C-001-M", + "CommitmentDiscountUnit-C-002-M", + "CommitmentDiscountUnit-C-003-M", + "CommitmentDiscountUnit-C-004-C", + "CommitmentDiscountUnit-C-007-C" + ] + } + }, + "CommitmentDiscountUnit-C-001-M": { + "Function": "Type", + "Reference": "CommitmentDiscountUnit", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountUnit MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "CommitmentDiscountUnit" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountUnit-C-002-M": { + "Function": "Format", + "Reference": "CommitmentDiscountUnit", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountUnit MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "CommitmentDiscountUnit" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountUnit-C-003-M": { + "Function": "Format", + "Reference": "CommitmentDiscountUnit", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountUnit SHOULD conform to UnitFormat requirements.", + "Keyword": "SHOULD", + "Requirement": { + "CheckFunction": "FormatUnit", + "ColumnName": "CommitmentDiscountUnit" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountUnit-C-004-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountUnit", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountUnit nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountUnit-C-005-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountUnit-C-006-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CommitmentDiscountUnit-C-005-C", + "CommitmentDiscountUnit-C-006-C" + ] + } + }, + "CommitmentDiscountUnit-C-005-C": { + "Function": "Nullability", + "Reference": "CommitmentDiscountUnit", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountUnit MUST be null when CommitmentDiscountQuantity is null.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountUnit", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountQuantity", + "Value": null + }, + "Dependencies": [ + "CommitmentDiscountQuantity-C-000-C" + ] + } + }, + "CommitmentDiscountUnit-C-006-C": { + "Function": "Nullability", + "Reference": "CommitmentDiscountUnit", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountUnit MUST NOT be null when CommitmentDiscountQuantity is not null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "CommitmentDiscountUnit", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "CommitmentDiscountQuantity", + "Value": null + }, + "Dependencies": [ + "CommitmentDiscountQuantity-C-000-C" + ] + } + }, + "CommitmentDiscountUnit-C-007-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountUnit", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When CommitmentDiscountUnit is not null, CommitmentDiscountUnit adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountUnit-C-008-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountUnit-C-009-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountUnit-C-010-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "CommitmentDiscountUnit", + "Value": null + }, + "Dependencies": [ + "CommitmentDiscountUnit-C-008-M", + "CommitmentDiscountUnit-C-009-M", + "CommitmentDiscountUnit-C-010-C" + ] + } + }, + "CommitmentDiscountUnit-C-008-M": { + "Function": "Validation", + "Reference": "CommitmentDiscountUnit", + "EntityType": "Column", + "Notes": "Mirrors cross-column dependency on CommitmentDiscountId", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountUnit MUST remain consistent over time for a given CommitmentDiscountId.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountUnit-C-009-M": { + "Function": "Validation", + "Reference": "CommitmentDiscountUnit", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountUnit MUST represent the unit used to measure the commitment discount.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountUnit-C-010-C": { + "Function": "Validation", + "Reference": "CommitmentDiscountUnit", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "When accounting for commitment discount flexibility, the CommitmentDiscountUnit value SHOULD reflect this consideration.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingAccountType-C-000-C": { + "Function": "Composite", + "Reference": "BillingAccountType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "MULTIPLE_BILLING_ACCOUNT_TYPES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The BillingAccountType column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingAccountType-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingAccountType-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingAccountType-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingAccountType-C-006-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-007-C", + "BillingAccountType-C-001-M", + "BillingAccountType-C-002-M", + "BillingAccountType-C-003-C", + "BillingAccountType-C-006-M" + ] + } + }, + "BillingAccountType-C-001-M": { + "Function": "Type", + "Reference": "BillingAccountType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingAccountType MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "BillingAccountType" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingAccountType-C-002-M": { + "Function": "Format", + "Reference": "BillingAccountType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingAccountType MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "BillingAccountType" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingAccountType-C-003-C": { + "Function": "Composite", + "Reference": "BillingAccountType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingAccountType nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingAccountType-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingAccountType-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "BillingAccountType-C-004-C", + "BillingAccountType-C-005-C" + ] + } + }, + "BillingAccountType-C-004-C": { + "Function": "Nullability", + "Reference": "BillingAccountType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingAccountType MUST be null when BillingAccountId is null.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "BillingAccountType", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "BillingAccountId", + "Value": null + }, + "Dependencies": [] + } + }, + "BillingAccountType-C-005-C": { + "Function": "Nullability", + "Reference": "BillingAccountType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingAccountType MUST NOT be null when BillingAccountId is not null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "BillingAccountType", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "BillingAccountId", + "Value": null + }, + "Dependencies": [] + } + }, + "BillingAccountType-C-006-M": { + "Function": "Validation", + "Reference": "BillingAccountType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "BillingAccountType MUST be a consistent, readable display value.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrencyContractedUnitPrice-C-000-C": { + "Function": "Composite", + "Reference": "PricingCurrencyContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The PricingCurrencyContractedUnitPrice column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-007-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-046-C", + "PricingCurrencyContractedUnitPrice-C-001-M", + "PricingCurrencyContractedUnitPrice-C-002-M", + "PricingCurrencyContractedUnitPrice-C-003-M", + "PricingCurrencyContractedUnitPrice-C-007-C" + ] + } + }, + "PricingCurrencyContractedUnitPrice-C-001-M": { + "Function": "Type", + "Reference": "PricingCurrencyContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyContractedUnitPrice MUST be of type Decimal.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeDecimal", + "ColumnName": "PricingCurrencyContractedUnitPrice" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrencyContractedUnitPrice-C-002-M": { + "Function": "Format", + "Reference": "PricingCurrencyContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyContractedUnitPrice MUST conform to NumericFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatNumeric", + "ColumnName": "PricingCurrencyContractedUnitPrice" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrencyContractedUnitPrice-C-003-M": { + "Function": "Composite", + "Reference": "PricingCurrencyContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyContractedUnitPrice nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-005-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-006-O" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "PricingCurrencyContractedUnitPrice-C-004-C", + "PricingCurrencyContractedUnitPrice-C-005-C", + "PricingCurrencyContractedUnitPrice-C-006-O" + ] + } + }, + "PricingCurrencyContractedUnitPrice-C-004-C": { + "Function": "Nullability", + "Reference": "PricingCurrencyContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyContractedUnitPrice MUST be null when ChargeCategory is \"Tax\".", + "Keyword": "MUST", + "Requirement": {}, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Tax" + }, + "Dependencies": [ + "ChargeCategory-C-003-M" + ] + } + }, + "PricingCurrencyContractedUnitPrice-C-005-C": { + "Function": "Nullability", + "Reference": "PricingCurrencyContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyContractedUnitPrice MUST NOT be null when ChargeCategory is \"Usage\" or \"Purchase\" and ChargeClass is not \"Correction\".", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Purchase" + } + ] + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + } + ] + }, + "Dependencies": [] + } + }, + "PricingCurrencyContractedUnitPrice-C-006-O": { + "Function": "Nullability", + "Reference": "PricingCurrencyContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyContractedUnitPrice MAY be null in all other cases.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrencyContractedUnitPrice-C-007-C": { + "Function": "Composite", + "Reference": "PricingCurrencyContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When PricingCurrencyContractedUnitPrice is not null, PricingCurrencyContractedUnitPrice adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-008-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-009-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyContractedUnitPrice-C-010-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingCurrencyContractedUnitPrice", + "Value": null + }, + "Dependencies": [ + "PricingCurrencyContractedUnitPrice-C-008-C", + "PricingCurrencyContractedUnitPrice-C-009-C", + "PricingCurrencyContractedUnitPrice-C-010-C" + ] + } + }, + "PricingCurrencyContractedUnitPrice-C-008-C": { + "Function": "Validation", + "Reference": "PricingCurrencyContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyContractedUnitPrice MUST be a non-negative decimal value.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingCurrencyContractedUnitPrice", + "Value": null + }, + "Dependencies": [] + } + }, + "PricingCurrencyContractedUnitPrice-C-009-C": { + "Function": "Validation", + "Reference": "PricingCurrencyContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyContractedUnitPrice MUST be denominated in the PricingCurrency.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingCurrencyContractedUnitPrice", + "Value": null + }, + "Dependencies": [] + } + }, + "PricingCurrencyContractedUnitPrice-C-010-C": { + "Function": "Validation", + "Reference": "PricingCurrencyContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Discrepancies in PricingCurrencyContractedUnitPrice, ContractedCost, or PricingQuantity MAY exist when ChargeClass is \"Correction\".", + "Keyword": "MAY", + "Requirement": {}, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + }, + "Dependencies": [ + "ChargeClass-C-005-C" + ] + } + }, + "PricingCurrencyEffectiveCost-C-000-C": { + "Function": "Composite", + "Reference": "PricingCurrencyEffectiveCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "PRICING_BILLING_CURRENCY_DIFFERENCES_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The PricingCurrencyEffectiveCost column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyEffectiveCost-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyEffectiveCost-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyEffectiveCost-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyEffectiveCost-C-004-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyEffectiveCost-C-005-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingCurrencyEffectiveCost-C-006-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-050-C", + "PricingCurrencyEffectiveCost-C-001-M", + "PricingCurrencyEffectiveCost-C-002-M", + "PricingCurrencyEffectiveCost-C-003-M", + "PricingCurrencyEffectiveCost-C-004-M", + "PricingCurrencyEffectiveCost-C-005-M", + "PricingCurrencyEffectiveCost-C-006-M" + ] + } + }, + "PricingCurrencyEffectiveCost-C-001-M": { + "Function": "Type", + "Reference": "PricingCurrencyEffectiveCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyEffectiveCost MUST be of type Decimal.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeDecimal", + "ColumnName": "PricingCurrencyEffectiveCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrencyEffectiveCost-C-002-M": { + "Function": "Format", + "Reference": "PricingCurrencyEffectiveCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyEffectiveCost MUST conform to NumericFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatNumeric", + "ColumnName": "PricingCurrencyEffectiveCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrencyEffectiveCost-C-003-M": { + "Function": "Nullability", + "Reference": "PricingCurrencyEffectiveCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyEffectiveCost MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingCurrencyEffectiveCost", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrencyEffectiveCost-C-004-M": { + "Function": "Validation", + "Reference": "PricingCurrencyEffectiveCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyEffectiveCost MUST be a valid decimal value.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckGreaterOrEqualThanValue", + "ColumnName": "PricingCurrencyListUnitPrice", + "Value": 0 + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrencyEffectiveCost-C-005-M": { + "Function": "Validation", + "Reference": "PricingCurrencyEffectiveCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyEffectiveCost MUST be 0 in the event of prepaid purchases or purchases that are applicable to previous usage.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingCurrencyEffectiveCost-C-006-M": { + "Function": "Validation", + "Reference": "PricingCurrencyEffectiveCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "PricingCurrencyEffectiveCost MUST be denominated in the PricingCurrency.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountCategory-C-000-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The CommitmentDiscountCategory column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountCategory-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountCategory-C-002-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountCategory-C-005-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-016-C", + "CommitmentDiscountCategory-C-001-M", + "CommitmentDiscountCategory-C-002-C", + "CommitmentDiscountCategory-C-005-M" + ] + } + }, + "CommitmentDiscountCategory-C-001-M": { + "Function": "Type", + "Reference": "CommitmentDiscountCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountCategory MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "CommitmentDiscountCategory" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountCategory-C-002-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountCategory nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountCategory-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountCategory-C-004-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CommitmentDiscountCategory-C-003-C", + "CommitmentDiscountCategory-C-004-C" + ] + } + }, + "CommitmentDiscountCategory-C-003-C": { + "Function": "Nullability", + "Reference": "CommitmentDiscountCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountCategory MUST be null when CommitmentDiscountId is null.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountCategory", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountId", + "Value": null + }, + "Dependencies": [ + "CommitmentDiscountId-C-000-C" + ] + } + }, + "CommitmentDiscountCategory-C-004-C": { + "Function": "Nullability", + "Reference": "CommitmentDiscountCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountCategory MUST NOT be null when CommitmentDiscountId is not null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "CommitmentDiscountCategory", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "CommitmentDiscountId", + "Value": null + }, + "Dependencies": [ + "CommitmentDiscountId-C-000-C" + ] + } + }, + "CommitmentDiscountCategory-C-005-M": { + "Function": "Validation", + "Reference": "CommitmentDiscountCategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountCategory MUST be one of the allowed values.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountCategory", + "Value": "Spend" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountCategory", + "Value": "Usage" + } + ] + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountType-C-000-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The CommitmentDiscountType column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountType-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountType-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountType-C-003-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-014-C", + "CommitmentDiscountType-C-001-M", + "CommitmentDiscountType-C-002-M", + "CommitmentDiscountType-C-003-C" + ] + } + }, + "CommitmentDiscountType-C-001-M": { + "Function": "Type", + "Reference": "CommitmentDiscountType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountType MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "CommitmentDiscountType" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountType-C-002-M": { + "Function": "Format", + "Reference": "CommitmentDiscountType", + "EntityType": "Column", + "Notes": "Cross-column reference: StringHandling", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountType MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "CommitmentDiscountType" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountType-C-003-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountType", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountType nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountType-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountType-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CommitmentDiscountType-C-004-C", + "CommitmentDiscountType-C-005-C" + ] + } + }, + "CommitmentDiscountType-C-004-C": { + "Function": "Nullability", + "Reference": "CommitmentDiscountType", + "EntityType": "Column", + "Notes": "Cross-column reference: CommitmentDiscountId", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountType MUST be null when CommitmentDiscountId is null.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountType", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountId", + "Value": null + }, + "Dependencies": [ + "CommitmentDiscountId-C-000-C" + ] + } + }, + "CommitmentDiscountType-C-005-C": { + "Function": "Nullability", + "Reference": "CommitmentDiscountType", + "EntityType": "Column", + "Notes": "Cross-column reference: CommitmentDiscountId", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountType MUST NOT be null when CommitmentDiscountId is not null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "CommitmentDiscountType", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "CommitmentDiscountId", + "Value": null + }, + "Dependencies": [ + "CommitmentDiscountId-C-000-C" + ] + } + }, + "CommitmentDiscountQuantity-C-000-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The CommitmentDiscountQuantity column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountQuantity-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountQuantity-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountQuantity-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountQuantity-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountQuantity-C-008-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-018-C", + "CommitmentDiscountQuantity-C-001-M", + "CommitmentDiscountQuantity-C-002-M", + "CommitmentDiscountQuantity-C-003-C", + "CommitmentDiscountQuantity-C-004-C", + "CommitmentDiscountQuantity-C-008-C" + ] + } + }, + "CommitmentDiscountQuantity-C-001-M": { + "Function": "Type", + "Reference": "CommitmentDiscountQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountQuantity MUST be of type Decimal.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeDecimal", + "ColumnName": "CommitmentDiscountQuantity" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountQuantity-C-002-M": { + "Function": "Format", + "Reference": "CommitmentDiscountQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountQuantity MUST conform to NumericFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatNumeric", + "ColumnName": "CommitmentDiscountQuantity" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountQuantity-C-003-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountQuantity nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountQuantity-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountQuantity-C-007-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CommitmentDiscountQuantity-C-004-C", + "CommitmentDiscountQuantity-C-007-C" + ] + } + }, + "CommitmentDiscountQuantity-C-004-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When ChargeCategory is \"Usage\" or \"Purchase\" and CommitmentDiscountId is not null, CommitmentDiscountQuantity adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountQuantity-C-005-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountQuantity-C-006-C" + } + ] + }, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Purchase" + } + ] + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "CommitmentDiscountId", + "Value": null + } + ] + }, + "Dependencies": [ + "CommitmentDiscountId-C-000-C", + "ChargeCategory-C-000-M", + "CommitmentDiscountQuantity-C-005-C", + "CommitmentDiscountQuantity-C-006-C" + ] + } + }, + "CommitmentDiscountQuantity-C-005-C": { + "Function": "Nullability", + "Reference": "CommitmentDiscountQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountQuantity MUST NOT be null when ChargeClass is not \"Correction\".", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "CommitmentDiscountQuantity", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + }, + "Dependencies": [] + } + }, + "CommitmentDiscountQuantity-C-006-C": { + "Function": "Nullability", + "Reference": "CommitmentDiscountQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountQuantity MAY be null when ChargeClass is \"Correction\".", + "Keyword": "MAY", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountQuantity", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + }, + "Dependencies": [] + } + }, + "CommitmentDiscountQuantity-C-007-C": { + "Function": "Nullability", + "Reference": "CommitmentDiscountQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountQuantity MUST be null in all other cases.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountQuantity", + "Value": null + }, + "Condition": { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeCategory", + "Value": "Purchase" + } + ] + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountId", + "Value": null + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + } + ] + }, + "Dependencies": [] + } + }, + "CommitmentDiscountQuantity-C-008-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When CommitmentDiscountQuantity is not null, CommitmentDiscountQuantity adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountQuantity-C-009-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountQuantity-C-010-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountQuantity-C-013-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CommitmentDiscountQuantity-C-009-M", + "CommitmentDiscountQuantity-C-010-C", + "CommitmentDiscountQuantity-C-013-C" + ] + } + }, + "CommitmentDiscountQuantity-C-009-M": { + "Function": "Validation", + "Reference": "CommitmentDiscountQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountQuantity MUST be a valid decimal value.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountQuantity-C-010-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When ChargeCategory is \"Purchase\", CommitmentDiscountQuantity adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountQuantity-C-011-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountQuantity-C-012-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": null + }, + "Dependencies": [ + "CommitmentDiscountQuantity-C-011-C", + "CommitmentDiscountQuantity-C-012-C" + ] + } + }, + "CommitmentDiscountQuantity-C-011-C": { + "Function": "Validation", + "Reference": "CommitmentDiscountQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountQuantity MUST be the quantity of CommitmentDiscountUnit, paid fully or partially upfront, that is eligible for consumption over the commitment discount's term when ChargeFrequency is \"One-Time\".", + "Keyword": "MUST", + "Requirement": {}, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeFrequency", + "Value": "One-Time" + }, + "Dependencies": [ + "ChargeFrequency-C-003-M" + ] + } + }, + "CommitmentDiscountQuantity-C-012-C": { + "Function": "Validation", + "Reference": "CommitmentDiscountQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountQuantity MUST be the quantity of CommitmentDiscountUnit that is eligible for consumption for each charge period that corresponds with the purchase when ChargeFrequency is \"Recurring\".", + "Keyword": "MUST", + "Requirement": {}, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeFrequency", + "Value": "Recurring" + }, + "Dependencies": [ + "ChargeFrequency-C-003-M" + ] + } + }, + "CommitmentDiscountQuantity-C-013-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When ChargeCategory is \"Usage\", CommitmentDiscountQuantity adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountQuantity-C-014-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountQuantity-C-015-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + "Dependencies": [ + "CommitmentDiscountQuantity-C-014-C", + "CommitmentDiscountQuantity-C-015-C" + ] + } + }, + "CommitmentDiscountQuantity-C-014-C": { + "Function": "Validation", + "Reference": "CommitmentDiscountQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountQuantity MUST be the metered quantity of CommitmentDiscountUnit that is consumed in a given charge period when CommitmentDiscountStatus is \"Used\".", + "Keyword": "MUST", + "Requirement": {}, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountStatus", + "Value": "Used" + } + ] + }, + "Dependencies": [] + } + }, + "CommitmentDiscountQuantity-C-015-C": { + "Function": "Validation", + "Reference": "CommitmentDiscountQuantity", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountQuantity MUST be the remaining, unused quantity of CommitmentDiscountUnit in a given charge period when CommitmentDiscountStatus is \"Unused\".", + "Keyword": "MUST", + "Requirement": {}, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountStatus", + "Value": "Unused" + } + ] + }, + "Dependencies": [] + } + }, + "BillingPeriodEnd-C-000-M": { + "Function": "Composite", + "Reference": "BillingPeriodEnd", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The BillingPeriodEnd column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingPeriodEnd-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingPeriodEnd-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingPeriodEnd-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingPeriodEnd-C-004-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-010-M", + "BillingPeriodEnd-C-001-M", + "BillingPeriodEnd-C-002-M", + "BillingPeriodEnd-C-003-M", + "BillingPeriodEnd-C-004-M" + ] + } + }, + "BillingPeriodEnd-C-001-M": { + "Function": "Type", + "Reference": "BillingPeriodEnd", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingPeriodEnd MUST be of type Date/Time.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeDateTime", + "ColumnName": "BillingPeriodEnd" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingPeriodEnd-C-002-M": { + "Function": "Format", + "Reference": "BillingPeriodEnd", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingPeriodEnd MUST conform to DateTimeFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatDateTime", + "ColumnName": "BillingPeriodEnd" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingPeriodEnd-C-003-M": { + "Function": "Nullability", + "Reference": "BillingPeriodEnd", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingPeriodEnd MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "BillingPeriodEnd", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingPeriodEnd-C-004-M": { + "Function": "Validation", + "Reference": "BillingPeriodEnd", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "BillingPeriodEnd MUST be the exclusive end bound of the billing period.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ServiceName-C-000-M": { + "Function": "Composite", + "Reference": "ServiceName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ServiceName column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceName-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceName-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceName-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceName-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceName-C-007-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-041-M", + "ServiceName-C-001-M", + "ServiceName-C-002-M", + "ServiceName-C-003-M", + "ServiceName-C-004-C", + "ServiceName-C-007-C" + ] + } + }, + "ServiceName-C-001-M": { + "Function": "Type", + "Reference": "ServiceName", + "EntityType": "Column", + "Notes": "ServiceName must be of type String", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ServiceName MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "ServiceName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ServiceName-C-002-M": { + "Function": "Format", + "Reference": "ServiceName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ServiceName MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "ServiceName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ServiceName-C-003-M": { + "Function": "Nullability", + "Reference": "ServiceName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ServiceName MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ServiceName", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ServiceName-C-004-C": { + "Function": "Composite", + "Reference": "ServiceName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The relationship between ServiceName and ServiceCategory is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceName-C-005-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceName-C-006-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "ServiceCategory-C-000-M", + "ServiceName-C-005-C", + "ServiceName-C-006-C" + ] + } + }, + "ServiceName-C-005-C": { + "Function": "Validation", + "Reference": "ServiceName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ServiceName MUST have one and only one ServiceCategory that best aligns with its primary purpose, except when no suitable ServiceCategory is available.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckDistinctCount", + "ColumnAName": "ServiceName", + "ColumnBName": "ServiceCategory", + "ExpectedCount": 1 + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ServiceName-C-006-C": { + "Function": "Validation", + "Reference": "ServiceName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ServiceName MUST be associated with the ServiceCategory \"Other\" when no suitable ServiceCategory is available.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ServiceName-C-007-C": { + "Function": "Composite", + "Reference": "ServiceName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The relationship between ServiceName and ServiceSubcategory is defined as follows:", + "Keyword": "SHOULD", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceName-C-008-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceName-C-009-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "ServiceSubcategory-C-000-O", + "ServiceName-C-008-C", + "ServiceName-C-009-C" + ] + } + }, + "ServiceName-C-008-C": { + "Function": "Validation", + "Reference": "ServiceName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ServiceName SHOULD have one and only one ServiceSubcategory that best aligns with its primary purpose, except when no suitable ServiceSubcategory is available.", + "Keyword": "SHOULD", + "Requirement": { + "CheckFunction": "CheckDistinctCount", + "ColumnAName": "ServiceName", + "ColumnBName": "ServiceSubcategory", + "ExpectedCount": 1 + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ServiceName-C-009-C": { + "Function": "Validation", + "Reference": "ServiceName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ServiceName SHOULD be associated with the ServiceSubcategory \"Other\" when no suitable ServiceSubcategory is available.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountStatus-C-000-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountStatus", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "COMMITMENT_DISCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The CommitmentDiscountStatus column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountStatus-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountStatus-C-002-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountStatus-C-005-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-017-C", + "CommitmentDiscountStatus-C-001-M", + "CommitmentDiscountStatus-C-002-C", + "CommitmentDiscountStatus-C-005-M" + ] + } + }, + "CommitmentDiscountStatus-C-001-M": { + "Function": "Type", + "Reference": "CommitmentDiscountStatus", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountStatus MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "CommitmentDiscountStatus" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CommitmentDiscountStatus-C-002-C": { + "Function": "Composite", + "Reference": "CommitmentDiscountStatus", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountStatus nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountStatus-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CommitmentDiscountStatus-C-004-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CommitmentDiscountStatus-C-003-C", + "CommitmentDiscountStatus-C-004-C" + ] + } + }, + "CommitmentDiscountStatus-C-003-C": { + "Function": "Nullability", + "Reference": "CommitmentDiscountStatus", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountStatus MUST be null when CommitmentDiscountId is null.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountStatus", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountId", + "Value": null + }, + "Dependencies": [ + "CommitmentDiscountId-C-000-C" + ] + } + }, + "CommitmentDiscountStatus-C-004-C": { + "Function": "Nullability", + "Reference": "CommitmentDiscountStatus", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountStatus MUST NOT be null when CommitmentDiscountId is not null and Charge Category is \"Usage\".", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "CommitmentDiscountStatus", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountId", + "Value": null + }, + "Dependencies": [ + "CommitmentDiscountId-C-000-C" + ] + } + }, + "CommitmentDiscountStatus-C-005-M": { + "Function": "Validation", + "Reference": "CommitmentDiscountStatus", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CommitmentDiscountStatus MUST be one of the allowed values.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountStatus", + "Value": "Active" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountStatus", + "Value": "Expired" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "CommitmentDiscountStatus", + "Value": "Pending" + } + ] + }, + "Condition": {}, + "Dependencies": [] + } + }, + "RegionId-C-000-C": { + "Function": "Composite", + "Reference": "RegionId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "REGION_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The RegionId column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "RegionId-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "RegionId-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "RegionId-C-003-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-063-C", + "RegionId-C-001-M", + "RegionId-C-002-M", + "RegionId-C-003-C" + ] + } + }, + "RegionId-C-001-M": { + "Function": "Type", + "Reference": "RegionId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "RegionId MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "RegionId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "RegionId-C-002-M": { + "Function": "Format", + "Reference": "RegionId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "RegionId MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "RegionId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "RegionId-C-003-C": { + "Function": "Composite", + "Reference": "RegionId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "RegionId nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "RegionId-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "RegionId-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "RegionId-C-004-C", + "RegionId-C-005-C" + ] + } + }, + "RegionId-C-004-C": { + "Function": "Nullability", + "Reference": "RegionId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "RegionId MUST NOT be null when a resource or service is operated in or managed from a distinct region.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "RegionId-C-005-C": { + "Function": "Nullability", + "Reference": "RegionId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "RegionId MAY be null when a resource or service is not operated in or managed from a distinct region.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingUnit-C-000-M": { + "Function": "Composite", + "Reference": "PricingUnit", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The PricingUnit column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingUnit-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingUnit-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingUnit-C-003-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingUnit-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingUnit-C-007-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-068-M", + "PricingUnit-C-001-M", + "PricingUnit-C-002-M", + "PricingUnit-C-003-O", + "PricingUnit-C-004-C", + "PricingUnit-C-007-C" + ] + } + }, + "PricingUnit-C-001-M": { + "Function": "Type", + "Reference": "PricingUnit", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingUnit MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "PricingUnit" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingUnit-C-002-M": { + "Function": "Format", + "Reference": "PricingUnit", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingUnit MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "PricingUnit" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingUnit-C-003-O": { + "Function": "Format", + "Reference": "PricingUnit", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingUnit SHOULD conform to UnitFormat requirements.", + "Keyword": "SHOULD", + "Requirement": { + "CheckFunction": "FormatUnit", + "ColumnName": "PricingUnit" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingUnit-C-004-C": { + "Function": "Composite", + "Reference": "PricingUnit", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingUnit nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingUnit-C-005-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingUnit-C-006-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "PricingUnit-C-005-C", + "PricingUnit-C-006-C" + ] + } + }, + "PricingUnit-C-005-C": { + "Function": "Nullability", + "Reference": "PricingUnit", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingUnit MUST be null when PricingQuantity is null.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "PricingUnit", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "PricingQuantity", + "Value": null + }, + "Dependencies": [] + } + }, + "PricingUnit-C-006-C": { + "Function": "Nullability", + "Reference": "PricingUnit", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "PricingUnit MUST NOT be null when PricingQuantity is not null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingUnit", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingQuantity", + "Value": null + }, + "Dependencies": [] + } + }, + "PricingUnit-C-007-C": { + "Function": "Composite", + "Reference": "PricingUnit", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When PricingUnit is not null, PricingUnit adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingUnit-C-008-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "PricingUnit-C-009-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingUnit", + "Value": null + }, + "Dependencies": [ + "PricingUnit-C-008-M", + "PricingUnit-C-009-C" + ] + } + }, + "PricingUnit-C-008-M": { + "Function": "Validation", + "Reference": "PricingUnit", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "Cross-attribute reference: PriceList", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "PricingUnit MUST be semantically equal to the corresponding pricing measurement unit provided in provider-published price list.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "PricingUnit-C-009-C": { + "Function": "Validation", + "Reference": "PricingUnit", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "Cross-attribute reference: Invoice", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "PricingUnit MUST be semantically equal to the corresponding pricing measurement unit provided in invoice, when the invoice includes a pricing measurement unit.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingCurrency-C-000-M": { + "Function": "Composite", + "Reference": "BillingCurrency", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The BillingCurrency column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingCurrency-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingCurrency-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingCurrency-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingCurrency-C-004-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingCurrency-C-005-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BillingCurrency-C-006-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-035-M", + "BillingCurrency-C-001-M", + "BillingCurrency-C-002-M", + "BillingCurrency-C-003-M", + "BillingCurrency-C-004-M", + "BillingCurrency-C-005-M", + "BillingCurrency-C-006-M" + ] + } + }, + "BillingCurrency-C-001-M": { + "Function": "Type", + "Reference": "BillingCurrency", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingCurrency MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "BillingCurrency" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingCurrency-C-002-M": { + "Function": "Format", + "Reference": "BillingCurrency", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingCurrency MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "BillingCurrency" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingCurrency-C-003-M": { + "Function": "Format", + "Reference": "BillingCurrency", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingCurrency MUST conform to CurrencyFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatCurrency", + "ColumnName": "BillingCurrency" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingCurrency-C-004-M": { + "Function": "Nullability", + "Reference": "BillingCurrency", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingCurrency MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "BillingCurrency", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingCurrency-C-005-M": { + "Function": "Validation", + "Reference": "BillingCurrency", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "BillingCurrency MUST match the currency used in the invoice generated by the invoice issuer.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "BillingCurrency-C-006-M": { + "Function": "Validation", + "Reference": "BillingCurrency", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BillingCurrency MUST be expressed in national currency (e.g., USD, EUR).", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckNationalCurrency", + "ColumnName": "BillingCurrency" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ServiceSubcategory-C-000-O": { + "Function": "Composite", + "Reference": "ServiceSubcategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ServiceSubcategory column adheres to the following requirements:", + "Keyword": "SHOULD", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceSubcategory-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceSubcategory-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceSubcategory-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ServiceSubcategory-C-004-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-042-O", + "ServiceSubcategory-C-001-M", + "ServiceSubcategory-C-002-M", + "ServiceSubcategory-C-003-M", + "ServiceSubcategory-C-004-M" + ] + } + }, + "ServiceSubcategory-C-001-M": { + "Function": "Type", + "Reference": "ServiceSubcategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ServiceSubcategory MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "ServiceSubcategory" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ServiceSubcategory-C-002-M": { + "Function": "Nullability", + "Reference": "ServiceSubcategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ServiceSubcategory MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ServiceSubcategory", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ServiceSubcategory-C-003-M": { + "Function": "Validation", + "Reference": "ServiceSubcategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ServiceSubcategory MUST be one of the allowed values.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "AI Platforms" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Bots" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Generative AI" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Machine Learning" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Natural Language Processing" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (AI and Machine Learning)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Analytics Platforms" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Business Intelligence" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Data Processing" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Search" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Streaming Analytics" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Analytics)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Productivity and Collaboration" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Business Applications)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Containers" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "End User Computing" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Quantum Compute" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Serverless Compute" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Virtual Machines" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Compute)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Caching" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Data Warehouses" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Ledger Databases" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "NoSQL Databases" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Relational Databases" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Time Series Databases" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Databases)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Developer Platforms" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Continuous Integration and Deployment" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Development Environments" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Source Code Management" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Quality Assurance" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Developer Tools)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Identity and Access Management" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Identity)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "API Management" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Messaging" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Workflow Orchestration" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Integration)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "IoT Analytics" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "IoT Platforms" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Internet of Things)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Architecture" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Compliance" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Cost Management" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Data Governance" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Disaster Recovery" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Endpoint Management" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Observability" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Support" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Management and Governance)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Content Creation" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Gaming" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Media Streaming" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Mixed Reality" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Media)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Data Migration" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Resource Migration" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Migration)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Mobile)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Multicloud Integration" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Multicloud)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Application Networking" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Content Delivery" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Network Connectivity" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Network Infrastructure" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Network Routing" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Network Security" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Networking)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Secret Management" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Security Posture Management" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Threat Detection and Response" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Security)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Backup Storage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Block Storage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "File Storage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Object Storage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Storage Platforms" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Storage)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Application Platforms" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Web)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Other)" + } + ] + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ServiceSubcategory-C-004-M": { + "Function": "Validation", + "Reference": "ServiceSubcategory", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ServiceSubcategory MUST have one and only one parent ServiceCategory as specified in the allowed values below.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "AI Platforms" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "AI and Machine Learning" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Bots" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "AI and Machine Learning" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Generative AI" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "AI and Machine Learning" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Machine Learning" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "AI and Machine Learning" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Natural Language Processing" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "AI and Machine Learning" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (AI and Machine Learning)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "AI and Machine Learning" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Analytics Platforms" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Analytics" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Business Intelligence" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Analytics" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Data Processing" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Analytics" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Search" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Analytics" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Streaming Analytics" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Analytics" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Analytics)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Analytics" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Productivity and Collaboration" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Business Applications" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Business Applications)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Business Applications" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Containers" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Compute" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "End User Computing" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Compute" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Quantum Compute" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Compute" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Serverless Compute" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Compute" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Virtual Machines" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Compute" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Compute)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Compute" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Caching" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Databases" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Data Warehouses" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Databases" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Ledger Databases" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Databases" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "NoSQL Databases" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Databases" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Relational Databases" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Databases" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Time Series Databases" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Databases" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Databases)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Databases" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Developer Platforms" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Developer Tools" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Continuous Integration and Deployment" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Developer Tools" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Development Environments" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Developer Tools" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Source Code Management" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Developer Tools" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Quality Assurance" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Developer Tools" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Developer Tools)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Developer Tools" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Identity and Access Management" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Identity" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Identity)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Identity" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "API Management" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Integration" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Messaging" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Integration" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Workflow Orchestration" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Integration" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Integration)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Integration" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "IoT Analytics" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Internet of Things" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "IoT Platforms" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Internet of Things" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Internet of Things)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Internet of Things" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Architecture" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Management and Governance" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Compliance" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Management and Governance" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Cost Management" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Management and Governance" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Data Governance" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Management and Governance" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Disaster Recovery" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Management and Governance" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Endpoint Management" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Management and Governance" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Observability" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Management and Governance" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Support" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Management and Governance" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Management and Governance)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Management and Governance" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Content Creation" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Media" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Gaming" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Media" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Media Streaming" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Media" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Mixed Reality" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Media" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Media)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Media" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Data Migration" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Migration" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Resource Migration" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Migration" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Migration)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Migration" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Mobile)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Mobile" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Multicloud Integration" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Multicloud" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Multicloud)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Multicloud" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Application Networking" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Networking" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Content Delivery" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Networking" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Network Connectivity" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Networking" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Network Infrastructure" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Networking" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Network Routing" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Networking" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Network Security" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Networking" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Networking)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Networking" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Secret Management" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Security" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Security Posture Management" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Security" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Threat Detection and Response" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Security" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Security)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Security" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Backup Storage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Storage" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Block Storage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Storage" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "File Storage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Storage" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Object Storage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Storage" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Storage Platforms" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Storage" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Storage)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Storage" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Application Platforms" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Web" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Web)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Web" + } + ] + }, + { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceSubcategory", + "Value": "Other (Other)" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ServiceCategory", + "Value": "Other" + } + ] + } + ] + }, + "Condition": {}, + "Dependencies": [] + } + }, + "EffectiveCost-C-000-M": { + "Function": "Composite", + "Reference": "EffectiveCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The EffectiveCost column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "EffectiveCost-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "EffectiveCost-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "EffectiveCost-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "EffectiveCost-C-004-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "EffectiveCost-C-005-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "EffectiveCost-C-006-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "EffectiveCost-C-007-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "EffectiveCost-C-008-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "EffectiveCost-C-011-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-031-M", + "EffectiveCost-C-001-M", + "EffectiveCost-C-002-M", + "EffectiveCost-C-003-M", + "EffectiveCost-C-004-M", + "EffectiveCost-C-005-C", + "EffectiveCost-C-006-M", + "EffectiveCost-C-007-O", + "EffectiveCost-C-008-C", + "EffectiveCost-C-011-C" + ] + } + }, + "EffectiveCost-C-001-M": { + "Function": "Type", + "Reference": "EffectiveCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "EffectiveCost MUST be of type Decimal.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeDecimal", + "ColumnName": "EffectiveCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "EffectiveCost-C-002-M": { + "Function": "Format", + "Reference": "EffectiveCost", + "EntityType": "Column", + "Notes": "Cross-attribute reference: NumericFormat", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "EffectiveCost MUST conform to NumericFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatNumeric", + "ColumnName": "EffectiveCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "EffectiveCost-C-003-M": { + "Function": "Nullability", + "Reference": "EffectiveCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "EffectiveCost MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "EffectiveCost", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "EffectiveCost-C-004-M": { + "Function": "Validation", + "Reference": "EffectiveCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "EffectiveCost MUST be a valid decimal value.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "EffectiveCost", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "EffectiveCost-C-005-C": { + "Function": "Validation", + "Reference": "EffectiveCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "EffectiveCost MUST be 0 when ChargeCategory is \"Purchase\" and the purchase is intended to cover future eligible charges.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "EffectiveCost", + "Value": 0 + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Purchase" + }, + "Dependencies": [ + "ChargeCategory-C-000-M" + ] + } + }, + "EffectiveCost-C-006-M": { + "Function": "Validation", + "Reference": "EffectiveCost", + "EntityType": "Column", + "Notes": "Cross-column reference: BillingCurrency", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "EffectiveCost MUST be denominated in the BillingCurrency.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [ + "BillingCurrency-C-000-M" + ] + } + }, + "EffectiveCost-C-007-O": { + "Function": "Validation", + "Reference": "EffectiveCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "The sum of EffectiveCost in a given billing period MAY not match the sum of the invoices received for the same billing period for a billing account.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "EffectiveCost-C-008-C": { + "Function": "Composite", + "Reference": "EffectiveCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When ChargeCategory is not \"Usage\" or \"Purchase\", EffectiveCost adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "EffectiveCost-C-009-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "EffectiveCost-C-010-C" + } + ] + }, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeCategory", + "Value": "Purchase" + } + ] + }, + "Dependencies": [ + "ChargeCategory-C-000-M", + "EffectiveCost-C-009-C", + "EffectiveCost-C-010-C" + ] + } + }, + "EffectiveCost-C-009-C": { + "Function": "Validation", + "Reference": "EffectiveCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "EffectiveCost of a charge calculated based on other charges (e.g., when the ChargeCategory is \"Tax\") MUST be calculated based on the EffectiveCost of those related charges.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "EffectiveCost-C-010-C": { + "Function": "Validation", + "Reference": "EffectiveCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "EffectiveCost of a charge unrelated to other charges (e.g., when the ChargeCategory is \"Credit\") MUST match the BilledCost.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [ + "ChargeCategory-C-000-M", + "BilledCost-C-000-M" + ] + } + }, + "EffectiveCost-C-011-C": { + "Function": "Composite", + "Reference": "EffectiveCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "Charges for a given CommitmentDiscountId adhere to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "EffectiveCost-C-012-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "EffectiveCost-C-013-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "CommitmentDiscountId", + "Value": null + }, + "Dependencies": [ + "CommitmentDiscountId-C-000-C", + "EffectiveCost-C-012-C", + "EffectiveCost-C-013-C" + ] + } + }, + "EffectiveCost-C-012-C": { + "Function": "Validation", + "Reference": "EffectiveCost", + "EntityType": "Column", + "Notes": "Scope alignment by CommitmentDiscountId", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "The sum of EffectiveCost where ChargeCategory is \"Usage\" MUST equal the sum of BilledCost where ChargeCategory is \"Purchase\".", + "Keyword": "MUST", + "Requirement": {}, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "CommitmentDiscountId", + "Value": null + } + ] + }, + "Dependencies": [ + "BilledCost-C-000-M", + "ChargeCategory-C-000-M", + "CommitmentDiscountId-C-000-C" + ] + } + }, + "EffectiveCost-C-013-C": { + "Function": "Validation", + "Reference": "EffectiveCost", + "EntityType": "Column", + "Notes": "Scope alignment by CommitmentDiscountId; no external CR dependency on EffectiveCost", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "The sum of EffectiveCost where ChargeCategory is \"Usage\" MUST equal the sum of EffectiveCost where ChargeCategory is \"Usage\" and CommitmentDiscountStatus is \"Used\", plus the sum of EffectiveCost where ChargeCategory is \"Usage\" and CommitmentDiscountStatus is \"Unused\".", + "Keyword": "MUST", + "Requirement": {}, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "CommitmentDiscountId", + "Value": null + } + ] + }, + "Dependencies": [ + "CommitmentDiscountStatus-C-000-C", + "ChargeCategory-C-000-M", + "CommitmentDiscountId-C-000-C" + ] + } + }, + "BilledCost-C-000-M": { + "Function": "Composite", + "Reference": "BilledCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The BilledCost column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BilledCost-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BilledCost-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BilledCost-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BilledCost-C-004-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BilledCost-C-005-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BilledCost-C-006-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "BilledCost-C-007-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-006-M", + "BilledCost-C-001-M", + "BilledCost-C-002-M", + "BilledCost-C-003-M", + "BilledCost-C-004-M", + "BilledCost-C-005-C", + "BilledCost-C-006-M", + "BilledCost-C-007-M" + ] + } + }, + "BilledCost-C-001-M": { + "Function": "Type", + "EntityType": "Column", + "Reference": "BilledCost", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BilledCost MUST be of type Decimal.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeDecimal", + "ColumnName": "BilledCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BilledCost-C-002-M": { + "Function": "Format", + "EntityType": "Column", + "Reference": "BilledCost", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BilledCost MUST conform to NumericFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatNumeric", + "ColumnName": "BilledCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BilledCost-C-003-M": { + "Function": "Nullability", + "Reference": "BilledCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BilledCost MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "BilledCost", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BilledCost-C-004-M": { + "Function": "Validation", + "Reference": "BilledCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BilledCost MUST be a valid decimal value.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckDecimalValue", + "ColumnName": "BilledCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "BilledCost-C-005-C": { + "Function": "Validation", + "Reference": "BilledCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "BilledCost MUST be 0 for charges where payments are received by a third party (e.g., marketplace transactions).", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "BilledCost", + "Value": 0 + }, + "Condition": { + "CheckFunction": "CheckNotSameValue", + "ColumnAName": "ProviderName", + "ColumnBName": "InvoiceIssuerName" + }, + "Dependencies": [ + "ProviderName-C-000-M", + "InvoiceIssuerName-C-000-M" + ] + } + }, + "BilledCost-C-006-M": { + "Function": "Validation", + "Reference": "BilledCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "BilledCost MUST be denominated in the BillingCurrency.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "BilledCost-C-007-M": { + "Function": "Validation", + "Reference": "BilledCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "The sum of the BilledCost for a given InvoiceId MUST match the sum of the payable amount provided in the corresponding invoice with the same id generated by the InvoiceIssuer.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargeClass-C-000-M": { + "Function": "Composite", + "Reference": "ChargeClass", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ChargeClass column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeClass-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeClass-C-002-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeClass-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-026-M", + "ChargeClass-C-001-M", + "ChargeClass-C-002-C", + "ChargeClass-C-005-C" + ] + } + }, + "ChargeClass-C-001-M": { + "Function": "Type", + "Reference": "ChargeClass", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargeClass MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "ChargeClass" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargeClass-C-002-C": { + "Function": "Composite", + "Reference": "ChargeClass", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargeClass nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeClass-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargeClass-C-004-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "ChargeClass-C-003-C", + "ChargeClass-C-004-C" + ] + } + }, + "ChargeClass-C-003-C": { + "Function": "Nullability", + "Reference": "ChargeClass", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ChargeClass MUST be null when the row does not represent a correction or when it represents a correction within the current billing period.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargeClass-C-004-C": { + "Function": "Nullability", + "Reference": "ChargeClass", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ChargeClass MUST NOT be null when the row represents a correction to a previously invoiced billing period.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargeClass-C-005-C": { + "Function": "Validation", + "Reference": "ChargeClass", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargeClass MUST be \"Correction\" when ChargeClass is not null.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeClass", + "Value": null + }, + "Dependencies": [] + } + }, + "ChargePeriodEnd-C-000-M": { + "Function": "Composite", + "Reference": "ChargePeriodEnd", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ChargePeriodEnd column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargePeriodEnd-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargePeriodEnd-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargePeriodEnd-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ChargePeriodEnd-C-004-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-028-M", + "ChargePeriodEnd-C-001-M", + "ChargePeriodEnd-C-002-M", + "ChargePeriodEnd-C-003-M", + "ChargePeriodEnd-C-004-M" + ] + } + }, + "ChargePeriodEnd-C-001-M": { + "Function": "Type", + "Reference": "ChargePeriodEnd", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargePeriodEnd MUST be of type Date/Time.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeDateTime", + "ColumnName": "ChargePeriodEnd" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargePeriodEnd-C-002-M": { + "Function": "Format", + "Reference": "ChargePeriodEnd", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargePeriodEnd MUST conform to DateTimeFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatDateTime", + "ColumnName": "ChargePeriodEnd" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargePeriodEnd-C-003-M": { + "Function": "Nullability", + "Reference": "ChargePeriodEnd", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ChargePeriodEnd MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargePeriodEnd", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ChargePeriodEnd-C-004-M": { + "Function": "Validation", + "Reference": "ChargePeriodEnd", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ChargePeriodEnd MUST be the exclusive end bound of the effective period of the charge.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "CapacityReservationId-C-000-C": { + "Function": "Composite", + "Reference": "CapacityReservationId", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "CAPACITY_RESERVATION_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The CapacityReservationId column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationId-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationId-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationId-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationId-C-007-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-065-C", + "CapacityReservationId-C-001-M", + "CapacityReservationId-C-002-M", + "CapacityReservationId-C-003-C", + "CapacityReservationId-C-007-C" + ] + } + }, + "CapacityReservationId-C-001-M": { + "Function": "Type", + "Reference": "CapacityReservationId", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CapacityReservationId MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "CapacityReservationId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CapacityReservationId-C-002-M": { + "Function": "Format", + "Reference": "CapacityReservationId", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CapacityReservationId MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "CapacityReservationId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CapacityReservationId-C-003-C": { + "Function": "Composite", + "Reference": "CapacityReservationId", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CapacityReservationId nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationId-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationId-C-005-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationId-C-006-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CapacityReservationId-C-004-C", + "CapacityReservationId-C-005-C", + "CapacityReservationId-C-006-C" + ] + } + }, + "CapacityReservationId-C-004-C": { + "Function": "Nullability", + "Reference": "CapacityReservationId", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CapacityReservationId MUST be null when a charge is not related to a capacity reservation.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "CapacityReservationId-C-005-C": { + "Function": "Nullability", + "Reference": "CapacityReservationId", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CapacityReservationId MUST NOT be null when a charge represents the unused portion of a capacity reservation.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "CapacityReservationId", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "CapacityReservationStatus", + "Value": "Unused" + }, + "Dependencies": [ + "CapacityReservationStatus-C-006-M" + ] + } + }, + "CapacityReservationId-C-006-C": { + "Function": "Nullability", + "Reference": "CapacityReservationId", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CapacityReservationId SHOULD NOT be null when a charge is related to a capacity reservation.", + "Keyword": "SHOULD NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "CapacityReservationId-C-007-C": { + "Function": "Composite", + "Reference": "CapacityReservationId", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When CapacityReservationId is not null, CapacityReservationId adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationId-C-008-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationId-C-009-O" + } + ] + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "CapacityReservationId", + "Value": null + }, + "Dependencies": [ + "CapacityReservationId-C-008-M", + "CapacityReservationId-C-009-O" + ] + } + }, + "CapacityReservationId-C-008-M": { + "Function": "Validation", + "Reference": "CapacityReservationId", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CapacityReservationId MUST be a unique identifier within the provider.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "CapacityReservationId-C-009-O": { + "Function": "Validation", + "Reference": "CapacityReservationId", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CapacityReservationId SHOULD be a fully-qualified identifier.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "Tags-C-000-C": { + "Function": "Composite", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "TAGGING_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The Tags column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-002-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-011-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-014-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-064-C", + "Tags-C-001-M", + "Tags-C-002-O", + "Tags-C-003-C", + "Tags-C-011-M", + "Tags-C-014-M" + ] + } + }, + "Tags-C-001-M": { + "Function": "Format", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "Tags MUST conform to KeyValueFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatKeyValue", + "ColumnName": "Tags" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "Tags-C-002-O": { + "Function": "Nullability", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "Tags MAY be null.", + "Keyword": "MAY", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "Tags", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "Tags-C-003-C": { + "Function": "Composite", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When Tags is not null, Tags adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-004-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-005-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-006-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-007-O" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-008-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-009-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-010-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "Tags", + "Value": null + }, + "Dependencies": [ + "Tags-C-004-M", + "Tags-C-005-M", + "Tags-C-006-M", + "Tags-C-007-O", + "Tags-C-008-M", + "Tags-C-009-M", + "Tags-C-010-C" + ] + } + }, + "Tags-C-004-M": { + "Function": "Validation", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Tags MUST include all user-defined and provider-defined tags.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "Tags-C-005-M": { + "Function": "Validation", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Tags MUST only include finalized tags.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "Tags-C-006-M": { + "Function": "Validation", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Tags SHOULD include tag keys with corresponding non-null values for a given resource.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "Tags-C-007-O": { + "Function": "Nullability", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Tags MAY include tag keys with a null value for a given resource depending on the provider's tag finalization process.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "Tags-C-008-M": { + "Function": "Validation", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Tag keys that do not support corresponding values, MUST have a corresponding true (boolean) value set.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "Tags-C-009-M": { + "Function": "Validation", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Provider SHOULD publish tag finalization methods and semantics within their respective documentation.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "Tags-C-010-C": { + "Function": "Validation", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Provider MUST NOT alter tag values unless applying true (boolean) to valueless tags.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "Tags-C-011-M": { + "Function": "Composite", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "Provider-defined tags adhere to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-012-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-013-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "Tags-C-012-M", + "Tags-C-013-M" + ] + } + }, + "Tags-C-012-M": { + "Function": "Validation", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Provider-defined tag keys MUST be prefixed with a predetermined, provider-specified tag key prefix that is unique to each corresponding provider-specified tag scheme.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "Tags-C-013-M": { + "Function": "Validation", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Provider SHOULD publish all provider-specified tag key prefixes within their respective documentation.", + "Keyword": "SHOULD", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "Tags-C-014-M": { + "Function": "Composite", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "User-defined tags adhere to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-015-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-016-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "Tags-C-017-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "Tags-C-015-C", + "Tags-C-016-C", + "Tags-C-017-M" + ] + } + }, + "Tags-C-015-C": { + "Function": "Validation", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Provider MUST prefix all but one user-defined tag scheme with a predetermined, provider-specified tag key prefix that is unique to each corresponding user-defined tag scheme when the provider has more than one user-defined tag scheme.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "Tags-C-016-C": { + "Function": "Validation", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Provider MUST NOT prefix tag keys when the provider has only one user-defined tag scheme.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "Tags-C-017-M": { + "Function": "Validation", + "Reference": "Tags", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Provider MUST NOT allow reserved tag key prefixes to be used as prefixes for any user-defined tag keys within a prefixless user-defined tag scheme.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SubAccountName-C-000-C": { + "Function": "Composite", + "Reference": "SubAccountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "SUB_ACCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The SubAccountName column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountName-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountName-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountName-C-003-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-029-C", + "SubAccountName-C-001-M", + "SubAccountName-C-002-M", + "SubAccountName-C-003-C" + ] + } + }, + "SubAccountName-C-001-M": { + "Function": "Type", + "Reference": "SubAccountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SubAccountName MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "SubAccountName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "SubAccountName-C-002-M": { + "Function": "Format", + "Reference": "SubAccountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SubAccountName MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "SubAccountName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "SubAccountName-C-003-C": { + "Function": "Composite", + "Reference": "SubAccountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SubAccountName nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountName-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountName-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "SubAccountName-C-004-C", + "SubAccountName-C-005-C" + ] + } + }, + "SubAccountName-C-004-C": { + "Function": "Nullability", + "Reference": "SubAccountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SubAccountName MUST be null when SubAccountId is null.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "SubAccountName", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "SubAccountId", + "Value": null + }, + "Dependencies": [ + "SubAccountId-C-000-C" + ] + } + }, + "SubAccountName-C-005-C": { + "Function": "Nullability", + "Reference": "SubAccountName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SubAccountName MUST NOT be null when SubAccountId is not null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "SubAccountName", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "SubAccountId", + "Value": null + }, + "Dependencies": [ + "SubAccountId-C-000-C" + ] + } + }, + "ResourceName-C-000-C": { + "Function": "Composite", + "Reference": "ResourceName", + "EntityType": "Column", + "Notes": "Main composite rule for ResourceName column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "BILLING_BASED_ON_PROVISIONED_RESOURCES_SUPPORTED", + "RESOURCE_TYPE_ASSIGNMENT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ResourceName column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceName-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceName-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceName-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceName-C-006-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-044-C", + "ResourceName-C-001-M", + "ResourceName-C-002-M", + "ResourceName-C-003-C", + "ResourceName-C-006-C" + ] + } + }, + "ResourceName-C-001-M": { + "Function": "Type", + "Reference": "ResourceName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ResourceName MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "ResourceName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ResourceName-C-002-M": { + "Function": "Format", + "Reference": "ResourceName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ResourceName MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "ResourceName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ResourceName-C-003-C": { + "Function": "Composite", + "Reference": "ResourceName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ResourceName nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceName-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ResourceName-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "ResourceName-C-004-C", + "ResourceName-C-005-C" + ] + } + }, + "ResourceName-C-004-C": { + "Function": "Nullability", + "Reference": "ResourceName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ResourceName MUST be null when ResourceId is null or when the resource does not have an assigned display name.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ResourceId", + "Value": null + }, + "Dependencies": [ + "ResourceId-C-000-C" + ] + } + }, + "ResourceName-C-005-C": { + "Function": "Nullability", + "Reference": "ResourceName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ResourceName MUST NOT be null when ResourceId is not null and the resource has an assigned display name.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ResourceId", + "Value": null + }, + "Dependencies": [ + "ResourceId-C-000-C" + ] + } + }, + "ResourceName-C-006-C": { + "Function": "Validation", + "Reference": "ResourceName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ResourceName MUST NOT duplicate ResourceId when the resource is not provisioned interactively or only has a system-generated ResourceId.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [ + "ResourceId-C-000-C" + ] + } + }, + "ContractedUnitPrice-C-000-C": { + "Function": "Composite", + "Reference": "ContractedUnitPrice", + "EntityType": "Column", + "Notes": "Root composite gated by provider supports negotiated pricing concepts", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "NEGOTIATED_PRICING_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ContractedUnitPrice column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedUnitPrice-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedUnitPrice-C-004-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedUnitPrice-C-008-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedUnitPrice-C-012-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-034-C", + "ContractedUnitPrice-C-001-M", + "ContractedUnitPrice-C-004-M", + "ContractedUnitPrice-C-008-C", + "ContractedUnitPrice-C-012-C" + ] + } + }, + "ContractedUnitPrice-C-001-M": { + "Function": "Composite", + "Reference": "ContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ContractedUnitPrice adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedUnitPrice-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedUnitPrice-C-003-M" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "ContractedUnitPrice-C-002-M", + "ContractedUnitPrice-C-003-M" + ] + } + }, + "ContractedUnitPrice-C-002-M": { + "Function": "Type", + "Reference": "ContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ContractedUnitPrice MUST be of type Decimal.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeDecimal", + "ColumnName": "ContractedUnitPrice" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ContractedUnitPrice-C-003-M": { + "Function": "Format", + "Reference": "ContractedUnitPrice", + "EntityType": "Column", + "Notes": "Cross-attribute reference: NumericFormat", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ContractedUnitPrice MUST conform to NumericFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatNumeric", + "ColumnName": "ContractedUnitPrice" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ContractedUnitPrice-C-004-M": { + "Function": "Composite", + "Reference": "ContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ContractedUnitPrice nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedUnitPrice-C-005-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedUnitPrice-C-006-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedUnitPrice-C-007-O" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "ContractedUnitPrice-C-005-C", + "ContractedUnitPrice-C-006-C", + "ContractedUnitPrice-C-007-O" + ] + } + }, + "ContractedUnitPrice-C-005-C": { + "Function": "Nullability", + "Reference": "ContractedUnitPrice", + "EntityType": "Column", + "Notes": "Cross-column reference: ChargeCategory", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ContractedUnitPrice MUST be null when ChargeCategory is \"Tax\".", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "ContractedUnitPrice", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Tax" + }, + "Dependencies": [ + "ChargeCategory-C-000-M" + ] + } + }, + "ContractedUnitPrice-C-006-C": { + "Function": "Nullability", + "Reference": "ContractedUnitPrice", + "EntityType": "Column", + "Notes": "Cross-column references: ChargeCategory, ChargeClass", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ContractedUnitPrice MUST NOT be null when ChargeCategory is \"Usage\" or \"Purchase\" and ChargeClass is not \"Correction\".", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ContractedUnitPrice", + "Value": null + }, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Purchase" + } + ] + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + } + ] + }, + "Dependencies": [ + "ChargeCategory-C-000-M", + "ChargeClass-C-000-M" + ] + } + }, + "ContractedUnitPrice-C-007-O": { + "Function": "Nullability", + "Reference": "ContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ContractedUnitPrice MAY be null in all other cases.", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ContractedUnitPrice-C-008-C": { + "Function": "Composite", + "Reference": "ContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When ContractedUnitPrice is not null, ContractedUnitPrice adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedUnitPrice-C-009-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedUnitPrice-C-010-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedUnitPrice-C-011-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ContractedUnitPrice", + "Value": null + }, + "Dependencies": [ + "ContractedUnitPrice-C-009-C", + "ContractedUnitPrice-C-010-C", + "ContractedUnitPrice-C-011-C" + ] + } + }, + "ContractedUnitPrice-C-009-C": { + "Function": "Validation", + "Reference": "ContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ContractedUnitPrice MUST be a non-negative decimal value.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckGreaterOrEqualThanValue", + "ColumnName": "ContractedUnitPrice", + "Value": 0 + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ContractedUnitPrice", + "Value": null + }, + "Dependencies": [] + } + }, + "ContractedUnitPrice-C-010-C": { + "Function": "Validation", + "Reference": "ContractedUnitPrice", + "EntityType": "Column", + "Notes": "Cross-column reference: BillingCurrency", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ContractedUnitPrice MUST be denominated in the BillingCurrency.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ContractedUnitPrice", + "Value": null + }, + "Dependencies": [ + "BillingCurrency-C-000-M" + ] + } + }, + "ContractedUnitPrice-C-011-C": { + "Function": "Validation", + "Reference": "ContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The product of ContractedUnitPrice and PricingQuantity MUST match the ContractedCost when PricingQuantity is not null and ChargeClass is not \"Correction\".", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnByColumnEqualsColumnValue", + "ColumnAName": "ContractedUnitPrice", + "ColumnBName": "PricingQuantity", + "ResultColumnName": "ContractedCost" + }, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ContractedUnitPrice", + "Value": null + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingQuantity", + "Value": null + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + } + ] + }, + "Dependencies": [ + "PricingQuantity-C-000-M", + "ContractedCost-C-000-M", + "ChargeClass-C-000-M" + ] + } + }, + "ContractedUnitPrice-C-012-C": { + "Function": "Validation", + "Reference": "ContractedUnitPrice", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Discrepancies in ContractedUnitPrice, ContractedCost, or PricingQuantity MAY exist when ChargeClass is \"Correction\".", + "Keyword": "MAY", + "Requirement": {}, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + }, + "Dependencies": [ + "ChargeClass-C-005-C" + ] + } + }, + "CapacityReservationStatus-C-000-C": { + "Function": "Composite", + "Reference": "CapacityReservationStatus", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [ + "CAPACITY_RESERVATION_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The CapacityReservationStatus column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationStatus-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationStatus-C-002-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationStatus-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-020-C", + "CapacityReservationStatus-C-001-M", + "CapacityReservationStatus-C-002-C", + "CapacityReservationStatus-C-005-C" + ] + } + }, + "CapacityReservationStatus-C-001-M": { + "Function": "Type", + "Reference": "CapacityReservationStatus", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CapacityReservationStatus MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "CapacityReservationStatus" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CapacityReservationStatus-C-002-C": { + "Function": "Composite", + "Reference": "CapacityReservationStatus", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CapacityReservationStatus nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationStatus-C-003-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationStatus-C-004-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CapacityReservationStatus-C-003-C", + "CapacityReservationStatus-C-004-C" + ] + } + }, + "CapacityReservationStatus-C-003-C": { + "Function": "Nullability", + "Reference": "CapacityReservationStatus", + "EntityType": "Column", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CapacityReservationStatus MUST be null when CapacityReservationId is null.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "CapacityReservationStatus", + "Value": null + }, + "Condition": { + "AND": { + "CheckFunction": "CheckValue", + "ColumnName": "CapacityReservationId", + "Value": null + } + }, + "Dependencies": [ + "CapacityReservationId-C-003-C" + ] + }, + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "" + }, + "CapacityReservationStatus-C-004-C": { + "Function": "Nullability", + "Reference": "CapacityReservationStatus", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CapacityReservationStatus MUST NOT be null when CapacityReservationId is not null and ChargeCategory is \"Usage\".", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "CapacityReservationStatus", + "Value": null + }, + "Condition": { + "AND": [ + { + "CheckFunction": "CheckNotValue", + "ColumnName": "CapacityReservationId", + "Value": null + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeCategory", + "Value": "Usage" + } + ] + }, + "Dependencies": [ + "CapacityReservationId-C-003-C", + "ChargeCategory-C-000-M" + ] + } + }, + "CapacityReservationStatus-C-005-C": { + "Function": "Composite", + "Reference": "CapacityReservationStatus", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When CapacityReservationStatus is not null, CapacityReservationStatus adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationStatus-C-006-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationStatus-C-007-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "CapacityReservationStatus-C-008-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "CapacityReservationStatus", + "Value": null + }, + "Dependencies": [ + "CapacityReservationStatus-C-006-M", + "CapacityReservationStatus-C-007-C", + "CapacityReservationStatus-C-008-C" + ] + } + }, + "CapacityReservationStatus-C-006-M": { + "Function": "Validation", + "Reference": "CapacityReservationStatus", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "CapacityReservationStatus MUST be one of the allowed values.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "OR", + "Items": [ + { + "CheckFunction": "CheckValue", + "ColumnName": "CapacityReservationStatus", + "Value": "Used" + }, + { + "CheckFunction": "CheckValue", + "ColumnName": "CapacityReservationStatus", + "Value": "Unused" + } + ] + }, + "Condition": {}, + "Dependencies": [] + } + }, + "CapacityReservationStatus-C-007-C": { + "Function": "Validation", + "Reference": "CapacityReservationStatus", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CapacityReservationStatus MUST be \"Unused\" when the charge represents the unused portion of a capacity reservation.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "CapacityReservationStatus-C-008-C": { + "Function": "Validation", + "Reference": "CapacityReservationStatus", + "EntityType": "Column", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "Notes": "", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "CapacityReservationStatus MUST be \"Used\" when the charge represents the used portion of a capacity reservation.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ContractedCost-C-000-M": { + "Function": "Composite", + "Reference": "ContractedCost", + "EntityType": "Column", + "Notes": "Root composite rule", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ContractedCost column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedCost-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedCost-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedCost-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedCost-C-004-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedCost-C-005-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedCost-C-006-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedCost-C-009-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedCost-C-010-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-030-M", + "ContractedCost-C-001-M", + "ContractedCost-C-002-M", + "ContractedCost-C-003-M", + "ContractedCost-C-004-M", + "ContractedCost-C-005-M", + "ContractedCost-C-006-C", + "ContractedCost-C-009-C", + "ContractedCost-C-010-C" + ] + } + }, + "ContractedCost-C-001-M": { + "Function": "Type", + "Reference": "ContractedCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ContractedCost MUST be of type Decimal.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeDecimal", + "ColumnName": "ContractedCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ContractedCost-C-002-M": { + "Function": "Format", + "Reference": "ContractedCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ContractedCost MUST conform to NumericFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatNumeric", + "ColumnName": "ContractedCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ContractedCost-C-003-M": { + "Function": "Nullability", + "Reference": "ContractedCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ContractedCost MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ContractedCost", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ContractedCost-C-004-M": { + "Function": "Validation", + "Reference": "ContractedCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ContractedCost MUST be a valid decimal value.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ContractedCost", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ContractedCost-C-005-M": { + "Function": "Validation", + "Reference": "ContractedCost", + "EntityType": "Column", + "Notes": "Cross-column reference: BillingCurrency", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ContractedCost MUST be denominated in the BillingCurrency.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [ + "BillingCurrency-C-000-M" + ] + } + }, + "ContractedCost-C-006-C": { + "Function": "Composite", + "Reference": "ContractedCost", + "EntityType": "Column", + "Notes": "Lead-in composite", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When ContractedUnitPrice is null, ContractedCost adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedCost-C-007-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ContractedCost-C-008-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ContractedUnitPrice", + "Value": null + }, + "Dependencies": [ + "ContractedUnitPrice-C-004-M", + "ContractedCost-C-007-C", + "ContractedCost-C-008-C" + ] + } + }, + "ContractedCost-C-007-C": { + "Function": "Validation", + "Reference": "ContractedCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ContractedCost of a charge calculated based on other charges (e.g., when the ChargeCategory is \"Tax\") MUST be calculated based on the ContractedCost of those related charges.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ContractedCost-C-008-C": { + "Function": "Validation", + "Reference": "ContractedCost", + "EntityType": "Column", + "Notes": "Cross-column reference: BilledCost", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ContractedCost of a charge unrelated to other charges (e.g., when the ChargeCategory is \"Credit\") MUST match the BilledCost.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ContractedCost-C-009-C": { + "Function": "Validation", + "Reference": "ContractedCost", + "EntityType": "Column", + "Notes": "Cross-column references: ContractedUnitPrice, PricingQuantity, ContractedCost", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "The product of ContractedUnitPrice and PricingQuantity MUST match the ContractedCost when ContractedUnitPrice is not null, PricingQuantity is not null, and ChargeClass is not \"Correction\".", + "Keyword": "MUST", + "Requirement": {}, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ContractedUnitPrice", + "Value": null + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingQuantity", + "Value": null + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + } + ] + }, + "Dependencies": [ + "ContractedUnitPrice-C-004-M", + "PricingQuantity-C-000-M", + "ChargeClass-C-000-M" + ] + } + }, + "ContractedCost-C-010-C": { + "Function": "Validation", + "Reference": "ContractedCost", + "EntityType": "Column", + "Notes": "Cross-column references: ContractedCost, ContractedUnitPrice, PricingQuantity", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Discrepancies in ContractedCost, ContractedUnitPrice, or PricingQuantity MAY exist when ChargeClass is \"Correction\".", + "Keyword": "MAY", + "Requirement": {}, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + }, + "Dependencies": [ + "ChargeClass-C-005-C" + ] + } + }, + "RegionName-C-000-C": { + "Function": "Composite", + "Reference": "RegionName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "REGION_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The RegionName column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "RegionName-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "RegionName-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "RegionName-C-003-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-062-C", + "RegionName-C-001-M", + "RegionName-C-002-M", + "RegionName-C-003-C" + ] + } + }, + "RegionName-C-001-M": { + "Function": "Type", + "Reference": "RegionName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "RegionName MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "RegionName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "RegionName-C-002-M": { + "Function": "Format", + "Reference": "RegionName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "RegionName MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "RegionName" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "RegionName-C-003-C": { + "Function": "Composite", + "Reference": "RegionName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "RegionName nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "RegionName-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "RegionName-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "RegionName-C-004-C", + "RegionName-C-005-C" + ] + } + }, + "RegionName-C-004-C": { + "Function": "Nullability", + "Reference": "RegionName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "RegionName MUST be null when RegionId is null.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckValue", + "ColumnName": "RegionName", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "RegionId", + "Value": null + }, + "Dependencies": [ + "RegionId-C-000-C" + ] + } + }, + "RegionName-C-005-C": { + "Function": "Nullability", + "Reference": "RegionName", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "RegionName MUST NOT be null when RegionId is not null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "RegionName", + "Value": null + }, + "Condition": { + "CheckFunction": "CheckNotValue", + "ColumnName": "RegionId", + "Value": null + }, + "Dependencies": [ + "RegionId-C-000-C" + ] + } + }, + "ListCost-C-000-M": { + "Function": "Composite", + "Reference": "ListCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The ListCost column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListCost-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListCost-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListCost-C-003-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListCost-C-004-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListCost-C-005-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListCost-C-006-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListCost-C-009-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListCost-C-010-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-032-M", + "ListCost-C-001-M", + "ListCost-C-002-M", + "ListCost-C-003-M", + "ListCost-C-004-M", + "ListCost-C-005-M", + "ListCost-C-006-C", + "ListCost-C-007-C", + "ListCost-C-008-C", + "ListCost-C-009-C", + "ListCost-C-010-C" + ] + } + }, + "ListCost-C-001-M": { + "Function": "Type", + "Reference": "ListCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ListCost MUST be of type Decimal.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeDecimal", + "ColumnName": "ListCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ListCost-C-002-M": { + "Function": "Format", + "Reference": "ListCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ListCost MUST conform to NumericFormat requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatNumeric", + "ColumnName": "ListCost" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ListCost-C-003-M": { + "Function": "Nullability", + "Reference": "ListCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ListCost MUST NOT be null.", + "Keyword": "MUST NOT", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ListCost", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ListCost-C-004-M": { + "Function": "Validation", + "Reference": "ListCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "ListCost MUST be a valid decimal value.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "CheckNotValue", + "ColumnName": "ListCost", + "Value": null + }, + "Condition": {}, + "Dependencies": [] + } + }, + "ListCost-C-005-M": { + "Function": "Validation", + "Reference": "ListCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ListCost MUST be denominated in the BillingCurrency.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [ + "BillingCurrency-C-000-M" + ] + } + }, + "ListCost-C-006-C": { + "Function": "Composite", + "Reference": "ListCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "When ListUnitPrice is null, ListCost adheres to the following additional requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListCost-C-007-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "ListCost-C-008-C" + } + ] + }, + "Condition": { + "CheckFunction": "CheckValue", + "ColumnName": "ListUnitPrice", + "Value": null + }, + "Dependencies": [ + "ListUnitPrice-C-000-C", + "ListCost-C-007-C", + "ListCost-C-008-C" + ] + } + }, + "ListCost-C-007-C": { + "Function": "Validation", + "Reference": "ListCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ListCost of a charge calculated based on other charges (e.g., when the ChargeCategory is \"Tax\") MUST be calculated based on the ListCost of those related charges.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ListCost-C-008-C": { + "Function": "Validation", + "Reference": "ListCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "ListCost of a charge unrelated to other charges (e.g., when the ChargeCategory is \"Credit\") MUST match the BilledCost.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "ListCost-C-009-C": { + "Function": "Validation", + "Reference": "ListCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The product of ListUnitPrice and PricingQuantity MUST match the ListCost when ListUnitPrice is not null, PricingQuantity is not null, and ChargeClass is not \"Correction\".", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "ColumnByColumnEqualsColumnValue", + "ColumnAName": "ListUnitPrice", + "ColumnBName": "PricingQuantity", + "ResultColumnName": "ListCost" + }, + "Condition": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ListUnitPrice", + "Value": null + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "PricingQuantity", + "Value": null + }, + { + "CheckFunction": "CheckNotValue", + "ColumnName": "ChargeClass", + "Value": "Correction" + } + ] + }, + "Dependencies": [ + "ListUnitPrice-C-000-C", + "PricingQuantity-C-000-M", + "ChargeClass-C-000-M" + ] + } + }, + "ListCost-C-010-C": { + "Function": "Validation", + "Reference": "ListCost", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "Discrepancies in ListCost, ListUnitPrice, or PricingQuantity MAY exist when ChargeClass is \"Correction\".", + "Keyword": "MAY", + "Requirement": {}, + "Condition": {}, + "Dependencies": [ + "ChargeClass-C-000-M" + ] + } + }, + "SubAccountId-C-000-C": { + "Function": "Composite", + "Reference": "SubAccountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [ + "SUB_ACCOUNT_SUPPORTED" + ], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "The SubAccountId column adheres to the following requirements:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountId-C-001-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountId-C-002-M" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountId-C-003-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "CostAndUsage-D-019-C", + "SubAccountId-C-001-M", + "SubAccountId-C-002-M", + "SubAccountId-C-003-C" + ] + } + }, + "SubAccountId-C-001-M": { + "Function": "Type", + "Reference": "SubAccountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SubAccountId MUST be of type String.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "TypeString", + "ColumnName": "SubAccountId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "SubAccountId-C-002-M": { + "Function": "Format", + "Reference": "SubAccountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SubAccountId MUST conform to StringHandling requirements.", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "FormatString", + "ColumnName": "SubAccountId" + }, + "Condition": {}, + "Dependencies": [] + } + }, + "SubAccountId-C-003-C": { + "Function": "Composite", + "Reference": "SubAccountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Static", + "ValidationCriteria": { + "MustSatisfy": "SubAccountId nullability is defined as follows:", + "Keyword": "MUST", + "Requirement": { + "CheckFunction": "AND", + "Items": [ + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountId-C-004-C" + }, + { + "CheckFunction": "CheckModelRule", + "ModelRuleId": "SubAccountId-C-005-C" + } + ] + }, + "Condition": {}, + "Dependencies": [ + "SubAccountId-C-004-C", + "SubAccountId-C-005-C" + ] + } + }, + "SubAccountId-C-004-C": { + "Function": "Nullability", + "Reference": "SubAccountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SubAccountId MUST be null when a charge is not related to a sub account.", + "Keyword": "MUST", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + }, + "SubAccountId-C-005-C": { + "Function": "Nullability", + "Reference": "SubAccountId", + "EntityType": "Column", + "Notes": "", + "ModelVersionIntroduced": "1.2", + "Status": "Active", + "ApplicabilityCriteria": [], + "Type": "Dynamic", + "ValidationCriteria": { + "MustSatisfy": "SubAccountId MUST NOT be null when a charge is related to a sub account.", + "Keyword": "MUST NOT", + "Requirement": {}, + "Condition": {}, + "Dependencies": [] + } + } + } +} \ No newline at end of file From 0ac1890595c2ff42d25cde410a13807076bfe129 Mon Sep 17 00:00:00 2001 From: Mike Fuller Date: Thu, 26 Feb 2026 13:17:20 +1100 Subject: [PATCH 6/6] fix tests to work with locally available 1.2 version of the model Signed-off-by: Mike Fuller --- tests/test_spec_rules_unsupported_version.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_spec_rules_unsupported_version.py b/tests/test_spec_rules_unsupported_version.py index 0ad2a5b..0130391 100644 --- a/tests/test_spec_rules_unsupported_version.py +++ b/tests/test_spec_rules_unsupported_version.py @@ -32,7 +32,7 @@ def setUp(self): self.spec = SpecRules( rule_set_path="focus_validator/rules", rules_file_prefix="model-", - rules_version="1.3", + rules_version="1.2", # Use 1.2 which will match to available 1.2.0.1 rules_file_suffix=".json", focus_dataset="CostAndUsage", filter_rules=None, @@ -48,7 +48,6 @@ def test_parse_version_from_filename_valid(self): test_cases = [ ("model-1.2.json", "1.2"), ("model-1.2.0.1.json", "1.2.0.1"), - ("model-1.3.json", "1.3"), ("model-2.0.0.json", "2.0.0"), ] for filename, expected in test_cases: