@spottoai/types-package 1.0.2-dev1138.12 → 1.0.2-dev1138.13
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 +0 -9
- package/dist/accounts/accounts.d.ts +5 -84
- package/dist/accounts/accounts.d.ts.map +1 -1
- package/dist/accounts/accounts.js +1 -2
- package/dist/accounts/accounts.js.map +1 -1
- package/dist/accounts/azureSpSetup.d.ts +31 -142
- package/dist/accounts/azureSpSetup.d.ts.map +1 -1
- package/dist/accounts/azureSpSetup.js +0 -15
- package/dist/accounts/azureSpSetup.js.map +1 -1
- package/dist/accounts/azureSpSetupDurable.d.ts +0 -8
- package/dist/accounts/azureSpSetupDurable.d.ts.map +1 -1
- package/dist/accounts/azureSpSetupDurable.js +0 -28
- package/dist/accounts/azureSpSetupDurable.js.map +1 -1
- package/dist/accounts/index.d.ts +0 -1
- package/dist/accounts/index.d.ts.map +1 -1
- package/dist/accounts/index.js +0 -1
- 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/validation.d.ts +0 -24
- package/dist/accounts/validation.d.ts.map +1 -1
- package/dist/ai/index.d.ts +6 -302
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +0 -25
- package/dist/ai/index.js.map +1 -1
- package/dist/aws/commitments-planning.d.ts +0 -5
- package/dist/aws/commitments-planning.d.ts.map +1 -1
- package/dist/aws/commitments-planning.js +0 -19
- package/dist/aws/commitments-planning.js.map +1 -1
- package/dist/aws/estates.d.ts +1 -1
- package/dist/aws/estates.d.ts.map +1 -1
- package/dist/aws/estates.js +1 -7
- package/dist/aws/estates.js.map +1 -1
- package/dist/aws/index.d.ts +0 -5
- package/dist/aws/index.d.ts.map +1 -1
- package/dist/aws/index.js +0 -5
- package/dist/aws/index.js.map +1 -1
- package/dist/aws/onboarding.d.ts +0 -3
- package/dist/aws/onboarding.d.ts.map +1 -1
- package/dist/aws/requests.d.ts +2 -13
- package/dist/aws/requests.d.ts.map +1 -1
- package/dist/aws/requests.js +1 -1
- package/dist/aws/requests.js.map +1 -1
- package/dist/azure/activityLogs.d.ts +0 -8
- 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 +1 -7
- package/dist/azure/billingPlots.d.ts.map +1 -1
- package/dist/azure/billingPlots.js +4 -45
- package/dist/azure/billingPlots.js.map +1 -1
- package/dist/azure/commitmentsPlanning.d.ts +2 -8
- package/dist/azure/commitmentsPlanning.d.ts.map +1 -1
- package/dist/azure/common.d.ts +5 -26
- package/dist/azure/common.d.ts.map +1 -1
- package/dist/azure/common.js +0 -30
- package/dist/azure/common.js.map +1 -1
- package/dist/azure/costComposition.d.ts +1 -11
- package/dist/azure/costComposition.d.ts.map +1 -1
- package/dist/azure/costComposition.js +1 -84
- package/dist/azure/costComposition.js.map +1 -1
- package/dist/azure/dataProtection.d.ts +4 -4
- package/dist/azure/dataProtection.d.ts.map +1 -1
- package/dist/azure/financialAnalytics.d.ts +8 -80
- package/dist/azure/financialAnalytics.d.ts.map +1 -1
- package/dist/azure/financialAnalyticsDelivery.d.ts +3 -72
- package/dist/azure/financialAnalyticsDelivery.d.ts.map +1 -1
- package/dist/azure/financialAnalyticsDelivery.js +1 -7
- package/dist/azure/financialAnalyticsDelivery.js.map +1 -1
- package/dist/azure/financialAnalyticsDeliveryValidation.d.ts +1 -9
- package/dist/azure/financialAnalyticsDeliveryValidation.d.ts.map +1 -1
- package/dist/azure/financialAnalyticsDeliveryValidation.js +10 -190
- package/dist/azure/financialAnalyticsDeliveryValidation.js.map +1 -1
- package/dist/azure/financialAnalyticsValidation.d.ts.map +1 -1
- package/dist/azure/financialAnalyticsValidation.js +19 -101
- package/dist/azure/financialAnalyticsValidation.js.map +1 -1
- package/dist/azure/financialAuthorityView.d.ts +0 -13
- package/dist/azure/financialAuthorityView.d.ts.map +1 -1
- package/dist/azure/financialAuthorityView.js.map +1 -1
- package/dist/azure/financialAuthorityViewValidation.d.ts +1 -3
- package/dist/azure/financialAuthorityViewValidation.d.ts.map +1 -1
- package/dist/azure/financialAuthorityViewValidation.js +2 -273
- package/dist/azure/financialAuthorityViewValidation.js.map +1 -1
- package/dist/azure/financialDataflow.d.ts +2 -45
- package/dist/azure/financialDataflow.d.ts.map +1 -1
- package/dist/azure/financialDataflow.js.map +1 -1
- package/dist/azure/financialDataflowValidation.d.ts +2 -5
- package/dist/azure/financialDataflowValidation.d.ts.map +1 -1
- package/dist/azure/financialDataflowValidation.js +30 -203
- package/dist/azure/financialDataflowValidation.js.map +1 -1
- package/dist/azure/financialEvidenceAssessmentValidation.d.ts.map +1 -1
- package/dist/azure/financialEvidenceAssessmentValidation.js +0 -7
- package/dist/azure/financialEvidenceAssessmentValidation.js.map +1 -1
- package/dist/azure/financialPolicy.d.ts +3 -19
- package/dist/azure/financialPolicy.d.ts.map +1 -1
- package/dist/azure/financialPolicy.js.map +1 -1
- package/dist/azure/financialPolicyDelivery.d.ts +1 -75
- package/dist/azure/financialPolicyDelivery.d.ts.map +1 -1
- package/dist/azure/financialPolicyDelivery.js +1 -5
- package/dist/azure/financialPolicyDelivery.js.map +1 -1
- package/dist/azure/financialPolicyDeliveryValidation.d.ts +2 -16
- package/dist/azure/financialPolicyDeliveryValidation.d.ts.map +1 -1
- package/dist/azure/financialPolicyDeliveryValidation.js +5 -238
- package/dist/azure/financialPolicyDeliveryValidation.js.map +1 -1
- package/dist/azure/financialPolicyValidation.d.ts +0 -1
- package/dist/azure/financialPolicyValidation.d.ts.map +1 -1
- package/dist/azure/financialPolicyValidation.js +16 -111
- package/dist/azure/financialPolicyValidation.js.map +1 -1
- package/dist/azure/financialProjection.d.ts +1 -11
- 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 +3 -43
- package/dist/azure/financialProjectionValidation.js.map +1 -1
- package/dist/azure/financialSavingsAuthority.d.ts +4 -68
- package/dist/azure/financialSavingsAuthority.d.ts.map +1 -1
- package/dist/azure/financialSavingsAuthority.js +1 -2
- package/dist/azure/financialSavingsAuthority.js.map +1 -1
- package/dist/azure/financialSavingsAuthorityValidation.d.ts +2 -6
- package/dist/azure/financialSavingsAuthorityValidation.d.ts.map +1 -1
- package/dist/azure/financialSavingsAuthorityValidation.js +2 -188
- package/dist/azure/financialSavingsAuthorityValidation.js.map +1 -1
- package/dist/azure/financialSavingsCoordinateValidation.d.ts.map +1 -1
- package/dist/azure/financialSavingsCoordinateValidation.js +19 -98
- package/dist/azure/financialSavingsCoordinateValidation.js.map +1 -1
- package/dist/azure/financialSavingsSurfaceProjection.d.ts +3 -82
- package/dist/azure/financialSavingsSurfaceProjection.d.ts.map +1 -1
- package/dist/azure/financialSavingsSurfaceProjection.js +1 -3
- package/dist/azure/financialSavingsSurfaceProjection.js.map +1 -1
- package/dist/azure/financialSavingsSurfaceProjectionValidation.d.ts.map +1 -1
- package/dist/azure/financialSavingsSurfaceProjectionValidation.js +13 -199
- package/dist/azure/financialSavingsSurfaceProjectionValidation.js.map +1 -1
- package/dist/azure/financialScope.d.ts +0 -14
- package/dist/azure/financialScope.d.ts.map +1 -1
- package/dist/azure/financialScope.js +0 -14
- package/dist/azure/financialScope.js.map +1 -1
- package/dist/azure/financialScopeBaseline.d.ts +3 -11
- package/dist/azure/financialScopeBaseline.d.ts.map +1 -1
- package/dist/azure/financialScopeBaseline.js +1 -14
- package/dist/azure/financialScopeBaseline.js.map +1 -1
- package/dist/azure/financialScopeBaselineIdentity.d.ts.map +1 -1
- package/dist/azure/financialScopeBaselineIdentity.js +4 -24
- package/dist/azure/financialScopeBaselineIdentity.js.map +1 -1
- package/dist/azure/financialScopeBaselineValidation.d.ts.map +1 -1
- package/dist/azure/financialScopeBaselineValidation.js +4 -21
- 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 +0 -145
- package/dist/azure/governance.d.ts.map +1 -1
- package/dist/azure/governance.js +1 -2
- package/dist/azure/governance.js.map +1 -1
- package/dist/azure/metrics.d.ts +2 -2
- package/dist/azure/metrics.d.ts.map +1 -1
- package/dist/azure/payloads.d.ts +1 -55
- package/dist/azure/payloads.d.ts.map +1 -1
- package/dist/azure/prices.d.ts +12 -41
- package/dist/azure/prices.d.ts.map +1 -1
- package/dist/azure/recommendationState.d.ts +1 -1
- package/dist/azure/recommendationState.d.ts.map +1 -1
- package/dist/azure/recommendations.d.ts +5 -141
- package/dist/azure/recommendations.d.ts.map +1 -1
- package/dist/azure/recommendations.js +1 -3
- 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/reports.d.ts +10 -32
- package/dist/azure/reports.d.ts.map +1 -1
- package/dist/azure/reports.js.map +1 -1
- package/dist/azure/resources.d.ts +12 -24
- package/dist/azure/resources.d.ts.map +1 -1
- package/dist/azure/serviceRetirement.d.ts +2 -33
- package/dist/azure/serviceRetirement.d.ts.map +1 -1
- package/dist/azure/storage-inventory.d.ts +0 -44
- package/dist/azure/storage-inventory.d.ts.map +1 -1
- package/dist/azure/subscriptions.d.ts +11 -57
- package/dist/azure/subscriptions.d.ts.map +1 -1
- package/dist/azure/subscriptions.js +0 -35
- package/dist/azure/subscriptions.js.map +1 -1
- package/dist/azure/views.d.ts +22 -86
- package/dist/azure/views.d.ts.map +1 -1
- package/dist/azure/views.js +1 -8
- package/dist/azure/views.js.map +1 -1
- package/dist/common/provider.d.ts +0 -53
- package/dist/common/provider.d.ts.map +1 -1
- package/dist/common/provider.js.map +1 -1
- package/dist/company/company.d.ts +0 -1
- package/dist/company/company.d.ts.map +1 -1
- package/dist/esm/accounts/accounts.js +0 -1
- package/dist/esm/accounts/azureSpSetup.js +1 -14
- package/dist/esm/accounts/azureSpSetupDurable.js +1 -27
- package/dist/esm/accounts/index.js +0 -1
- package/dist/esm/ai/index.js +1 -10
- package/dist/esm/aws/commitments-planning.js +0 -5
- package/dist/esm/aws/estates.js +1 -7
- package/dist/esm/aws/index.js +0 -5
- package/dist/esm/aws/requests.js +1 -1
- package/dist/esm/azure/billingPlots.js +4 -45
- package/dist/esm/azure/common.js +1 -28
- package/dist/esm/azure/costComposition.js +0 -80
- package/dist/esm/azure/financialAnalyticsDelivery.js +0 -5
- package/dist/esm/azure/financialAnalyticsDeliveryValidation.js +11 -184
- package/dist/esm/azure/financialAnalyticsValidation.js +19 -101
- package/dist/esm/azure/financialAuthorityViewValidation.js +1 -271
- package/dist/esm/azure/financialDataflowValidation.js +29 -199
- package/dist/esm/azure/financialEvidenceAssessmentValidation.js +0 -7
- package/dist/esm/azure/financialPolicyDelivery.js +0 -4
- package/dist/esm/azure/financialPolicyDeliveryValidation.js +7 -227
- package/dist/esm/azure/financialPolicyValidation.js +16 -110
- package/dist/esm/azure/financialProjectionValidation.js +3 -43
- package/dist/esm/azure/financialSavingsAuthority.js +0 -1
- package/dist/esm/azure/financialSavingsAuthorityValidation.js +2 -186
- package/dist/esm/azure/financialSavingsCoordinateValidation.js +19 -98
- package/dist/esm/azure/financialSavingsSurfaceProjection.js +0 -2
- package/dist/esm/azure/financialSavingsSurfaceProjectionValidation.js +13 -199
- package/dist/esm/azure/financialScope.js +0 -14
- package/dist/esm/azure/financialScopeBaseline.js +0 -12
- package/dist/esm/azure/financialScopeBaselineIdentity.js +4 -24
- package/dist/esm/azure/financialScopeBaselineValidation.js +4 -21
- package/dist/esm/azure/governance.js +0 -1
- package/dist/esm/azure/recommendations.js +0 -2
- package/dist/esm/azure/subscriptions.js +1 -33
- package/dist/esm/azure/views.js +1 -8
- package/dist/esm/entries/commitments-planning.js +2 -2
- package/dist/esm/identity/index.js +0 -1
- package/dist/esm/index.js +0 -13
- package/dist/esm/index.vite.js +0 -11
- package/dist/esm/scheduler/index.js +0 -3
- package/dist/events/alertDefinitionRun.d.ts +0 -4
- package/dist/events/alertDefinitionRun.d.ts.map +1 -1
- package/dist/events/baseAlert.d.ts +0 -1
- package/dist/events/baseAlert.d.ts.map +1 -1
- package/dist/events/cost.d.ts +0 -4
- package/dist/events/cost.d.ts.map +1 -1
- package/dist/events/quickAlerts.d.ts +4 -13
- 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 +0 -79
- package/dist/features-and-permissions/access.d.ts.map +1 -1
- package/dist/identity/index.d.ts +0 -1
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +0 -1
- package/dist/identity/index.js.map +1 -1
- package/dist/index.d.ts +0 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -19
- package/dist/index.js.map +1 -1
- package/dist/index.vite.d.ts +0 -11
- package/dist/index.vite.d.ts.map +1 -1
- package/dist/index.vite.js +0 -15
- 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/scheduler/index.d.ts +0 -3
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +0 -3
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/scheduler.d.ts +10 -14
- package/dist/scheduler/scheduler.d.ts.map +1 -1
- package/package.json +3 -20
- package/dist/accounts/azureManualOnboarding.d.ts +0 -114
- package/dist/accounts/azureManualOnboarding.d.ts.map +0 -1
- package/dist/accounts/azureManualOnboarding.js +0 -12
- package/dist/accounts/azureManualOnboarding.js.map +0 -1
- package/dist/ai/conversationHistory.d.ts +0 -52
- package/dist/ai/conversationHistory.d.ts.map +0 -1
- package/dist/ai/conversationHistory.js +0 -10
- package/dist/ai/conversationHistory.js.map +0 -1
- package/dist/ai/grounding.d.ts +0 -41
- package/dist/ai/grounding.d.ts.map +0 -1
- package/dist/ai/grounding.js +0 -86
- package/dist/ai/grounding.js.map +0 -1
- package/dist/ai/workspaceArtifacts.d.ts +0 -587
- package/dist/ai/workspaceArtifacts.d.ts.map +0 -1
- package/dist/ai/workspaceArtifacts.js +0 -162
- package/dist/ai/workspaceArtifacts.js.map +0 -1
- package/dist/aws/organizationCommitments.d.ts +0 -260
- package/dist/aws/organizationCommitments.d.ts.map +0 -1
- package/dist/aws/organizationCommitments.js +0 -53
- package/dist/aws/organizationCommitments.js.map +0 -1
- package/dist/aws/organizationCommitmentsApiValidation.d.ts +0 -21
- package/dist/aws/organizationCommitmentsApiValidation.d.ts.map +0 -1
- package/dist/aws/organizationCommitmentsApiValidation.js +0 -226
- package/dist/aws/organizationCommitmentsApiValidation.js.map +0 -1
- package/dist/aws/organizationCommitmentsValidation.d.ts +0 -12
- package/dist/aws/organizationCommitmentsValidation.d.ts.map +0 -1
- package/dist/aws/organizationCommitmentsValidation.js +0 -228
- package/dist/aws/organizationCommitmentsValidation.js.map +0 -1
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.d.ts +0 -9
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.d.ts.map +0 -1
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.js +0 -407
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.js.map +0 -1
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.d.ts +0 -17
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.d.ts.map +0 -1
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.js +0 -6
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.js.map +0 -1
- package/dist/azure/activityLogAnalysis.d.ts +0 -320
- package/dist/azure/activityLogAnalysis.d.ts.map +0 -1
- package/dist/azure/activityLogAnalysis.js +0 -70
- package/dist/azure/activityLogAnalysis.js.map +0 -1
- package/dist/azure/activityLogAnalysisPublicValidation.d.ts +0 -8
- package/dist/azure/activityLogAnalysisPublicValidation.d.ts.map +0 -1
- package/dist/azure/activityLogAnalysisPublicValidation.js +0 -368
- package/dist/azure/activityLogAnalysisPublicValidation.js.map +0 -1
- package/dist/azure/activityLogAnalysisPublicValidationHelpers.d.ts +0 -33
- package/dist/azure/activityLogAnalysisPublicValidationHelpers.d.ts.map +0 -1
- package/dist/azure/activityLogAnalysisPublicValidationHelpers.js +0 -197
- package/dist/azure/activityLogAnalysisPublicValidationHelpers.js.map +0 -1
- package/dist/azure/activityLogAnalysisValidation.d.ts +0 -5
- package/dist/azure/activityLogAnalysisValidation.d.ts.map +0 -1
- package/dist/azure/activityLogAnalysisValidation.js +0 -376
- package/dist/azure/activityLogAnalysisValidation.js.map +0 -1
- package/dist/azure/financialAnalyticsDisplayKernel.d.ts +0 -12
- package/dist/azure/financialAnalyticsDisplayKernel.d.ts.map +0 -1
- package/dist/azure/financialAnalyticsDisplayKernel.js +0 -144
- package/dist/azure/financialAnalyticsDisplayKernel.js.map +0 -1
- package/dist/azure/financialAuthorityProjectionKernel.d.ts +0 -8
- package/dist/azure/financialAuthorityProjectionKernel.d.ts.map +0 -1
- package/dist/azure/financialAuthorityProjectionKernel.js +0 -269
- package/dist/azure/financialAuthorityProjectionKernel.js.map +0 -1
- package/dist/azure/financialChargeComposition.d.ts +0 -81
- package/dist/azure/financialChargeComposition.d.ts.map +0 -1
- package/dist/azure/financialChargeComposition.js +0 -41
- package/dist/azure/financialChargeComposition.js.map +0 -1
- package/dist/azure/financialChargeCompositionKernel.d.ts +0 -3
- package/dist/azure/financialChargeCompositionKernel.d.ts.map +0 -1
- package/dist/azure/financialChargeCompositionKernel.js +0 -53
- package/dist/azure/financialChargeCompositionKernel.js.map +0 -1
- package/dist/azure/financialChargeCompositionValidation.d.ts +0 -8
- package/dist/azure/financialChargeCompositionValidation.d.ts.map +0 -1
- package/dist/azure/financialChargeCompositionValidation.js +0 -164
- package/dist/azure/financialChargeCompositionValidation.js.map +0 -1
- package/dist/azure/financialChargePolicy.d.ts +0 -215
- package/dist/azure/financialChargePolicy.d.ts.map +0 -1
- package/dist/azure/financialChargePolicy.js +0 -488
- package/dist/azure/financialChargePolicy.js.map +0 -1
- package/dist/azure/financialCurrentSpendSurfaceProjection.d.ts +0 -76
- package/dist/azure/financialCurrentSpendSurfaceProjection.d.ts.map +0 -1
- package/dist/azure/financialCurrentSpendSurfaceProjection.js +0 -6
- package/dist/azure/financialCurrentSpendSurfaceProjection.js.map +0 -1
- package/dist/azure/financialCurrentSpendSurfaceProjectionValidation.d.ts +0 -10
- package/dist/azure/financialCurrentSpendSurfaceProjectionValidation.d.ts.map +0 -1
- package/dist/azure/financialCurrentSpendSurfaceProjectionValidation.js +0 -196
- package/dist/azure/financialCurrentSpendSurfaceProjectionValidation.js.map +0 -1
- package/dist/azure/financialDataflowKernel.d.ts +0 -31
- package/dist/azure/financialDataflowKernel.d.ts.map +0 -1
- package/dist/azure/financialDataflowKernel.js +0 -170
- package/dist/azure/financialDataflowKernel.js.map +0 -1
- package/dist/azure/financialEvidenceCoverage.d.ts +0 -36
- package/dist/azure/financialEvidenceCoverage.d.ts.map +0 -1
- package/dist/azure/financialEvidenceCoverage.js +0 -111
- package/dist/azure/financialEvidenceCoverage.js.map +0 -1
- package/dist/azure/financialPolicyKernel.d.ts +0 -38
- package/dist/azure/financialPolicyKernel.d.ts.map +0 -1
- package/dist/azure/financialPolicyKernel.js +0 -232
- package/dist/azure/financialPolicyKernel.js.map +0 -1
- package/dist/azure/financialResourceSurfaceProjection.d.ts +0 -66
- package/dist/azure/financialResourceSurfaceProjection.d.ts.map +0 -1
- package/dist/azure/financialResourceSurfaceProjection.js +0 -6
- package/dist/azure/financialResourceSurfaceProjection.js.map +0 -1
- package/dist/azure/financialResourceSurfaceProjectionValidation.d.ts +0 -16
- package/dist/azure/financialResourceSurfaceProjectionValidation.d.ts.map +0 -1
- package/dist/azure/financialResourceSurfaceProjectionValidation.js +0 -252
- package/dist/azure/financialResourceSurfaceProjectionValidation.js.map +0 -1
- package/dist/azure/financialSavingsChargePolicyKernel.d.ts +0 -12
- package/dist/azure/financialSavingsChargePolicyKernel.d.ts.map +0 -1
- package/dist/azure/financialSavingsChargePolicyKernel.js +0 -34
- package/dist/azure/financialSavingsChargePolicyKernel.js.map +0 -1
- package/dist/azure/financialSavingsPercentageKernel.d.ts +0 -20
- package/dist/azure/financialSavingsPercentageKernel.d.ts.map +0 -1
- package/dist/azure/financialSavingsPercentageKernel.js +0 -49
- package/dist/azure/financialSavingsPercentageKernel.js.map +0 -1
- package/dist/azure/financialSavingsSurfaceProjectionKernel.d.ts +0 -26
- package/dist/azure/financialSavingsSurfaceProjectionKernel.d.ts.map +0 -1
- package/dist/azure/financialSavingsSurfaceProjectionKernel.js +0 -435
- package/dist/azure/financialSavingsSurfaceProjectionKernel.js.map +0 -1
- package/dist/azure/recommendationLifecycleOverlayValidation.d.ts +0 -5
- package/dist/azure/recommendationLifecycleOverlayValidation.d.ts.map +0 -1
- package/dist/azure/recommendationLifecycleOverlayValidation.js +0 -82
- package/dist/azure/recommendationLifecycleOverlayValidation.js.map +0 -1
- package/dist/azure/reportDailySpend.d.ts +0 -48
- package/dist/azure/reportDailySpend.d.ts.map +0 -1
- package/dist/azure/reportDailySpend.js +0 -6
- package/dist/azure/reportDailySpend.js.map +0 -1
- package/dist/azure/reportDailySpendValidation.d.ts +0 -3
- package/dist/azure/reportDailySpendValidation.d.ts.map +0 -1
- package/dist/azure/reportDailySpendValidation.js +0 -72
- package/dist/azure/reportDailySpendValidation.js.map +0 -1
- package/dist/azure/reportEvidence.d.ts +0 -615
- package/dist/azure/reportEvidence.d.ts.map +0 -1
- package/dist/azure/reportEvidence.js +0 -25
- package/dist/azure/reportEvidence.js.map +0 -1
- package/dist/azure/reportEvidenceCatalogueValidation.d.ts +0 -5
- package/dist/azure/reportEvidenceCatalogueValidation.d.ts.map +0 -1
- package/dist/azure/reportEvidenceCatalogueValidation.js +0 -109
- package/dist/azure/reportEvidenceCatalogueValidation.js.map +0 -1
- package/dist/azure/reportEvidenceValidation.d.ts +0 -7
- package/dist/azure/reportEvidenceValidation.d.ts.map +0 -1
- package/dist/azure/reportEvidenceValidation.js +0 -421
- package/dist/azure/reportEvidenceValidation.js.map +0 -1
- package/dist/azure/reportEvidenceValidationHelpers.d.ts +0 -27
- package/dist/azure/reportEvidenceValidationHelpers.d.ts.map +0 -1
- package/dist/azure/reportEvidenceValidationHelpers.js +0 -134
- package/dist/azure/reportEvidenceValidationHelpers.js.map +0 -1
- package/dist/azure/reportSavingsContributionValidation.d.ts +0 -5
- package/dist/azure/reportSavingsContributionValidation.d.ts.map +0 -1
- package/dist/azure/reportSavingsContributionValidation.js +0 -37
- package/dist/azure/reportSavingsContributionValidation.js.map +0 -1
- package/dist/azure/reportSpend.d.ts +0 -87
- package/dist/azure/reportSpend.d.ts.map +0 -1
- package/dist/azure/reportSpend.js +0 -5
- package/dist/azure/reportSpend.js.map +0 -1
- package/dist/azure/reportSpendValidation.d.ts +0 -7
- package/dist/azure/reportSpendValidation.d.ts.map +0 -1
- package/dist/azure/reportSpendValidation.js +0 -197
- package/dist/azure/reportSpendValidation.js.map +0 -1
- package/dist/azure/reportSpendValidationHelpers.d.ts +0 -7
- package/dist/azure/reportSpendValidationHelpers.d.ts.map +0 -1
- package/dist/azure/reportSpendValidationHelpers.js +0 -31
- package/dist/azure/reportSpendValidationHelpers.js.map +0 -1
- package/dist/azure/vmPatchManagement.d.ts +0 -109
- package/dist/azure/vmPatchManagement.d.ts.map +0 -1
- package/dist/azure/vmPatchManagement.js +0 -7
- package/dist/azure/vmPatchManagement.js.map +0 -1
- package/dist/environment/canonicalization.d.ts +0 -12
- package/dist/environment/canonicalization.d.ts.map +0 -1
- package/dist/environment/canonicalization.js +0 -40
- package/dist/environment/canonicalization.js.map +0 -1
- package/dist/environment/contracts.d.ts +0 -472
- package/dist/environment/contracts.d.ts.map +0 -1
- package/dist/environment/contracts.js +0 -73
- package/dist/environment/contracts.js.map +0 -1
- package/dist/environment/index.d.ts +0 -6
- package/dist/environment/index.d.ts.map +0 -1
- package/dist/environment/index.js +0 -22
- package/dist/environment/index.js.map +0 -1
- package/dist/environment/internal.d.ts +0 -21
- package/dist/environment/internal.d.ts.map +0 -1
- package/dist/environment/internal.js +0 -113
- package/dist/environment/internal.js.map +0 -1
- package/dist/environment/references.d.ts +0 -24
- package/dist/environment/references.d.ts.map +0 -1
- package/dist/environment/references.js +0 -243
- package/dist/environment/references.js.map +0 -1
- package/dist/environment/tenant.d.ts +0 -128
- package/dist/environment/tenant.d.ts.map +0 -1
- package/dist/environment/tenant.js +0 -203
- package/dist/environment/tenant.js.map +0 -1
- package/dist/environment/validation.d.ts +0 -34
- package/dist/environment/validation.d.ts.map +0 -1
- package/dist/environment/validation.js +0 -655
- package/dist/environment/validation.js.map +0 -1
- package/dist/esm/accounts/azureManualOnboarding.js +0 -8
- package/dist/esm/ai/conversationHistory.js +0 -6
- package/dist/esm/ai/grounding.js +0 -80
- package/dist/esm/ai/workspaceArtifacts.js +0 -158
- package/dist/esm/aws/organizationCommitments.js +0 -48
- package/dist/esm/aws/organizationCommitmentsApiValidation.js +0 -220
- package/dist/esm/aws/organizationCommitmentsValidation.js +0 -224
- package/dist/esm/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.js +0 -402
- package/dist/esm/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.js +0 -2
- package/dist/esm/azure/activityLogAnalysis.js +0 -64
- package/dist/esm/azure/activityLogAnalysisPublicValidation.js +0 -360
- package/dist/esm/azure/activityLogAnalysisPublicValidationHelpers.js +0 -172
- package/dist/esm/azure/activityLogAnalysisValidation.js +0 -365
- package/dist/esm/azure/financialAnalyticsDisplayKernel.js +0 -139
- package/dist/esm/azure/financialAuthorityProjectionKernel.js +0 -263
- package/dist/esm/azure/financialChargeComposition.js +0 -36
- package/dist/esm/azure/financialChargeCompositionKernel.js +0 -48
- package/dist/esm/azure/financialChargeCompositionValidation.js +0 -155
- package/dist/esm/azure/financialChargePolicy.js +0 -473
- package/dist/esm/azure/financialCurrentSpendSurfaceProjection.js +0 -2
- package/dist/esm/azure/financialCurrentSpendSurfaceProjectionValidation.js +0 -184
- package/dist/esm/azure/financialDataflowKernel.js +0 -164
- package/dist/esm/azure/financialEvidenceCoverage.js +0 -106
- package/dist/esm/azure/financialPolicyKernel.js +0 -225
- package/dist/esm/azure/financialResourceSurfaceProjection.js +0 -2
- package/dist/esm/azure/financialResourceSurfaceProjectionValidation.js +0 -243
- package/dist/esm/azure/financialSavingsChargePolicyKernel.js +0 -29
- package/dist/esm/azure/financialSavingsPercentageKernel.js +0 -44
- package/dist/esm/azure/financialSavingsSurfaceProjectionKernel.js +0 -427
- package/dist/esm/azure/recommendationLifecycleOverlayValidation.js +0 -75
- package/dist/esm/azure/reportDailySpend.js +0 -2
- package/dist/esm/azure/reportDailySpendValidation.js +0 -67
- package/dist/esm/azure/reportEvidence.js +0 -21
- package/dist/esm/azure/reportEvidenceCatalogueValidation.js +0 -103
- package/dist/esm/azure/reportEvidenceValidation.js +0 -413
- package/dist/esm/azure/reportEvidenceValidationHelpers.js +0 -106
- package/dist/esm/azure/reportSavingsContributionValidation.js +0 -30
- package/dist/esm/azure/reportSpend.js +0 -1
- package/dist/esm/azure/reportSpendValidation.js +0 -189
- package/dist/esm/azure/reportSpendValidationHelpers.js +0 -22
- package/dist/esm/azure/vmPatchManagement.js +0 -3
- package/dist/esm/entries/environment.js +0 -3
- package/dist/esm/environment/canonicalization.js +0 -34
- package/dist/esm/environment/contracts.js +0 -69
- package/dist/esm/environment/index.js +0 -5
- package/dist/esm/environment/internal.js +0 -97
- package/dist/esm/environment/references.js +0 -230
- package/dist/esm/environment/tenant.js +0 -190
- package/dist/esm/environment/validation.js +0 -635
- package/dist/esm/identity/microsoftSignInAdminConsent.js +0 -1
- package/dist/esm/scheduler/bastionSchedule.js +0 -1
- package/dist/esm/scheduler/bastionScheduleProfile.js +0 -206
- package/dist/esm/scheduler/bastionScheduleValidation.js +0 -401
- package/dist/identity/microsoftSignInAdminConsent.d.ts +0 -59
- package/dist/identity/microsoftSignInAdminConsent.d.ts.map +0 -1
- package/dist/identity/microsoftSignInAdminConsent.js +0 -3
- package/dist/identity/microsoftSignInAdminConsent.js.map +0 -1
- package/dist/scheduler/bastionSchedule.d.ts +0 -113
- package/dist/scheduler/bastionSchedule.d.ts.map +0 -1
- package/dist/scheduler/bastionSchedule.js +0 -3
- package/dist/scheduler/bastionSchedule.js.map +0 -1
- package/dist/scheduler/bastionScheduleProfile.d.ts +0 -24
- package/dist/scheduler/bastionScheduleProfile.d.ts.map +0 -1
- package/dist/scheduler/bastionScheduleProfile.js +0 -210
- package/dist/scheduler/bastionScheduleProfile.js.map +0 -1
- package/dist/scheduler/bastionScheduleValidation.d.ts +0 -10
- package/dist/scheduler/bastionScheduleValidation.d.ts.map +0 -1
- package/dist/scheduler/bastionScheduleValidation.js +0 -412
- package/dist/scheduler/bastionScheduleValidation.js.map +0 -1
|
@@ -1,164 +0,0 @@
|
|
|
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
|
-
};
|
|
@@ -1,106 +0,0 @@
|
|
|
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
|
-
};
|
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
import { formatExactDecimalValue, multiplyExactDecimalValues, parseCanonicalDecimal, subtractExactDecimalValues, } from '../common/exactDecimal.js';
|
|
2
|
-
import { createFinancialDataflowCoordinateIdV1 } from './financialDataflowValidation.js';
|
|
3
|
-
import { FINANCIAL_POLICY_EVALUATION_CONTRACT_VERSION_V1, } from './financialPolicy.js';
|
|
4
|
-
import { createFinancialPolicyEvaluationActionAuditIdV1, createFinancialPolicyEvaluationIdV1, createFinancialPolicyEvaluationReadProjectionIdV1, isFinancialPolicyEvaluationCompatibleV1, } from './financialPolicyValidation.js';
|
|
5
|
-
export const FINANCIAL_POLICY_ALGORITHM_VERSION_V1 = 'financial-policy/shared-v1';
|
|
6
|
-
const compare = (left, right) => {
|
|
7
|
-
const difference = subtractExactDecimalValues(parseCanonicalDecimal(left), parseCanonicalDecimal(right)).coefficient;
|
|
8
|
-
return difference < 0n ? -1 : difference > 0n ? 1 : 0;
|
|
9
|
-
};
|
|
10
|
-
const percentageMatched = (amount, denominator, threshold) => {
|
|
11
|
-
const parsedDenominator = parseCanonicalDecimal(denominator);
|
|
12
|
-
if (parsedDenominator.coefficient <= 0n)
|
|
13
|
-
return false;
|
|
14
|
-
const left = multiplyExactDecimalValues(parseCanonicalDecimal(amount), parseCanonicalDecimal('100'));
|
|
15
|
-
const right = multiplyExactDecimalValues(parsedDenominator, parseCanonicalDecimal(threshold));
|
|
16
|
-
return subtractExactDecimalValues(left, right).coefficient >= 0n;
|
|
17
|
-
};
|
|
18
|
-
/**
|
|
19
|
-
* Shared exact-decimal display classification for Budget surfaces. This is a
|
|
20
|
-
* read-model policy only; alert matching continues to use the thresholds in a
|
|
21
|
-
* versioned Financial Policy Definition.
|
|
22
|
-
*/
|
|
23
|
-
export const classifyFinancialBudgetPositionV1 = (request) => {
|
|
24
|
-
if (request.budgetAmount === undefined)
|
|
25
|
-
return { status: 'unbudgeted' };
|
|
26
|
-
if (request.amount === undefined)
|
|
27
|
-
return { status: 'unavailable' };
|
|
28
|
-
try {
|
|
29
|
-
const atRiskPercent = request.atRiskPercent ?? '95';
|
|
30
|
-
const amount = parseCanonicalDecimal(request.amount);
|
|
31
|
-
const budget = parseCanonicalDecimal(request.budgetAmount);
|
|
32
|
-
const risk = parseCanonicalDecimal(atRiskPercent);
|
|
33
|
-
if (budget.coefficient <= 0n || risk.coefficient < 0n || compare(atRiskPercent, '100') > 0) {
|
|
34
|
-
return { status: 'unbudgeted' };
|
|
35
|
-
}
|
|
36
|
-
const varianceAmount = formatExactDecimalValue(subtractExactDecimalValues(amount, budget));
|
|
37
|
-
const status = compare(request.amount, request.budgetAmount) > 0
|
|
38
|
-
? 'over-budget'
|
|
39
|
-
: percentageMatched(request.amount, request.budgetAmount, atRiskPercent)
|
|
40
|
-
? 'at-risk'
|
|
41
|
-
: 'on-track';
|
|
42
|
-
return {
|
|
43
|
-
status,
|
|
44
|
-
varianceAmount,
|
|
45
|
-
amount: request.amount,
|
|
46
|
-
budgetAmount: request.budgetAmount,
|
|
47
|
-
atRiskPercent,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
catch {
|
|
51
|
-
return { status: 'unavailable' };
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
const isExpectedCalendarMonthTargetPartial = (composition) => composition.coordinate.period.windowKind === 'calendar-month' &&
|
|
55
|
-
composition.amount.status === 'partial' &&
|
|
56
|
-
composition.amount.reasonCodes.length === 1 &&
|
|
57
|
-
composition.amount.reasonCodes[0] === 'coverage-incomplete';
|
|
58
|
-
/**
|
|
59
|
-
* Returns the exact current amount that Budget semantics may compare. An open
|
|
60
|
-
* calendar month is intentionally partial until the period closes; every
|
|
61
|
-
* other partial/unavailable state remains non-comparable.
|
|
62
|
-
*/
|
|
63
|
-
export const selectFinancialBudgetComparableCurrentAmountV1 = (composition) => composition.amount.status === 'available'
|
|
64
|
-
? composition.amount.amount
|
|
65
|
-
: isExpectedCalendarMonthTargetPartial(composition)
|
|
66
|
-
? composition.amount.knownAmount
|
|
67
|
-
: undefined;
|
|
68
|
-
const budgetThresholds = (amount, budget, thresholds) => [
|
|
69
|
-
...thresholds.amounts
|
|
70
|
-
.filter(threshold => compare(amount, threshold) >= 0)
|
|
71
|
-
.map(configuredValue => ({ thresholdKind: 'amount', configuredValue })),
|
|
72
|
-
...thresholds.percents
|
|
73
|
-
.filter(threshold => percentageMatched(amount, budget, threshold))
|
|
74
|
-
.map(configuredValue => ({ thresholdKind: 'percent', configuredValue })),
|
|
75
|
-
];
|
|
76
|
-
const anomalyThresholds = (definition, projection) => {
|
|
77
|
-
if (definition.criteria.kind !== 'cost-anomaly' || projection.status === 'unavailable' || projection.result.kind !== 'anomaly')
|
|
78
|
-
return [];
|
|
79
|
-
const configured = [
|
|
80
|
-
...(definition.criteria.minimumAmount === undefined
|
|
81
|
-
? []
|
|
82
|
-
: [{ thresholdKind: 'minimum-amount', configuredValue: definition.criteria.minimumAmount }]),
|
|
83
|
-
...(definition.criteria.minimumDelta === undefined
|
|
84
|
-
? []
|
|
85
|
-
: [{ thresholdKind: 'minimum-delta', configuredValue: definition.criteria.minimumDelta }]),
|
|
86
|
-
...(definition.criteria.minimumPercentChange === undefined
|
|
87
|
-
? []
|
|
88
|
-
: [{ thresholdKind: 'minimum-percent-change', configuredValue: definition.criteria.minimumPercentChange }]),
|
|
89
|
-
];
|
|
90
|
-
return projection.result.events.some(event => configured.every(threshold => {
|
|
91
|
-
if (threshold.thresholdKind === 'minimum-amount')
|
|
92
|
-
return compare(event.observed.amount, threshold.configuredValue) >= 0;
|
|
93
|
-
if (threshold.thresholdKind === 'minimum-delta')
|
|
94
|
-
return compare(event.delta.amount, threshold.configuredValue) >= 0;
|
|
95
|
-
return percentageMatched(event.delta.amount, event.expected.amount, threshold.configuredValue);
|
|
96
|
-
}))
|
|
97
|
-
? configured
|
|
98
|
-
: [];
|
|
99
|
-
};
|
|
100
|
-
const materialize = (identity, definition, currentSpend, analytics) => {
|
|
101
|
-
const evaluationId = createFinancialPolicyEvaluationIdV1(identity);
|
|
102
|
-
const evaluation = {
|
|
103
|
-
...identity,
|
|
104
|
-
evaluationId,
|
|
105
|
-
readProjectionId: createFinancialPolicyEvaluationReadProjectionIdV1(evaluationId),
|
|
106
|
-
actionAuditId: createFinancialPolicyEvaluationActionAuditIdV1(evaluationId),
|
|
107
|
-
};
|
|
108
|
-
if (!isFinancialPolicyEvaluationCompatibleV1(evaluation, definition, currentSpend, analytics)) {
|
|
109
|
-
throw new TypeError('Financial policy evaluation does not bind its definition and exact financial inputs.');
|
|
110
|
-
}
|
|
111
|
-
return evaluation;
|
|
112
|
-
};
|
|
113
|
-
export const evaluateFinancialPolicyV1 = (request) => {
|
|
114
|
-
if (request.definition.effectiveState !== 'enabled')
|
|
115
|
-
return [];
|
|
116
|
-
const common = {
|
|
117
|
-
schemaVersion: 1,
|
|
118
|
-
contractVersion: FINANCIAL_POLICY_EVALUATION_CONTRACT_VERSION_V1,
|
|
119
|
-
companyId: request.definition.companyId,
|
|
120
|
-
policyDefinitionRevisionId: request.definition.policyDefinitionRevisionId,
|
|
121
|
-
definitionId: request.definition.definitionId,
|
|
122
|
-
definitionRevision: request.definition.revision,
|
|
123
|
-
coordinateId: createFinancialDataflowCoordinateIdV1(request.currentSpend.coordinate),
|
|
124
|
-
currentSpendCompositionId: request.currentSpend.compositionId,
|
|
125
|
-
evaluatedAt: request.evaluatedAt,
|
|
126
|
-
policyAlgorithmVersion: FINANCIAL_POLICY_ALGORITHM_VERSION_V1,
|
|
127
|
-
};
|
|
128
|
-
if (request.definition.criteria.kind === 'budget') {
|
|
129
|
-
const evaluations = [];
|
|
130
|
-
const currentThresholds = request.definition.criteria.currentSpendThresholds;
|
|
131
|
-
if (currentThresholds) {
|
|
132
|
-
const expectedOpenCalendarMonth = isExpectedCalendarMonthTargetPartial(request.currentSpend);
|
|
133
|
-
const comparableCurrentAmount = selectFinancialBudgetComparableCurrentAmountV1(request.currentSpend);
|
|
134
|
-
const matched = comparableCurrentAmount === undefined
|
|
135
|
-
? []
|
|
136
|
-
: budgetThresholds(comparableCurrentAmount, request.definition.criteria.budget.amount, currentThresholds);
|
|
137
|
-
const unavailable = request.currentSpend.amount.status === 'unavailable';
|
|
138
|
-
const partial = request.currentSpend.amount.status === 'partial' && !expectedOpenCalendarMonth;
|
|
139
|
-
evaluations.push(materialize({
|
|
140
|
-
...common,
|
|
141
|
-
signalKind: 'budget-current-spend',
|
|
142
|
-
result: unavailable ? 'unavailable' : partial ? 'partial' : matched.length > 0 ? 'matched' : 'not-matched',
|
|
143
|
-
reasonCode: unavailable
|
|
144
|
-
? 'current-spend-unavailable'
|
|
145
|
-
: partial
|
|
146
|
-
? 'current-spend-partial'
|
|
147
|
-
: expectedOpenCalendarMonth && matched.length > 0
|
|
148
|
-
? 'current-spend-threshold-matched-open-period'
|
|
149
|
-
: expectedOpenCalendarMonth
|
|
150
|
-
? 'current-spend-threshold-not-matched-open-period'
|
|
151
|
-
: matched.length > 0
|
|
152
|
-
? 'current-spend-threshold-matched'
|
|
153
|
-
: 'current-spend-threshold-not-matched',
|
|
154
|
-
matchedThresholds: matched,
|
|
155
|
-
}, request.definition, request.currentSpend));
|
|
156
|
-
}
|
|
157
|
-
const forecastThresholds = request.definition.criteria.forecastThresholds;
|
|
158
|
-
if (forecastThresholds) {
|
|
159
|
-
const projection = request.analytics?.forecast;
|
|
160
|
-
if (!projection) {
|
|
161
|
-
evaluations.push(materialize({
|
|
162
|
-
...common,
|
|
163
|
-
signalKind: 'budget-forecast',
|
|
164
|
-
result: 'unavailable',
|
|
165
|
-
reasonCode: 'analytics-projection-unavailable',
|
|
166
|
-
matchedThresholds: [],
|
|
167
|
-
}, request.definition, request.currentSpend));
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
const unavailable = projection.status === 'unavailable' || request.currentSpend.amount.status === 'unavailable';
|
|
171
|
-
const partial = projection.status === 'partial' ||
|
|
172
|
-
(request.currentSpend.amount.status === 'partial' && !isExpectedCalendarMonthTargetPartial(request.currentSpend));
|
|
173
|
-
const matched = !unavailable && !partial && projection.result.kind === 'forecast'
|
|
174
|
-
? budgetThresholds(projection.result.projectedTotal.amount, request.definition.criteria.budget.amount, forecastThresholds)
|
|
175
|
-
: [];
|
|
176
|
-
evaluations.push(materialize({
|
|
177
|
-
...common,
|
|
178
|
-
analyticsProjectionId: projection.analyticsProjectionId,
|
|
179
|
-
signalKind: 'budget-forecast',
|
|
180
|
-
result: unavailable ? 'unavailable' : partial ? 'partial' : matched.length > 0 ? 'matched' : 'not-matched',
|
|
181
|
-
reasonCode: unavailable
|
|
182
|
-
? 'forecast-unavailable'
|
|
183
|
-
: partial
|
|
184
|
-
? 'forecast-partial'
|
|
185
|
-
: matched.length > 0
|
|
186
|
-
? 'forecast-threshold-matched'
|
|
187
|
-
: 'forecast-threshold-not-matched',
|
|
188
|
-
matchedThresholds: matched,
|
|
189
|
-
}, request.definition, request.currentSpend, projection));
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
return evaluations;
|
|
193
|
-
}
|
|
194
|
-
const projection = request.analytics?.anomaly;
|
|
195
|
-
if (!projection) {
|
|
196
|
-
return [
|
|
197
|
-
materialize({
|
|
198
|
-
...common,
|
|
199
|
-
signalKind: 'cost-anomaly',
|
|
200
|
-
result: 'unavailable',
|
|
201
|
-
reasonCode: 'analytics-projection-unavailable',
|
|
202
|
-
matchedThresholds: [],
|
|
203
|
-
}, request.definition, request.currentSpend),
|
|
204
|
-
];
|
|
205
|
-
}
|
|
206
|
-
const unavailable = projection.status === 'unavailable' || request.currentSpend.amount.status === 'unavailable';
|
|
207
|
-
const partial = projection.status === 'partial' || request.currentSpend.amount.status === 'partial';
|
|
208
|
-
const matched = unavailable || partial ? [] : anomalyThresholds(request.definition, projection);
|
|
209
|
-
return [
|
|
210
|
-
materialize({
|
|
211
|
-
...common,
|
|
212
|
-
analyticsProjectionId: projection.analyticsProjectionId,
|
|
213
|
-
signalKind: 'cost-anomaly',
|
|
214
|
-
result: unavailable ? 'unavailable' : partial ? 'partial' : matched.length > 0 ? 'matched' : 'not-matched',
|
|
215
|
-
reasonCode: unavailable
|
|
216
|
-
? 'anomaly-unavailable'
|
|
217
|
-
: partial
|
|
218
|
-
? 'anomaly-partial'
|
|
219
|
-
: matched.length > 0
|
|
220
|
-
? 'anomaly-threshold-matched'
|
|
221
|
-
: 'anomaly-threshold-not-matched',
|
|
222
|
-
matchedThresholds: matched,
|
|
223
|
-
}, request.definition, request.currentSpend, projection),
|
|
224
|
-
];
|
|
225
|
-
};
|