coverageLevel($requestedLevel); $actual = $this->coverageLevel($actualLevel); $source = $this->sourceClass($sourceClass); $restore = $this->restoreTier($restoreTier); $identity = $this->identityState($identityState); if (($scopeKey === null || $unscoped) && $percentage === 100) { return ClaimState::ClaimBlocked; } if (in_array($identity, [ IdentityState::IdentityConflict, IdentityState::MissingExternalId, IdentityState::UnsupportedIdentity, ], true)) { return ClaimState::ClaimBlocked; } if ($identity === IdentityState::Derived && ! $allowsDerivedIdentityClaims) { return $customerFacing ? ClaimState::ClaimBlocked : ClaimState::ClaimLimited; } if ($source?->isBetaExperimental() === true) { if (! $allowsBetaClaims) { return ClaimState::ClaimBlocked; } if ($requested === CoverageLevel::Certified && ! $allowsCertifiedClaims) { return ClaimState::ClaimBlocked; } } if (($restoreClaim || $requested->meets(CoverageLevel::Restorable)) && $restore !== RestoreTier::Restorable) { return ClaimState::ClaimBlocked; } if ($customerFacing && (! $scopeComplete || ! $customerClaimsAllowed)) { return ClaimState::ClaimBlocked; } if ($scopeKey === null || ! $actual->meets($requested)) { return ClaimState::ClaimLimited; } return ClaimState::ClaimAllowed; } private function coverageLevel(CoverageLevel|string $level): CoverageLevel { return $level instanceof CoverageLevel ? $level : CoverageLevel::from($level); } private function sourceClass(SourceClass|string|null $sourceClass): ?SourceClass { if ($sourceClass === null || $sourceClass instanceof SourceClass) { return $sourceClass; } return SourceClass::from($sourceClass); } private function restoreTier(RestoreTier|string|null $restoreTier): ?RestoreTier { if ($restoreTier === null || $restoreTier instanceof RestoreTier) { return $restoreTier; } return RestoreTier::from($restoreTier); } private function identityState(IdentityState|string|null $identityState): ?IdentityState { if ($identityState === null || $identityState instanceof IdentityState) { return $identityState; } return IdentityState::from($identityState); } }