@spottoai/types-package 1.0.2-dev1138.13 → 1.0.2-dev1138.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/dist/accounts/accounts.d.ts +97 -5
- package/dist/accounts/accounts.d.ts.map +1 -1
- package/dist/accounts/accounts.js +2 -1
- package/dist/accounts/accounts.js.map +1 -1
- package/dist/accounts/azureManualOnboarding.d.ts +114 -0
- package/dist/accounts/azureManualOnboarding.d.ts.map +1 -0
- package/dist/accounts/azureManualOnboarding.js +12 -0
- package/dist/accounts/azureManualOnboarding.js.map +1 -0
- package/dist/accounts/azureSpSetup.d.ts +147 -31
- package/dist/accounts/azureSpSetup.d.ts.map +1 -1
- package/dist/accounts/azureSpSetup.js +15 -0
- package/dist/accounts/azureSpSetup.js.map +1 -1
- package/dist/accounts/azureSpSetupDurable.d.ts +8 -0
- package/dist/accounts/azureSpSetupDurable.d.ts.map +1 -1
- package/dist/accounts/azureSpSetupDurable.js +28 -0
- package/dist/accounts/azureSpSetupDurable.js.map +1 -1
- package/dist/accounts/index.d.ts +2 -0
- package/dist/accounts/index.d.ts.map +1 -1
- package/dist/accounts/index.js +2 -0
- package/dist/accounts/index.js.map +1 -1
- package/dist/accounts/readPermissions.d.ts +1 -1
- package/dist/accounts/readPermissions.d.ts.map +1 -1
- package/dist/accounts/readPermissions.js.map +1 -1
- package/dist/accounts/subscriptionWriteAccess.d.ts +76 -0
- package/dist/accounts/subscriptionWriteAccess.d.ts.map +1 -0
- package/dist/accounts/subscriptionWriteAccess.js +119 -0
- package/dist/accounts/subscriptionWriteAccess.js.map +1 -0
- package/dist/accounts/validation.d.ts +24 -0
- package/dist/accounts/validation.d.ts.map +1 -1
- package/dist/accounts/writePermissions.d.ts +17 -1
- package/dist/accounts/writePermissions.d.ts.map +1 -1
- package/dist/accounts/writePermissions.js +47 -1
- package/dist/accounts/writePermissions.js.map +1 -1
- package/dist/ai/conversationHistory.d.ts +52 -0
- package/dist/ai/conversationHistory.d.ts.map +1 -0
- package/dist/ai/conversationHistory.js +10 -0
- package/dist/ai/conversationHistory.js.map +1 -0
- package/dist/ai/followUps.d.ts +16 -0
- package/dist/ai/followUps.d.ts.map +1 -0
- package/dist/ai/followUps.js +21 -0
- package/dist/ai/followUps.js.map +1 -0
- package/dist/ai/grounding.d.ts +78 -0
- package/dist/ai/grounding.d.ts.map +1 -0
- package/dist/ai/grounding.js +154 -0
- package/dist/ai/grounding.js.map +1 -0
- package/dist/ai/index.d.ts +306 -6
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +26 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/workspaceArtifacts.d.ts +587 -0
- package/dist/ai/workspaceArtifacts.d.ts.map +1 -0
- package/dist/ai/workspaceArtifacts.js +162 -0
- package/dist/ai/workspaceArtifacts.js.map +1 -0
- package/dist/aws/commitments-planning.d.ts +6 -1
- package/dist/aws/commitments-planning.d.ts.map +1 -1
- package/dist/aws/commitments-planning.js +20 -0
- package/dist/aws/commitments-planning.js.map +1 -1
- package/dist/aws/commitmentsPlanningValidation.d.ts +1 -1
- package/dist/aws/commitmentsPlanningValidation.d.ts.map +1 -1
- package/dist/aws/commitmentsPlanningValidation.js +26 -25
- package/dist/aws/commitmentsPlanningValidation.js.map +1 -1
- package/dist/aws/commitmentsPlanningView.d.ts +49 -0
- package/dist/aws/commitmentsPlanningView.d.ts.map +1 -0
- package/dist/aws/{pluginPublicArtifactEvidence.js → commitmentsPlanningView.js} +1 -1
- package/dist/aws/commitmentsPlanningView.js.map +1 -0
- package/dist/aws/estates.d.ts +1 -1
- package/dist/aws/estates.d.ts.map +1 -1
- package/dist/aws/estates.js +7 -1
- package/dist/aws/estates.js.map +1 -1
- package/dist/aws/index.d.ts +7 -14
- package/dist/aws/index.d.ts.map +1 -1
- package/dist/aws/index.js +7 -13
- package/dist/aws/index.js.map +1 -1
- package/dist/aws/onboarding.d.ts +3 -0
- package/dist/aws/onboarding.d.ts.map +1 -1
- package/dist/aws/organizationCommitments.d.ts +261 -0
- package/dist/aws/organizationCommitments.d.ts.map +1 -0
- package/dist/aws/organizationCommitments.js +53 -0
- package/dist/aws/organizationCommitments.js.map +1 -0
- package/dist/aws/organizationCommitmentsApiValidation.d.ts +21 -0
- package/dist/aws/organizationCommitmentsApiValidation.d.ts.map +1 -0
- package/dist/aws/organizationCommitmentsApiValidation.js +226 -0
- package/dist/aws/organizationCommitmentsApiValidation.js.map +1 -0
- package/dist/aws/organizationCommitmentsValidation.d.ts +12 -0
- package/dist/aws/organizationCommitmentsValidation.d.ts.map +1 -0
- package/dist/aws/organizationCommitmentsValidation.js +229 -0
- package/dist/aws/organizationCommitmentsValidation.js.map +1 -0
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.d.ts +9 -0
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.d.ts.map +1 -0
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.js +410 -0
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.js.map +1 -0
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.d.ts +16 -0
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.d.ts.map +1 -0
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.js +6 -0
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.js.map +1 -0
- package/dist/aws/publicArtifacts.d.ts +2 -37
- package/dist/aws/publicArtifacts.d.ts.map +1 -1
- package/dist/aws/publicArtifacts.js +3 -1
- package/dist/aws/publicArtifacts.js.map +1 -1
- package/dist/aws/relationships.d.ts +5 -3
- package/dist/aws/relationships.d.ts.map +1 -1
- package/dist/aws/relationships.js +18 -3
- package/dist/aws/relationships.js.map +1 -1
- package/dist/aws/requests.d.ts +46 -3
- package/dist/aws/requests.d.ts.map +1 -1
- package/dist/aws/requests.js +5 -3
- package/dist/aws/requests.js.map +1 -1
- package/dist/aws/resourceGraph.d.ts +14 -0
- package/dist/aws/resourceGraph.d.ts.map +1 -0
- package/dist/aws/resourceGraph.js +68 -0
- package/dist/aws/resourceGraph.js.map +1 -0
- package/dist/aws/validationHelpers.d.ts +8 -0
- package/dist/aws/validationHelpers.d.ts.map +1 -0
- package/dist/aws/validationHelpers.js +54 -0
- package/dist/aws/validationHelpers.js.map +1 -0
- package/dist/azure/activityLogAnalysis.d.ts +320 -0
- package/dist/azure/activityLogAnalysis.d.ts.map +1 -0
- package/dist/azure/activityLogAnalysis.js +70 -0
- package/dist/azure/activityLogAnalysis.js.map +1 -0
- package/dist/azure/activityLogAnalysisPublicValidation.d.ts +8 -0
- package/dist/azure/activityLogAnalysisPublicValidation.d.ts.map +1 -0
- package/dist/azure/activityLogAnalysisPublicValidation.js +368 -0
- package/dist/azure/activityLogAnalysisPublicValidation.js.map +1 -0
- package/dist/azure/activityLogAnalysisPublicValidationHelpers.d.ts +33 -0
- package/dist/azure/activityLogAnalysisPublicValidationHelpers.d.ts.map +1 -0
- package/dist/azure/activityLogAnalysisPublicValidationHelpers.js +197 -0
- package/dist/azure/activityLogAnalysisPublicValidationHelpers.js.map +1 -0
- package/dist/azure/activityLogAnalysisValidation.d.ts +5 -0
- package/dist/azure/activityLogAnalysisValidation.d.ts.map +1 -0
- package/dist/azure/activityLogAnalysisValidation.js +376 -0
- package/dist/azure/activityLogAnalysisValidation.js.map +1 -0
- package/dist/azure/activityLogs.d.ts +8 -0
- package/dist/azure/activityLogs.d.ts.map +1 -1
- package/dist/azure/activityLogs.js.map +1 -1
- package/dist/azure/benefits.d.ts +1 -1
- package/dist/azure/benefits.d.ts.map +1 -1
- package/dist/azure/billingPlots.d.ts +7 -1
- package/dist/azure/billingPlots.d.ts.map +1 -1
- package/dist/azure/billingPlots.js +45 -4
- package/dist/azure/billingPlots.js.map +1 -1
- package/dist/azure/commitmentsPlanning.d.ts +23 -48
- package/dist/azure/commitmentsPlanning.d.ts.map +1 -1
- package/dist/azure/commitmentsPlanning.js +9 -0
- package/dist/azure/commitmentsPlanning.js.map +1 -1
- package/dist/azure/commitmentsPlanningValidation.d.ts +18 -0
- package/dist/azure/commitmentsPlanningValidation.d.ts.map +1 -0
- package/dist/azure/commitmentsPlanningValidation.js +50 -0
- package/dist/azure/commitmentsPlanningValidation.js.map +1 -0
- package/dist/azure/common.d.ts +26 -5
- package/dist/azure/common.d.ts.map +1 -1
- package/dist/azure/common.js +30 -0
- package/dist/azure/common.js.map +1 -1
- package/dist/azure/costComposition.d.ts +11 -1
- package/dist/azure/costComposition.d.ts.map +1 -1
- package/dist/azure/costComposition.js +84 -1
- package/dist/azure/costComposition.js.map +1 -1
- package/dist/azure/dataProtection.d.ts +44 -4
- package/dist/azure/dataProtection.d.ts.map +1 -1
- package/dist/azure/financialAnalytics.d.ts +80 -8
- package/dist/azure/financialAnalytics.d.ts.map +1 -1
- package/dist/azure/financialAnalyticsDelivery.d.ts +72 -3
- package/dist/azure/financialAnalyticsDelivery.d.ts.map +1 -1
- package/dist/azure/financialAnalyticsDelivery.js +7 -1
- package/dist/azure/financialAnalyticsDelivery.js.map +1 -1
- package/dist/azure/financialAnalyticsDeliveryValidation.d.ts +9 -1
- package/dist/azure/financialAnalyticsDeliveryValidation.d.ts.map +1 -1
- package/dist/azure/financialAnalyticsDeliveryValidation.js +190 -10
- package/dist/azure/financialAnalyticsDeliveryValidation.js.map +1 -1
- package/dist/azure/financialAnalyticsDisplayKernel.d.ts +12 -0
- package/dist/azure/financialAnalyticsDisplayKernel.d.ts.map +1 -0
- package/dist/azure/financialAnalyticsDisplayKernel.js +144 -0
- package/dist/azure/financialAnalyticsDisplayKernel.js.map +1 -0
- package/dist/azure/financialAnalyticsValidation.d.ts.map +1 -1
- package/dist/azure/financialAnalyticsValidation.js +101 -19
- package/dist/azure/financialAnalyticsValidation.js.map +1 -1
- package/dist/azure/financialAuthorityProjectionKernel.d.ts +8 -0
- package/dist/azure/financialAuthorityProjectionKernel.d.ts.map +1 -0
- package/dist/azure/financialAuthorityProjectionKernel.js +269 -0
- package/dist/azure/financialAuthorityProjectionKernel.js.map +1 -0
- package/dist/azure/financialAuthorityView.d.ts +13 -0
- package/dist/azure/financialAuthorityView.d.ts.map +1 -1
- package/dist/azure/financialAuthorityView.js.map +1 -1
- package/dist/azure/financialAuthorityViewValidation.d.ts +3 -1
- package/dist/azure/financialAuthorityViewValidation.d.ts.map +1 -1
- package/dist/azure/financialAuthorityViewValidation.js +273 -2
- package/dist/azure/financialAuthorityViewValidation.js.map +1 -1
- package/dist/azure/financialChargeComposition.d.ts +81 -0
- package/dist/azure/financialChargeComposition.d.ts.map +1 -0
- package/dist/azure/financialChargeComposition.js +41 -0
- package/dist/azure/financialChargeComposition.js.map +1 -0
- package/dist/azure/financialChargeCompositionKernel.d.ts +3 -0
- package/dist/azure/financialChargeCompositionKernel.d.ts.map +1 -0
- package/dist/azure/financialChargeCompositionKernel.js +53 -0
- package/dist/azure/financialChargeCompositionKernel.js.map +1 -0
- package/dist/azure/financialChargeCompositionValidation.d.ts +8 -0
- package/dist/azure/financialChargeCompositionValidation.d.ts.map +1 -0
- package/dist/azure/financialChargeCompositionValidation.js +164 -0
- package/dist/azure/financialChargeCompositionValidation.js.map +1 -0
- package/dist/azure/financialChargePolicy.d.ts +215 -0
- package/dist/azure/financialChargePolicy.d.ts.map +1 -0
- package/dist/azure/financialChargePolicy.js +488 -0
- package/dist/azure/financialChargePolicy.js.map +1 -0
- package/dist/azure/financialCurrentSpendSurfaceProjection.d.ts +76 -0
- package/dist/azure/financialCurrentSpendSurfaceProjection.d.ts.map +1 -0
- package/dist/azure/financialCurrentSpendSurfaceProjection.js +6 -0
- package/dist/azure/financialCurrentSpendSurfaceProjection.js.map +1 -0
- package/dist/azure/financialCurrentSpendSurfaceProjectionValidation.d.ts +10 -0
- package/dist/azure/financialCurrentSpendSurfaceProjectionValidation.d.ts.map +1 -0
- package/dist/azure/financialCurrentSpendSurfaceProjectionValidation.js +196 -0
- package/dist/azure/financialCurrentSpendSurfaceProjectionValidation.js.map +1 -0
- package/dist/azure/financialDataflow.d.ts +45 -2
- package/dist/azure/financialDataflow.d.ts.map +1 -1
- package/dist/azure/financialDataflow.js.map +1 -1
- package/dist/azure/financialDataflowKernel.d.ts +31 -0
- package/dist/azure/financialDataflowKernel.d.ts.map +1 -0
- package/dist/azure/financialDataflowKernel.js +170 -0
- package/dist/azure/financialDataflowKernel.js.map +1 -0
- package/dist/azure/financialDataflowValidation.d.ts +5 -2
- package/dist/azure/financialDataflowValidation.d.ts.map +1 -1
- package/dist/azure/financialDataflowValidation.js +203 -30
- package/dist/azure/financialDataflowValidation.js.map +1 -1
- package/dist/azure/financialEvidenceAssessmentValidation.d.ts.map +1 -1
- package/dist/azure/financialEvidenceAssessmentValidation.js +7 -0
- package/dist/azure/financialEvidenceAssessmentValidation.js.map +1 -1
- package/dist/azure/financialEvidenceCoverage.d.ts +36 -0
- package/dist/azure/financialEvidenceCoverage.d.ts.map +1 -0
- package/dist/azure/financialEvidenceCoverage.js +111 -0
- package/dist/azure/financialEvidenceCoverage.js.map +1 -0
- package/dist/azure/financialPolicy.d.ts +19 -3
- package/dist/azure/financialPolicy.d.ts.map +1 -1
- package/dist/azure/financialPolicy.js.map +1 -1
- package/dist/azure/financialPolicyDelivery.d.ts +75 -1
- package/dist/azure/financialPolicyDelivery.d.ts.map +1 -1
- package/dist/azure/financialPolicyDelivery.js +5 -1
- package/dist/azure/financialPolicyDelivery.js.map +1 -1
- package/dist/azure/financialPolicyDeliveryValidation.d.ts +16 -2
- package/dist/azure/financialPolicyDeliveryValidation.d.ts.map +1 -1
- package/dist/azure/financialPolicyDeliveryValidation.js +238 -5
- package/dist/azure/financialPolicyDeliveryValidation.js.map +1 -1
- package/dist/azure/financialPolicyKernel.d.ts +38 -0
- package/dist/azure/financialPolicyKernel.d.ts.map +1 -0
- package/dist/azure/financialPolicyKernel.js +232 -0
- package/dist/azure/financialPolicyKernel.js.map +1 -0
- package/dist/azure/financialPolicyValidation.d.ts +1 -0
- package/dist/azure/financialPolicyValidation.d.ts.map +1 -1
- package/dist/azure/financialPolicyValidation.js +111 -16
- package/dist/azure/financialPolicyValidation.js.map +1 -1
- package/dist/azure/financialProjection.d.ts +11 -1
- package/dist/azure/financialProjection.d.ts.map +1 -1
- package/dist/azure/financialProjection.js.map +1 -1
- package/dist/azure/financialProjectionValidation.d.ts.map +1 -1
- package/dist/azure/financialProjectionValidation.js +43 -3
- package/dist/azure/financialProjectionValidation.js.map +1 -1
- package/dist/azure/financialResourceSurfaceProjection.d.ts +66 -0
- package/dist/azure/financialResourceSurfaceProjection.d.ts.map +1 -0
- package/dist/azure/financialResourceSurfaceProjection.js +6 -0
- package/dist/azure/financialResourceSurfaceProjection.js.map +1 -0
- package/dist/azure/financialResourceSurfaceProjectionValidation.d.ts +16 -0
- package/dist/azure/financialResourceSurfaceProjectionValidation.d.ts.map +1 -0
- package/dist/azure/financialResourceSurfaceProjectionValidation.js +252 -0
- package/dist/azure/financialResourceSurfaceProjectionValidation.js.map +1 -0
- package/dist/azure/financialSavingsAuthority.d.ts +68 -4
- package/dist/azure/financialSavingsAuthority.d.ts.map +1 -1
- package/dist/azure/financialSavingsAuthority.js +2 -1
- package/dist/azure/financialSavingsAuthority.js.map +1 -1
- package/dist/azure/financialSavingsAuthorityValidation.d.ts +6 -2
- package/dist/azure/financialSavingsAuthorityValidation.d.ts.map +1 -1
- package/dist/azure/financialSavingsAuthorityValidation.js +188 -2
- package/dist/azure/financialSavingsAuthorityValidation.js.map +1 -1
- package/dist/azure/financialSavingsChargePolicyKernel.d.ts +12 -0
- package/dist/azure/financialSavingsChargePolicyKernel.d.ts.map +1 -0
- package/dist/azure/financialSavingsChargePolicyKernel.js +34 -0
- package/dist/azure/financialSavingsChargePolicyKernel.js.map +1 -0
- package/dist/azure/financialSavingsCoordinateValidation.d.ts.map +1 -1
- package/dist/azure/financialSavingsCoordinateValidation.js +98 -19
- package/dist/azure/financialSavingsCoordinateValidation.js.map +1 -1
- package/dist/azure/financialSavingsPercentageKernel.d.ts +20 -0
- package/dist/azure/financialSavingsPercentageKernel.d.ts.map +1 -0
- package/dist/azure/financialSavingsPercentageKernel.js +49 -0
- package/dist/azure/financialSavingsPercentageKernel.js.map +1 -0
- package/dist/azure/financialSavingsSurfaceProjection.d.ts +82 -3
- package/dist/azure/financialSavingsSurfaceProjection.d.ts.map +1 -1
- package/dist/azure/financialSavingsSurfaceProjection.js +3 -1
- package/dist/azure/financialSavingsSurfaceProjection.js.map +1 -1
- package/dist/azure/financialSavingsSurfaceProjectionKernel.d.ts +26 -0
- package/dist/azure/financialSavingsSurfaceProjectionKernel.d.ts.map +1 -0
- package/dist/azure/financialSavingsSurfaceProjectionKernel.js +435 -0
- package/dist/azure/financialSavingsSurfaceProjectionKernel.js.map +1 -0
- package/dist/azure/financialSavingsSurfaceProjectionValidation.d.ts.map +1 -1
- package/dist/azure/financialSavingsSurfaceProjectionValidation.js +199 -13
- package/dist/azure/financialSavingsSurfaceProjectionValidation.js.map +1 -1
- package/dist/azure/financialScope.d.ts +14 -0
- package/dist/azure/financialScope.d.ts.map +1 -1
- package/dist/azure/financialScope.js +14 -0
- package/dist/azure/financialScope.js.map +1 -1
- package/dist/azure/financialScopeBaseline.d.ts +11 -3
- package/dist/azure/financialScopeBaseline.d.ts.map +1 -1
- package/dist/azure/financialScopeBaseline.js +14 -1
- package/dist/azure/financialScopeBaseline.js.map +1 -1
- package/dist/azure/financialScopeBaselineIdentity.d.ts.map +1 -1
- package/dist/azure/financialScopeBaselineIdentity.js +24 -4
- package/dist/azure/financialScopeBaselineIdentity.js.map +1 -1
- package/dist/azure/financialScopeBaselineValidation.d.ts.map +1 -1
- package/dist/azure/financialScopeBaselineValidation.js +21 -4
- package/dist/azure/financialScopeBaselineValidation.js.map +1 -1
- package/dist/azure/financialScopeEvidence.d.ts +1 -1
- package/dist/azure/financialScopeEvidence.d.ts.map +1 -1
- package/dist/azure/governance.d.ts +150 -0
- package/dist/azure/governance.d.ts.map +1 -1
- package/dist/azure/governance.js +2 -1
- package/dist/azure/governance.js.map +1 -1
- package/dist/azure/metrics.d.ts +4 -29
- package/dist/azure/metrics.d.ts.map +1 -1
- package/dist/azure/payloads.d.ts +79 -1
- package/dist/azure/payloads.d.ts.map +1 -1
- package/dist/azure/payloads.js +87 -0
- package/dist/azure/payloads.js.map +1 -1
- package/dist/azure/prices.d.ts +41 -12
- package/dist/azure/prices.d.ts.map +1 -1
- package/dist/azure/recommendationLifecycleOverlayValidation.d.ts +5 -0
- package/dist/azure/recommendationLifecycleOverlayValidation.d.ts.map +1 -0
- package/dist/azure/recommendationLifecycleOverlayValidation.js +82 -0
- package/dist/azure/recommendationLifecycleOverlayValidation.js.map +1 -0
- package/dist/azure/recommendationState.d.ts +1 -1
- package/dist/azure/recommendationState.d.ts.map +1 -1
- package/dist/azure/recommendationTracks.d.ts +1 -1
- package/dist/azure/recommendationTracks.d.ts.map +1 -1
- package/dist/azure/recommendations.d.ts +141 -5
- package/dist/azure/recommendations.d.ts.map +1 -1
- package/dist/azure/recommendations.js +3 -1
- package/dist/azure/recommendations.js.map +1 -1
- package/dist/azure/relationships.d.ts +1 -1
- package/dist/azure/relationships.d.ts.map +1 -1
- package/dist/azure/reportDailySpend.d.ts +48 -0
- package/dist/azure/reportDailySpend.d.ts.map +1 -0
- package/dist/azure/reportDailySpend.js +6 -0
- package/dist/azure/reportDailySpend.js.map +1 -0
- package/dist/azure/reportDailySpendValidation.d.ts +3 -0
- package/dist/azure/reportDailySpendValidation.d.ts.map +1 -0
- package/dist/azure/reportDailySpendValidation.js +72 -0
- package/dist/azure/reportDailySpendValidation.js.map +1 -0
- package/dist/azure/reportEvidence.d.ts +796 -0
- package/dist/azure/reportEvidence.d.ts.map +1 -0
- package/dist/azure/reportEvidence.js +33 -0
- package/dist/azure/reportEvidence.js.map +1 -0
- package/dist/azure/reportEvidenceCatalogueValidation.d.ts +5 -0
- package/dist/azure/reportEvidenceCatalogueValidation.d.ts.map +1 -0
- package/dist/azure/reportEvidenceCatalogueValidation.js +109 -0
- package/dist/azure/reportEvidenceCatalogueValidation.js.map +1 -0
- package/dist/azure/reportEvidenceValidation.d.ts +7 -0
- package/dist/azure/reportEvidenceValidation.d.ts.map +1 -0
- package/dist/azure/reportEvidenceValidation.js +617 -0
- package/dist/azure/reportEvidenceValidation.js.map +1 -0
- package/dist/azure/reportEvidenceValidationHelpers.d.ts +14 -0
- package/dist/azure/reportEvidenceValidationHelpers.d.ts.map +1 -0
- package/dist/azure/reportEvidenceValidationHelpers.js +122 -0
- package/dist/azure/reportEvidenceValidationHelpers.js.map +1 -0
- package/dist/azure/reportSavingsContributionValidation.d.ts +5 -0
- package/dist/azure/reportSavingsContributionValidation.d.ts.map +1 -0
- package/dist/azure/reportSavingsContributionValidation.js +37 -0
- package/dist/azure/reportSavingsContributionValidation.js.map +1 -0
- package/dist/azure/reportSpend.d.ts +87 -0
- package/dist/azure/reportSpend.d.ts.map +1 -0
- package/dist/azure/reportSpend.js +5 -0
- package/dist/azure/reportSpend.js.map +1 -0
- package/dist/azure/reportSpendValidation.d.ts +7 -0
- package/dist/azure/reportSpendValidation.d.ts.map +1 -0
- package/dist/azure/reportSpendValidation.js +197 -0
- package/dist/azure/reportSpendValidation.js.map +1 -0
- package/dist/azure/reportSpendValidationHelpers.d.ts +7 -0
- package/dist/azure/reportSpendValidationHelpers.d.ts.map +1 -0
- package/dist/azure/reportSpendValidationHelpers.js +31 -0
- package/dist/azure/reportSpendValidationHelpers.js.map +1 -0
- package/dist/azure/reports.d.ts +32 -10
- package/dist/azure/reports.d.ts.map +1 -1
- package/dist/azure/reports.js.map +1 -1
- package/dist/azure/resilienceFacts.d.ts +100 -0
- package/dist/azure/resilienceFacts.d.ts.map +1 -0
- package/dist/azure/resilienceFacts.js +20 -0
- package/dist/azure/resilienceFacts.js.map +1 -0
- package/dist/azure/resilienceFactsValidation.d.ts +4 -0
- package/dist/azure/resilienceFactsValidation.d.ts.map +1 -0
- package/dist/azure/resilienceFactsValidation.js +70 -0
- package/dist/azure/resilienceFactsValidation.js.map +1 -0
- package/dist/azure/resources.d.ts +24 -12
- package/dist/azure/resources.d.ts.map +1 -1
- package/dist/azure/savings.d.ts +4 -2
- package/dist/azure/savings.d.ts.map +1 -1
- package/dist/azure/serviceRetirement.d.ts +52 -2
- package/dist/azure/serviceRetirement.d.ts.map +1 -1
- package/dist/azure/storage-inventory.d.ts +44 -0
- package/dist/azure/storage-inventory.d.ts.map +1 -1
- package/dist/azure/subscriptions.d.ts +57 -11
- package/dist/azure/subscriptions.d.ts.map +1 -1
- package/dist/azure/subscriptions.js +35 -0
- package/dist/azure/subscriptions.js.map +1 -1
- package/dist/azure/views.d.ts +110 -23
- package/dist/azure/views.d.ts.map +1 -1
- package/dist/azure/views.js +8 -1
- package/dist/azure/views.js.map +1 -1
- package/dist/azure/vmPatchManagement.d.ts +109 -0
- package/dist/azure/vmPatchManagement.d.ts.map +1 -0
- package/dist/azure/vmPatchManagement.js +7 -0
- package/dist/azure/vmPatchManagement.js.map +1 -0
- package/dist/common/boundedRows.d.ts +7 -0
- package/dist/common/boundedRows.d.ts.map +1 -0
- package/dist/{scheduler/scheduler.js → common/boundedRows.js} +1 -1
- package/dist/common/boundedRows.js.map +1 -0
- package/dist/common/index.d.ts +3 -0
- package/dist/common/index.d.ts.map +1 -1
- package/dist/common/index.js +3 -0
- package/dist/common/index.js.map +1 -1
- package/dist/common/metricStats.d.ts +29 -0
- package/dist/common/metricStats.d.ts.map +1 -0
- package/dist/{aws/portalPublicArtifactNestedEvidence.js → common/metricStats.js} +1 -1
- package/dist/common/metricStats.js.map +1 -0
- package/dist/common/provider.d.ts +55 -0
- package/dist/common/provider.d.ts.map +1 -1
- package/dist/common/provider.js.map +1 -1
- package/dist/common/relationships.d.ts +3 -3
- package/dist/common/relationships.d.ts.map +1 -1
- package/dist/common/resourceGraph.d.ts +137 -0
- package/dist/common/resourceGraph.d.ts.map +1 -0
- package/dist/common/resourceGraph.js +17 -0
- package/dist/common/resourceGraph.js.map +1 -0
- package/dist/common/resourceGraphValidation.d.ts +30 -0
- package/dist/common/resourceGraphValidation.d.ts.map +1 -0
- package/dist/common/resourceGraphValidation.js +369 -0
- package/dist/common/resourceGraphValidation.js.map +1 -0
- package/dist/common/resourceIdentity.d.ts +28 -0
- package/dist/common/resourceIdentity.d.ts.map +1 -0
- package/dist/common/resourceIdentity.js +35 -0
- package/dist/common/resourceIdentity.js.map +1 -0
- package/dist/common/sha256.d.ts +2 -0
- package/dist/common/sha256.d.ts.map +1 -1
- package/dist/common/sha256.js +3 -0
- package/dist/common/sha256.js.map +1 -1
- package/dist/common/utilizationStories.d.ts +695 -0
- package/dist/common/utilizationStories.d.ts.map +1 -0
- package/dist/common/utilizationStories.js +21 -0
- package/dist/common/utilizationStories.js.map +1 -0
- package/dist/common/utilizationStoriesValidation.d.ts +60 -0
- package/dist/common/utilizationStoriesValidation.d.ts.map +1 -0
- package/dist/common/utilizationStoriesValidation.js +762 -0
- package/dist/common/utilizationStoriesValidation.js.map +1 -0
- package/dist/common/validationHelpers.d.ts +37 -0
- package/dist/common/validationHelpers.d.ts.map +1 -0
- package/dist/common/validationHelpers.js +147 -0
- package/dist/common/validationHelpers.js.map +1 -0
- package/dist/company/company.d.ts +1 -0
- package/dist/company/company.d.ts.map +1 -1
- package/dist/environment/canonicalization.d.ts +12 -0
- package/dist/environment/canonicalization.d.ts.map +1 -0
- package/dist/environment/canonicalization.js +40 -0
- package/dist/environment/canonicalization.js.map +1 -0
- package/dist/environment/contracts.d.ts +472 -0
- package/dist/environment/contracts.d.ts.map +1 -0
- package/dist/environment/contracts.js +73 -0
- package/dist/environment/contracts.js.map +1 -0
- package/dist/environment/index.d.ts +6 -0
- package/dist/environment/index.d.ts.map +1 -0
- package/dist/environment/index.js +22 -0
- package/dist/environment/index.js.map +1 -0
- package/dist/environment/internal.d.ts +21 -0
- package/dist/environment/internal.d.ts.map +1 -0
- package/dist/environment/internal.js +113 -0
- package/dist/environment/internal.js.map +1 -0
- package/dist/environment/references.d.ts +24 -0
- package/dist/environment/references.d.ts.map +1 -0
- package/dist/environment/references.js +243 -0
- package/dist/environment/references.js.map +1 -0
- package/dist/environment/tenant.d.ts +128 -0
- package/dist/environment/tenant.d.ts.map +1 -0
- package/dist/environment/tenant.js +203 -0
- package/dist/environment/tenant.js.map +1 -0
- package/dist/environment/validation.d.ts +34 -0
- package/dist/environment/validation.d.ts.map +1 -0
- package/dist/environment/validation.js +655 -0
- package/dist/environment/validation.js.map +1 -0
- package/dist/esm/accounts/accounts.js +1 -0
- package/dist/esm/accounts/azureManualOnboarding.js +8 -0
- package/dist/esm/accounts/azureSpSetup.js +14 -1
- package/dist/esm/accounts/azureSpSetupDurable.js +27 -1
- package/dist/esm/accounts/index.js +2 -0
- package/dist/esm/accounts/subscriptionWriteAccess.js +112 -0
- package/dist/esm/accounts/writePermissions.js +46 -0
- package/dist/esm/ai/conversationHistory.js +6 -0
- package/dist/esm/ai/followUps.js +16 -0
- package/dist/esm/ai/grounding.js +147 -0
- package/dist/esm/ai/index.js +11 -1
- package/dist/esm/ai/workspaceArtifacts.js +158 -0
- package/dist/esm/aws/commitments-planning.js +6 -0
- package/dist/esm/aws/commitmentsPlanningValidation.js +2 -1
- package/dist/esm/aws/estates.js +7 -1
- package/dist/esm/aws/index.js +7 -13
- package/dist/esm/aws/organizationCommitments.js +48 -0
- package/dist/esm/aws/organizationCommitmentsApiValidation.js +220 -0
- package/dist/esm/aws/organizationCommitmentsValidation.js +225 -0
- package/dist/esm/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.js +405 -0
- package/dist/esm/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.js +2 -0
- package/dist/esm/aws/publicArtifacts.js +2 -0
- package/dist/esm/aws/relationships.js +4 -1
- package/dist/esm/aws/requests.js +4 -2
- package/dist/esm/aws/resourceGraph.js +63 -0
- package/dist/esm/aws/validationHelpers.js +46 -0
- package/dist/esm/azure/activityLogAnalysis.js +64 -0
- package/dist/esm/azure/activityLogAnalysisPublicValidation.js +360 -0
- package/dist/esm/azure/activityLogAnalysisPublicValidationHelpers.js +172 -0
- package/dist/esm/azure/activityLogAnalysisValidation.js +365 -0
- package/dist/esm/azure/billingPlots.js +45 -4
- package/dist/esm/azure/commitmentsPlanning.js +8 -1
- package/dist/esm/azure/commitmentsPlanningValidation.js +39 -0
- package/dist/esm/azure/common.js +28 -1
- package/dist/esm/azure/costComposition.js +80 -0
- package/dist/esm/azure/financialAnalyticsDelivery.js +5 -0
- package/dist/esm/azure/financialAnalyticsDeliveryValidation.js +184 -11
- package/dist/esm/azure/financialAnalyticsDisplayKernel.js +139 -0
- package/dist/esm/azure/financialAnalyticsValidation.js +101 -19
- package/dist/esm/azure/financialAuthorityProjectionKernel.js +263 -0
- package/dist/esm/azure/financialAuthorityViewValidation.js +271 -1
- package/dist/esm/azure/financialChargeComposition.js +36 -0
- package/dist/esm/azure/financialChargeCompositionKernel.js +48 -0
- package/dist/esm/azure/financialChargeCompositionValidation.js +155 -0
- package/dist/esm/azure/financialChargePolicy.js +473 -0
- package/dist/esm/azure/financialCurrentSpendSurfaceProjection.js +2 -0
- package/dist/esm/azure/financialCurrentSpendSurfaceProjectionValidation.js +184 -0
- package/dist/esm/azure/financialDataflowKernel.js +164 -0
- package/dist/esm/azure/financialDataflowValidation.js +199 -29
- package/dist/esm/azure/financialEvidenceAssessmentValidation.js +7 -0
- package/dist/esm/azure/financialEvidenceCoverage.js +106 -0
- package/dist/esm/azure/financialPolicyDelivery.js +4 -0
- package/dist/esm/azure/financialPolicyDeliveryValidation.js +227 -7
- package/dist/esm/azure/financialPolicyKernel.js +225 -0
- package/dist/esm/azure/financialPolicyValidation.js +110 -16
- package/dist/esm/azure/financialProjectionValidation.js +43 -3
- package/dist/esm/azure/financialResourceSurfaceProjection.js +2 -0
- package/dist/esm/azure/financialResourceSurfaceProjectionValidation.js +243 -0
- package/dist/esm/azure/financialSavingsAuthority.js +1 -0
- package/dist/esm/azure/financialSavingsAuthorityValidation.js +186 -2
- package/dist/esm/azure/financialSavingsChargePolicyKernel.js +29 -0
- package/dist/esm/azure/financialSavingsCoordinateValidation.js +98 -19
- package/dist/esm/azure/financialSavingsPercentageKernel.js +44 -0
- package/dist/esm/azure/financialSavingsSurfaceProjection.js +2 -0
- package/dist/esm/azure/financialSavingsSurfaceProjectionKernel.js +427 -0
- package/dist/esm/azure/financialSavingsSurfaceProjectionValidation.js +199 -13
- package/dist/esm/azure/financialScope.js +14 -0
- package/dist/esm/azure/financialScopeBaseline.js +12 -0
- package/dist/esm/azure/financialScopeBaselineIdentity.js +24 -4
- package/dist/esm/azure/financialScopeBaselineValidation.js +21 -4
- package/dist/esm/azure/governance.js +1 -0
- package/dist/esm/azure/payloads.js +84 -1
- package/dist/esm/azure/recommendationLifecycleOverlayValidation.js +75 -0
- package/dist/esm/azure/recommendations.js +2 -0
- package/dist/esm/azure/reportDailySpend.js +2 -0
- package/dist/esm/azure/reportDailySpendValidation.js +67 -0
- package/dist/esm/azure/reportEvidence.js +29 -0
- package/dist/esm/azure/reportEvidenceCatalogueValidation.js +103 -0
- package/dist/esm/azure/reportEvidenceValidation.js +609 -0
- package/dist/esm/azure/reportEvidenceValidationHelpers.js +94 -0
- package/dist/esm/azure/reportSavingsContributionValidation.js +30 -0
- package/dist/esm/azure/reportSpend.js +1 -0
- package/dist/esm/azure/reportSpendValidation.js +189 -0
- package/dist/esm/azure/reportSpendValidationHelpers.js +22 -0
- package/dist/esm/azure/resilienceFacts.js +16 -0
- package/dist/esm/azure/resilienceFactsValidation.js +64 -0
- package/dist/esm/azure/subscriptions.js +33 -1
- package/dist/esm/azure/views.js +8 -1
- package/dist/esm/azure/vmPatchManagement.js +3 -0
- package/dist/esm/common/index.js +3 -0
- package/dist/esm/common/resourceGraph.js +13 -0
- package/dist/esm/common/resourceGraphValidation.js +365 -0
- package/dist/esm/common/resourceIdentity.js +24 -0
- package/dist/esm/common/sha256.js +2 -0
- package/dist/esm/common/utilizationStories.js +17 -0
- package/dist/esm/common/utilizationStoriesValidation.js +718 -0
- package/dist/esm/common/validationHelpers.js +115 -0
- package/dist/esm/entries/commitments-planning.js +2 -2
- package/dist/esm/entries/environment.js +3 -0
- package/dist/esm/entries/relationships.js +2 -2
- package/dist/esm/environment/canonicalization.js +34 -0
- package/dist/esm/environment/contracts.js +69 -0
- package/dist/esm/environment/index.js +5 -0
- package/dist/esm/environment/internal.js +97 -0
- package/dist/esm/environment/references.js +230 -0
- package/dist/esm/environment/tenant.js +190 -0
- package/dist/esm/environment/validation.js +635 -0
- package/dist/esm/identity/index.js +1 -0
- package/dist/esm/index.js +18 -0
- package/dist/esm/index.vite.js +12 -0
- package/dist/esm/reporting/jobs/index.js +13 -0
- package/dist/esm/reporting/jobs/reportJobIdentity.js +76 -0
- package/dist/esm/reporting/jobs/reportJobMessages.js +47 -0
- package/dist/esm/reporting/jobs/reportJobRow.js +264 -0
- package/dist/esm/reporting/jobs/reportJobSpec.js +295 -0
- package/dist/esm/reporting/jobs/reportJobStatus.js +87 -0
- package/dist/esm/reporting/shared/reportTableEntities.js +41 -0
- package/dist/esm/reporting/shared/reportingDigest.js +57 -0
- package/dist/esm/reporting/shared/reportingIds.js +88 -0
- package/dist/esm/reporting/shared/reportingPaths.js +23 -0
- package/dist/esm/scheduler/index.js +4 -1
- package/dist/esm/scheduler/resourceStrategy.js +2 -0
- package/dist/esm/scheduler/resourceStrategyCapabilityValidation.js +265 -0
- package/dist/esm/scheduler/resourceStrategyContracts.js +20 -0
- package/dist/esm/scheduler/resourceStrategyFinancialValidation.js +145 -0
- package/dist/esm/scheduler/resourceStrategyPermissionValidation.js +190 -0
- package/dist/esm/scheduler/resourceStrategyScheduleValidation.js +506 -0
- package/dist/esm/scheduler/resourceStrategyValidation.js +4 -0
- package/dist/esm/scheduler/resourceStrategyValidationShared.js +261 -0
- package/dist/esm/scheduler/schedulerContracts.js +1 -0
- package/dist/esm/scheduler/schedulerValidation.js +372 -0
- package/dist/esm/scheduler/weeklyAvailabilityFixtures.js +140 -0
- package/dist/events/alertDefinitionRun.d.ts +4 -0
- package/dist/events/alertDefinitionRun.d.ts.map +1 -1
- package/dist/events/baseAlert.d.ts +1 -0
- package/dist/events/baseAlert.d.ts.map +1 -1
- package/dist/events/cost.d.ts +4 -0
- package/dist/events/cost.d.ts.map +1 -1
- package/dist/events/quickAlerts.d.ts +13 -4
- package/dist/events/quickAlerts.d.ts.map +1 -1
- package/dist/events/quickAlerts.js.map +1 -1
- package/dist/features-and-permissions/access.d.ts +79 -0
- package/dist/features-and-permissions/access.d.ts.map +1 -1
- package/dist/identity/index.d.ts +1 -0
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +1 -0
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/microsoftSignInAdminConsent.d.ts +59 -0
- package/dist/identity/microsoftSignInAdminConsent.d.ts.map +1 -0
- package/dist/{aws/portalRelationshipResourceNodeTypes.js → identity/microsoftSignInAdminConsent.js} +1 -1
- package/dist/identity/microsoftSignInAdminConsent.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -1
- package/dist/index.vite.d.ts +12 -0
- package/dist/index.vite.d.ts.map +1 -1
- package/dist/index.vite.js +16 -0
- package/dist/index.vite.js.map +1 -1
- package/dist/portfolio/portfolioOperations.d.ts +1 -1
- package/dist/portfolio/portfolioOperations.d.ts.map +1 -1
- package/dist/reporting/jobs/index.d.ts +14 -0
- package/dist/reporting/jobs/index.d.ts.map +1 -0
- package/dist/reporting/jobs/index.js +45 -0
- package/dist/reporting/jobs/index.js.map +1 -0
- package/dist/reporting/jobs/reportJobIdentity.d.ts +44 -0
- package/dist/reporting/jobs/reportJobIdentity.d.ts.map +1 -0
- package/dist/reporting/jobs/reportJobIdentity.js +88 -0
- package/dist/reporting/jobs/reportJobIdentity.js.map +1 -0
- package/dist/reporting/jobs/reportJobMessages.d.ts +30 -0
- package/dist/reporting/jobs/reportJobMessages.d.ts.map +1 -0
- package/dist/reporting/jobs/reportJobMessages.js +54 -0
- package/dist/reporting/jobs/reportJobMessages.js.map +1 -0
- package/dist/reporting/jobs/reportJobRow.d.ts +98 -0
- package/dist/reporting/jobs/reportJobRow.d.ts.map +1 -0
- package/dist/reporting/jobs/reportJobRow.js +270 -0
- package/dist/reporting/jobs/reportJobRow.js.map +1 -0
- package/dist/reporting/jobs/reportJobSpec.d.ts +92 -0
- package/dist/reporting/jobs/reportJobSpec.d.ts.map +1 -0
- package/dist/reporting/jobs/reportJobSpec.js +304 -0
- package/dist/reporting/jobs/reportJobSpec.js.map +1 -0
- package/dist/reporting/jobs/reportJobStatus.d.ts +60 -0
- package/dist/reporting/jobs/reportJobStatus.d.ts.map +1 -0
- package/dist/reporting/jobs/reportJobStatus.js +98 -0
- package/dist/reporting/jobs/reportJobStatus.js.map +1 -0
- package/dist/reporting/shared/reportTableEntities.d.ts +23 -0
- package/dist/reporting/shared/reportTableEntities.d.ts.map +1 -0
- package/dist/reporting/shared/reportTableEntities.js +47 -0
- package/dist/reporting/shared/reportTableEntities.js.map +1 -0
- package/dist/reporting/shared/reportingDigest.d.ts +6 -0
- package/dist/reporting/shared/reportingDigest.d.ts.map +1 -0
- package/dist/reporting/shared/reportingDigest.js +63 -0
- package/dist/reporting/shared/reportingDigest.js.map +1 -0
- package/dist/reporting/shared/reportingIds.d.ts +34 -0
- package/dist/reporting/shared/reportingIds.d.ts.map +1 -0
- package/dist/reporting/shared/reportingIds.js +102 -0
- package/dist/reporting/shared/reportingIds.js.map +1 -0
- package/dist/reporting/shared/reportingPaths.d.ts +14 -0
- package/dist/reporting/shared/reportingPaths.d.ts.map +1 -0
- package/dist/reporting/shared/reportingPaths.js +29 -0
- package/dist/reporting/shared/reportingPaths.js.map +1 -0
- package/dist/scheduler/index.d.ts +4 -1
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +4 -1
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/resourceStrategy.d.ts +3 -0
- package/dist/scheduler/resourceStrategy.d.ts.map +1 -0
- package/dist/scheduler/resourceStrategy.js +19 -0
- package/dist/scheduler/resourceStrategy.js.map +1 -0
- package/dist/scheduler/resourceStrategyCapabilityValidation.d.ts +4 -0
- package/dist/scheduler/resourceStrategyCapabilityValidation.d.ts.map +1 -0
- package/dist/scheduler/resourceStrategyCapabilityValidation.js +270 -0
- package/dist/scheduler/resourceStrategyCapabilityValidation.js.map +1 -0
- package/dist/scheduler/resourceStrategyContracts.d.ts +466 -0
- package/dist/scheduler/resourceStrategyContracts.d.ts.map +1 -0
- package/dist/scheduler/resourceStrategyContracts.js +24 -0
- package/dist/scheduler/resourceStrategyContracts.js.map +1 -0
- package/dist/scheduler/resourceStrategyFinancialValidation.d.ts +5 -0
- package/dist/scheduler/resourceStrategyFinancialValidation.d.ts.map +1 -0
- package/dist/scheduler/resourceStrategyFinancialValidation.js +151 -0
- package/dist/scheduler/resourceStrategyFinancialValidation.js.map +1 -0
- package/dist/scheduler/resourceStrategyPermissionValidation.d.ts +4 -0
- package/dist/scheduler/resourceStrategyPermissionValidation.d.ts.map +1 -0
- package/dist/scheduler/resourceStrategyPermissionValidation.js +195 -0
- package/dist/scheduler/resourceStrategyPermissionValidation.js.map +1 -0
- package/dist/scheduler/resourceStrategyScheduleValidation.d.ts +14 -0
- package/dist/scheduler/resourceStrategyScheduleValidation.d.ts.map +1 -0
- package/dist/scheduler/resourceStrategyScheduleValidation.js +519 -0
- package/dist/scheduler/resourceStrategyScheduleValidation.js.map +1 -0
- package/dist/scheduler/resourceStrategyValidation.d.ts +5 -0
- package/dist/scheduler/resourceStrategyValidation.d.ts.map +1 -0
- package/dist/scheduler/resourceStrategyValidation.js +21 -0
- package/dist/scheduler/resourceStrategyValidation.js.map +1 -0
- package/dist/scheduler/resourceStrategyValidationShared.d.ts +19 -0
- package/dist/scheduler/resourceStrategyValidationShared.d.ts.map +1 -0
- package/dist/scheduler/resourceStrategyValidationShared.js +281 -0
- package/dist/scheduler/resourceStrategyValidationShared.js.map +1 -0
- package/dist/scheduler/schedulerContracts.d.ts +184 -0
- package/dist/scheduler/schedulerContracts.d.ts.map +1 -0
- package/dist/scheduler/schedulerContracts.js +3 -0
- package/dist/scheduler/schedulerContracts.js.map +1 -0
- package/dist/scheduler/schedulerValidation.d.ts +15 -0
- package/dist/scheduler/schedulerValidation.d.ts.map +1 -0
- package/dist/scheduler/schedulerValidation.js +388 -0
- package/dist/scheduler/schedulerValidation.js.map +1 -0
- package/dist/scheduler/weeklyAvailabilityFixtures.d.ts +26 -0
- package/dist/scheduler/weeklyAvailabilityFixtures.d.ts.map +1 -0
- package/dist/scheduler/weeklyAvailabilityFixtures.js +144 -0
- package/dist/scheduler/weeklyAvailabilityFixtures.js.map +1 -0
- package/package.json +43 -7
- package/dist/aws/pluginPublicArtifactBodyValidation.d.ts +0 -10
- package/dist/aws/pluginPublicArtifactBodyValidation.d.ts.map +0 -1
- package/dist/aws/pluginPublicArtifactBodyValidation.js +0 -225
- package/dist/aws/pluginPublicArtifactBodyValidation.js.map +0 -1
- package/dist/aws/pluginPublicArtifactEvidence.d.ts +0 -161
- package/dist/aws/pluginPublicArtifactEvidence.d.ts.map +0 -1
- package/dist/aws/pluginPublicArtifactEvidence.js.map +0 -1
- package/dist/aws/pluginPublicArtifactManifestValidation.d.ts +0 -4
- package/dist/aws/pluginPublicArtifactManifestValidation.d.ts.map +0 -1
- package/dist/aws/pluginPublicArtifactManifestValidation.js +0 -259
- package/dist/aws/pluginPublicArtifactManifestValidation.js.map +0 -1
- package/dist/aws/pluginPublicArtifactSectionValidation.d.ts +0 -6
- package/dist/aws/pluginPublicArtifactSectionValidation.d.ts.map +0 -1
- package/dist/aws/pluginPublicArtifactSectionValidation.js +0 -471
- package/dist/aws/pluginPublicArtifactSectionValidation.js.map +0 -1
- package/dist/aws/pluginPublicArtifactValidation.d.ts +0 -3
- package/dist/aws/pluginPublicArtifactValidation.d.ts.map +0 -1
- package/dist/aws/pluginPublicArtifactValidation.js +0 -9
- package/dist/aws/pluginPublicArtifactValidation.js.map +0 -1
- package/dist/aws/pluginPublicArtifactValidationHelpers.d.ts +0 -23
- package/dist/aws/pluginPublicArtifactValidationHelpers.d.ts.map +0 -1
- package/dist/aws/pluginPublicArtifactValidationHelpers.js +0 -240
- package/dist/aws/pluginPublicArtifactValidationHelpers.js.map +0 -1
- package/dist/aws/pluginPublicArtifacts.d.ts +0 -253
- package/dist/aws/pluginPublicArtifacts.d.ts.map +0 -1
- package/dist/aws/pluginPublicArtifacts.js +0 -51
- package/dist/aws/pluginPublicArtifacts.js.map +0 -1
- package/dist/aws/portalCommitmentsPlanningPublicArtifactValidation.d.ts +0 -4
- package/dist/aws/portalCommitmentsPlanningPublicArtifactValidation.d.ts.map +0 -1
- package/dist/aws/portalCommitmentsPlanningPublicArtifactValidation.js +0 -513
- package/dist/aws/portalCommitmentsPlanningPublicArtifactValidation.js.map +0 -1
- package/dist/aws/portalCommitmentsPlanningPublicArtifacts.d.ts +0 -13
- package/dist/aws/portalCommitmentsPlanningPublicArtifacts.d.ts.map +0 -1
- package/dist/aws/portalCommitmentsPlanningPublicArtifacts.js +0 -5
- package/dist/aws/portalCommitmentsPlanningPublicArtifacts.js.map +0 -1
- package/dist/aws/portalPublicArtifactCurrentValidation.d.ts +0 -4
- package/dist/aws/portalPublicArtifactCurrentValidation.d.ts.map +0 -1
- package/dist/aws/portalPublicArtifactCurrentValidation.js +0 -333
- package/dist/aws/portalPublicArtifactCurrentValidation.js.map +0 -1
- package/dist/aws/portalPublicArtifactEvidenceValidation.d.ts +0 -6
- package/dist/aws/portalPublicArtifactEvidenceValidation.d.ts.map +0 -1
- package/dist/aws/portalPublicArtifactEvidenceValidation.js +0 -301
- package/dist/aws/portalPublicArtifactEvidenceValidation.js.map +0 -1
- package/dist/aws/portalPublicArtifactHistoryAiValidation.d.ts +0 -8
- package/dist/aws/portalPublicArtifactHistoryAiValidation.d.ts.map +0 -1
- package/dist/aws/portalPublicArtifactHistoryAiValidation.js +0 -377
- package/dist/aws/portalPublicArtifactHistoryAiValidation.js.map +0 -1
- package/dist/aws/portalPublicArtifactHistoryTypes.d.ts +0 -178
- package/dist/aws/portalPublicArtifactHistoryTypes.d.ts.map +0 -1
- package/dist/aws/portalPublicArtifactHistoryTypes.js +0 -44
- package/dist/aws/portalPublicArtifactHistoryTypes.js.map +0 -1
- package/dist/aws/portalPublicArtifactNestedEvidence.d.ts +0 -127
- package/dist/aws/portalPublicArtifactNestedEvidence.d.ts.map +0 -1
- package/dist/aws/portalPublicArtifactNestedEvidence.js.map +0 -1
- package/dist/aws/portalPublicArtifactNestedEvidenceValidation.d.ts +0 -6
- package/dist/aws/portalPublicArtifactNestedEvidenceValidation.d.ts.map +0 -1
- package/dist/aws/portalPublicArtifactNestedEvidenceValidation.js +0 -405
- package/dist/aws/portalPublicArtifactNestedEvidenceValidation.js.map +0 -1
- package/dist/aws/portalPublicArtifactValidation.d.ts +0 -3
- package/dist/aws/portalPublicArtifactValidation.d.ts.map +0 -1
- package/dist/aws/portalPublicArtifactValidation.js +0 -14
- package/dist/aws/portalPublicArtifactValidation.js.map +0 -1
- package/dist/aws/portalPublicArtifactValidationCommon.d.ts +0 -30
- package/dist/aws/portalPublicArtifactValidationCommon.d.ts.map +0 -1
- package/dist/aws/portalPublicArtifactValidationCommon.js +0 -167
- package/dist/aws/portalPublicArtifactValidationCommon.js.map +0 -1
- package/dist/aws/portalPublicArtifacts.d.ts +0 -400
- package/dist/aws/portalPublicArtifacts.d.ts.map +0 -1
- package/dist/aws/portalPublicArtifacts.js +0 -85
- package/dist/aws/portalPublicArtifacts.js.map +0 -1
- package/dist/aws/portalRelationshipPublicArtifactValidation.d.ts +0 -4
- package/dist/aws/portalRelationshipPublicArtifactValidation.d.ts.map +0 -1
- package/dist/aws/portalRelationshipPublicArtifactValidation.js +0 -338
- package/dist/aws/portalRelationshipPublicArtifactValidation.js.map +0 -1
- package/dist/aws/portalRelationshipPublicArtifacts.d.ts +0 -196
- package/dist/aws/portalRelationshipPublicArtifacts.d.ts.map +0 -1
- package/dist/aws/portalRelationshipPublicArtifacts.js +0 -63
- package/dist/aws/portalRelationshipPublicArtifacts.js.map +0 -1
- package/dist/aws/portalRelationshipResourceNodeTypes.d.ts +0 -269
- package/dist/aws/portalRelationshipResourceNodeTypes.d.ts.map +0 -1
- package/dist/aws/portalRelationshipResourceNodeTypes.js.map +0 -1
- package/dist/aws/portalRelationshipResourceNodeValidation.d.ts +0 -2
- package/dist/aws/portalRelationshipResourceNodeValidation.d.ts.map +0 -1
- package/dist/aws/portalRelationshipResourceNodeValidation.js +0 -372
- package/dist/aws/portalRelationshipResourceNodeValidation.js.map +0 -1
- package/dist/esm/aws/pluginPublicArtifactBodyValidation.js +0 -217
- package/dist/esm/aws/pluginPublicArtifactManifestValidation.js +0 -255
- package/dist/esm/aws/pluginPublicArtifactSectionValidation.js +0 -464
- package/dist/esm/aws/pluginPublicArtifactValidation.js +0 -2
- package/dist/esm/aws/pluginPublicArtifactValidationHelpers.js +0 -216
- package/dist/esm/aws/pluginPublicArtifacts.js +0 -44
- package/dist/esm/aws/portalCommitmentsPlanningPublicArtifactValidation.js +0 -509
- package/dist/esm/aws/portalCommitmentsPlanningPublicArtifacts.js +0 -1
- package/dist/esm/aws/portalPublicArtifactCurrentValidation.js +0 -328
- package/dist/esm/aws/portalPublicArtifactEvidenceValidation.js +0 -294
- package/dist/esm/aws/portalPublicArtifactHistoryAiValidation.js +0 -368
- package/dist/esm/aws/portalPublicArtifactHistoryTypes.js +0 -40
- package/dist/esm/aws/portalPublicArtifactNestedEvidenceValidation.js +0 -397
- package/dist/esm/aws/portalPublicArtifactValidation.js +0 -2
- package/dist/esm/aws/portalPublicArtifactValidationCommon.js +0 -139
- package/dist/esm/aws/portalPublicArtifacts.js +0 -73
- package/dist/esm/aws/portalRelationshipPublicArtifactValidation.js +0 -334
- package/dist/esm/aws/portalRelationshipPublicArtifacts.js +0 -59
- package/dist/esm/aws/portalRelationshipResourceNodeValidation.js +0 -368
- package/dist/scheduler/scheduler.d.ts +0 -263
- package/dist/scheduler/scheduler.d.ts.map +0 -1
- package/dist/scheduler/scheduler.js.map +0 -1
- /package/dist/esm/aws/{pluginPublicArtifactEvidence.js → commitmentsPlanningView.js} +0 -0
- /package/dist/esm/{aws/portalPublicArtifactNestedEvidence.js → common/boundedRows.js} +0 -0
- /package/dist/esm/{aws/portalRelationshipResourceNodeTypes.js → common/metricStats.js} +0 -0
- /package/dist/esm/{scheduler/scheduler.js → identity/microsoftSignInAdminConsent.js} +0 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { formatExactDecimalValue, parseCanonicalDecimal, subtractExactDecimalValues, sumCanonicalDecimals, } from '../common/exactDecimal.js';
|
|
2
|
+
import { FINANCIAL_CURRENT_SPEND_COMPOSITION_CONTRACT_VERSION_V1, FINANCIAL_DATAFLOW_SCHEMA_VERSION_V1, } from './financialDataflow.js';
|
|
3
|
+
import { selectFinancialChargesV1 } from './financialChargeCompositionValidation.js';
|
|
4
|
+
import { createCurrentSpendCompositionIdV1, createCurrentSpendMembershipDigestV1, isCurrentSpendCompositionCompatibleV1, } from './financialDataflowValidation.js';
|
|
5
|
+
import { isCompleteFinancialBaselinePeriodV2 } from './financialScopeBaseline.js';
|
|
6
|
+
export const CURRENT_SPEND_COMPOSITION_ALGORITHM_VERSION_V1 = 'current-spend-composition/shared-v1';
|
|
7
|
+
const exactPercentAtSixDecimalPlaces = (change, comparison) => {
|
|
8
|
+
if (comparison.coefficient === 0n)
|
|
9
|
+
return undefined;
|
|
10
|
+
const numerator = change.coefficient * 100n * 10n ** BigInt(comparison.scale);
|
|
11
|
+
const denominator = comparison.coefficient * 10n ** BigInt(change.scale);
|
|
12
|
+
for (let scale = 0; scale <= 6; scale += 1) {
|
|
13
|
+
const scaledNumerator = numerator * 10n ** BigInt(scale);
|
|
14
|
+
if (scaledNumerator % denominator === 0n) {
|
|
15
|
+
return formatExactDecimalValue({ coefficient: scaledNumerator / denominator, scale });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return undefined;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Shared exact current-versus-comparison semantics for display composition.
|
|
22
|
+
* Canonical analytics projections use the same direction/change/percentage
|
|
23
|
+
* rules; this helper does not create or impersonate an analytics authority.
|
|
24
|
+
*/
|
|
25
|
+
export const compareFinancialExactAmountsV1 = (request) => {
|
|
26
|
+
if (request.currentAmount === undefined || request.comparisonAmount === undefined)
|
|
27
|
+
return { status: 'unavailable' };
|
|
28
|
+
try {
|
|
29
|
+
const current = parseCanonicalDecimal(request.currentAmount);
|
|
30
|
+
const comparison = parseCanonicalDecimal(request.comparisonAmount);
|
|
31
|
+
if (formatExactDecimalValue(current) !== request.currentAmount ||
|
|
32
|
+
formatExactDecimalValue(comparison) !== request.comparisonAmount) {
|
|
33
|
+
return { status: 'unavailable' };
|
|
34
|
+
}
|
|
35
|
+
const change = subtractExactDecimalValues(current, comparison);
|
|
36
|
+
const direction = change.coefficient === 0n ? 'flat' : change.coefficient > 0n ? 'increasing' : 'decreasing';
|
|
37
|
+
const percentChange = exactPercentAtSixDecimalPlaces(change, comparison);
|
|
38
|
+
return {
|
|
39
|
+
status: 'available',
|
|
40
|
+
direction,
|
|
41
|
+
changeAmount: formatExactDecimalValue(change),
|
|
42
|
+
...(percentChange === undefined ? {} : { percentChange }),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return { status: 'unavailable' };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const uniqueSorted = (values) => {
|
|
50
|
+
const result = Array.from(new Set(values)).sort();
|
|
51
|
+
if (result.length === 0)
|
|
52
|
+
throw new TypeError('Current-spend unavailable state requires at least one reason code.');
|
|
53
|
+
return result;
|
|
54
|
+
};
|
|
55
|
+
/** Portable exact-decimal composition kernel shared by Cloud and browser runtimes. */
|
|
56
|
+
export const composeCurrentSpendV1 = (request) => {
|
|
57
|
+
if (request.coordinate.periodRole !== 'current-spend' && request.coordinate.periodRole !== 'comparison') {
|
|
58
|
+
throw new TypeError('Current-spend composition requires a current-spend or comparison coordinate.');
|
|
59
|
+
}
|
|
60
|
+
if (request.baselines.length === 0)
|
|
61
|
+
throw new TypeError('Current-spend composition requires an authoritative baseline member.');
|
|
62
|
+
if (request.chargeCompositions.length > request.baselines.length) {
|
|
63
|
+
throw new TypeError('Current-spend composition has more charge compositions than baseline members.');
|
|
64
|
+
}
|
|
65
|
+
const chargeCompositionByBaselineId = new Map(request.chargeCompositions.map(composition => [composition.baselineId, composition]));
|
|
66
|
+
if (chargeCompositionByBaselineId.size !== request.chargeCompositions.length) {
|
|
67
|
+
throw new TypeError('Current-spend composition cannot contain duplicate charge compositions.');
|
|
68
|
+
}
|
|
69
|
+
const sortedBaselines = [...request.baselines].sort((left, right) => left.scopeId.localeCompare(right.scopeId));
|
|
70
|
+
if (new Set(sortedBaselines.map(baseline => baseline.scopeId)).size !== sortedBaselines.length) {
|
|
71
|
+
throw new TypeError('Current-spend composition cannot contain duplicate member scopes.');
|
|
72
|
+
}
|
|
73
|
+
const selections = new Map();
|
|
74
|
+
const members = sortedBaselines.map(baseline => {
|
|
75
|
+
if (baseline.status === 'unavailable') {
|
|
76
|
+
return { memberScopeId: baseline.scopeId, status: 'unavailable', reasonCode: baseline.unavailableReason };
|
|
77
|
+
}
|
|
78
|
+
if (baseline.baselineKind !== 'owner') {
|
|
79
|
+
return { memberScopeId: baseline.scopeId, status: 'unavailable', reasonCode: 'charge-composition-requires-owner-baseline' };
|
|
80
|
+
}
|
|
81
|
+
const chargeComposition = chargeCompositionByBaselineId.get(baseline.baselineId);
|
|
82
|
+
if (!chargeComposition || chargeComposition.ownerScopeId !== baseline.scopeId) {
|
|
83
|
+
return { memberScopeId: baseline.scopeId, status: 'unavailable', reasonCode: 'charge-composition-unavailable' };
|
|
84
|
+
}
|
|
85
|
+
const selection = selectFinancialChargesV1(chargeComposition, request.coordinate.chargeInclusionPolicyRef);
|
|
86
|
+
selections.set(baseline.baselineId, selection);
|
|
87
|
+
return {
|
|
88
|
+
memberScopeId: baseline.scopeId,
|
|
89
|
+
baselineId: baseline.baselineId,
|
|
90
|
+
chargeCompositionId: chargeComposition.chargeCompositionId,
|
|
91
|
+
status: 'included',
|
|
92
|
+
};
|
|
93
|
+
});
|
|
94
|
+
const available = sortedBaselines.filter((baseline) => baseline.status === 'available');
|
|
95
|
+
const includedBaselineIds = new Set(members.flatMap(member => (member.status === 'included' ? [member.baselineId] : [])));
|
|
96
|
+
const includedBaselines = available.filter(baseline => includedBaselineIds.has(baseline.baselineId));
|
|
97
|
+
const unavailableReasons = new Set(sortedBaselines
|
|
98
|
+
.filter((baseline) => baseline.status === 'unavailable')
|
|
99
|
+
.map(baseline => baseline.unavailableReason));
|
|
100
|
+
members.filter(member => member.status === 'unavailable').forEach(member => unavailableReasons.add(member.reasonCode));
|
|
101
|
+
const selectionReasonCodes = new Set();
|
|
102
|
+
selections.forEach(selection => selection.reasonCodes?.forEach(reason => {
|
|
103
|
+
selectionReasonCodes.add(reason);
|
|
104
|
+
unavailableReasons.add(reason);
|
|
105
|
+
}));
|
|
106
|
+
if (available.some(baseline => !isCompleteFinancialBaselinePeriodV2(baseline.period)))
|
|
107
|
+
unavailableReasons.add('coverage-incomplete');
|
|
108
|
+
if (request.coordinate.accountingCurrency.status === 'unresolved') {
|
|
109
|
+
unavailableReasons.add(request.coordinate.accountingCurrency.reasonCode);
|
|
110
|
+
}
|
|
111
|
+
const common = {
|
|
112
|
+
schemaVersion: FINANCIAL_DATAFLOW_SCHEMA_VERSION_V1,
|
|
113
|
+
contractVersion: FINANCIAL_CURRENT_SPEND_COMPOSITION_CONTRACT_VERSION_V1,
|
|
114
|
+
coordinate: request.coordinate,
|
|
115
|
+
members,
|
|
116
|
+
membershipDigest: createCurrentSpendMembershipDigestV1(members),
|
|
117
|
+
algorithmVersion: request.algorithmVersion ?? CURRENT_SPEND_COMPOSITION_ALGORITHM_VERSION_V1,
|
|
118
|
+
};
|
|
119
|
+
const currency = request.coordinate.accountingCurrency.status === 'resolved' ? request.coordinate.accountingCurrency.currencyCode : undefined;
|
|
120
|
+
let identity;
|
|
121
|
+
if (!currency || includedBaselines.length === 0) {
|
|
122
|
+
identity = {
|
|
123
|
+
...common,
|
|
124
|
+
amount: {
|
|
125
|
+
status: 'unavailable',
|
|
126
|
+
reasonCodes: uniqueSorted(unavailableReasons.size > 0 ? unavailableReasons : ['evidence-unavailable']),
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
const includedSelections = members.flatMap(member => member.status === 'included' ? [selections.get(member.baselineId)] : []);
|
|
132
|
+
const aggregateSelection = {
|
|
133
|
+
status: includedSelections.some(selection => selection.status === 'partial') ? 'partial' : 'available',
|
|
134
|
+
includedAmount: formatExactDecimalValue(sumCanonicalDecimals(includedSelections.map(selection => selection.includedAmount))),
|
|
135
|
+
excludedAmount: formatExactDecimalValue(sumCanonicalDecimals(includedSelections.map(selection => selection.excludedAmount))),
|
|
136
|
+
withheldAmount: formatExactDecimalValue(sumCanonicalDecimals(includedSelections.map(selection => selection.withheldAmount))),
|
|
137
|
+
forecastEligibleAmount: formatExactDecimalValue(sumCanonicalDecimals(includedSelections.map(selection => selection.forecastEligibleAmount))),
|
|
138
|
+
oneTimeAmount: formatExactDecimalValue(sumCanonicalDecimals(includedSelections.map(selection => selection.oneTimeAmount))),
|
|
139
|
+
unknownRecurrenceAmount: formatExactDecimalValue(sumCanonicalDecimals(includedSelections.map(selection => selection.unknownRecurrenceAmount))),
|
|
140
|
+
forecastStatus: includedSelections.some(selection => selection.forecastStatus === 'partial') ? 'partial' : 'available',
|
|
141
|
+
currencyCode: currency,
|
|
142
|
+
...(selectionReasonCodes.size === 0 ? {} : { reasonCodes: uniqueSorted(selectionReasonCodes) }),
|
|
143
|
+
...(includedSelections.every(selection => selection.forecastReasonCodes === undefined)
|
|
144
|
+
? {}
|
|
145
|
+
: {
|
|
146
|
+
forecastReasonCodes: uniqueSorted(includedSelections.flatMap(selection => selection.forecastReasonCodes ?? [])),
|
|
147
|
+
}),
|
|
148
|
+
};
|
|
149
|
+
const knownAmount = aggregateSelection.includedAmount;
|
|
150
|
+
identity =
|
|
151
|
+
unavailableReasons.size === 0
|
|
152
|
+
? { ...common, amount: { status: 'available', amount: knownAmount, currencyCode: currency }, chargeSelection: aggregateSelection }
|
|
153
|
+
: {
|
|
154
|
+
...common,
|
|
155
|
+
amount: { status: 'partial', knownAmount, currencyCode: currency, reasonCodes: uniqueSorted(unavailableReasons) },
|
|
156
|
+
chargeSelection: aggregateSelection,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
const composition = { ...identity, compositionId: createCurrentSpendCompositionIdV1(identity) };
|
|
160
|
+
if (!isCurrentSpendCompositionCompatibleV1(composition, sortedBaselines, request.chargeCompositions)) {
|
|
161
|
+
throw new TypeError('Current-spend composition does not reconcile to its authoritative baseline members.');
|
|
162
|
+
}
|
|
163
|
+
return composition;
|
|
164
|
+
};
|
|
@@ -2,6 +2,9 @@ import { sha256Utf8 } from '../common/sha256.js';
|
|
|
2
2
|
import { formatExactDecimalValue, sumCanonicalDecimals } from '../common/exactDecimal.js';
|
|
3
3
|
import { toCanonicalEstimateLensV1 } from './costComposition.js';
|
|
4
4
|
import { isCanonicalExactMoney } from './financialValidationPrimitives.js';
|
|
5
|
+
import { AZURE_BILLED_ALL_CHARGES_POLICY_V1, resolveFinancialChargeInclusionPolicyV1, } from './financialChargeComposition.js';
|
|
6
|
+
import { isFinancialChargeCompositionV1, selectFinancialChargesV1 } from './financialChargeCompositionValidation.js';
|
|
7
|
+
import { isCompleteFinancialBaselinePeriodV2 } from './financialScopeBaseline.js';
|
|
5
8
|
import { isFinancialScopeBaselineEnvelopeV2 } from './financialScopeBaselineValidation.js';
|
|
6
9
|
import { FINANCIAL_CURRENT_SPEND_COMPOSITION_CONTRACT_VERSION_V1, FINANCIAL_DATAFLOW_SCHEMA_VERSION_V1, } from './financialDataflow.js';
|
|
7
10
|
import { isFinancialBaselinePeriodV2 } from './financialScopeBaselineValidation.js';
|
|
@@ -141,6 +144,14 @@ export const isFinancialDataflowIdentityV1 = (value) => typeof value === 'string
|
|
|
141
144
|
export const isFinancialDataflowHashV1 = (value) => typeof value === 'string' && SHA256_ID.test(value);
|
|
142
145
|
export const isFinancialDataflowCurrencyV1 = (value) => typeof value === 'string' && CURRENCY.test(value);
|
|
143
146
|
export const isFinancialDataflowIsoInstantV1 = (value) => typeof value === 'string' && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?Z$/.test(value) && Number.isFinite(Date.parse(value));
|
|
147
|
+
export const isFinancialDataflowJsonGzipArtifactDescriptorV1 = (value) => isFinancialDataflowRecordV1(value) &&
|
|
148
|
+
hasFinancialDataflowExactFieldsV1(value, ['path', 'sha256', 'byteCount', 'mediaType', 'contentEncoding']) &&
|
|
149
|
+
isFinancialDataflowIdentityV1(value.path) &&
|
|
150
|
+
isFinancialDataflowHashV1(value.sha256) &&
|
|
151
|
+
Number.isSafeInteger(value.byteCount) &&
|
|
152
|
+
Number(value.byteCount) > 0 &&
|
|
153
|
+
value.mediaType === 'application/json' &&
|
|
154
|
+
value.contentEncoding === 'gzip';
|
|
144
155
|
export const isFinancialDataflowCalendarDateV1 = (value) => {
|
|
145
156
|
if (typeof value !== 'string' || !/^\d{4}-\d{2}-\d{2}$/.test(value))
|
|
146
157
|
return false;
|
|
@@ -310,9 +321,60 @@ export const isFinancialDataflowScopeV1 = (value) => isFinancialDataflowRecordV1
|
|
|
310
321
|
SCOPE_KINDS.has(value.kind) &&
|
|
311
322
|
isFinancialDataflowIdentityV1(value.scopeId) &&
|
|
312
323
|
isFinancialDataflowHashV1(value.scopeFingerprint);
|
|
324
|
+
export const isFinancialDataflowPeriodV1 = (value) => isFinancialDataflowRecordV1(value) &&
|
|
325
|
+
hasFinancialDataflowExactFieldsV1(value, ['windowKind', 'requested'], ['providerBillingPeriodId']) &&
|
|
326
|
+
isFinancialBaselinePeriodV2({ ...value, coverage: [], gaps: [] });
|
|
327
|
+
export const isFinancialDataflowScopeSelectorV1 = (value) => {
|
|
328
|
+
if (!isFinancialDataflowRecordV1(value) || typeof value.kind !== 'string' || !SCOPE_KINDS.has(value.kind))
|
|
329
|
+
return false;
|
|
330
|
+
if (value.kind === 'resource') {
|
|
331
|
+
return (hasFinancialDataflowExactFieldsV1(value, ['kind', 'resourceIds']) &&
|
|
332
|
+
isFinancialDataflowSortedUniqueStringsV1(value.resourceIds, FINANCIAL_DATAFLOW_LIMITS_V1.maximumMembers) &&
|
|
333
|
+
value.resourceIds.length === 1);
|
|
334
|
+
}
|
|
335
|
+
if (value.kind === 'resource-group') {
|
|
336
|
+
return (hasFinancialDataflowExactFieldsV1(value, ['kind', 'resourceGroupIds']) &&
|
|
337
|
+
isFinancialDataflowSortedUniqueStringsV1(value.resourceGroupIds, FINANCIAL_DATAFLOW_LIMITS_V1.maximumMembers) &&
|
|
338
|
+
value.resourceGroupIds.length === 1);
|
|
339
|
+
}
|
|
340
|
+
if (value.kind === 'subscription' || value.kind === 'multi-subscription') {
|
|
341
|
+
return (hasFinancialDataflowExactFieldsV1(value, ['kind', 'subscriptionIds']) &&
|
|
342
|
+
isFinancialDataflowSortedUniqueStringsV1(value.subscriptionIds, FINANCIAL_DATAFLOW_LIMITS_V1.maximumProviderAccounts) &&
|
|
343
|
+
value.subscriptionIds.length > 0 &&
|
|
344
|
+
(value.kind !== 'subscription' || value.subscriptionIds.length === 1));
|
|
345
|
+
}
|
|
346
|
+
if (!hasFinancialDataflowExactFieldsV1(value, ['kind', 'tags', 'tagMatch']) ||
|
|
347
|
+
(value.tagMatch !== 'any' && value.tagMatch !== 'all') ||
|
|
348
|
+
!Array.isArray(value.tags) ||
|
|
349
|
+
value.tags.length === 0 ||
|
|
350
|
+
value.tags.length > 256) {
|
|
351
|
+
return false;
|
|
352
|
+
}
|
|
353
|
+
const keys = value.tags.map(tag => {
|
|
354
|
+
if (!isFinancialDataflowRecordV1(tag) ||
|
|
355
|
+
!hasFinancialDataflowExactFieldsV1(tag, ['key', 'value']) ||
|
|
356
|
+
!isFinancialDataflowIdentityV1(tag.key) ||
|
|
357
|
+
!isFinancialDataflowIdentityV1(tag.value)) {
|
|
358
|
+
return undefined;
|
|
359
|
+
}
|
|
360
|
+
return `${tag.key}\u0000${tag.value}`;
|
|
361
|
+
});
|
|
362
|
+
return keys.every((key) => key !== undefined) && keys.every((key, index) => index === 0 || keys[index - 1] < key);
|
|
363
|
+
};
|
|
313
364
|
export const isFinancialDataflowCoordinateV1 = (value) => {
|
|
314
365
|
if (!isFinancialDataflowRecordV1(value) ||
|
|
315
|
-
!hasFinancialDataflowExactFieldsV1(value, [
|
|
366
|
+
!hasFinancialDataflowExactFieldsV1(value, [
|
|
367
|
+
'companyId',
|
|
368
|
+
'provider',
|
|
369
|
+
'providerAccountRefs',
|
|
370
|
+
'scope',
|
|
371
|
+
'periodRole',
|
|
372
|
+
'period',
|
|
373
|
+
'costBasis',
|
|
374
|
+
'estimateLens',
|
|
375
|
+
'accountingCurrency',
|
|
376
|
+
'chargeInclusionPolicyRef',
|
|
377
|
+
], ['requestedCurrencyCode']) ||
|
|
316
378
|
!isFinancialDataflowIdentityV1(value.companyId) ||
|
|
317
379
|
value.provider !== 'azure' ||
|
|
318
380
|
!isFinancialDataflowSortedUniqueStringsV1(value.providerAccountRefs, FINANCIAL_DATAFLOW_LIMITS_V1.maximumProviderAccounts) ||
|
|
@@ -320,13 +382,18 @@ export const isFinancialDataflowCoordinateV1 = (value) => {
|
|
|
320
382
|
!isFinancialDataflowScopeV1(value.scope) ||
|
|
321
383
|
typeof value.periodRole !== 'string' ||
|
|
322
384
|
!PERIOD_ROLES.has(value.periodRole) ||
|
|
323
|
-
!
|
|
385
|
+
!isFinancialDataflowPeriodV1(value.period) ||
|
|
324
386
|
typeof value.costBasis !== 'string' ||
|
|
325
387
|
!COST_BASES.has(value.costBasis) ||
|
|
326
388
|
typeof value.estimateLens !== 'string' ||
|
|
327
389
|
!ESTIMATE_LENSES.has(value.estimateLens) ||
|
|
328
390
|
(value.requestedCurrencyCode !== undefined && !isFinancialDataflowCurrencyV1(value.requestedCurrencyCode)) ||
|
|
329
|
-
!isFinancialDataflowRecordV1(value.accountingCurrency)
|
|
391
|
+
!isFinancialDataflowRecordV1(value.accountingCurrency) ||
|
|
392
|
+
!isFinancialDataflowRecordV1(value.chargeInclusionPolicyRef) ||
|
|
393
|
+
!hasFinancialDataflowExactFieldsV1(value.chargeInclusionPolicyRef, ['policyId', 'policyDigest']) ||
|
|
394
|
+
!isFinancialDataflowIdentityV1(value.chargeInclusionPolicyRef.policyId) ||
|
|
395
|
+
!isFinancialDataflowHashV1(value.chargeInclusionPolicyRef.policyDigest) ||
|
|
396
|
+
resolveFinancialChargeInclusionPolicyV1(value.chargeInclusionPolicyRef) === undefined) {
|
|
330
397
|
return false;
|
|
331
398
|
}
|
|
332
399
|
if (value.accountingCurrency.status === 'resolved') {
|
|
@@ -354,7 +421,9 @@ const isMember = (value) => {
|
|
|
354
421
|
if (!isFinancialDataflowRecordV1(value) || !isFinancialDataflowIdentityV1(value.memberScopeId))
|
|
355
422
|
return false;
|
|
356
423
|
if (value.status === 'included') {
|
|
357
|
-
return hasFinancialDataflowExactFieldsV1(value, ['memberScopeId', 'baselineId', 'status']) &&
|
|
424
|
+
return (hasFinancialDataflowExactFieldsV1(value, ['memberScopeId', 'baselineId', 'chargeCompositionId', 'status']) &&
|
|
425
|
+
isFinancialDataflowHashV1(value.baselineId) &&
|
|
426
|
+
isFinancialDataflowHashV1(value.chargeCompositionId));
|
|
358
427
|
}
|
|
359
428
|
return (value.status === 'unavailable' &&
|
|
360
429
|
hasFinancialDataflowExactFieldsV1(value, ['memberScopeId', 'status', 'reasonCode']) &&
|
|
@@ -372,15 +441,7 @@ export const canonicalizeCurrentSpendMembershipV1 = (members) => {
|
|
|
372
441
|
export const createCurrentSpendMembershipDigestV1 = (members) => `sha256:${sha256Utf8(canonicalizeCurrentSpendMembershipV1(members))}`;
|
|
373
442
|
const isCompositionIdentity = (value) => {
|
|
374
443
|
if (!isFinancialDataflowRecordV1(value) ||
|
|
375
|
-
!hasFinancialDataflowExactFieldsV1(value, [
|
|
376
|
-
'schemaVersion',
|
|
377
|
-
'contractVersion',
|
|
378
|
-
'coordinate',
|
|
379
|
-
'members',
|
|
380
|
-
'amount',
|
|
381
|
-
'membershipDigest',
|
|
382
|
-
'algorithmVersion',
|
|
383
|
-
]) ||
|
|
444
|
+
!hasFinancialDataflowExactFieldsV1(value, ['schemaVersion', 'contractVersion', 'coordinate', 'members', 'amount', 'membershipDigest', 'algorithmVersion'], ['chargeSelection']) ||
|
|
384
445
|
value.schemaVersion !== FINANCIAL_DATAFLOW_SCHEMA_VERSION_V1 ||
|
|
385
446
|
value.contractVersion !== FINANCIAL_CURRENT_SPEND_COMPOSITION_CONTRACT_VERSION_V1 ||
|
|
386
447
|
!isFinancialDataflowCoordinateV1(value.coordinate) ||
|
|
@@ -396,11 +457,45 @@ const isCompositionIdentity = (value) => {
|
|
|
396
457
|
return false;
|
|
397
458
|
}
|
|
398
459
|
const currency = value.coordinate.accountingCurrency.status === 'resolved' ? value.coordinate.accountingCurrency.currencyCode : undefined;
|
|
460
|
+
const isChargeSelection = (selection) => {
|
|
461
|
+
if (!isFinancialDataflowRecordV1(selection) ||
|
|
462
|
+
!hasFinancialDataflowExactFieldsV1(selection, [
|
|
463
|
+
'status',
|
|
464
|
+
'includedAmount',
|
|
465
|
+
'excludedAmount',
|
|
466
|
+
'withheldAmount',
|
|
467
|
+
'forecastEligibleAmount',
|
|
468
|
+
'oneTimeAmount',
|
|
469
|
+
'unknownRecurrenceAmount',
|
|
470
|
+
'forecastStatus',
|
|
471
|
+
'currencyCode',
|
|
472
|
+
], ['reasonCodes', 'forecastReasonCodes']) ||
|
|
473
|
+
(selection.status !== 'available' && selection.status !== 'partial') ||
|
|
474
|
+
(selection.forecastStatus !== 'available' && selection.forecastStatus !== 'partial') ||
|
|
475
|
+
!isFinancialDataflowCurrencyV1(selection.currencyCode) ||
|
|
476
|
+
![
|
|
477
|
+
selection.includedAmount,
|
|
478
|
+
selection.excludedAmount,
|
|
479
|
+
selection.withheldAmount,
|
|
480
|
+
selection.forecastEligibleAmount,
|
|
481
|
+
selection.oneTimeAmount,
|
|
482
|
+
selection.unknownRecurrenceAmount,
|
|
483
|
+
].every(amount => isCanonicalExactMoney({ amount, currencyCode: selection.currencyCode })))
|
|
484
|
+
return false;
|
|
485
|
+
return ((selection.status === 'available' ? selection.reasonCodes === undefined : isReasonCodes(selection.reasonCodes)) &&
|
|
486
|
+
(selection.forecastStatus === 'available'
|
|
487
|
+
? selection.forecastReasonCodes === undefined
|
|
488
|
+
: isReasonCodes(selection.forecastReasonCodes)));
|
|
489
|
+
};
|
|
399
490
|
if (value.amount.status === 'available') {
|
|
400
491
|
return (currency !== undefined &&
|
|
401
492
|
hasFinancialDataflowExactFieldsV1(value.amount, ['status', 'amount', 'currencyCode']) &&
|
|
402
493
|
isCanonicalExactMoney({ amount: value.amount.amount, currencyCode: value.amount.currencyCode }) &&
|
|
403
494
|
value.amount.currencyCode === currency &&
|
|
495
|
+
isChargeSelection(value.chargeSelection) &&
|
|
496
|
+
value.chargeSelection.status === 'available' &&
|
|
497
|
+
value.chargeSelection.currencyCode === currency &&
|
|
498
|
+
value.chargeSelection.includedAmount === value.amount.amount &&
|
|
404
499
|
value.members.length > 0 &&
|
|
405
500
|
value.members.every(member => member.status === 'included'));
|
|
406
501
|
}
|
|
@@ -410,11 +505,17 @@ const isCompositionIdentity = (value) => {
|
|
|
410
505
|
isCanonicalExactMoney({ amount: value.amount.knownAmount, currencyCode: value.amount.currencyCode }) &&
|
|
411
506
|
value.amount.currencyCode === currency &&
|
|
412
507
|
isReasonCodes(value.amount.reasonCodes) &&
|
|
508
|
+
isChargeSelection(value.chargeSelection) &&
|
|
509
|
+
value.chargeSelection.currencyCode === currency &&
|
|
510
|
+
value.chargeSelection.includedAmount === value.amount.knownAmount &&
|
|
413
511
|
value.members.some(member => member.status === 'included') &&
|
|
414
|
-
value.members.some(member => member.status === 'unavailable')
|
|
512
|
+
(value.members.some(member => member.status === 'unavailable') ||
|
|
513
|
+
value.amount.reasonCodes.includes('coverage-incomplete') ||
|
|
514
|
+
value.chargeSelection.status === 'partial'));
|
|
415
515
|
}
|
|
416
516
|
const unresolvedCurrency = value.coordinate.accountingCurrency;
|
|
417
517
|
return (value.amount.status === 'unavailable' &&
|
|
518
|
+
value.chargeSelection === undefined &&
|
|
418
519
|
hasFinancialDataflowExactFieldsV1(value.amount, ['status', 'reasonCodes']) &&
|
|
419
520
|
isReasonCodes(value.amount.reasonCodes) &&
|
|
420
521
|
(currency !== undefined || (unresolvedCurrency.status === 'unresolved' && value.amount.reasonCodes.includes(unresolvedCurrency.reasonCode))));
|
|
@@ -431,6 +532,19 @@ export const canonicalizeCurrentSpendCompositionIdentityV1 = (value) => {
|
|
|
431
532
|
},
|
|
432
533
|
members: [...value.members].sort((left, right) => left.memberScopeId.localeCompare(right.memberScopeId)),
|
|
433
534
|
amount: value.amount.status === 'available' ? value.amount : { ...value.amount, reasonCodes: [...value.amount.reasonCodes].sort() },
|
|
535
|
+
...(value.chargeSelection === undefined
|
|
536
|
+
? {}
|
|
537
|
+
: {
|
|
538
|
+
chargeSelection: {
|
|
539
|
+
...value.chargeSelection,
|
|
540
|
+
...(value.chargeSelection.reasonCodes === undefined
|
|
541
|
+
? {}
|
|
542
|
+
: { reasonCodes: [...value.chargeSelection.reasonCodes].sort() }),
|
|
543
|
+
...(value.chargeSelection.forecastReasonCodes === undefined
|
|
544
|
+
? {}
|
|
545
|
+
: { forecastReasonCodes: [...value.chargeSelection.forecastReasonCodes].sort() }),
|
|
546
|
+
},
|
|
547
|
+
}),
|
|
434
548
|
};
|
|
435
549
|
return canonicalizeFinancialDataflowJsonV1(canonical);
|
|
436
550
|
};
|
|
@@ -447,7 +561,7 @@ export const isCurrentSpendCompositionV1 = (value) => {
|
|
|
447
561
|
'amount',
|
|
448
562
|
'membershipDigest',
|
|
449
563
|
'algorithmVersion',
|
|
450
|
-
])) {
|
|
564
|
+
], ['chargeSelection'])) {
|
|
451
565
|
return false;
|
|
452
566
|
}
|
|
453
567
|
const { compositionId, ...identity } = value;
|
|
@@ -462,62 +576,118 @@ const hasCompatibleBaselineCoordinate = (coordinate, baseline) => baseline.provi
|
|
|
462
576
|
toCanonicalEstimateLensV1(baseline.estimateLens) === coordinate.estimateLens &&
|
|
463
577
|
baseline.requestedCurrencyCode === coordinate.requestedCurrencyCode;
|
|
464
578
|
/** Proves that composition membership and money reconcile to exact V2 baseline envelopes. */
|
|
465
|
-
export const isCurrentSpendCompositionCompatibleV1 = (composition, baselines) => {
|
|
579
|
+
export const isCurrentSpendCompositionCompatibleV1 = (composition, baselines, chargeCompositions) => {
|
|
466
580
|
if (!isCurrentSpendCompositionV1(composition) ||
|
|
467
581
|
!Array.isArray(baselines) ||
|
|
468
582
|
baselines.length !== composition.members.length ||
|
|
469
583
|
baselines.length > FINANCIAL_DATAFLOW_LIMITS_V1.maximumMembers ||
|
|
470
|
-
!baselines.every(isFinancialScopeBaselineEnvelopeV2)
|
|
584
|
+
!baselines.every(isFinancialScopeBaselineEnvelopeV2) ||
|
|
585
|
+
!Array.isArray(chargeCompositions) ||
|
|
586
|
+
!chargeCompositions.every(isFinancialChargeCompositionV1)) {
|
|
471
587
|
return false;
|
|
472
588
|
}
|
|
473
589
|
const typedBaselines = baselines;
|
|
590
|
+
const typedChargeCompositions = chargeCompositions;
|
|
591
|
+
const chargeCompositionById = new Map(typedChargeCompositions.map(value => [value.chargeCompositionId, value]));
|
|
592
|
+
if (chargeCompositionById.size !== typedChargeCompositions.length)
|
|
593
|
+
return false;
|
|
474
594
|
const baselineByScopeId = new Map(typedBaselines.map(baseline => [baseline.scopeId, baseline]));
|
|
475
595
|
if (baselineByScopeId.size !== typedBaselines.length ||
|
|
476
596
|
new Set(typedBaselines.filter(baseline => baseline.status === 'available').map(baseline => baseline.baselineId)).size !==
|
|
477
597
|
typedBaselines.filter(baseline => baseline.status === 'available').length) {
|
|
478
598
|
return false;
|
|
479
599
|
}
|
|
480
|
-
const
|
|
600
|
+
const includedSelections = [];
|
|
481
601
|
const expectedReasonCodes = new Set();
|
|
482
602
|
for (const member of composition.members) {
|
|
483
603
|
const baseline = baselineByScopeId.get(member.memberScopeId);
|
|
484
604
|
if (baseline === undefined || !hasCompatibleBaselineCoordinate(composition.coordinate, baseline))
|
|
485
605
|
return false;
|
|
486
606
|
if (member.status === 'included') {
|
|
487
|
-
if (baseline.status !== 'available' ||
|
|
607
|
+
if (baseline.status !== 'available' ||
|
|
608
|
+
baseline.baselineKind !== 'owner' ||
|
|
609
|
+
member.baselineId !== baseline.baselineId ||
|
|
610
|
+
canonicalizeFinancialDataflowJsonV1(baseline.chargeInclusionPolicyRef) !==
|
|
611
|
+
canonicalizeFinancialDataflowJsonV1(AZURE_BILLED_ALL_CHARGES_POLICY_V1.policyRef))
|
|
612
|
+
return false;
|
|
613
|
+
const chargeComposition = chargeCompositionById.get(member.chargeCompositionId);
|
|
614
|
+
if (chargeComposition === undefined ||
|
|
615
|
+
chargeComposition.baselineId !== baseline.baselineId ||
|
|
616
|
+
chargeComposition.ownerScopeId !== baseline.scopeId ||
|
|
617
|
+
chargeComposition.period.windowKind !== baseline.period.windowKind ||
|
|
618
|
+
canonicalizeFinancialDataflowJsonV1(chargeComposition.period.requested) !== canonicalizeFinancialDataflowJsonV1(baseline.period.requested) ||
|
|
619
|
+
chargeComposition.costBasis !== baseline.costBasis ||
|
|
620
|
+
chargeComposition.estimateLens !== baseline.estimateLens ||
|
|
621
|
+
chargeComposition.accountingCurrencyCode !== baseline.total.currencyCode ||
|
|
622
|
+
chargeComposition.reconciliation.sourceTotal !== baseline.total.amount)
|
|
488
623
|
return false;
|
|
489
624
|
if (composition.coordinate.accountingCurrency.status === 'resolved' &&
|
|
490
625
|
baseline.total.currencyCode !== composition.coordinate.accountingCurrency.currencyCode) {
|
|
491
626
|
return false;
|
|
492
627
|
}
|
|
493
|
-
|
|
628
|
+
includedSelections.push(selectFinancialChargesV1(chargeComposition, composition.coordinate.chargeInclusionPolicyRef));
|
|
629
|
+
includedSelections[includedSelections.length - 1].reasonCodes?.forEach(reason => expectedReasonCodes.add(reason));
|
|
630
|
+
if (baseline.status === 'available' && !isCompleteFinancialBaselinePeriodV2(baseline.period)) {
|
|
631
|
+
expectedReasonCodes.add('coverage-incomplete');
|
|
632
|
+
}
|
|
494
633
|
continue;
|
|
495
634
|
}
|
|
496
|
-
if (baseline.status
|
|
497
|
-
|
|
498
|
-
|
|
635
|
+
if (baseline.status === 'unavailable') {
|
|
636
|
+
if (member.reasonCode !== baseline.unavailableReason)
|
|
637
|
+
return false;
|
|
638
|
+
expectedReasonCodes.add(baseline.unavailableReason);
|
|
639
|
+
}
|
|
640
|
+
else {
|
|
641
|
+
const expectedDerivedReason = baseline.baselineKind === 'aggregate'
|
|
642
|
+
? 'charge-composition-requires-owner-baseline'
|
|
643
|
+
: 'charge-composition-unavailable';
|
|
644
|
+
if (member.reasonCode !== expectedDerivedReason)
|
|
645
|
+
return false;
|
|
646
|
+
expectedReasonCodes.add(expectedDerivedReason);
|
|
647
|
+
}
|
|
499
648
|
}
|
|
500
649
|
if (composition.coordinate.accountingCurrency.status === 'unresolved') {
|
|
501
650
|
expectedReasonCodes.add(composition.coordinate.accountingCurrency.reasonCode);
|
|
502
651
|
}
|
|
652
|
+
if (typedChargeCompositions.length !== includedSelections.length)
|
|
653
|
+
return false;
|
|
503
654
|
const hasExpectedReasonCodes = (reasonCodes) => reasonCodes.length === expectedReasonCodes.size && reasonCodes.every(reasonCode => expectedReasonCodes.has(reasonCode));
|
|
504
655
|
if (composition.coordinate.accountingCurrency.status === 'unresolved') {
|
|
505
656
|
return composition.amount.status === 'unavailable' && hasExpectedReasonCodes(composition.amount.reasonCodes);
|
|
506
657
|
}
|
|
507
|
-
if (
|
|
658
|
+
if (includedSelections.length === 0) {
|
|
508
659
|
return composition.amount.status === 'unavailable' && hasExpectedReasonCodes(composition.amount.reasonCodes);
|
|
509
660
|
}
|
|
510
|
-
let
|
|
661
|
+
let aggregateSelection;
|
|
511
662
|
try {
|
|
512
|
-
|
|
663
|
+
const reasonCodes = new Set(includedSelections.flatMap(selection => selection.reasonCodes ?? []));
|
|
664
|
+
const forecastReasonCodes = new Set(includedSelections.flatMap(selection => selection.forecastReasonCodes ?? []));
|
|
665
|
+
aggregateSelection = {
|
|
666
|
+
status: includedSelections.some(selection => selection.status === 'partial') ? 'partial' : 'available',
|
|
667
|
+
includedAmount: formatExactDecimalValue(sumCanonicalDecimals(includedSelections.map(selection => selection.includedAmount))),
|
|
668
|
+
excludedAmount: formatExactDecimalValue(sumCanonicalDecimals(includedSelections.map(selection => selection.excludedAmount))),
|
|
669
|
+
withheldAmount: formatExactDecimalValue(sumCanonicalDecimals(includedSelections.map(selection => selection.withheldAmount))),
|
|
670
|
+
forecastEligibleAmount: formatExactDecimalValue(sumCanonicalDecimals(includedSelections.map(selection => selection.forecastEligibleAmount))),
|
|
671
|
+
oneTimeAmount: formatExactDecimalValue(sumCanonicalDecimals(includedSelections.map(selection => selection.oneTimeAmount))),
|
|
672
|
+
unknownRecurrenceAmount: formatExactDecimalValue(sumCanonicalDecimals(includedSelections.map(selection => selection.unknownRecurrenceAmount))),
|
|
673
|
+
forecastStatus: includedSelections.some(selection => selection.forecastStatus === 'partial') ? 'partial' : 'available',
|
|
674
|
+
currencyCode: composition.coordinate.accountingCurrency.currencyCode,
|
|
675
|
+
...(reasonCodes.size === 0 ? {} : { reasonCodes: [...reasonCodes].sort() }),
|
|
676
|
+
...(forecastReasonCodes.size === 0
|
|
677
|
+
? {}
|
|
678
|
+
: { forecastReasonCodes: [...forecastReasonCodes].sort() }),
|
|
679
|
+
};
|
|
513
680
|
}
|
|
514
681
|
catch {
|
|
515
682
|
return false;
|
|
516
683
|
}
|
|
517
|
-
|
|
518
|
-
|
|
684
|
+
const sameSelection = canonicalizeFinancialDataflowJsonV1(composition.chargeSelection) === canonicalizeFinancialDataflowJsonV1(aggregateSelection);
|
|
685
|
+
if (!sameSelection)
|
|
686
|
+
return false;
|
|
687
|
+
if (includedSelections.length === composition.members.length && expectedReasonCodes.size === 0) {
|
|
688
|
+
return composition.amount.status === 'available' && composition.amount.amount === aggregateSelection.includedAmount;
|
|
519
689
|
}
|
|
520
690
|
return (composition.amount.status === 'partial' &&
|
|
521
|
-
composition.amount.knownAmount ===
|
|
691
|
+
composition.amount.knownAmount === aggregateSelection.includedAmount &&
|
|
522
692
|
hasExpectedReasonCodes(composition.amount.reasonCodes));
|
|
523
693
|
};
|
|
@@ -12,6 +12,13 @@ const EVIDENCE_ROLES = new Set([
|
|
|
12
12
|
'retail-rate',
|
|
13
13
|
'commitment-quote',
|
|
14
14
|
'fx-conversion',
|
|
15
|
+
'commercial-arrangement',
|
|
16
|
+
'provider-access-observation',
|
|
17
|
+
'configuration-timeline',
|
|
18
|
+
'provider-price-schedule',
|
|
19
|
+
'pricing-function',
|
|
20
|
+
'charge-inclusion-policy',
|
|
21
|
+
'settlement-revision',
|
|
15
22
|
'eligibility-rule',
|
|
16
23
|
'recommendation-scenario-set',
|
|
17
24
|
'recommendation-lifecycle',
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
export const FINANCIAL_EVIDENCE_COVERAGE_CONTRACT_VERSION_V1 = 'financial-evidence-coverage/v1';
|
|
2
|
+
export const FINANCIAL_EVIDENCE_COVERAGE_REASONS_V1 = [
|
|
3
|
+
'coverage-complete',
|
|
4
|
+
'capability-passport-missing',
|
|
5
|
+
'capability-passport-invalid',
|
|
6
|
+
'capability-passport-ownership-mismatch',
|
|
7
|
+
'capability-passport-read-failed',
|
|
8
|
+
'billing-capability-partial',
|
|
9
|
+
'billing-capability-stale',
|
|
10
|
+
'billing-capability-missing',
|
|
11
|
+
'billing-capability-unavailable',
|
|
12
|
+
'billing-capability-unknown',
|
|
13
|
+
'billing-dependency-partial',
|
|
14
|
+
'billing-dependency-stale',
|
|
15
|
+
'billing-dependency-missing',
|
|
16
|
+
'billing-dependency-unavailable',
|
|
17
|
+
'billing-dependency-unverified',
|
|
18
|
+
'billing-dependency-wrong-generation',
|
|
19
|
+
'subscription-coverage-missing',
|
|
20
|
+
'subscription-coverage-invalid',
|
|
21
|
+
'filtered-scope-coverage-unproven',
|
|
22
|
+
];
|
|
23
|
+
const STATES = new Set(['complete', 'partial', 'stale', 'missing', 'unavailable', 'unknown']);
|
|
24
|
+
const STATE_PRIORITY = {
|
|
25
|
+
complete: 0,
|
|
26
|
+
partial: 1,
|
|
27
|
+
stale: 2,
|
|
28
|
+
unknown: 3,
|
|
29
|
+
missing: 4,
|
|
30
|
+
unavailable: 5,
|
|
31
|
+
};
|
|
32
|
+
const REASONS = new Set(FINANCIAL_EVIDENCE_COVERAGE_REASONS_V1);
|
|
33
|
+
const ISO_TIMESTAMP_PATTERN = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?Z$/;
|
|
34
|
+
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
35
|
+
const hasExactFields = (value, required, optional = []) => {
|
|
36
|
+
const allowed = new Set([...required, ...optional]);
|
|
37
|
+
return required.every(field => Object.prototype.hasOwnProperty.call(value, field)) && Object.keys(value).every(field => allowed.has(field));
|
|
38
|
+
};
|
|
39
|
+
const isNonEmptyString = (value) => typeof value === 'string' && value.trim() === value && value.length > 0;
|
|
40
|
+
const isCanonicalTimestamp = (value) => typeof value === 'string' &&
|
|
41
|
+
ISO_TIMESTAMP_PATTERN.test(value) &&
|
|
42
|
+
Number.isFinite(Date.parse(value)) &&
|
|
43
|
+
new Date(Date.parse(value)).toISOString() === value;
|
|
44
|
+
const isReasonList = (value) => Array.isArray(value) && value.length > 0 && new Set(value).size === value.length && value.every(reason => typeof reason === 'string' && REASONS.has(reason));
|
|
45
|
+
const isSource = (value) => {
|
|
46
|
+
if (!isRecord(value) || !hasExactFields(value, ['state', 'reasons'], ['generationId', 'completeThrough']))
|
|
47
|
+
return false;
|
|
48
|
+
if (typeof value.state !== 'string' || !STATES.has(value.state) || !isReasonList(value.reasons))
|
|
49
|
+
return false;
|
|
50
|
+
if (value.state === 'complete' ? value.reasons.length !== 1 || value.reasons[0] !== 'coverage-complete' : value.reasons.includes('coverage-complete')) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
if (value.generationId !== undefined && !isNonEmptyString(value.generationId))
|
|
54
|
+
return false;
|
|
55
|
+
return value.completeThrough === undefined || isCanonicalTimestamp(value.completeThrough);
|
|
56
|
+
};
|
|
57
|
+
/** Exact dependency-free validator for the API/UI coverage boundary. */
|
|
58
|
+
export const isFinancialEvidenceCoverageProjectionV1 = (value) => {
|
|
59
|
+
if (!isRecord(value) ||
|
|
60
|
+
!hasExactFields(value, [
|
|
61
|
+
'contractVersion',
|
|
62
|
+
'provider',
|
|
63
|
+
'subscriptionId',
|
|
64
|
+
'publicationId',
|
|
65
|
+
'artifactGeneration',
|
|
66
|
+
'scope',
|
|
67
|
+
'state',
|
|
68
|
+
'reasons',
|
|
69
|
+
'sources',
|
|
70
|
+
]) ||
|
|
71
|
+
value.contractVersion !== FINANCIAL_EVIDENCE_COVERAGE_CONTRACT_VERSION_V1 ||
|
|
72
|
+
value.provider !== 'azure' ||
|
|
73
|
+
!isNonEmptyString(value.subscriptionId) ||
|
|
74
|
+
!isNonEmptyString(value.publicationId) ||
|
|
75
|
+
typeof value.state !== 'string' ||
|
|
76
|
+
!STATES.has(value.state) ||
|
|
77
|
+
!isReasonList(value.reasons)) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
if (!isRecord(value.artifactGeneration) ||
|
|
81
|
+
!hasExactFields(value.artifactGeneration, ['runId', 'generatedAt']) ||
|
|
82
|
+
!isNonEmptyString(value.artifactGeneration.runId) ||
|
|
83
|
+
!isCanonicalTimestamp(value.artifactGeneration.generatedAt)) {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
if (!isRecord(value.scope) ||
|
|
87
|
+
!hasExactFields(value.scope, ['kind', 'subscriptionId']) ||
|
|
88
|
+
value.scope.kind !== 'subscription' ||
|
|
89
|
+
value.scope.subscriptionId !== value.subscriptionId) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
if (!isRecord(value.sources) ||
|
|
93
|
+
!hasExactFields(value.sources, ['capabilityPassport', 'billingDependency']) ||
|
|
94
|
+
!isSource(value.sources.capabilityPassport) ||
|
|
95
|
+
!isSource(value.sources.billingDependency)) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
const sources = [value.sources.capabilityPassport, value.sources.billingDependency];
|
|
99
|
+
const expectedState = sources.reduce((current, candidate) => (STATE_PRIORITY[candidate.state] > STATE_PRIORITY[current] ? candidate.state : current), 'complete');
|
|
100
|
+
if (value.state !== expectedState)
|
|
101
|
+
return false;
|
|
102
|
+
const expectedReasons = new Set(expectedState === 'complete'
|
|
103
|
+
? ['coverage-complete']
|
|
104
|
+
: sources.flatMap(candidate => candidate.reasons).filter(reason => reason !== 'coverage-complete'));
|
|
105
|
+
return expectedReasons.size === value.reasons.length && value.reasons.every(reason => expectedReasons.has(reason));
|
|
106
|
+
};
|