coverageLevel($requestedLevel); $actual = $this->coverageLevel($actualLevel); $source = $this->sourceClass($sourceClass); $restore = $this->restoreTier($restoreTier); if (($scopeKey === null || $unscoped) && $percentage === 100) { return ClaimState::ClaimBlocked; } 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); } }