Classes

Bubble size = executable lines. Hover for details, click to navigate.

0% 20% 40% 60% 80% 100% 0 50 100 150 Line Coverage (%) Cyclomatic Complexity App\Domain\SuperAdmin\Service\SuperAdminService — Coverage: 77.6% | Lines: 402 | Complexity: 110 App\Domain\SuperAdmin\Repository\SuperAdminRepository — Coverage: 84.3% | Lines: 375 | Complexity: 75 App\Domain\Auth\Repository\AuthRepository — Coverage: 81.9% | Lines: 248 | Complexity: 66 App\Domain\Loan\Repository\LoanRepository — Coverage: 84.5% | Lines: 239 | Complexity: 65 App\Domain\Auth\Service\RegistrationService — Coverage: 91.9% | Lines: 222 | Complexity: 64 App\Domain\Audit\AuditService — Coverage: 88.3% | Lines: 206 | Complexity: 42 App\Domain\Document\Submission\Service\InvestorDocumentService — Coverage: 76.8% | Lines: 203 | Complexity: 72 App\Domain\Loan\Service\LoanService — Coverage: 92.6% | Lines: 175 | Complexity: 52 App\Domain\Investor\Repository\InvestorRepository — Coverage: 91.4% | Lines: 140 | Complexity: 36 App\Domain\ErrorLog\Repository\ErrorLogRepository — Coverage: 80.9% | Lines: 131 | Complexity: 49 App\Domain\Auth\Service\AuthService — Coverage: 97.7% | Lines: 130 | Complexity: 44 App\Domain\Document\Submission\Repository\InvestorDocumentRepository — Coverage: 89.7% | Lines: 126 | Complexity: 38 App\Domain\Account\Repository\AccountRepository — Coverage: 95.2% | Lines: 125 | Complexity: 31 App\Console\SeedE2eUsersCommand — Coverage: 0.0% | Lines: 121 | Complexity: 30 App\Domain\Admin\Repository\AdminRepository — Coverage: 62.1% | Lines: 116 | Complexity: 35 App\Domain\Document\Service\PandaDocService — Coverage: 0.0% | Lines: 113 | Complexity: 31 App\Domain\Funding\Service\FundingRequestService — Coverage: 65.5% | Lines: 110 | Complexity: 36 App\Domain\Account\Service\AccountService — Coverage: 92.6% | Lines: 108 | Complexity: 45 App\Domain\Stripe\Service\StripeService — Coverage: 0.0% | Lines: 105 | Complexity: 25 App\Action\Auth\RegisterAction — Coverage: 92.2% | Lines: 102 | Complexity: 20 App\Domain\Transaction\Repository\TransactionRepository — Coverage: 90.6% | Lines: 96 | Complexity: 26 App\Middleware\ErrorLoggingMiddleware — Coverage: 77.4% | Lines: 93 | Complexity: 41 App\Domain\Auth\Service\EmailChangeService — Coverage: 84.3% | Lines: 89 | Complexity: 25 App\Domain\Contact\Service\ContactService — Coverage: 72.1% | Lines: 86 | Complexity: 19 App\Domain\Document\Provided\Service\ProvidedDocumentService — Coverage: 75.6% | Lines: 86 | Complexity: 43 App\Domain\Investor\Service\InvestorService — Coverage: 93.7% | Lines: 79 | Complexity: 49 App\Domain\ErrorLog\Service\ErrorLogService — Coverage: 96.1% | Lines: 76 | Complexity: 27 App\Domain\Loan\Data\LoanData — Coverage: 50.7% | Lines: 75 | Complexity: 3 App\Action\Document\CreateRegistrationDocumentsAction — Coverage: 0.0% | Lines: 70 | Complexity: 16 App\Domain\Funding\Repository\FundingRequestRepository — Coverage: 73.4% | Lines: 64 | Complexity: 17 App\Domain\Storage\Service\LocalFileStorage — Coverage: 79.4% | Lines: 63 | Complexity: 34 App\Support\Row — Coverage: 60.3% | Lines: 63 | Complexity: 44 App\Domain\Disbursement\Repository\DisbursementRepository — Coverage: 89.8% | Lines: 59 | Complexity: 16 App\Action\Consent\UpdateMyConsentsAction — Coverage: 89.3% | Lines: 56 | Complexity: 16 App\Action\Admin\ImpersonateUserAction — Coverage: 98.2% | Lines: 55 | Complexity: 10 App\Domain\Consent\Service\ConsentService — Coverage: 100.0% | Lines: 55 | Complexity: 14 App\Domain\Disbursement\Service\DisbursementService — Coverage: 86.5% | Lines: 52 | Complexity: 23 App\Domain\Stripe\Service\InvestorStripeService — Coverage: 94.2% | Lines: 52 | Complexity: 19 App\Domain\Transaction\Service\TransactionService — Coverage: 82.4% | Lines: 51 | Complexity: 20 App\Middleware\JwtAuthMiddleware — Coverage: 90.2% | Lines: 51 | Complexity: 12 App\Domain\Document\Provided\Repository\ProvidedDocumentRepository — Coverage: 89.8% | Lines: 49 | Complexity: 16 App\Domain\SystemSettings\Service\SystemSettingsService — Coverage: 4.1% | Lines: 49 | Complexity: 19 App\Domain\Auth\Service\AdminPasswordService — Coverage: 100.0% | Lines: 48 | Complexity: 7 App\Domain\ErrorLog\Data\ErrorLogData — Coverage: 47.9% | Lines: 48 | Complexity: 2 App\Domain\Admin\Service\AdminService — Coverage: 38.6% | Lines: 44 | Complexity: 17 App\Domain\Contact\Service\CloudflareTurnstileVerifier — Coverage: 0.0% | Lines: 42 | Complexity: 14 App\Domain\Auth\Service\JwtService — Coverage: 100.0% | Lines: 40 | Complexity: 10 App\Console\InspectPandaDocTemplateCommand — Coverage: 0.0% | Lines: 39 | Complexity: 13 App\Domain\SystemSettings\Repository\SystemSettingsRepository — Coverage: 64.1% | Lines: 39 | Complexity: 13 App\Domain\Document\Data\PandaDocDocumentData — Coverage: 57.9% | Lines: 38 | Complexity: 6 App\Console\SendTestEmailCommand — Coverage: 0.0% | Lines: 37 | Complexity: 5 App\Domain\Notification\Service\SmtpEmailService — Coverage: 2.7% | Lines: 37 | Complexity: 7 App\Action\Auth\LoginAction — Coverage: 100.0% | Lines: 36 | Complexity: 5 App\Domain\Document\Repository\InvestorAgreementRepository — Coverage: 91.7% | Lines: 36 | Complexity: 11 App\Domain\Document\Type\Data\DocumentTypeData — Coverage: 94.4% | Lines: 36 | Complexity: 10 App\Domain\Transaction\Service\TransactionFinder — Coverage: 100.0% | Lines: 36 | Complexity: 16 App\Domain\Document\Submission\Data\AdminInvestorDocumentData — Coverage: 100.0% | Lines: 35 | Complexity: 3 App\Action\Account\CreateAccountAction — Coverage: 100.0% | Lines: 34 | Complexity: 2 App\Domain\Funding\Data\FundingRequestData — Coverage: 41.2% | Lines: 34 | Complexity: 4 App\Domain\Notification\Repository\SentEmailRepository — Coverage: 91.2% | Lines: 34 | Complexity: 12 App\Action\Document\DownloadDocumentAction — Coverage: 90.9% | Lines: 33 | Complexity: 11 App\Action\Notification\UpdateMyNotificationPreferencesAction — Coverage: 84.8% | Lines: 33 | Complexity: 14 App\Console\PostMonthlyInterestCommand — Coverage: 0.0% | Lines: 32 | Complexity: 4 App\Domain\Document\Service\PandaDocFieldMapper — Coverage: 100.0% | Lines: 32 | Complexity: 7 App\Domain\Document\Submission\Data\InvestorDocumentData — Coverage: 100.0% | Lines: 31 | Complexity: 3 App\Domain\Notification\Service\CronEmailNotifier — Coverage: 100.0% | Lines: 31 | Complexity: 6 App\Middleware\ExceptionMiddleware — Coverage: 96.8% | Lines: 31 | Complexity: 13 App\Domain\Notification\Service\NotificationDispatcher — Coverage: 100.0% | Lines: 30 | Complexity: 9 App\Domain\Notification\Service\NotificationPreferenceService — Coverage: 100.0% | Lines: 30 | Complexity: 10 App\Domain\Stripe\Repository\StripeWebhookRepository — Coverage: 40.0% | Lines: 30 | Complexity: 7 App\Domain\Consent\Data\ConsentCopy — Coverage: 96.6% | Lines: 29 | Complexity: 3 App\Domain\Disbursement\Data\DisbursementData — Coverage: 100.0% | Lines: 29 | Complexity: 3 App\Action\Admin\CreateAdminTransactionAction — Coverage: 0.0% | Lines: 28 | Complexity: 8 App\Action\Account\GetAccountSummaryAction — Coverage: 100.0% | Lines: 27 | Complexity: 2 App\Action\Disbursement\GetDisbursementHistoryAction — Coverage: 81.5% | Lines: 27 | Complexity: 11 App\Domain\Notification\Repository\NotificationPreferenceRepository — Coverage: 100.0% | Lines: 27 | Complexity: 6 App\Action\Admin\SetInvestorPasswordAction — Coverage: 96.2% | Lines: 26 | Complexity: 10 App\Action\Auth\ResetPasswordAction — Coverage: 0.0% | Lines: 26 | Complexity: 9 App\Action\Investor\GetInvestorAction — Coverage: 96.2% | Lines: 26 | Complexity: 3 App\Action\Investor\GetInvestorByUserIdAction — Coverage: 100.0% | Lines: 26 | Complexity: 3 App\Action\Investor\UpdateInvestorAction — Coverage: 100.0% | Lines: 26 | Complexity: 2 App\Domain\Document\Submission\Data\InvestorDocumentEventData — Coverage: 100.0% | Lines: 26 | Complexity: 3 App\Action\Account\GetAccountTransactionsAction — Coverage: 100.0% | Lines: 25 | Complexity: 5 App\Action\Disbursement\MarkDisbursedAction — Coverage: 100.0% | Lines: 25 | Complexity: 7 App\Action\Document\Submission\UploadDocumentAction — Coverage: 96.0% | Lines: 25 | Complexity: 5 App\Action\Investor\CreateInvestorAction — Coverage: 100.0% | Lines: 25 | Complexity: 2 App\Console\AccrueInterestCommand — Coverage: 0.0% | Lines: 25 | Complexity: 5 App\Console\SnapshotAccountBalancesCommand — Coverage: 0.0% | Lines: 25 | Complexity: 5 App\Domain\Consent\Repository\ConsentRepository — Coverage: 100.0% | Lines: 25 | Complexity: 7 App\Domain\Document\Data\PandaDocTemplateDetailsData — Coverage: 0.0% | Lines: 25 | Complexity: 10 App\Domain\Document\Provided\Data\ProvidedDocumentData — Coverage: 100.0% | Lines: 25 | Complexity: 3 App\Domain\Contact\Repository\ContactRepository — Coverage: 91.7% | Lines: 24 | Complexity: 5 App\Action\Account\GetAccountByInvestorAction — Coverage: 100.0% | Lines: 23 | Complexity: 2 App\Action\Admin\SendInvestorPasswordResetAction — Coverage: 91.3% | Lines: 23 | Complexity: 9 App\Action\Auth\RefreshTokenAction — Coverage: 100.0% | Lines: 23 | Complexity: 4 App\Action\SuperAdmin\ResolveErrorLogAction — Coverage: 0.0% | Lines: 23 | Complexity: 7 App\Domain\Document\Data\DocumentTemplateData — Coverage: 0.0% | Lines: 23 | Complexity: 3 App\Domain\Document\Service\InvestorAgreementService — Coverage: 100.0% | Lines: 23 | Complexity: 7 App\Domain\SystemSettings\Data\SystemSettingData — Coverage: 82.6% | Lines: 23 | Complexity: 6 App\Domain\Transaction\Data\TransactionData — Coverage: 100.0% | Lines: 23 | Complexity: 3 App\Action\Contact\SubmitPublicContactAction — Coverage: 95.5% | Lines: 22 | Complexity: 6 App\Action\Document\Admin\DownloadInvestorAgreementAction — Coverage: 95.5% | Lines: 22 | Complexity: 6 App\Action\Document\Provided\Admin\UploadProvidedDocumentAction — Coverage: 100.0% | Lines: 22 | Complexity: 3 App\Action\SuperAdmin\ListErrorLogsAction — Coverage: 100.0% | Lines: 22 | Complexity: 2 App\Domain\Account\Data\AccountSummaryData — Coverage: 95.5% | Lines: 22 | Complexity: 2 App\Action\Account\UpdateAccountStatusAction — Coverage: 100.0% | Lines: 21 | Complexity: 7 App\Action\Admin\GetAdminTransactionsAction — Coverage: 0.0% | Lines: 21 | Complexity: 6 App\Action\Auth\ChangePasswordAction — Coverage: 100.0% | Lines: 21 | Complexity: 7 App\Action\Loan\ApproveLoanAction — Coverage: 0.0% | Lines: 21 | Complexity: 4 App\Action\Loan\DenyLoanAction — Coverage: 0.0% | Lines: 21 | Complexity: 5 App\Action\SuperAdmin\UpdateSystemSettingAction — Coverage: 0.0% | Lines: 21 | Complexity: 7 App\Domain\Auth\Service\PasswordResetService — Coverage: 100.0% | Lines: 21 | Complexity: 3 App\Domain\Contact\Data\ContactMessageData — Coverage: 100.0% | Lines: 21 | Complexity: 3 App\Middleware\RoleMiddleware — Coverage: 100.0% | Lines: 21 | Complexity: 5 App\Action\SuperAdmin\CreateTestUserAction — Coverage: 95.0% | Lines: 20 | Complexity: 4 App\Action\SuperAdmin\DeleteErrorLogsAction — Coverage: 0.0% | Lines: 20 | Complexity: 6 App\Domain\Admin\Data\AdminStatsData — Coverage: 100.0% | Lines: 20 | Complexity: 2 App\Domain\Document\Type\Repository\DocumentTypeRepository — Coverage: 90.0% | Lines: 20 | Complexity: 8 App\Domain\ErrorLog\Data\ErrorLogFilterData — Coverage: 100.0% | Lines: 20 | Complexity: 10 App\Domain\Investor\Data\InvestorData — Coverage: 100.0% | Lines: 20 | Complexity: 2 App\Domain\Notification\Data\SentEmailData — Coverage: 55.0% | Lines: 20 | Complexity: 3 App\Middleware\ResourceOwnershipMiddleware — Coverage: 100.0% | Lines: 20 | Complexity: 8 App\Action\Document\Submission\DownloadMyUploadAction — Coverage: 94.7% | Lines: 19 | Complexity: 5 App\Action\Investor\UpdateInvestorStatusAction — Coverage: 89.5% | Lines: 19 | Complexity: 4 App\Action\Investor\UpdateKycStatusAction — Coverage: 89.5% | Lines: 19 | Complexity: 4 App\Action\Loan\GetPendingLoansAction — Coverage: 0.0% | Lines: 19 | Complexity: 4 App\Domain\Loan\Data\LoanEligibilityData — Coverage: 100.0% | Lines: 19 | Complexity: 3 App\Domain\Notification\Service\CurlHealthcheckClient — Coverage: 0.0% | Lines: 19 | Complexity: 7 App\Factory\DatabaseFactory — Coverage: 94.7% | Lines: 19 | Complexity: 2 App\Action\Admin\UpdateConfigurationAction — Coverage: 100.0% | Lines: 18 | Complexity: 6 App\Action\Investor\ListPaymentMethodsAction — Coverage: 100.0% | Lines: 18 | Complexity: 2 App\Action\SuperAdmin\GenerateBulkDataAction — Coverage: 94.4% | Lines: 18 | Complexity: 4 App\Domain\Document\Data\PandaDocTemplateFieldData — Coverage: 0.0% | Lines: 18 | Complexity: 4 App\Domain\SuperAdmin\Data\CronJobStatusData — Coverage: 100.0% | Lines: 18 | Complexity: 2 App\Action\Admin\GetLendingActivityAction — Coverage: 0.0% | Lines: 17 | Complexity: 2 App\Action\Funding\SubmitFundingRequestAction — Coverage: 0.0% | Lines: 17 | Complexity: 4 App\Action\Funding\UpdateFundingRequestStatusAction — Coverage: 0.0% | Lines: 17 | Complexity: 5 App\Action\Loan\MakeAdditionalPaymentAction — Coverage: 0.0% | Lines: 17 | Complexity: 3 App\Action\Loan\RequestLoanAction — Coverage: 0.0% | Lines: 17 | Complexity: 4 App\Action\SuperAdmin\GenerateTransactionsAction — Coverage: 94.1% | Lines: 17 | Complexity: 6 App\Domain\Auth\Service\PasswordService — Coverage: 94.1% | Lines: 17 | Complexity: 10 App\Support\AppUrlResolver — Coverage: 94.1% | Lines: 17 | Complexity: 10 App\Action\Admin\GetConfigurationAction — Coverage: 100.0% | Lines: 16 | Complexity: 4 App\Action\Auth\GetCurrentUserAction — Coverage: 93.8% | Lines: 16 | Complexity: 3 App\Action\Document\Submission\Admin\DownloadUploadAction — Coverage: 100.0% | Lines: 16 | Complexity: 4 App\Action\SuperAdmin\DeleteUserAction — Coverage: 0.0% | Lines: 16 | Complexity: 6 App\Domain\Account\Data\AccountData — Coverage: 100.0% | Lines: 16 | Complexity: 2 App\Domain\Notification\Service\HealthcheckPinger — Coverage: 100.0% | Lines: 16 | Complexity: 7 App\Domain\Document\Data\PandaDocRecipientData — Coverage: 53.3% | Lines: 15 | Complexity: 3 App\Action\Auth\LogoutAction — Coverage: 100.0% | Lines: 14 | Complexity: 4 App\Action\Loan\CheckEligibilityAction — Coverage: 100.0% | Lines: 14 | Complexity: 2 App\Action\Notification\GetMyEmailsAction — Coverage: 0.0% | Lines: 14 | Complexity: 3 App\Action\Admin\GetAdminInvestorsAction — Coverage: 100.0% | Lines: 13 | Complexity: 2 App\Action\Auth\RequestEmailChangeAction — Coverage: 100.0% | Lines: 13 | Complexity: 2 App\Action\Contact\SubmitContactAction — Coverage: 100.0% | Lines: 13 | Complexity: 2 App\Action\Document\Submission\Admin\RejectUploadAction — Coverage: 100.0% | Lines: 13 | Complexity: 3 App\Action\Loan\DeclineLoanAction — Coverage: 0.0% | Lines: 13 | Complexity: 4 App\Action\Loan\MakePaymentAction — Coverage: 0.0% | Lines: 13 | Complexity: 2 App\Action\SuperAdmin\GetAccountsForSuperAdminAction — Coverage: 92.3% | Lines: 13 | Complexity: 4 App\Action\SuperAdmin\UpdateUserRoleAction — Coverage: 92.3% | Lines: 13 | Complexity: 4 App\Domain\Auth\Data\UserAuthData — Coverage: 100.0% | Lines: 13 | Complexity: 2 App\Action\Auth\ForgotPasswordAction — Coverage: 100.0% | Lines: 12 | Complexity: 5 App\Action\Disbursement\ListPendingDisbursementsAction — Coverage: 100.0% | Lines: 12 | Complexity: 4 App\Action\Document\Submission\DiscardUploadAction — Coverage: 91.7% | Lines: 12 | Complexity: 3 App\Action\Funding\ListPendingFundingRequestsAction — Coverage: 0.0% | Lines: 12 | Complexity: 4 App\Action\Loan\GetLoanAction — Coverage: 0.0% | Lines: 12 | Complexity: 5 App\Console\ListPandaDocTemplatesCommand — Coverage: 0.0% | Lines: 12 | Complexity: 5 App\Domain\Consent\Data\ConsentRecord — Coverage: 91.7% | Lines: 12 | Complexity: 3 App\Action\Document\Provided\ListMyProvidedDocumentsAction — Coverage: 90.9% | Lines: 11 | Complexity: 3 App\Action\Document\Submission\Admin\AcceptUploadAction — Coverage: 100.0% | Lines: 11 | Complexity: 2 App\Action\Document\Submission\ListMyUploadsAction — Coverage: 90.9% | Lines: 11 | Complexity: 3 App\Action\Stripe\WebhookAction — Coverage: 100.0% | Lines: 11 | Complexity: 2 App\Action\SuperAdmin\AccrueInterestAction — Coverage: 0.0% | Lines: 11 | Complexity: 2 App\Action\SuperAdmin\DeleteTestDataAction — Coverage: 90.9% | Lines: 11 | Complexity: 4 App\Domain\Document\Repository\DocumentTemplateRepository — Coverage: 0.0% | Lines: 11 | Complexity: 4 App\Domain\Document\Service\IdentityVerificationService — Coverage: 90.9% | Lines: 11 | Complexity: 3 App\Action\Account\GetAccountBalanceHistoryAction — Coverage: 100.0% | Lines: 10 | Complexity: 3 App\Action\Admin\GetAdminInvestorDetailAction — Coverage: 100.0% | Lines: 10 | Complexity: 3 App\Action\Document\Submission\Admin\GetUploadAction — Coverage: 100.0% | Lines: 10 | Complexity: 2 App\Action\SuperAdmin\GetSystemSettingsAction — Coverage: 100.0% | Lines: 10 | Complexity: 2 App\Action\SuperAdmin\PostInterestAction — Coverage: 0.0% | Lines: 10 | Complexity: 2 App\Action\SuperAdmin\ProjectInterestAction — Coverage: 0.0% | Lines: 10 | Complexity: 3 App\Domain\Document\Data\PandaDocSigningSessionData — Coverage: 50.0% | Lines: 10 | Complexity: 4 App\Support\ProvidedDocumentDownload — Coverage: 100.0% | Lines: 10 | Complexity: 3 App\Action\Admin\GetAdminInvestorLoansAction — Coverage: 0.0% | Lines: 9 | Complexity: 3 App\Action\Admin\GetCronJobStatusesAction — Coverage: 100.0% | Lines: 9 | Complexity: 4 App\Action\Document\GetDocumentsAction — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Action\Document\Provided\Admin\ListInvestorProvidedDocumentsAction — Coverage: 100.0% | Lines: 9 | Complexity: 2 App\Action\Document\ResendDocumentAction — Coverage: 100.0% | Lines: 9 | Complexity: 2 App\Action\Document\Submission\Admin\ListInvestorUploadsAction — Coverage: 100.0% | Lines: 9 | Complexity: 2 App\Action\Loan\AcceptLoanAction — Coverage: 0.0% | Lines: 9 | Complexity: 2 App\Action\Notification\GetMyNotificationPreferencesAction — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Action\SuperAdmin\GetErrorLogAction — Coverage: 0.0% | Lines: 9 | Complexity: 3 App\Action\SuperAdmin\ListUsersAction — Coverage: 88.9% | Lines: 9 | Complexity: 4 App\Domain\Document\Data\PandaDocDocumentRefData — Coverage: 0.0% | Lines: 9 | Complexity: 3 App\Domain\Document\Data\PandaDocTemplateTokenData — Coverage: 0.0% | Lines: 9 | Complexity: 3 App\Domain\Notification\Service\RecordingEmailService — Coverage: 100.0% | Lines: 9 | Complexity: 3 App\Renderer\JsonRenderer — Coverage: 100.0% | Lines: 9 | Complexity: 1 App\Action\Account\GetAccountAction — Coverage: 100.0% | Lines: 8 | Complexity: 2 App\Action\Admin\CreateInvestorAccountAction — Coverage: 0.0% | Lines: 8 | Complexity: 2 App\Action\Auth\ConfirmEmailChangeAction — Coverage: 100.0% | Lines: 8 | Complexity: 2 App\Action\Consent\GetMyConsentsAction — Coverage: 87.5% | Lines: 8 | Complexity: 3 App\Action\Document\CreateSigningSessionAction — Coverage: 100.0% | Lines: 8 | Complexity: 2 App\Action\Document\Provided\DownloadMyProvidedDocumentAction — Coverage: 87.5% | Lines: 8 | Complexity: 3 App\Action\Document\Submission\Admin\ListPendingUploadsAction — Coverage: 100.0% | Lines: 8 | Complexity: 2 App\Action\Document\Type\ListDocumentTypesAction — Coverage: 100.0% | Lines: 8 | Complexity: 2 App\Action\Investor\DetachPaymentMethodAction — Coverage: 100.0% | Lines: 8 | Complexity: 2 App\Action\Investor\SetDefaultPaymentMethodAction — Coverage: 100.0% | Lines: 8 | Complexity: 2 App\Domain\Notification\Data\NotificationPreference — Coverage: 87.5% | Lines: 8 | Complexity: 2 App\Domain\Notification\Data\NotificationType — Coverage: 75.0% | Lines: 8 | Complexity: 4 App\Action\Admin\GetAdminStatsAction — Coverage: 100.0% | Lines: 7 | Complexity: 2 App\Action\Document\Admin\GetInvestorAgreementsAction — Coverage: 100.0% | Lines: 7 | Complexity: 2 App\Action\Document\GetDocumentAction — Coverage: 100.0% | Lines: 7 | Complexity: 2 App\Action\Document\Provided\Admin\DeleteProvidedDocumentAction — Coverage: 100.0% | Lines: 7 | Complexity: 2 App\Action\Home\VersionAction — Coverage: 0.0% | Lines: 7 | Complexity: 3 App\Action\Investor\CreateSetupIntentAction — Coverage: 100.0% | Lines: 7 | Complexity: 2 App\Action\Loan\GetMyLoansAction — Coverage: 0.0% | Lines: 7 | Complexity: 2 App\Domain\Auth\Data\TokenData — Coverage: 14.3% | Lines: 7 | Complexity: 2 App\Domain\Consent\Data\ConsentType — Coverage: 100.0% | Lines: 7 | Complexity: 8 App\Action\Admin\GetAumHistoryAction — Coverage: 0.0% | Lines: 6 | Complexity: 2 App\Action\Loan\GetActiveLoansAction — Coverage: 0.0% | Lines: 6 | Complexity: 2 App\Action\Loan\GetApprovedLoansAction — Coverage: 0.0% | Lines: 6 | Complexity: 2 App\Domain\Account\Data\BalanceHistoryPointData — Coverage: 100.0% | Lines: 6 | Complexity: 2 App\Domain\Configuration\ConfigKeyPolicy — Coverage: 83.3% | Lines: 6 | Complexity: 5 App\Domain\Exception\ValidationException — Coverage: 66.7% | Lines: 6 | Complexity: 5 App\Domain\Stripe\Service\StripeWebhookService — Coverage: 100.0% | Lines: 6 | Complexity: 3 App\Action\Document\Provided\Admin\DownloadProvidedDocumentAction — Coverage: 100.0% | Lines: 5 | Complexity: 2 App\Action\Home\HomeAction — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Action\Home\PingAction — Coverage: 100.0% | Lines: 2 | Complexity: 2 App\Domain\Exception\AuthenticationException — Coverage: 100.0% | Lines: 2 | Complexity: 2 App\Domain\Exception\BadRequestException — Coverage: 100.0% | Lines: 2 | Complexity: 2 App\Domain\Exception\ConflictException — Coverage: 100.0% | Lines: 2 | Complexity: 2 App\Domain\Exception\ForbiddenException — Coverage: 100.0% | Lines: 2 | Complexity: 2 App\Domain\Exception\NotFoundException — Coverage: 100.0% | Lines: 2 | Complexity: 2 App\Domain\Stripe\Exception\WebhookSignatureException — Coverage: 100.0% | Lines: 2 | Complexity: 2 App\Domain\Auth\Data\AdminActor — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Notification\Data\EmailMessage — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Stripe\Data\PaymentChargeData — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Stripe\Data\PaymentMethodData — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Stripe\Data\SetupIntentData — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Stripe\Data\StripeCustomerData — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Stripe\Data\WebhookEventData — Coverage: 100.0% | Lines: 1 | Complexity: 1

 

Sorted by descending CRAP (Change Risk Anti-Patterns) index.

Class CRAP Coverage
App\Domain\Document\Service\PandaDocService9920.0%
App\Console\SeedE2eUsersCommand9300.0%
App\Domain\Stripe\Service\StripeService6500.0%
App\Domain\SystemSettings\Service\SystemSettingsService337.584.1%
App\Action\Document\CreateRegistrationDocumentsAction2720.0%
App\Domain\SuperAdmin\Service\SuperAdminService245.7877.6%
App\Domain\Contact\Service\CloudflareTurnstileVerifier2100.0%
App\Console\InspectPandaDocTemplateCommand1820.0%
App\Support\Row164.9860.3%
App\Domain\Document\Submission\Service\InvestorDocumentService136.3476.8%
App\Domain\Document\Data\PandaDocTemplateDetailsData1100.0%
App\Domain\Admin\Repository\AdminRepository101.8562.1%
App\Domain\SuperAdmin\Repository\SuperAdminRepository96.9184.3%
App\Domain\Auth\Repository\AuthRepository92.0281.9%
App\Action\Auth\ResetPasswordAction900.0%
App\Domain\Funding\Service\FundingRequestService89.4365.5%
App\Domain\Admin\Service\AdminService83.7838.6%
App\Domain\Loan\Repository\LoanRepository80.6884.5%
App\Action\Admin\CreateAdminTransactionAction720.0%
App\Domain\Document\Provided\Service\ProvidedDocumentService69.9275.6%
App\Domain\Auth\Service\RegistrationService66.1891.9%
App\Domain\ErrorLog\Repository\ErrorLogRepository65.6980.9%
App\Middleware\ErrorLoggingMiddleware60.3577.4%
App\Action\SuperAdmin\ResolveErrorLogAction560.0%
App\Action\SuperAdmin\UpdateSystemSettingAction560.0%
App\Domain\Notification\Service\CurlHealthcheckClient560.0%
App\Domain\Loan\Service\LoanService53.1192.6%
App\Domain\Notification\Service\SmtpEmailService52.132.7%
App\Domain\Investor\Service\InvestorService49.6193.7%
App\Domain\Account\Service\AccountService45.8292.6%
App\Domain\Audit\AuditService44.7988.3%
App\Domain\Storage\Service\LocalFileStorage44.1679.4%
App\Domain\Auth\Service\AuthService4497.7%
App\Action\Admin\GetAdminTransactionsAction420.0%
App\Action\SuperAdmin\DeleteErrorLogsAction420.0%
App\Action\SuperAdmin\DeleteUserAction420.0%
App\Domain\Document\Submission\Repository\InvestorDocumentRepository39.5989.7%
App\Domain\Investor\Repository\InvestorRepository36.8291.4%
App\Domain\Account\Repository\AccountRepository3195.2%
App\Action\Funding\UpdateFundingRequestStatusAction300.0%
App\Action\Loan\DenyLoanAction300.0%
App\Action\Loan\GetLoanAction300.0%
App\Console\AccrueInterestCommand300.0%
App\Console\ListPandaDocTemplatesCommand300.0%
App\Console\SendTestEmailCommand300.0%
App\Console\SnapshotAccountBalancesCommand300.0%
App\Domain\Auth\Service\EmailChangeService27.4384.3%
App\Domain\ErrorLog\Service\ErrorLogService2796.1%
App\Domain\Contact\Service\ContactService26.8572.1%
App\Domain\Transaction\Repository\TransactionRepository26.5690.6%
App\Domain\Disbursement\Service\DisbursementService24.2986.5%
App\Domain\Funding\Repository\FundingRequestRepository22.4273.4%
App\Domain\Transaction\Service\TransactionService22.2082.4%
App\Domain\SystemSettings\Repository\SystemSettingsRepository20.8264.1%
App\Action\Auth\RegisterAction20.1992.2%
App\Action\Funding\ListPendingFundingRequestsAction200.0%
App\Action\Funding\SubmitFundingRequestAction200.0%
App\Action\Loan\ApproveLoanAction200.0%
App\Action\Loan\DeclineLoanAction200.0%
App\Action\Loan\GetPendingLoansAction200.0%
App\Action\Loan\RequestLoanAction200.0%
App\Console\PostMonthlyInterestCommand200.0%
App\Domain\Document\Data\PandaDocTemplateFieldData200.0%
App\Domain\Document\Repository\DocumentTemplateRepository200.0%
App\Domain\Stripe\Service\InvestorStripeService19.0794.2%
App\Domain\Stripe\Repository\StripeWebhookRepository17.5840.0%
App\Action\Consent\UpdateMyConsentsAction16.3189.3%
App\Domain\Disbursement\Repository\DisbursementRepository16.2789.8%
App\Domain\Document\Provided\Repository\ProvidedDocumentRepository16.2789.8%
App\Domain\Transaction\Service\TransactionFinder16100.0%
App\Action\Notification\UpdateMyNotificationPreferencesAction14.6884.8%
App\Domain\Consent\Service\ConsentService14100.0%
App\Middleware\ExceptionMiddleware1396.8%
App\Middleware\JwtAuthMiddleware12.1490.2%
App\Domain\Notification\Repository\SentEmailRepository12.1091.2%
App\Action\Admin\GetAdminInvestorLoansAction120.0%
App\Action\Home\VersionAction120.0%
App\Action\Loan\MakeAdditionalPaymentAction120.0%
App\Action\Notification\GetMyEmailsAction120.0%
App\Action\SuperAdmin\GetErrorLogAction120.0%
App\Action\SuperAdmin\ProjectInterestAction120.0%
App\Domain\Document\Data\DocumentTemplateData120.0%
App\Domain\Document\Data\PandaDocDocumentRefData120.0%
App\Domain\Document\Data\PandaDocTemplateTokenData120.0%
App\Action\Disbursement\GetDisbursementHistoryAction11.7781.5%
App\Action\Document\DownloadDocumentAction11.0990.9%
App\Domain\Document\Repository\InvestorAgreementRepository11.0791.7%
App\Domain\Auth\Service\PasswordService10.0294.1%
App\Domain\Document\Type\Data\DocumentTypeData10.0294.4%
App\Support\AppUrlResolver10.0294.1%
App\Action\Admin\ImpersonateUserAction1098.2%
App\Action\Admin\SetInvestorPasswordAction1096.2%
App\Domain\Auth\Service\JwtService10100.0%
App\Domain\ErrorLog\Data\ErrorLogFilterData10100.0%
App\Domain\Notification\Service\NotificationPreferenceService10100.0%
App\Action\Admin\SendInvestorPasswordResetAction9.0591.3%
App\Domain\Notification\Service\NotificationDispatcher9100.0%
App\Domain\Document\Data\PandaDocDocumentData8.6957.9%
App\Domain\Document\Type\Repository\DocumentTypeRepository8.0690.0%
App\Domain\Consent\Data\ConsentType8100.0%
App\Middleware\ResourceOwnershipMiddleware8100.0%
App\Domain\Funding\Data\FundingRequestData7.2641.2%
App\Action\Account\UpdateAccountStatusAction7100.0%
App\Action\Auth\ChangePasswordAction7100.0%
App\Action\Disbursement\MarkDisbursedAction7100.0%
App\Domain\Auth\Service\AdminPasswordService7100.0%
App\Domain\Consent\Repository\ConsentRepository7100.0%
App\Domain\Document\Service\InvestorAgreementService7100.0%
App\Domain\Document\Service\PandaDocFieldMapper7100.0%
App\Domain\Notification\Service\HealthcheckPinger7100.0%
App\Domain\SystemSettings\Data\SystemSettingData6.1982.6%
App\Action\SuperAdmin\GenerateTransactionsAction6.0194.1%
App\Action\Admin\CreateInvestorAccountAction60.0%
App\Action\Admin\GetAumHistoryAction60.0%
App\Action\Admin\GetLendingActivityAction60.0%
App\Action\Admin\UpdateConfigurationAction6100.0%
App\Action\Contact\SubmitPublicContactAction695.5%
App\Action\Document\Admin\DownloadInvestorAgreementAction695.5%
App\Action\Loan\AcceptLoanAction60.0%
App\Action\Loan\GetActiveLoansAction60.0%
App\Action\Loan\GetApprovedLoansAction60.0%
App\Action\Loan\GetMyLoansAction60.0%
App\Action\Loan\MakePaymentAction60.0%
App\Action\SuperAdmin\AccrueInterestAction60.0%
App\Action\SuperAdmin\PostInterestAction60.0%
App\Domain\Document\Data\PandaDocSigningSessionData6.0050.0%
App\Domain\Notification\Repository\NotificationPreferenceRepository6100.0%
App\Domain\Notification\Service\CronEmailNotifier6100.0%
App\Domain\Exception\ValidationException5.9366.7%
App\Domain\Configuration\ConfigKeyPolicy5.1283.3%
App\Domain\Contact\Repository\ContactRepository5.0191.7%
App\Action\Account\GetAccountTransactionsAction5100.0%
App\Action\Auth\ForgotPasswordAction5100.0%
App\Action\Auth\LoginAction5100.0%
App\Action\Document\Submission\DownloadMyUploadAction5.0094.7%
App\Action\Document\Submission\UploadDocumentAction596.0%
App\Middleware\RoleMiddleware5100.0%
App\Domain\Auth\Data\TokenData4.5214.3%
App\Domain\Notification\Data\NotificationType4.2575.0%
App\Domain\Loan\Data\LoanData4.0850.7%
App\Action\Investor\UpdateInvestorStatusAction4.0289.5%
App\Action\Investor\UpdateKycStatusAction4.0289.5%
App\Action\SuperAdmin\ListUsersAction4.0288.9%
App\Action\SuperAdmin\DeleteTestDataAction4.0190.9%
App\Action\SuperAdmin\GetAccountsForSuperAdminAction4.0192.3%
App\Action\SuperAdmin\UpdateUserRoleAction4.0192.3%
App\Action\Admin\GetConfigurationAction4100.0%
App\Action\Admin\GetCronJobStatusesAction4100.0%
App\Action\Auth\LogoutAction4100.0%
App\Action\Auth\RefreshTokenAction4100.0%
App\Action\Disbursement\ListPendingDisbursementsAction4100.0%
App\Action\Document\Submission\Admin\DownloadUploadAction4100.0%
App\Action\SuperAdmin\CreateTestUserAction495.0%
App\Action\SuperAdmin\GenerateBulkDataAction4.0094.4%
App\Domain\Document\Data\PandaDocRecipientData3.9153.3%
App\Domain\Notification\Data\SentEmailData3.8255.0%
App\Action\Consent\GetMyConsentsAction3.0287.5%
App\Action\Document\Provided\DownloadMyProvidedDocumentAction3.0287.5%
App\Action\Document\GetDocumentsAction3.0188.9%
App\Action\Document\Provided\ListMyProvidedDocumentsAction3.0190.9%
App\Action\Document\Submission\DiscardUploadAction3.0191.7%
App\Action\Document\Submission\ListMyUploadsAction3.0190.9%
App\Action\Notification\GetMyNotificationPreferencesAction3.0188.9%
App\Domain\Consent\Data\ConsentRecord3.0191.7%
App\Domain\Document\Service\IdentityVerificationService3.0190.9%
App\Action\Account\GetAccountBalanceHistoryAction3100.0%
App\Action\Admin\GetAdminInvestorDetailAction3100.0%
App\Action\Auth\GetCurrentUserAction3.0093.8%
App\Action\Document\Provided\Admin\UploadProvidedDocumentAction3100.0%
App\Action\Document\Submission\Admin\RejectUploadAction3100.0%
App\Action\Investor\GetInvestorAction396.2%
App\Action\Investor\GetInvestorByUserIdAction3100.0%
App\Domain\Auth\Service\PasswordResetService3100.0%
App\Domain\Consent\Data\ConsentCopy396.6%
App\Domain\Contact\Data\ContactMessageData3100.0%
App\Domain\Disbursement\Data\DisbursementData3100.0%
App\Domain\Document\Provided\Data\ProvidedDocumentData3100.0%
App\Domain\Document\Submission\Data\AdminInvestorDocumentData3100.0%
App\Domain\Document\Submission\Data\InvestorDocumentData3100.0%
App\Domain\Document\Submission\Data\InvestorDocumentEventData3100.0%
App\Domain\Loan\Data\LoanEligibilityData3100.0%
App\Domain\Notification\Service\RecordingEmailService3100.0%
App\Domain\Stripe\Service\StripeWebhookService3100.0%
App\Domain\Transaction\Data\TransactionData3100.0%
App\Support\ProvidedDocumentDownload3100.0%
App\Domain\ErrorLog\Data\ErrorLogData2.5747.9%
App\Domain\Notification\Data\NotificationPreference2.0187.5%
App\Action\Account\CreateAccountAction2100.0%
App\Action\Account\GetAccountAction2100.0%
App\Action\Account\GetAccountByInvestorAction2100.0%
App\Action\Account\GetAccountSummaryAction2100.0%
App\Action\Admin\GetAdminInvestorsAction2100.0%
App\Action\Admin\GetAdminStatsAction2100.0%
App\Action\Auth\ConfirmEmailChangeAction2100.0%
App\Action\Auth\RequestEmailChangeAction2100.0%
App\Action\Contact\SubmitContactAction2100.0%
App\Action\Document\Admin\GetInvestorAgreementsAction2100.0%
App\Action\Document\CreateSigningSessionAction2100.0%
App\Action\Document\GetDocumentAction2100.0%
App\Action\Document\Provided\Admin\DeleteProvidedDocumentAction2100.0%
App\Action\Document\Provided\Admin\DownloadProvidedDocumentAction2100.0%
App\Action\Document\Provided\Admin\ListInvestorProvidedDocumentsAction2100.0%
App\Action\Document\ResendDocumentAction2100.0%
App\Action\Document\Submission\Admin\AcceptUploadAction2100.0%
App\Action\Document\Submission\Admin\GetUploadAction2100.0%
App\Action\Document\Submission\Admin\ListInvestorUploadsAction2100.0%
App\Action\Document\Submission\Admin\ListPendingUploadsAction2100.0%
App\Action\Document\Type\ListDocumentTypesAction2100.0%
App\Action\Home\PingAction2100.0%
App\Action\Investor\CreateInvestorAction2100.0%
App\Action\Investor\CreateSetupIntentAction2100.0%
App\Action\Investor\DetachPaymentMethodAction2100.0%
App\Action\Investor\ListPaymentMethodsAction2100.0%
App\Action\Investor\SetDefaultPaymentMethodAction2100.0%
App\Action\Investor\UpdateInvestorAction2100.0%
App\Action\Loan\CheckEligibilityAction2100.0%
App\Action\Stripe\WebhookAction2100.0%
App\Action\SuperAdmin\GetSystemSettingsAction2100.0%
App\Action\SuperAdmin\ListErrorLogsAction2100.0%
App\Domain\Account\Data\AccountData2100.0%
App\Domain\Account\Data\AccountSummaryData295.5%
App\Domain\Account\Data\BalanceHistoryPointData2100.0%
App\Domain\Admin\Data\AdminStatsData2100.0%
App\Domain\Auth\Data\UserAuthData2100.0%
App\Domain\Exception\AuthenticationException2100.0%
App\Domain\Exception\BadRequestException2100.0%
App\Domain\Exception\ConflictException2100.0%
App\Domain\Exception\ForbiddenException2100.0%
App\Domain\Exception\NotFoundException2100.0%
App\Domain\Investor\Data\InvestorData2100.0%
App\Domain\Stripe\Exception\WebhookSignatureException2100.0%
App\Domain\SuperAdmin\Data\CronJobStatusData2100.0%
App\Factory\DatabaseFactory2.0094.7%
App\Action\Home\HomeAction1100.0%
App\Domain\Auth\Data\AdminActor1100.0%
App\Domain\Notification\Data\EmailMessage1100.0%
App\Domain\Stripe\Data\PaymentChargeData1100.0%
App\Domain\Stripe\Data\PaymentMethodData1100.0%
App\Domain\Stripe\Data\SetupIntentData1100.0%
App\Domain\Stripe\Data\StripeCustomerData1100.0%
App\Domain\Stripe\Data\WebhookEventData1100.0%
App\Renderer\JsonRenderer1100.0%
App\Domain\Audit\AuditAction0100.0%

Methods

Bubble size = executable lines. Hover for details, click to navigate.

0% 20% 40% 60% 80% 100% 0 10 20 30 Line Coverage (%) Cyclomatic Complexity App\Domain\Auth\Service\RegistrationService::registerComplete — Coverage: 89.6% | Lines: 67 | Complexity: 9 App\Domain\ErrorLog\Repository\ErrorLogRepository::findAll — Coverage: 69.8% | Lines: 63 | Complexity: 26 App\Domain\SuperAdmin\Repository\SuperAdminRepository::deleteUser — Coverage: 90.5% | Lines: 63 | Complexity: 11 App\Domain\SuperAdmin\Service\SuperAdminService::generateMonthTransactions — Coverage: 92.1% | Lines: 63 | Complexity: 21 App\Domain\SuperAdmin\Service\SuperAdminService::createTestUser — Coverage: 98.3% | Lines: 60 | Complexity: 14 App\Domain\Document\Submission\Service\InvestorDocumentService::uploadForInvestor — Coverage: 65.5% | Lines: 55 | Complexity: 15 App\Domain\SuperAdmin\Service\SuperAdminService::generateBulkData — Coverage: 98.1% | Lines: 52 | Complexity: 8 App\Domain\SuperAdmin\Service\SuperAdminService::generateTransactions — Coverage: 98.0% | Lines: 50 | Complexity: 12 App\Domain\Transaction\Service\TransactionService::createTransaction — Coverage: 83.7% | Lines: 49 | Complexity: 18 App\Action\Admin\ImpersonateUserAction::__invoke — Coverage: 100.0% | Lines: 43 | Complexity: 7 App\Domain\Loan\Service\LoanService::makePayment — Coverage: 93.0% | Lines: 43 | Complexity: 6 App\Domain\Contact\Service\CloudflareTurnstileVerifier::verify — Coverage: 0.0% | Lines: 41 | Complexity: 13 App\Domain\Disbursement\Service\DisbursementService::markDisbursed — Coverage: 87.8% | Lines: 41 | Complexity: 13 App\Domain\SuperAdmin\Service\SuperAdminService::projectInterest — Coverage: 0.0% | Lines: 40 | Complexity: 8 App\Domain\Document\Provided\Service\ProvidedDocumentService::uploadForInvestor — Coverage: 76.9% | Lines: 39 | Complexity: 13 App\Domain\Loan\Service\LoanService::makeAdditionalPayment — Coverage: 87.2% | Lines: 39 | Complexity: 10 App\Domain\SuperAdmin\Repository\SuperAdminRepository::getCronJobLastRunSummaries — Coverage: 100.0% | Lines: 38 | Complexity: 4 App\Domain\Admin\Repository\AdminRepository::getAllTransactions — Coverage: 0.0% | Lines: 37 | Complexity: 12 App\Domain\Loan\Data\LoanData::fromRow — Coverage: 100.0% | Lines: 37 | Complexity: 1 App\Domain\Loan\Data\LoanData::toArray — Coverage: 0.0% | Lines: 37 | Complexity: 1 App\Action\Consent\UpdateMyConsentsAction::__invoke — Coverage: 91.7% | Lines: 36 | Complexity: 7 App\Domain\Notification\Service\SmtpEmailService::send — Coverage: 0.0% | Lines: 36 | Complexity: 6 App\Domain\Transaction\Repository\TransactionRepository::findByAccountId — Coverage: 94.4% | Lines: 36 | Complexity: 8 App\Console\SeedE2eUsersCommand::seedInvestor — Coverage: 0.0% | Lines: 35 | Complexity: 2 App\Domain\Auth\Service\AuthService::login — Coverage: 94.3% | Lines: 35 | Complexity: 9 App\Domain\Consent\Service\ConsentService::applyDecisions — Coverage: 100.0% | Lines: 35 | Complexity: 5 App\Console\InspectPandaDocTemplateCommand::execute — Coverage: 0.0% | Lines: 34 | Complexity: 11 App\Domain\Admin\Repository\AdminRepository::getInvestorsList — Coverage: 97.0% | Lines: 33 | Complexity: 10 App\Domain\Contact\Service\ContactService::dispatchAdminEmail — Coverage: 84.8% | Lines: 33 | Complexity: 4 App\Action\Account\CreateAccountAction::__invoke — Coverage: 100.0% | Lines: 32 | Complexity: 1 App\Console\SendTestEmailCommand::execute — Coverage: 0.0% | Lines: 32 | Complexity: 3 App\Domain\Loan\Service\LoanService::requestLoan — Coverage: 93.8% | Lines: 32 | Complexity: 7 App\Action\Auth\RegisterAction::handleCompleteRegistration — Coverage: 100.0% | Lines: 31 | Complexity: 2 App\Domain\Loan\Repository\LoanRepository::recordPayment — Coverage: 90.3% | Lines: 31 | Complexity: 4 App\Domain\Transaction\Service\TransactionFinder::findByAccountId — Coverage: 100.0% | Lines: 31 | Complexity: 13 App\Domain\Auth\Service\EmailChangeService::requestChange — Coverage: 93.3% | Lines: 30 | Complexity: 6 App\Domain\Contact\Service\ContactService::submitPublic — Coverage: 53.3% | Lines: 30 | Complexity: 8 App\Domain\Document\Service\PandaDocService::makeRequest — Coverage: 0.0% | Lines: 30 | Complexity: 7 App\Action\Auth\LoginAction::__invoke — Coverage: 100.0% | Lines: 29 | Complexity: 1 App\Console\SeedE2eUsersCommand::execute — Coverage: 0.0% | Lines: 29 | Complexity: 6 App\Domain\Investor\Repository\InvestorRepository::updateInvestor — Coverage: 96.6% | Lines: 29 | Complexity: 5 App\Domain\Funding\Service\FundingRequestService::updateStatus — Coverage: 85.7% | Lines: 28 | Complexity: 10 App\Domain\Funding\Service\FundingRequestService::notifyAdmins — Coverage: 17.9% | Lines: 28 | Complexity: 4 App\Action\Admin\CreateAdminTransactionAction::__invoke — Coverage: 0.0% | Lines: 27 | Complexity: 7 App\Domain\Stripe\Service\StripeService::listPaymentMethods — Coverage: 0.0% | Lines: 27 | Complexity: 6 App\Domain\SystemSettings\Service\SystemSettingsService::validateSetting — Coverage: 0.0% | Lines: 27 | Complexity: 9 App\Action\Account\GetAccountSummaryAction::__invoke — Coverage: 100.0% | Lines: 26 | Complexity: 1 App\Action\Disbursement\GetDisbursementHistoryAction::__invoke — Coverage: 80.8% | Lines: 26 | Complexity: 10 App\Domain\Account\Service\AccountService::createAccountForInvestor — Coverage: 96.2% | Lines: 26 | Complexity: 11 App\Domain\Document\Service\PandaDocService::createDocumentFromTemplate — Coverage: 0.0% | Lines: 26 | Complexity: 4 App\Domain\Stripe\Service\StripeService::chargePaymentMethod — Coverage: 0.0% | Lines: 26 | Complexity: 5 App\Domain\SuperAdmin\Service\SuperAdminService::getCronJobStatuses — Coverage: 96.2% | Lines: 26 | Complexity: 2 App\Middleware\ErrorLoggingMiddleware::logException — Coverage: 92.3% | Lines: 26 | Complexity: 4 App\Action\Auth\ResetPasswordAction::__invoke — Coverage: 0.0% | Lines: 25 | Complexity: 8 App\Action\Investor\GetInvestorAction::__invoke — Coverage: 96.0% | Lines: 25 | Complexity: 2 App\Action\Investor\GetInvestorByUserIdAction::__invoke — Coverage: 100.0% | Lines: 25 | Complexity: 2 App\Action\Investor\UpdateInvestorAction::__invoke — Coverage: 100.0% | Lines: 25 | Complexity: 1 App\Domain\Consent\Data\ConsentCopy::all — Coverage: 100.0% | Lines: 25 | Complexity: 1 App\Domain\Document\Submission\Service\InvestorDocumentService::rejectForAdmin — Coverage: 72.0% | Lines: 25 | Complexity: 5 App\Domain\ErrorLog\Data\ErrorLogData::jsonSerialize — Coverage: 0.0% | Lines: 25 | Complexity: 1 App\Domain\SuperAdmin\Repository\SuperAdminRepository::deleteTestData — Coverage: 100.0% | Lines: 25 | Complexity: 1 App\Middleware\JwtAuthMiddleware::process — Coverage: 100.0% | Lines: 25 | Complexity: 4 App\Action\Account\GetAccountTransactionsAction::__invoke — Coverage: 100.0% | Lines: 24 | Complexity: 4 App\Action\Disbursement\MarkDisbursedAction::__invoke — Coverage: 100.0% | Lines: 24 | Complexity: 6 App\Action\Document\Submission\UploadDocumentAction::__invoke — Coverage: 95.8% | Lines: 24 | Complexity: 4 App\Domain\Audit\AuditService::logConsent — Coverage: 100.0% | Lines: 24 | Complexity: 3 App\Domain\Document\Data\PandaDocTemplateDetailsData::fromPandaDocResponse — Coverage: 0.0% | Lines: 24 | Complexity: 9 App\Middleware\ExceptionMiddleware::process — Coverage: 95.8% | Lines: 24 | Complexity: 4 App\Action\Document\CreateRegistrationDocumentsAction::createAndSendDocument — Coverage: 0.0% | Lines: 23 | Complexity: 2 App\Action\Investor\CreateInvestorAction::__invoke — Coverage: 100.0% | Lines: 23 | Complexity: 1 App\Domain\Auth\Service\RegistrationService::createInvestor — Coverage: 95.7% | Lines: 23 | Complexity: 2 App\Domain\Document\Submission\Service\InvestorDocumentService::acceptForAdmin — Coverage: 91.3% | Lines: 23 | Complexity: 6 App\Domain\ErrorLog\Data\ErrorLogData::__construct — Coverage: 100.0% | Lines: 23 | Complexity: 1 App\Domain\ErrorLog\Service\ErrorLogService::log — Coverage: 100.0% | Lines: 23 | Complexity: 5 App\Action\Account\GetAccountByInvestorAction::__invoke — Coverage: 100.0% | Lines: 22 | Complexity: 1 App\Action\Auth\RefreshTokenAction::__invoke — Coverage: 100.0% | Lines: 22 | Complexity: 3 App\Action\Auth\RegisterAction::handleSimpleRegistration — Coverage: 100.0% | Lines: 22 | Complexity: 1 App\Action\SuperAdmin\ResolveErrorLogAction::__invoke — Coverage: 0.0% | Lines: 22 | Complexity: 6 App\Domain\Auth\Service\AdminPasswordService::setPasswordForInvestor — Coverage: 100.0% | Lines: 22 | Complexity: 1 App\Domain\Auth\Service\EmailChangeService::confirmChange — Coverage: 77.3% | Lines: 22 | Complexity: 6 App\Domain\Contact\Service\ContactService::submit — Coverage: 77.3% | Lines: 22 | Complexity: 6 App\Domain\Document\Service\InvestorAgreementService::listForInvestor — Coverage: 100.0% | Lines: 22 | Complexity: 6 App\Domain\Investor\Repository\InvestorRepository::createInvestor — Coverage: 95.5% | Lines: 22 | Complexity: 2 App\Domain\SuperAdmin\Repository\SuperAdminRepository::createInvestor — Coverage: 95.5% | Lines: 22 | Complexity: 2 App\Action\Document\Provided\Admin\UploadProvidedDocumentAction::__invoke — Coverage: 100.0% | Lines: 21 | Complexity: 2 App\Domain\Account\Data\AccountSummaryData::__construct — Coverage: 100.0% | Lines: 21 | Complexity: 1 App\Domain\Audit\AuditService::log — Coverage: 95.2% | Lines: 21 | Complexity: 5 App\Domain\ErrorLog\Repository\ErrorLogRepository::insert — Coverage: 95.2% | Lines: 21 | Complexity: 4 App\Domain\Storage\Service\LocalFileStorage::writeStreamAtomic — Coverage: 57.1% | Lines: 21 | Complexity: 8 App\Domain\SuperAdmin\Repository\SuperAdminRepository::createAccount — Coverage: 95.2% | Lines: 21 | Complexity: 2 App\Action\Account\UpdateAccountStatusAction::__invoke — Coverage: 100.0% | Lines: 20 | Complexity: 6 App\Action\Admin\GetAdminTransactionsAction::__invoke — Coverage: 0.0% | Lines: 20 | Complexity: 5 App\Action\Auth\ChangePasswordAction::__invoke — Coverage: 100.0% | Lines: 20 | Complexity: 6 App\Action\Loan\ApproveLoanAction::__invoke — Coverage: 0.0% | Lines: 20 | Complexity: 3 App\Action\Loan\DenyLoanAction::__invoke — Coverage: 0.0% | Lines: 20 | Complexity: 4 App\Action\SuperAdmin\ListErrorLogsAction::__invoke — Coverage: 100.0% | Lines: 20 | Complexity: 1 App\Action\SuperAdmin\UpdateSystemSettingAction::__invoke — Coverage: 0.0% | Lines: 20 | Complexity: 6 App\Domain\Auth\Service\AuthService::refreshToken — Coverage: 100.0% | Lines: 20 | Complexity: 6 App\Domain\Auth\Service\RegistrationService::extractConsents — Coverage: 100.0% | Lines: 20 | Complexity: 7 App\Domain\Document\Service\PandaDocService::downloadDocument — Coverage: 0.0% | Lines: 20 | Complexity: 4 App\Domain\Document\Submission\Service\InvestorDocumentService::persist — Coverage: 100.0% | Lines: 20 | Complexity: 4 App\Domain\ErrorLog\Service\ErrorLogService::formatStackTrace — Coverage: 100.0% | Lines: 20 | Complexity: 2 App\Domain\Stripe\Service\InvestorStripeService::chargeLoanPayment — Coverage: 90.0% | Lines: 20 | Complexity: 6 App\Domain\SuperAdmin\Service\SuperAdminService::accrueInterest — Coverage: 0.0% | Lines: 20 | Complexity: 5 App\Middleware\ErrorLoggingMiddleware::determineLogLevel — Coverage: 65.0% | Lines: 20 | Complexity: 11 App\Action\Auth\RegisterAction::validateCompleteRegistrationInput — Coverage: 84.2% | Lines: 19 | Complexity: 3 App\Action\Consent\UpdateMyConsentsAction::validateConsents — Coverage: 84.2% | Lines: 19 | Complexity: 8 App\Action\SuperAdmin\CreateTestUserAction::__invoke — Coverage: 94.7% | Lines: 19 | Complexity: 3 App\Domain\Admin\Repository\AdminRepository::getLendingActivity — Coverage: 89.5% | Lines: 19 | Complexity: 3 App\Domain\Auth\Service\AdminPasswordService::sendResetLinkForInvestor — Coverage: 100.0% | Lines: 19 | Complexity: 1 App\Domain\Auth\Service\AuthService::register — Coverage: 94.7% | Lines: 19 | Complexity: 4 App\Domain\ErrorLog\Data\ErrorLogFilterData::__construct — Coverage: 100.0% | Lines: 19 | Complexity: 9 App\Domain\Investor\Data\InvestorData::fromRow — Coverage: 100.0% | Lines: 19 | Complexity: 1 App\Domain\Notification\Service\CurlHealthcheckClient::get — Coverage: 0.0% | Lines: 19 | Complexity: 7 App\Factory\DatabaseFactory::__invoke — Coverage: 94.7% | Lines: 19 | Complexity: 2 App\Middleware\ErrorLoggingMiddleware::buildContext — Coverage: 63.2% | Lines: 19 | Complexity: 9 App\Action\Document\CreateRegistrationDocumentsAction::__invoke — Coverage: 0.0% | Lines: 18 | Complexity: 5 App\Action\Investor\UpdateInvestorStatusAction::__invoke — Coverage: 88.9% | Lines: 18 | Complexity: 3 App\Action\Investor\UpdateKycStatusAction::__invoke — Coverage: 88.9% | Lines: 18 | Complexity: 3 App\Action\Loan\GetPendingLoansAction::__invoke — Coverage: 0.0% | Lines: 18 | Complexity: 3 App\Action\SuperAdmin\DeleteErrorLogsAction::__invoke — Coverage: 0.0% | Lines: 18 | Complexity: 5 App\Console\PostMonthlyInterestCommand::execute — Coverage: 0.0% | Lines: 18 | Complexity: 2 App\Domain\Audit\AuditService::logImpersonationStart — Coverage: 100.0% | Lines: 18 | Complexity: 1 App\Domain\Audit\AuditService::getRecentActivity — Coverage: 94.4% | Lines: 18 | Complexity: 5 App\Domain\Document\Provided\Repository\ProvidedDocumentRepository::create — Coverage: 94.4% | Lines: 18 | Complexity: 2 App\Domain\Document\Repository\InvestorAgreementRepository::findByInvestorId — Coverage: 94.4% | Lines: 18 | Complexity: 3 App\Domain\Document\Submission\Repository\InvestorDocumentRepository::insertEvent — Coverage: 94.4% | Lines: 18 | Complexity: 2 App\Domain\Funding\Service\FundingRequestService::recordApprovedTransaction — Coverage: 72.2% | Lines: 18 | Complexity: 4 App\Domain\Investor\Service\InvestorService::createInvestor — Coverage: 94.4% | Lines: 18 | Complexity: 8 App\Domain\Notification\Service\NotificationDispatcher::dispatch — Coverage: 100.0% | Lines: 18 | Complexity: 4 App\Domain\SuperAdmin\Repository\SuperAdminRepository::countTestData — Coverage: 94.4% | Lines: 18 | Complexity: 5 App\Action\Admin\UpdateConfigurationAction::__invoke — Coverage: 100.0% | Lines: 17 | Complexity: 5 App\Action\Auth\RegisterAction::getClientIp — Coverage: 70.6% | Lines: 17 | Complexity: 6 App\Action\Investor\ListPaymentMethodsAction::__invoke — Coverage: 100.0% | Lines: 17 | Complexity: 1 App\Action\SuperAdmin\GenerateBulkDataAction::__invoke — Coverage: 94.1% | Lines: 17 | Complexity: 3 App\Domain\Auth\Repository\AuthRepository::isAccountLocked — Coverage: 94.1% | Lines: 17 | Complexity: 5 App\Domain\Auth\Service\AuthService::generateTokens — Coverage: 100.0% | Lines: 17 | Complexity: 1 App\Domain\Document\Service\PandaDocFieldMapper::mapForW9 — Coverage: 100.0% | Lines: 17 | Complexity: 2 App\Domain\Document\Submission\Data\AdminInvestorDocumentData::fromRow — Coverage: 100.0% | Lines: 17 | Complexity: 1 App\Domain\Document\Submission\Data\AdminInvestorDocumentData::toArray — Coverage: 100.0% | Lines: 17 | Complexity: 1 App\Domain\Document\Submission\Service\InvestorDocumentService::discardForInvestor — Coverage: 94.1% | Lines: 17 | Complexity: 3 App\Domain\Funding\Repository\FundingRequestRepository::create — Coverage: 88.2% | Lines: 17 | Complexity: 3 App\Domain\Funding\Service\FundingRequestService::submit — Coverage: 82.4% | Lines: 17 | Complexity: 10 App\Domain\SuperAdmin\Repository\SuperAdminRepository::createTransaction — Coverage: 94.1% | Lines: 17 | Complexity: 2 App\Middleware\JwtAuthMiddleware::getClientIp — Coverage: 70.6% | Lines: 17 | Complexity: 6 App\Support\AppUrlResolver::resolve — Coverage: 94.1% | Lines: 17 | Complexity: 10 App\Action\Admin\GetLendingActivityAction::__invoke — Coverage: 0.0% | Lines: 16 | Complexity: 1 App\Action\Contact\SubmitPublicContactAction::__invoke — Coverage: 100.0% | Lines: 16 | Complexity: 2 App\Action\Funding\SubmitFundingRequestAction::__invoke — Coverage: 0.0% | Lines: 16 | Complexity: 3 App\Action\Funding\UpdateFundingRequestStatusAction::__invoke — Coverage: 0.0% | Lines: 16 | Complexity: 4 App\Action\Loan\MakeAdditionalPaymentAction::__invoke — Coverage: 0.0% | Lines: 16 | Complexity: 2 App\Action\Loan\RequestLoanAction::__invoke — Coverage: 0.0% | Lines: 16 | Complexity: 3 App\Action\Notification\UpdateMyNotificationPreferencesAction::__invoke — Coverage: 93.8% | Lines: 16 | Complexity: 4 App\Action\Notification\UpdateMyNotificationPreferencesAction::validatePreferences — Coverage: 75.0% | Lines: 16 | Complexity: 9 App\Action\SuperAdmin\GenerateTransactionsAction::__invoke — Coverage: 93.8% | Lines: 16 | Complexity: 5 App\Console\SeedE2eUsersCommand::loadE2eEnvFile — Coverage: 0.0% | Lines: 16 | Complexity: 11 App\Domain\Audit\AuditService::setContext — Coverage: 81.2% | Lines: 16 | Complexity: 6 App\Domain\Audit\AuditService::logAccountStatusChange — Coverage: 87.5% | Lines: 16 | Complexity: 5 App\Domain\Auth\Service\RegistrationService::createAccount — Coverage: 93.8% | Lines: 16 | Complexity: 2 App\Domain\Document\Data\PandaDocDocumentData::fromPandaDocResponse — Coverage: 0.0% | Lines: 16 | Complexity: 3 App\Domain\Funding\Service\FundingRequestService::assertWithdrawable — Coverage: 81.2% | Lines: 16 | Complexity: 5 App\Domain\Loan\Service\LoanService::approveLoan — Coverage: 93.8% | Lines: 16 | Complexity: 8 App\Domain\SuperAdmin\Repository\SuperAdminRepository::replayAccountHistory — Coverage: 81.2% | Lines: 16 | Complexity: 4 App\Domain\SuperAdmin\Service\SuperAdminService::classifyStatus — Coverage: 93.8% | Lines: 16 | Complexity: 7 App\Domain\SuperAdmin\Service\SuperAdminService::updateUserRole — Coverage: 100.0% | Lines: 16 | Complexity: 5 App\Domain\Transaction\Repository\TransactionRepository::create — Coverage: 87.5% | Lines: 16 | Complexity: 3 App\Action\Admin\GetConfigurationAction::__invoke — Coverage: 100.0% | Lines: 15 | Complexity: 3 App\Action\Auth\GetCurrentUserAction::__invoke — Coverage: 93.3% | Lines: 15 | Complexity: 2 App\Action\Document\Submission\DownloadMyUploadAction::__invoke — Coverage: 93.3% | Lines: 15 | Complexity: 2 App\Action\SuperAdmin\DeleteUserAction::__invoke — Coverage: 0.0% | Lines: 15 | Complexity: 5 App\Domain\Account\Data\AccountData::__construct — Coverage: 100.0% | Lines: 15 | Complexity: 1 App\Domain\Audit\AuditService::logKycStatusChange — Coverage: 93.3% | Lines: 15 | Complexity: 4 App\Domain\Auth\Repository\AuthRepository::findValidEmailChangeToken — Coverage: 93.3% | Lines: 15 | Complexity: 3 App\Domain\Auth\Service\EmailChangeService::notifyOldAddress — Coverage: 73.3% | Lines: 15 | Complexity: 2 App\Domain\Auth\Service\PasswordResetService::sendResetLink — Coverage: 100.0% | Lines: 15 | Complexity: 1 App\Domain\Consent\Service\ConsentService::getCurrentForUser — Coverage: 100.0% | Lines: 15 | Complexity: 6 App\Domain\Document\Submission\Data\InvestorDocumentData::fromRow — Coverage: 100.0% | Lines: 15 | Complexity: 1 App\Domain\Document\Submission\Data\InvestorDocumentData::toArray — Coverage: 100.0% | Lines: 15 | Complexity: 1 App\Domain\Loan\Repository\LoanRepository::getLoanConfig — Coverage: 93.3% | Lines: 15 | Complexity: 3 App\Domain\Notification\Repository\SentEmailRepository::record — Coverage: 93.3% | Lines: 15 | Complexity: 5 App\Middleware\ErrorLoggingMiddleware::extractErrorCode — Coverage: 86.7% | Lines: 15 | Complexity: 9 App\Action\Document\Admin\DownloadInvestorAgreementAction::__invoke — Coverage: 100.0% | Lines: 14 | Complexity: 2 App\Console\AccrueInterestCommand::execute — Coverage: 0.0% | Lines: 14 | Complexity: 3 App\Console\SnapshotAccountBalancesCommand::execute — Coverage: 0.0% | Lines: 14 | Complexity: 3 App\Domain\Account\Repository\AccountRepository::createAccount — Coverage: 100.0% | Lines: 14 | Complexity: 1 App\Domain\Account\Service\AccountService::activateAccount — Coverage: 92.9% | Lines: 14 | Complexity: 4 App\Domain\Audit\AuditService::logImpersonationEnd — Coverage: 0.0% | Lines: 14 | Complexity: 1 App\Domain\Auth\Repository\AuthRepository::createUser — Coverage: 92.9% | Lines: 14 | Complexity: 2 App\Domain\Auth\Repository\AuthRepository::storeRefreshToken — Coverage: 92.9% | Lines: 14 | Complexity: 2 App\Domain\Auth\Repository\AuthRepository::findValidResetToken — Coverage: 0.0% | Lines: 14 | Complexity: 3 App\Domain\Auth\Service\AuthService::validatePassword — Coverage: 100.0% | Lines: 14 | Complexity: 6 App\Domain\Auth\Service\RegistrationService::validatePassword — Coverage: 100.0% | Lines: 14 | Complexity: 6 App\Domain\Consent\Repository\ConsentRepository::append — Coverage: 100.0% | Lines: 14 | Complexity: 2 App\Domain\Disbursement\Data\DisbursementData::fromRow — Coverage: 100.0% | Lines: 14 | Complexity: 1 App\Domain\Disbursement\Data\DisbursementData::toArray — Coverage: 100.0% | Lines: 14 | Complexity: 1 App\Domain\Document\Data\PandaDocDocumentData::toArray — Coverage: 100.0% | Lines: 14 | Complexity: 1 App\Domain\Document\Submission\Data\InvestorDocumentEventData::fromRow — Coverage: 100.0% | Lines: 14 | Complexity: 1 App\Domain\Document\Type\Data\DocumentTypeData::fromRow — Coverage: 100.0% | Lines: 14 | Complexity: 1 App\Domain\ErrorLog\Repository\ErrorLogRepository::findById — Coverage: 92.9% | Lines: 14 | Complexity: 7 App\Domain\ErrorLog\Service\ErrorLogService::sanitize — Coverage: 100.0% | Lines: 14 | Complexity: 6 App\Domain\Loan\Repository\LoanRepository::createLoanRequest — Coverage: 92.9% | Lines: 14 | Complexity: 2 App\Domain\Notification\Service\CronEmailNotifier::notifyJobFailure — Coverage: 100.0% | Lines: 14 | Complexity: 1 App\Domain\Notification\Service\NotificationPreferenceService::getPreferencesForUser — Coverage: 100.0% | Lines: 14 | Complexity: 3 App\Domain\Stripe\Service\StripeService::createCustomer — Coverage: 0.0% | Lines: 14 | Complexity: 4 App\Action\Admin\SetInvestorPasswordAction::__invoke — Coverage: 100.0% | Lines: 13 | Complexity: 3 App\Action\Auth\LogoutAction::__invoke — Coverage: 100.0% | Lines: 13 | Complexity: 3 App\Action\Document\CreateRegistrationDocumentsAction::saveDocument — Coverage: 0.0% | Lines: 13 | Complexity: 2 App\Action\Document\DownloadDocumentAction::getOwnedDocumentName — Coverage: 84.6% | Lines: 13 | Complexity: 6 App\Action\Loan\CheckEligibilityAction::__invoke — Coverage: 100.0% | Lines: 13 | Complexity: 1 App\Action\Notification\GetMyEmailsAction::__invoke — Coverage: 0.0% | Lines: 13 | Complexity: 2 App\Console\PostMonthlyInterestCommand::configure — Coverage: 0.0% | Lines: 13 | Complexity: 1 App\Domain\Audit\AuditService::getRecordHistory — Coverage: 92.3% | Lines: 13 | Complexity: 3 App\Domain\Auth\Service\RegistrationService::validateAllInput — Coverage: 100.0% | Lines: 13 | Complexity: 1 App\Domain\Disbursement\Repository\DisbursementRepository::listHistory — Coverage: 92.3% | Lines: 13 | Complexity: 3 App\Domain\Document\Provided\Data\ProvidedDocumentData::fromRow — Coverage: 100.0% | Lines: 13 | Complexity: 1 App\Domain\Document\Submission\Repository\InvestorDocumentRepository::listSelect — Coverage: 100.0% | Lines: 13 | Complexity: 3 App\Domain\Funding\Data\FundingRequestData::fromRow — Coverage: 100.0% | Lines: 13 | Complexity: 1 App\Domain\Loan\Repository\LoanRepository::approveLoan — Coverage: 92.3% | Lines: 13 | Complexity: 2 App\Domain\Loan\Service\LoanService::acceptLoan — Coverage: 100.0% | Lines: 13 | Complexity: 3 App\Domain\Loan\Service\LoanService::declineLoan — Coverage: 92.3% | Lines: 13 | Complexity: 4 App\Domain\Stripe\Service\InvestorStripeService::ensureCustomerExists — Coverage: 100.0% | Lines: 13 | Complexity: 3 App\Domain\SuperAdmin\Repository\SuperAdminRepository::createUser — Coverage: 92.3% | Lines: 13 | Complexity: 2 App\Domain\SuperAdmin\Repository\SuperAdminRepository::generateUniqueAccountNumber — Coverage: 69.2% | Lines: 13 | Complexity: 4 App\Domain\SystemSettings\Data\SystemSettingData::__construct — Coverage: 76.9% | Lines: 13 | Complexity: 4 App\Action\Admin\SendInvestorPasswordResetAction::requireAdmin — Coverage: 91.7% | Lines: 12 | Complexity: 6 App\Action\Admin\SetInvestorPasswordAction::requireAdmin — Coverage: 91.7% | Lines: 12 | Complexity: 6 App\Action\Auth\RequestEmailChangeAction::__invoke — Coverage: 100.0% | Lines: 12 | Complexity: 1 App\Action\Contact\SubmitContactAction::__invoke — Coverage: 100.0% | Lines: 12 | Complexity: 1 App\Action\Document\DownloadDocumentAction::__invoke — Coverage: 100.0% | Lines: 12 | Complexity: 1 App\Action\Document\Submission\Admin\DownloadUploadAction::__invoke — Coverage: 100.0% | Lines: 12 | Complexity: 1 App\Action\Document\Submission\Admin\RejectUploadAction::__invoke — Coverage: 100.0% | Lines: 12 | Complexity: 2 App\Action\Loan\DeclineLoanAction::__invoke — Coverage: 0.0% | Lines: 12 | Complexity: 3 App\Action\Loan\MakePaymentAction::__invoke — Coverage: 0.0% | Lines: 12 | Complexity: 1 App\Action\SuperAdmin\GetAccountsForSuperAdminAction::__invoke — Coverage: 91.7% | Lines: 12 | Complexity: 3 App\Action\SuperAdmin\UpdateUserRoleAction::__invoke — Coverage: 91.7% | Lines: 12 | Complexity: 3 App\Console\SeedE2eUsersCommand::seedStaffUser — Coverage: 0.0% | Lines: 12 | Complexity: 1 App\Domain\Audit\AuditService::getUserActivity — Coverage: 91.7% | Lines: 12 | Complexity: 3 App\Domain\Auth\Data\UserAuthData::fromRow — Coverage: 100.0% | Lines: 12 | Complexity: 1 App\Domain\Auth\Repository\AuthRepository::storeEmailChangeToken — Coverage: 91.7% | Lines: 12 | Complexity: 2 App\Domain\Contact\Repository\ContactRepository::insertPublic — Coverage: 91.7% | Lines: 12 | Complexity: 2 App\Domain\Disbursement\Repository\DisbursementRepository::markDisbursed — Coverage: 91.7% | Lines: 12 | Complexity: 2 App\Domain\Document\Service\PandaDocService::listTemplates — Coverage: 0.0% | Lines: 12 | Complexity: 6 App\Domain\Document\Submission\Repository\InvestorDocumentRepository::create — Coverage: 91.7% | Lines: 12 | Complexity: 2 App\Domain\Document\Submission\Repository\InvestorDocumentRepository::findEventsForDocument — Coverage: 91.7% | Lines: 12 | Complexity: 4 App\Domain\Funding\Data\FundingRequestData::toAdminArray — Coverage: 0.0% | Lines: 12 | Complexity: 1 App\Domain\Investor\Repository\InvestorRepository::updateKycStatus — Coverage: 91.7% | Lines: 12 | Complexity: 3 App\Domain\Investor\Repository\InvestorRepository::updateInvestorStatus — Coverage: 91.7% | Lines: 12 | Complexity: 3 App\Domain\Loan\Repository\LoanRepository::recordAdditionalPayment — Coverage: 91.7% | Lines: 12 | Complexity: 2 App\Domain\Notification\Service\NotificationPreferenceService::updatePreferences — Coverage: 100.0% | Lines: 12 | Complexity: 4 App\Domain\Stripe\Repository\StripeWebhookRepository::recordReceived — Coverage: 91.7% | Lines: 12 | Complexity: 2 App\Action\Admin\GetAdminInvestorsAction::__invoke — Coverage: 100.0% | Lines: 11 | Complexity: 1 App\Action\Auth\ForgotPasswordAction::__invoke — Coverage: 100.0% | Lines: 11 | Complexity: 4 App\Action\Disbursement\ListPendingDisbursementsAction::__invoke — Coverage: 100.0% | Lines: 11 | Complexity: 3 App\Action\Document\Submission\DiscardUploadAction::__invoke — Coverage: 90.9% | Lines: 11 | Complexity: 2 App\Action\Funding\ListPendingFundingRequestsAction::__invoke — Coverage: 0.0% | Lines: 11 | Complexity: 3 App\Action\Loan\GetLoanAction::__invoke — Coverage: 0.0% | Lines: 11 | Complexity: 4 App\Domain\Account\Service\AccountService::closeAccount — Coverage: 90.9% | Lines: 11 | Complexity: 5 App\Domain\Admin\Data\AdminStatsData::jsonSerialize — Coverage: 100.0% | Lines: 11 | Complexity: 1 App\Domain\Admin\Service\AdminService::getInvestorsList — Coverage: 100.0% | Lines: 11 | Complexity: 4 App\Domain\Admin\Service\AdminService::getAllTransactions — Coverage: 0.0% | Lines: 11 | Complexity: 4 App\Domain\Admin\Service\AdminService::getLendingActivity — Coverage: 0.0% | Lines: 11 | Complexity: 4 App\Domain\Auth\Service\JwtService::generateAccessToken — Coverage: 100.0% | Lines: 11 | Complexity: 1 App\Domain\Auth\Service\JwtService::generateRefreshToken — Coverage: 100.0% | Lines: 11 | Complexity: 1 App\Domain\Auth\Service\PasswordService::validateStrength — Coverage: 90.9% | Lines: 11 | Complexity: 5 App\Domain\Auth\Service\RegistrationService::validateDateOfBirth — Coverage: 100.0% | Lines: 11 | Complexity: 5 App\Domain\Auth\Service\RegistrationService::generateAccountNumber — Coverage: 81.8% | Lines: 11 | Complexity: 4 App\Domain\Contact\Repository\ContactRepository::insert — Coverage: 90.9% | Lines: 11 | Complexity: 2 App\Domain\Document\Data\DocumentTemplateData::fromRow — Coverage: 0.0% | Lines: 11 | Complexity: 1 App\Domain\Document\Data\DocumentTemplateData::toArray — Coverage: 0.0% | Lines: 11 | Complexity: 1 App\Domain\Document\Data\PandaDocTemplateFieldData::fromPandaDocResponse — Coverage: 0.0% | Lines: 11 | Complexity: 2 App\Domain\Document\Provided\Data\ProvidedDocumentData::toArray — Coverage: 100.0% | Lines: 11 | Complexity: 1 App\Domain\Document\Repository\InvestorAgreementRepository::findOwnedDocumentName — Coverage: 90.9% | Lines: 11 | Complexity: 5 App\Domain\Document\Service\PandaDocFieldMapper::mapForMpa — Coverage: 100.0% | Lines: 11 | Complexity: 1 App\Domain\Document\Submission\Data\InvestorDocumentEventData::toArray — Coverage: 100.0% | Lines: 11 | Complexity: 1 App\Domain\Document\Type\Data\DocumentTypeData::toArray — Coverage: 100.0% | Lines: 11 | Complexity: 1 App\Domain\Document\Type\Repository\DocumentTypeRepository::findActive — Coverage: 90.9% | Lines: 11 | Complexity: 4 App\Domain\Funding\Repository\FundingRequestRepository::findByInvestorId — Coverage: 0.0% | Lines: 11 | Complexity: 3 App\Domain\Funding\Repository\FundingRequestRepository::updateStatus — Coverage: 90.9% | Lines: 11 | Complexity: 2 App\Domain\Notification\Service\NotificationDispatcher::resolveRecipients — Coverage: 100.0% | Lines: 11 | Complexity: 4 App\Domain\Stripe\Service\StripeService::findCustomer — Coverage: 0.0% | Lines: 11 | Complexity: 3 App\Domain\SuperAdmin\Repository\SuperAdminRepository::postMonthlyInterest — Coverage: 0.0% | Lines: 11 | Complexity: 3 App\Domain\SystemSettings\Repository\SystemSettingsRepository::update — Coverage: 0.0% | Lines: 11 | Complexity: 3 App\Domain\Transaction\Data\TransactionData::fromRow — Coverage: 100.0% | Lines: 11 | Complexity: 1 App\Domain\Transaction\Data\TransactionData::jsonSerialize — Coverage: 100.0% | Lines: 11 | Complexity: 1 App\Domain\Transaction\Repository\TransactionRepository::getLockedInvestmentBalance — Coverage: 90.9% | Lines: 11 | Complexity: 3 App\Middleware\RoleMiddleware::process — Coverage: 100.0% | Lines: 11 | Complexity: 3 App\Action\Admin\SendInvestorPasswordResetAction::__invoke — Coverage: 90.0% | Lines: 10 | Complexity: 2 App\Action\Document\Provided\ListMyProvidedDocumentsAction::__invoke — Coverage: 90.0% | Lines: 10 | Complexity: 2 App\Action\Document\Submission\Admin\AcceptUploadAction::__invoke — Coverage: 100.0% | Lines: 10 | Complexity: 1 App\Action\Document\Submission\ListMyUploadsAction::__invoke — Coverage: 90.0% | Lines: 10 | Complexity: 2 App\Action\Stripe\WebhookAction::__invoke — Coverage: 100.0% | Lines: 10 | Complexity: 1 App\Action\SuperAdmin\AccrueInterestAction::__invoke — Coverage: 0.0% | Lines: 10 | Complexity: 1 App\Action\SuperAdmin\DeleteTestDataAction::__invoke — Coverage: 90.0% | Lines: 10 | Complexity: 3 App\Console\AccrueInterestCommand::configure — Coverage: 0.0% | Lines: 10 | Complexity: 1 App\Console\SnapshotAccountBalancesCommand::configure — Coverage: 0.0% | Lines: 10 | Complexity: 1 App\Domain\Audit\AuditService::logLogin — Coverage: 100.0% | Lines: 10 | Complexity: 1 App\Domain\Auth\Repository\AuthRepository::lockAccount — Coverage: 90.0% | Lines: 10 | Complexity: 2 App\Domain\Auth\Repository\AuthRepository::storePasswordResetToken — Coverage: 90.0% | Lines: 10 | Complexity: 2 App\Domain\Consent\Data\ConsentRecord::__construct — Coverage: 100.0% | Lines: 10 | Complexity: 1 App\Domain\Contact\Data\ContactMessageData::fromRow — Coverage: 100.0% | Lines: 10 | Complexity: 1 App\Domain\Contact\Data\ContactMessageData::toArray — Coverage: 100.0% | Lines: 10 | Complexity: 1 App\Domain\Disbursement\Repository\DisbursementRepository::enqueue — Coverage: 90.0% | Lines: 10 | Complexity: 2 App\Domain\Document\Provided\Repository\ProvidedDocumentRepository::findByInvestorId — Coverage: 90.0% | Lines: 10 | Complexity: 4 App\Domain\Document\Repository\DocumentTemplateRepository::findActive — Coverage: 0.0% | Lines: 10 | Complexity: 3 App\Domain\Document\Service\IdentityVerificationService::markIdentityVerifiedIfApplicable — Coverage: 90.0% | Lines: 10 | Complexity: 2 App\Domain\Document\Submission\Repository\InvestorDocumentRepository::findPending — Coverage: 90.0% | Lines: 10 | Complexity: 4 App\Domain\Document\Submission\Repository\InvestorDocumentRepository::findByInvestorIdForAdmin — Coverage: 90.0% | Lines: 10 | Complexity: 4 App\Domain\Document\Submission\Repository\InvestorDocumentRepository::findByInvestorId — Coverage: 70.0% | Lines: 10 | Complexity: 4 App\Domain\Document\Submission\Repository\InvestorDocumentRepository::findOneByInvestorAndType — Coverage: 90.0% | Lines: 10 | Complexity: 3 App\Domain\Document\Type\Data\DocumentTypeData::decodeMimeList — Coverage: 80.0% | Lines: 10 | Complexity: 7 App\Domain\ErrorLog\Repository\ErrorLogRepository::resolve — Coverage: 90.0% | Lines: 10 | Complexity: 3 App\Domain\ErrorLog\Repository\ErrorLogRepository::getCountsByLevel — Coverage: 90.0% | Lines: 10 | Complexity: 3 App\Domain\Funding\Repository\FundingRequestRepository::listPending — Coverage: 90.0% | Lines: 10 | Complexity: 3 App\Domain\Investor\Repository\InvestorRepository::getStripeCustomerId — Coverage: 90.0% | Lines: 10 | Complexity: 5 App\Domain\Investor\Repository\InvestorRepository::setStripeCustomerId — Coverage: 90.0% | Lines: 10 | Complexity: 2 App\Domain\Investor\Service\InvestorService::updateInvestor — Coverage: 80.0% | Lines: 10 | Complexity: 6 App\Domain\Investor\Service\InvestorService::updateKycStatus — Coverage: 90.0% | Lines: 10 | Complexity: 7 App\Domain\Loan\Repository\LoanRepository::checkEligibility — Coverage: 80.0% | Lines: 10 | Complexity: 3 App\Domain\Loan\Repository\LoanRepository::findByInvestorId — Coverage: 90.0% | Lines: 10 | Complexity: 3 App\Domain\Loan\Repository\LoanRepository::getConfigBool — Coverage: 80.0% | Lines: 10 | Complexity: 3 App\Domain\Loan\Repository\LoanRepository::getPaymentSchedule — Coverage: 90.0% | Lines: 10 | Complexity: 3 App\Domain\Loan\Repository\LoanRepository::denyLoan — Coverage: 90.0% | Lines: 10 | Complexity: 2 App\Domain\Notification\Data\SentEmailData::fromRow — Coverage: 100.0% | Lines: 10 | Complexity: 1 App\Domain\Notification\Repository\SentEmailRepository::findByInvestorId — Coverage: 90.0% | Lines: 10 | Complexity: 3 App\Domain\Stripe\Repository\StripeWebhookRepository::markFailed — Coverage: 0.0% | Lines: 10 | Complexity: 2 App\Domain\Stripe\Service\StripeService::createSetupIntent — Coverage: 0.0% | Lines: 10 | Complexity: 1 App\Domain\Stripe\Service\StripeService::parseWebhookEvent — Coverage: 0.0% | Lines: 10 | Complexity: 3 App\Domain\SuperAdmin\Data\CronJobStatusData::jsonSerialize — Coverage: 100.0% | Lines: 10 | Complexity: 1 App\Domain\SuperAdmin\Repository\SuperAdminRepository::updateAccountBalance — Coverage: 90.0% | Lines: 10 | Complexity: 2 App\Domain\SuperAdmin\Repository\SuperAdminRepository::updateAccountStatus — Coverage: 90.0% | Lines: 10 | Complexity: 2 App\Domain\SuperAdmin\Repository\SuperAdminRepository::getAllAccountsWithInvestors — Coverage: 90.0% | Lines: 10 | Complexity: 3 App\Domain\SuperAdmin\Repository\SuperAdminRepository::getAllUsers — Coverage: 90.0% | Lines: 10 | Complexity: 3 App\Domain\SuperAdmin\Repository\SuperAdminRepository::updateUserRole — Coverage: 90.0% | Lines: 10 | Complexity: 2 App\Domain\SuperAdmin\Service\SuperAdminService::postInterest — Coverage: 0.0% | Lines: 10 | Complexity: 2 App\Domain\SystemSettings\Repository\SystemSettingsRepository::findAll — Coverage: 90.0% | Lines: 10 | Complexity: 3 App\Middleware\ResourceOwnershipMiddleware::process — Coverage: 100.0% | Lines: 10 | Complexity: 6 App\Support\Row::bool — Coverage: 30.0% | Lines: 10 | Complexity: 10 App\Action\Admin\ImpersonateUserAction::logImpersonation — Coverage: 88.9% | Lines: 9 | Complexity: 2 App\Action\Document\CreateRegistrationDocumentsAction::sendWhenDraftReady — Coverage: 0.0% | Lines: 9 | Complexity: 4 App\Action\Document\Submission\Admin\GetUploadAction::__invoke — Coverage: 100.0% | Lines: 9 | Complexity: 1 App\Action\SuperAdmin\PostInterestAction::__invoke — Coverage: 0.0% | Lines: 9 | Complexity: 1 App\Action\SuperAdmin\ProjectInterestAction::__invoke — Coverage: 0.0% | Lines: 9 | Complexity: 2 App\Console\SeedE2eUsersCommand::resetPendingLoans — Coverage: 0.0% | Lines: 9 | Complexity: 2 App\Console\SeedE2eUsersCommand::generateAccountNumber — Coverage: 0.0% | Lines: 9 | Complexity: 3 App\Domain\Account\Repository\AccountRepository::generateUniqueAccountNumber — Coverage: 55.6% | Lines: 9 | Complexity: 3 App\Domain\Account\Service\AccountService::updateInterestRate — Coverage: 88.9% | Lines: 9 | Complexity: 4 App\Domain\Account\Service\AccountService::updateLoanToValueRatio — Coverage: 88.9% | Lines: 9 | Complexity: 4 App\Domain\Admin\Data\AdminStatsData::__construct — Coverage: 100.0% | Lines: 9 | Complexity: 1 App\Domain\Admin\Repository\AdminRepository::getStats — Coverage: 77.8% | Lines: 9 | Complexity: 3 App\Domain\Admin\Repository\AdminRepository::getAumHistory — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Domain\Audit\AuditService::logLoginFailed — Coverage: 100.0% | Lines: 9 | Complexity: 1 App\Domain\Audit\AuditService::logLogout — Coverage: 100.0% | Lines: 9 | Complexity: 1 App\Domain\Audit\AuditService::logSensitiveDataAccess — Coverage: 100.0% | Lines: 9 | Complexity: 1 App\Domain\Auth\Repository\AuthRepository::findUserByEmail — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Domain\Auth\Repository\AuthRepository::findUserByUsername — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Domain\Auth\Repository\AuthRepository::findUserByInvestorId — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Domain\Auth\Repository\AuthRepository::findUserById — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Domain\Auth\Repository\AuthRepository::findSessionByRefreshToken — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Domain\Auth\Service\RegistrationService::validateUsername — Coverage: 100.0% | Lines: 9 | Complexity: 5 App\Domain\Disbursement\Repository\DisbursementRepository::findById — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Domain\Disbursement\Repository\DisbursementRepository::listPending — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Domain\Document\Provided\Service\ProvidedDocumentService::hashStream — Coverage: 88.9% | Lines: 9 | Complexity: 4 App\Domain\Document\Submission\Repository\InvestorDocumentRepository::findCurrentFileEvent — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Domain\Document\Submission\Service\InvestorDocumentService::hashStream — Coverage: 88.9% | Lines: 9 | Complexity: 4 App\Domain\Funding\Repository\FundingRequestRepository::findById — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Domain\Loan\Data\LoanEligibilityData::fromRow — Coverage: 100.0% | Lines: 9 | Complexity: 1 App\Domain\Loan\Data\LoanEligibilityData::toArray — Coverage: 100.0% | Lines: 9 | Complexity: 1 App\Domain\Loan\Repository\LoanRepository::findActive — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Domain\Loan\Repository\LoanRepository::getConfig — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Domain\Loan\Repository\LoanRepository::findPending — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Domain\Loan\Repository\LoanRepository::findApproved — Coverage: 0.0% | Lines: 9 | Complexity: 3 App\Domain\Notification\Data\SentEmailData::toArray — Coverage: 0.0% | Lines: 9 | Complexity: 1 App\Domain\Notification\Repository\NotificationPreferenceRepository::upsert — Coverage: 100.0% | Lines: 9 | Complexity: 2 App\Domain\Notification\Repository\NotificationPreferenceRepository::getEnabledRecipientsForAdminType — Coverage: 100.0% | Lines: 9 | Complexity: 1 App\Domain\SuperAdmin\Repository\SuperAdminRepository::getAccountById — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Domain\SuperAdmin\Repository\SuperAdminRepository::getUserById — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Domain\SuperAdmin\Repository\SuperAdminRepository::getActiveAccountsWithBalances — Coverage: 0.0% | Lines: 9 | Complexity: 2 App\Domain\SystemSettings\Data\SystemSettingData::jsonSerialize — Coverage: 100.0% | Lines: 9 | Complexity: 1 App\Domain\SystemSettings\Repository\SystemSettingsRepository::findByKey — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Domain\SystemSettings\Service\SystemSettingsService::update — Coverage: 0.0% | Lines: 9 | Complexity: 4 App\Domain\SystemSettings\Service\SystemSettingsService::updateLogLevelThreshold — Coverage: 0.0% | Lines: 9 | Complexity: 2 App\Domain\Transaction\Repository\TransactionRepository::findById — Coverage: 88.9% | Lines: 9 | Complexity: 3 App\Middleware\ResourceOwnershipMiddleware::forbiddenResponse — Coverage: 100.0% | Lines: 9 | Complexity: 1 App\Middleware\RoleMiddleware::forbiddenResponse — Coverage: 100.0% | Lines: 9 | Complexity: 1 App\Renderer\JsonRenderer::json — Coverage: 100.0% | Lines: 9 | Complexity: 1 App\Action\Account\GetAccountBalanceHistoryAction::__invoke — Coverage: 100.0% | Lines: 8 | Complexity: 2 App\Action\Admin\GetAdminInvestorDetailAction::__invoke — Coverage: 100.0% | Lines: 8 | Complexity: 2 App\Action\Admin\GetAdminInvestorLoansAction::__invoke — Coverage: 0.0% | Lines: 8 | Complexity: 2 App\Action\Admin\GetCronJobStatusesAction::__invoke — Coverage: 100.0% | Lines: 8 | Complexity: 3 App\Action\Document\GetDocumentsAction::__invoke — Coverage: 87.5% | Lines: 8 | Complexity: 2 App\Action\Document\Provided\Admin\ListInvestorProvidedDocumentsAction::__invoke — Coverage: 100.0% | Lines: 8 | Complexity: 1 App\Action\Document\ResendDocumentAction::__invoke — Coverage: 100.0% | Lines: 8 | Complexity: 1 App\Action\Document\Submission\Admin\ListInvestorUploadsAction::__invoke — Coverage: 100.0% | Lines: 8 | Complexity: 1 App\Action\Loan\AcceptLoanAction::__invoke — Coverage: 0.0% | Lines: 8 | Complexity: 1 App\Action\Notification\GetMyNotificationPreferencesAction::__invoke — Coverage: 87.5% | Lines: 8 | Complexity: 2 App\Action\SuperAdmin\GetErrorLogAction::__invoke — Coverage: 0.0% | Lines: 8 | Complexity: 2 App\Action\SuperAdmin\GetSystemSettingsAction::__invoke — Coverage: 100.0% | Lines: 8 | Complexity: 1 App\Action\SuperAdmin\ListUsersAction::__invoke — Coverage: 87.5% | Lines: 8 | Complexity: 3 App\Console\ListPandaDocTemplatesCommand::execute — Coverage: 0.0% | Lines: 8 | Complexity: 3 App\Domain\Account\Repository\AccountRepository::getBalanceHistory — Coverage: 100.0% | Lines: 8 | Complexity: 2 App\Domain\Account\Service\AccountService::getAccountSummary — Coverage: 87.5% | Lines: 8 | Complexity: 2 App\Domain\Admin\Repository\AdminRepository::getInvestorDetail — Coverage: 87.5% | Lines: 8 | Complexity: 3 App\Domain\Auth\Repository\AuthRepository::getPasswordHash — Coverage: 87.5% | Lines: 8 | Complexity: 3 App\Domain\Auth\Repository\AuthRepository::invalidateResetTokensForUser — Coverage: 87.5% | Lines: 8 | Complexity: 2 App\Domain\Auth\Service\AuthService::validateUsername — Coverage: 100.0% | Lines: 8 | Complexity: 5 App\Domain\Document\Provided\Service\ProvidedDocumentService::sniffMime — Coverage: 100.0% | Lines: 8 | Complexity: 4 App\Domain\Document\Submission\Service\InvestorDocumentService::withTransaction — Coverage: 50.0% | Lines: 8 | Complexity: 3 App\Domain\Document\Submission\Service\InvestorDocumentService::sniffMime — Coverage: 100.0% | Lines: 8 | Complexity: 4 App\Domain\Document\Type\Repository\DocumentTypeRepository::findById — Coverage: 87.5% | Lines: 8 | Complexity: 3 App\Domain\ErrorLog\Repository\ErrorLogRepository::deleteByIds — Coverage: 87.5% | Lines: 8 | Complexity: 3 App\Domain\Funding\Data\FundingRequestData::toArray — Coverage: 0.0% | Lines: 8 | Complexity: 1 App\Domain\Investor\Repository\InvestorRepository::findInvestorById — Coverage: 87.5% | Lines: 8 | Complexity: 3 App\Domain\Investor\Repository\InvestorRepository::findInvestorByEmail — Coverage: 87.5% | Lines: 8 | Complexity: 3 App\Domain\Investor\Repository\InvestorRepository::findInvestorByUserId — Coverage: 87.5% | Lines: 8 | Complexity: 3 App\Domain\Investor\Service\InvestorService::updateInvestorStatus — Coverage: 87.5% | Lines: 8 | Complexity: 5 App\Domain\Loan\Repository\LoanRepository::findById — Coverage: 87.5% | Lines: 8 | Complexity: 3 App\Domain\Loan\Repository\LoanRepository::getInvestorAccountId — Coverage: 87.5% | Lines: 8 | Complexity: 3 App\Domain\Loan\Repository\LoanRepository::getNextUnpaidScheduleEntry — Coverage: 87.5% | Lines: 8 | Complexity: 3 App\Domain\Notification\Repository\NotificationPreferenceRepository::getByUserId — Coverage: 100.0% | Lines: 8 | Complexity: 2 App\Domain\Notification\Repository\SentEmailRepository::resolveInvestorId — Coverage: 87.5% | Lines: 8 | Complexity: 3 App\Domain\Notification\Service\RecordingEmailService::send — Coverage: 100.0% | Lines: 8 | Complexity: 2 App\Domain\Storage\Service\LocalFileStorage::resolveKey — Coverage: 100.0% | Lines: 8 | Complexity: 7 App\Domain\Stripe\Service\InvestorStripeService::assertInvestorOwnsPaymentMethod — Coverage: 87.5% | Lines: 8 | Complexity: 4 App\Domain\SuperAdmin\Data\CronJobStatusData::__construct — Coverage: 100.0% | Lines: 8 | Complexity: 1 App\Domain\SuperAdmin\Repository\SuperAdminRepository::getAccountYieldRate — Coverage: 87.5% | Lines: 8 | Complexity: 3 App\Domain\SuperAdmin\Service\SuperAdminService::pickWithdrawalAmount — Coverage: 75.0% | Lines: 8 | Complexity: 3 App\Domain\Transaction\Repository\TransactionRepository::getAccountStatus — Coverage: 87.5% | Lines: 8 | Complexity: 3 App\Domain\Transaction\Repository\TransactionRepository::getAccountAvailableBalance — Coverage: 87.5% | Lines: 8 | Complexity: 3 App\Middleware\ErrorLoggingMiddleware::getClientIp — Coverage: 62.5% | Lines: 8 | Complexity: 5 App\Middleware\JwtAuthMiddleware::unauthorizedResponse — Coverage: 100.0% | Lines: 8 | Complexity: 1 App\Support\Row::int — Coverage: 62.5% | Lines: 8 | Complexity: 4 App\Support\Row::string — Coverage: 37.5% | Lines: 8 | Complexity: 4 App\Support\Row::float — Coverage: 62.5% | Lines: 8 | Complexity: 5 App\Action\Admin\CreateInvestorAccountAction::__invoke — Coverage: 0.0% | Lines: 7 | Complexity: 1 App\Action\Auth\ConfirmEmailChangeAction::__invoke — Coverage: 100.0% | Lines: 7 | Complexity: 1 App\Action\Consent\GetMyConsentsAction::__invoke — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Action\Document\Admin\DownloadInvestorAgreementAction::makeAttachmentFilename — Coverage: 85.7% | Lines: 7 | Complexity: 3 App\Action\Document\CreateSigningSessionAction::__invoke — Coverage: 100.0% | Lines: 7 | Complexity: 1 App\Action\Document\DownloadDocumentAction::makeAttachmentFilename — Coverage: 85.7% | Lines: 7 | Complexity: 3 App\Action\Document\Provided\DownloadMyProvidedDocumentAction::__invoke — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Action\Document\Submission\Admin\ListPendingUploadsAction::__invoke — Coverage: 100.0% | Lines: 7 | Complexity: 1 App\Action\Document\Type\ListDocumentTypesAction::__invoke — Coverage: 100.0% | Lines: 7 | Complexity: 1 App\Action\Investor\DetachPaymentMethodAction::__invoke — Coverage: 100.0% | Lines: 7 | Complexity: 1 App\Action\Investor\SetDefaultPaymentMethodAction::__invoke — Coverage: 100.0% | Lines: 7 | Complexity: 1 App\Console\SeedE2eUsersCommand::requireEnv — Coverage: 0.0% | Lines: 7 | Complexity: 3 App\Domain\Account\Repository\AccountRepository::updateAccountStatus — Coverage: 100.0% | Lines: 7 | Complexity: 1 App\Domain\Account\Repository\AccountRepository::updateBankAccountStatus — Coverage: 100.0% | Lines: 7 | Complexity: 1 App\Domain\Account\Repository\AccountRepository::setBankAccountId — Coverage: 100.0% | Lines: 7 | Complexity: 1 App\Domain\Account\Repository\AccountRepository::updateInterestRate — Coverage: 100.0% | Lines: 7 | Complexity: 1 App\Domain\Account\Repository\AccountRepository::updateLoanToValueRatio — Coverage: 100.0% | Lines: 7 | Complexity: 1 App\Domain\Account\Service\AccountService::freezeAccount — Coverage: 85.7% | Lines: 7 | Complexity: 3 App\Domain\Account\Service\AccountService::unfreezeAccount — Coverage: 85.7% | Lines: 7 | Complexity: 3 App\Domain\Auth\Repository\AuthRepository::emailExists — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Domain\Auth\Repository\AuthRepository::usernameExists — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Domain\Auth\Repository\AuthRepository::revokeRefreshToken — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Domain\Auth\Repository\AuthRepository::revokeAllUserTokens — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Domain\Auth\Repository\AuthRepository::cleanupExpiredTokens — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Domain\Auth\Repository\AuthRepository::updateLastLogin — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Domain\Auth\Repository\AuthRepository::incrementFailedLoginAttempts — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Domain\Auth\Repository\AuthRepository::isEmailTakenByAnotherUser — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Domain\Auth\Service\AuthService::getCurrentUser — Coverage: 100.0% | Lines: 7 | Complexity: 5 App\Domain\Auth\Service\RegistrationService::validateEmail — Coverage: 100.0% | Lines: 7 | Complexity: 4 App\Domain\Auth\Service\RegistrationService::validateRequiredString — Coverage: 57.1% | Lines: 7 | Complexity: 4 App\Domain\Document\Data\PandaDocDocumentData::fromStoredFallback — Coverage: 100.0% | Lines: 7 | Complexity: 1 App\Domain\Document\Data\PandaDocRecipientData::fromPandaDocResponse — Coverage: 0.0% | Lines: 7 | Complexity: 1 App\Domain\Document\Data\PandaDocRecipientData::toArray — Coverage: 100.0% | Lines: 7 | Complexity: 1 App\Domain\Document\Provided\Repository\ProvidedDocumentRepository::findById — Coverage: 85.7% | Lines: 7 | Complexity: 3 App\Domain\Document\Provided\Repository\ProvidedDocumentRepository::findByIdForInvestor — Coverage: 85.7% | Lines: 7 | Complexity: 3 App\Domain\Document\Provided\Service\ProvidedDocumentService::describeUploadError — Coverage: 0.0% | Lines: 7 | Complexity: 8 App\Domain\Document\Submission\Repository\InvestorDocumentRepository::findByIdForAdmin — Coverage: 85.7% | Lines: 7 | Complexity: 3 App\Domain\Document\Submission\Repository\InvestorDocumentRepository::findByIdForInvestor — Coverage: 85.7% | Lines: 7 | Complexity: 3 App\Domain\Document\Submission\Repository\InvestorDocumentRepository::updateStatus — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Domain\Document\Submission\Service\InvestorDocumentService::getCurrentFileForInvestor — Coverage: 85.7% | Lines: 7 | Complexity: 4 App\Domain\Document\Submission\Service\InvestorDocumentService::getCurrentFileForAdmin — Coverage: 71.4% | Lines: 7 | Complexity: 4 App\Domain\Document\Submission\Service\InvestorDocumentService::describeUploadError — Coverage: 0.0% | Lines: 7 | Complexity: 8 App\Domain\Investor\Repository\InvestorRepository::emailExists — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Domain\Investor\Repository\InvestorRepository::isEmailTakenByAnotherInvestor — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Domain\Loan\Repository\LoanRepository::investorHasBlockingLoan — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Domain\Notification\Data\NotificationPreference::__construct — Coverage: 100.0% | Lines: 7 | Complexity: 1 App\Domain\Notification\Service\HealthcheckPinger::send — Coverage: 100.0% | Lines: 7 | Complexity: 2 App\Domain\Storage\Service\LocalFileStorage::store — Coverage: 100.0% | Lines: 7 | Complexity: 1 App\Domain\Storage\Service\LocalFileStorage::retrieve — Coverage: 85.7% | Lines: 7 | Complexity: 4 App\Domain\Stripe\Repository\StripeWebhookRepository::markProcessed — Coverage: 0.0% | Lines: 7 | Complexity: 2 App\Domain\SuperAdmin\Repository\SuperAdminRepository::getAccountBalance — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Domain\SuperAdmin\Repository\SuperAdminRepository::emailExistsInUsers — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Domain\SuperAdmin\Repository\SuperAdminRepository::emailExistsInInvestors — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Domain\SystemSettings\Repository\SystemSettingsRepository::getLogLevelThreshold — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Domain\Transaction\Repository\TransactionRepository::accountExists — Coverage: 85.7% | Lines: 7 | Complexity: 2 App\Support\ProvidedDocumentDownload::respond — Coverage: 100.0% | Lines: 7 | Complexity: 1 App\Action\Account\GetAccountAction::__invoke — Coverage: 100.0% | Lines: 6 | Complexity: 1 App\Action\Auth\LoginAction::validateInput — Coverage: 100.0% | Lines: 6 | Complexity: 3 App\Action\Auth\RegisterAction::validateSimpleRegistrationInput — Coverage: 100.0% | Lines: 6 | Complexity: 3 App\Action\Document\Admin\GetInvestorAgreementsAction::__invoke — Coverage: 100.0% | Lines: 6 | Complexity: 1 App\Action\Document\CreateRegistrationDocumentsAction::updateDocumentStatus — Coverage: 0.0% | Lines: 6 | Complexity: 2 App\Action\Document\GetDocumentAction::__invoke — Coverage: 100.0% | Lines: 6 | Complexity: 1 App\Action\Document\Provided\Admin\DeleteProvidedDocumentAction::__invoke — Coverage: 100.0% | Lines: 6 | Complexity: 1 App\Action\Home\VersionAction::__invoke — Coverage: 0.0% | Lines: 6 | Complexity: 2 App\Action\Investor\CreateSetupIntentAction::__invoke — Coverage: 100.0% | Lines: 6 | Complexity: 1 App\Action\Loan\GetMyLoansAction::__invoke — Coverage: 0.0% | Lines: 6 | Complexity: 1 App\Domain\Account\Repository\AccountRepository::findAccountById — Coverage: 100.0% | Lines: 6 | Complexity: 2 App\Domain\Account\Repository\AccountRepository::findAccountByInvestorId — Coverage: 100.0% | Lines: 6 | Complexity: 2 App\Domain\Account\Repository\AccountRepository::findAccountByAccountNumber — Coverage: 100.0% | Lines: 6 | Complexity: 2 App\Domain\Account\Repository\AccountRepository::getAccountSummary — Coverage: 100.0% | Lines: 6 | Complexity: 2 App\Domain\Account\Repository\AccountRepository::getTotalAccounts — Coverage: 83.3% | Lines: 6 | Complexity: 3 App\Domain\Account\Repository\AccountRepository::getTotalBalance — Coverage: 83.3% | Lines: 6 | Complexity: 3 App\Domain\Account\Service\AccountService::getAccount — Coverage: 100.0% | Lines: 6 | Complexity: 3 App\Domain\Account\Service\AccountService::getAccountByInvestorId — Coverage: 100.0% | Lines: 6 | Complexity: 3 App\Domain\Auth\Data\TokenData::toArray — Coverage: 0.0% | Lines: 6 | Complexity: 1 App\Domain\Auth\Repository\AuthRepository::markResetTokenUsed — Coverage: 0.0% | Lines: 6 | Complexity: 2 App\Domain\Auth\Repository\AuthRepository::updatePassword — Coverage: 83.3% | Lines: 6 | Complexity: 2 App\Domain\Auth\Repository\AuthRepository::updateUserEmail — Coverage: 83.3% | Lines: 6 | Complexity: 2 App\Domain\Auth\Repository\AuthRepository::markEmailChangeTokenUsed — Coverage: 83.3% | Lines: 6 | Complexity: 2 App\Domain\Auth\Service\AdminPasswordService::resolveCustomer — Coverage: 100.0% | Lines: 6 | Complexity: 4 App\Domain\Auth\Service\AuthService::validateEmail — Coverage: 100.0% | Lines: 6 | Complexity: 4 App\Domain\Auth\Service\EmailChangeService::validateEmail — Coverage: 66.7% | Lines: 6 | Complexity: 4 App\Domain\Consent\Repository\ConsentRepository::hydrate — Coverage: 100.0% | Lines: 6 | Complexity: 2 App\Domain\Document\Data\PandaDocTemplateFieldData::toArray — Coverage: 0.0% | Lines: 6 | Complexity: 1 App\Domain\Document\Provided\Repository\ProvidedDocumentRepository::delete — Coverage: 83.3% | Lines: 6 | Complexity: 2 App\Domain\Document\Provided\Service\ProvidedDocumentService::delete — Coverage: 66.7% | Lines: 6 | Complexity: 3 App\Domain\Document\Repository\InvestorAgreementRepository::updateStatus — Coverage: 83.3% | Lines: 6 | Complexity: 2 App\Domain\ErrorLog\Service\ErrorLogService::list — Coverage: 100.0% | Lines: 6 | Complexity: 1 App\Domain\Investor\Repository\InvestorRepository::updateEmailById — Coverage: 83.3% | Lines: 6 | Complexity: 2 App\Domain\Investor\Service\InvestorService::getInvestorByUserId — Coverage: 100.0% | Lines: 6 | Complexity: 3 App\Domain\Investor\Service\InvestorService::validateAge — Coverage: 100.0% | Lines: 6 | Complexity: 3 App\Domain\Loan\Repository\LoanRepository::updateLoanConfig — Coverage: 83.3% | Lines: 6 | Complexity: 2 App\Domain\Loan\Repository\LoanRepository::markActive — Coverage: 83.3% | Lines: 6 | Complexity: 2 App\Domain\Loan\Repository\LoanRepository::markRemainingScheduleEntriesPaid — Coverage: 83.3% | Lines: 6 | Complexity: 2 App\Domain\Notification\Service\CronEmailNotifier::typeFor — Coverage: 100.0% | Lines: 6 | Complexity: 2 App\Domain\SuperAdmin\Service\SuperAdminService::generateTransactionDescription — Coverage: 83.3% | Lines: 6 | Complexity: 5 App\Support\Row::array — Coverage: 50.0% | Lines: 6 | Complexity: 2 App\Action\Admin\GetAdminStatsAction::__invoke — Coverage: 100.0% | Lines: 5 | Complexity: 1 App\Action\Admin\GetAumHistoryAction::__invoke — Coverage: 0.0% | Lines: 5 | Complexity: 1 App\Action\Auth\RegisterAction::__invoke — Coverage: 100.0% | Lines: 5 | Complexity: 2 App\Action\Contact\SubmitPublicContactAction::clientIp — Coverage: 80.0% | Lines: 5 | Complexity: 3 App\Action\Loan\GetActiveLoansAction::__invoke — Coverage: 0.0% | Lines: 5 | Complexity: 1 App\Action\Loan\GetApprovedLoansAction::__invoke — Coverage: 0.0% | Lines: 5 | Complexity: 1 App\Domain\Account\Repository\AccountRepository::hasActiveLoans — Coverage: 100.0% | Lines: 5 | Complexity: 1 App\Domain\Account\Repository\AccountRepository::canCloseAccount — Coverage: 100.0% | Lines: 5 | Complexity: 1 App\Domain\Admin\Service\AdminService::getAumHistory — Coverage: 0.0% | Lines: 5 | Complexity: 1 App\Domain\Auth\Service\EmailChangeService::assertEmailAvailable — Coverage: 80.0% | Lines: 5 | Complexity: 4 App\Domain\Auth\Service\EmailChangeService::buildEmailHtml — Coverage: 100.0% | Lines: 5 | Complexity: 1 App\Domain\Auth\Service\EmailChangeService::buildChangedNoticeHtml — Coverage: 100.0% | Lines: 5 | Complexity: 1 App\Domain\Auth\Service\JwtService::generateTokenPair — Coverage: 100.0% | Lines: 5 | Complexity: 1 App\Domain\Auth\Service\PasswordResetService::buildEmailHtml — Coverage: 100.0% | Lines: 5 | Complexity: 1 App\Domain\Auth\Service\RegistrationService::validateOptionalString — Coverage: 40.0% | Lines: 5 | Complexity: 3 App\Domain\Auth\Service\RegistrationService::validateState — Coverage: 100.0% | Lines: 5 | Complexity: 3 App\Domain\Auth\Service\RegistrationService::validateZipCode — Coverage: 100.0% | Lines: 5 | Complexity: 3 App\Domain\Auth\Service\RegistrationService::investorEmailExists — Coverage: 80.0% | Lines: 5 | Complexity: 2 App\Domain\Configuration\ConfigKeyPolicy::canRoleEdit — Coverage: 80.0% | Lines: 5 | Complexity: 3 App\Domain\Disbursement\Repository\DisbursementRepository::countByStatus — Coverage: 80.0% | Lines: 5 | Complexity: 2 App\Domain\Disbursement\Service\DisbursementService::listHistory — Coverage: 60.0% | Lines: 5 | Complexity: 4 App\Domain\Document\Data\PandaDocSigningSessionData::fromPandaDocResponse — Coverage: 0.0% | Lines: 5 | Complexity: 2 App\Domain\Document\Service\PandaDocService::createSigningSession — Coverage: 0.0% | Lines: 5 | Complexity: 1 App\Domain\Document\Service\PandaDocService::resendDocument — Coverage: 0.0% | Lines: 5 | Complexity: 1 App\Domain\Document\Submission\Service\InvestorDocumentService::getForAdmin — Coverage: 80.0% | Lines: 5 | Complexity: 2 App\Domain\Funding\Repository\FundingRequestRepository::countByStatus — Coverage: 80.0% | Lines: 5 | Complexity: 2 App\Domain\Loan\Repository\LoanRepository::acceptLoan — Coverage: 80.0% | Lines: 5 | Complexity: 2 App\Domain\Loan\Repository\LoanRepository::declineLoan — Coverage: 80.0% | Lines: 5 | Complexity: 2 App\Domain\Loan\Service\LoanService::denyLoan — Coverage: 100.0% | Lines: 5 | Complexity: 3 App\Domain\Notification\Data\NotificationType::adminTypes — Coverage: 100.0% | Lines: 5 | Complexity: 1 App\Domain\Notification\Service\CronEmailNotifier::notifyJobSuccess — Coverage: 100.0% | Lines: 5 | Complexity: 1 App\Domain\Notification\Service\CronEmailNotifier::notifyJobAnomaly — Coverage: 100.0% | Lines: 5 | Complexity: 1 App\Domain\Storage\Service\LocalFileStorage::delete — Coverage: 80.0% | Lines: 5 | Complexity: 3 App\Domain\Stripe\Service\StripeService::setDefaultPaymentMethod — Coverage: 0.0% | Lines: 5 | Complexity: 1 App\Domain\Stripe\Service\StripeWebhookService::handleIncomingEvent — Coverage: 100.0% | Lines: 5 | Complexity: 2 App\Domain\SuperAdmin\Repository\SuperAdminRepository::accrueDailyInterest — Coverage: 0.0% | Lines: 5 | Complexity: 2 App\Domain\SuperAdmin\Repository\SuperAdminRepository::snapshotDailyAccountBalance — Coverage: 0.0% | Lines: 5 | Complexity: 2 App\Domain\SuperAdmin\Service\SuperAdminService::pickFeeAmount — Coverage: 80.0% | Lines: 5 | Complexity: 2 App\Domain\SuperAdmin\Service\SuperAdminService::generateReferenceNumber — Coverage: 100.0% | Lines: 5 | Complexity: 2 App\Support\Row::from — Coverage: 40.0% | Lines: 5 | Complexity: 2 App\Action\Document\Provided\Admin\DownloadProvidedDocumentAction::__invoke — Coverage: 100.0% | Lines: 4 | Complexity: 1 App\Console\InspectPandaDocTemplateCommand::configure — Coverage: 0.0% | Lines: 4 | Complexity: 1 App\Console\SendTestEmailCommand::configure — Coverage: 0.0% | Lines: 4 | Complexity: 1 App\Domain\Account\Data\BalanceHistoryPointData::jsonSerialize — Coverage: 100.0% | Lines: 4 | Complexity: 1 App\Domain\Account\Repository\AccountRepository::accountNumberExists — Coverage: 100.0% | Lines: 4 | Complexity: 1 App\Domain\Account\Repository\AccountRepository::investorHasAccount — Coverage: 100.0% | Lines: 4 | Complexity: 1 App\Domain\Account\Repository\AccountRepository::getAvailableForLoan — Coverage: 100.0% | Lines: 4 | Complexity: 1 App\Domain\Account\Service\AccountService::getBalanceHistory — Coverage: 100.0% | Lines: 4 | Complexity: 2 App\Domain\Admin\Service\AdminService::getInvestorDetail — Coverage: 100.0% | Lines: 4 | Complexity: 2 App\Domain\Auth\Service\JwtService::__construct — Coverage: 100.0% | Lines: 4 | Complexity: 1 App\Domain\Auth\Service\JwtService::validateToken — Coverage: 100.0% | Lines: 4 | Complexity: 2 App\Domain\Consent\Data\ConsentCopy::current — Coverage: 75.0% | Lines: 4 | Complexity: 2 App\Domain\Consent\Service\ConsentService::currentActionMap — Coverage: 100.0% | Lines: 4 | Complexity: 2 App\Domain\Document\Data\PandaDocDocumentRefData::fromPandaDocResponse — Coverage: 0.0% | Lines: 4 | Complexity: 1 App\Domain\Document\Data\PandaDocDocumentRefData::toArray — Coverage: 0.0% | Lines: 4 | Complexity: 1 App\Domain\Document\Data\PandaDocSigningSessionData::toArray — Coverage: 100.0% | Lines: 4 | Complexity: 1 App\Domain\Document\Data\PandaDocTemplateTokenData::fromPandaDocResponse — Coverage: 0.0% | Lines: 4 | Complexity: 1 App\Domain\Document\Data\PandaDocTemplateTokenData::toArray — Coverage: 0.0% | Lines: 4 | Complexity: 1 App\Domain\Document\Provided\Service\ProvidedDocumentService::getForInvestor — Coverage: 100.0% | Lines: 4 | Complexity: 2 App\Domain\Document\Provided\Service\ProvidedDocumentService::getForAdmin — Coverage: 75.0% | Lines: 4 | Complexity: 2 App\Domain\Document\Service\PandaDocFieldMapper::map — Coverage: 100.0% | Lines: 4 | Complexity: 4 App\Domain\Document\Service\PandaDocService::sendDocument — Coverage: 0.0% | Lines: 4 | Complexity: 1 App\Domain\Document\Service\PandaDocService::parseStatusCode — Coverage: 0.0% | Lines: 4 | Complexity: 3 App\Domain\ErrorLog\Repository\ErrorLogRepository::getUnresolvedCount — Coverage: 75.0% | Lines: 4 | Complexity: 2 App\Domain\Investor\Service\InvestorService::getInvestor — Coverage: 100.0% | Lines: 4 | Complexity: 2 App\Domain\Investor\Service\InvestorService::getInvestorByEmail — Coverage: 100.0% | Lines: 4 | Complexity: 2 App\Domain\Investor\Service\InvestorService::validateRequiredFields — Coverage: 100.0% | Lines: 4 | Complexity: 5 App\Domain\Loan\Repository\LoanRepository::generatePaymentSchedule — Coverage: 75.0% | Lines: 4 | Complexity: 2 App\Domain\Loan\Repository\LoanRepository::reamortizeLoan — Coverage: 75.0% | Lines: 4 | Complexity: 2 App\Domain\Loan\Service\LoanService::getLoan — Coverage: 100.0% | Lines: 4 | Complexity: 2 App\Domain\Notification\Service\HealthcheckPinger::pingSuccess — Coverage: 100.0% | Lines: 4 | Complexity: 2 App\Domain\Notification\Service\HealthcheckPinger::pingFailure — Coverage: 100.0% | Lines: 4 | Complexity: 2 App\Domain\Storage\Service\LocalFileStorage::ensureDirectory — Coverage: 50.0% | Lines: 4 | Complexity: 4 App\Domain\Storage\Service\LocalFileStorage::generateUuidV4 — Coverage: 100.0% | Lines: 4 | Complexity: 1 App\Domain\Storage\Service\LocalFileStorage::sanitiseExtension — Coverage: 100.0% | Lines: 4 | Complexity: 3 App\Domain\Stripe\Service\InvestorStripeService::listPaymentMethods — Coverage: 100.0% | Lines: 4 | Complexity: 2 App\Domain\SuperAdmin\Service\SuperAdminService::deleteUser — Coverage: 0.0% | Lines: 4 | Complexity: 2 App\Domain\SuperAdmin\Service\SuperAdminService::generateEmail — Coverage: 100.0% | Lines: 4 | Complexity: 1 App\Domain\SuperAdmin\Service\SuperAdminService::generateRandomDateOfBirth — Coverage: 100.0% | Lines: 4 | Complexity: 1 App\Domain\Transaction\Service\TransactionFinder::isValidDate — Coverage: 100.0% | Lines: 4 | Complexity: 2 App\Middleware\ErrorLoggingMiddleware::process — Coverage: 100.0% | Lines: 4 | Complexity: 2 App\Action\Admin\ImpersonateUserAction::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 1 App\Action\Document\Submission\Admin\DownloadUploadAction::sanitiseAttachmentFilename — Coverage: 100.0% | Lines: 3 | Complexity: 2 App\Action\Document\Submission\DownloadMyUploadAction::sanitiseAttachmentFilename — Coverage: 100.0% | Lines: 3 | Complexity: 2 App\Console\ListPandaDocTemplatesCommand::configure — Coverage: 0.0% | Lines: 3 | Complexity: 1 App\Console\SeedE2eUsersCommand::configure — Coverage: 0.0% | Lines: 3 | Complexity: 1 App\Domain\Auth\Service\JwtService::decodeToken — Coverage: 100.0% | Lines: 3 | Complexity: 2 App\Domain\Auth\Service\PasswordService::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 2 App\Domain\Auth\Service\RegistrationService::validatePhone — Coverage: 100.0% | Lines: 3 | Complexity: 3 App\Domain\Disbursement\Service\DisbursementService::enqueue — Coverage: 100.0% | Lines: 3 | Complexity: 3 App\Domain\Document\Provided\Service\ProvidedDocumentService::rewindable — Coverage: 100.0% | Lines: 3 | Complexity: 2 App\Domain\Document\Provided\Service\ProvidedDocumentService::extractExtension — Coverage: 66.7% | Lines: 3 | Complexity: 2 App\Domain\Document\Submission\Service\InvestorDocumentService::rewindable — Coverage: 100.0% | Lines: 3 | Complexity: 2 App\Domain\Document\Submission\Service\InvestorDocumentService::extractExtension — Coverage: 66.7% | Lines: 3 | Complexity: 2 App\Domain\Investor\Service\InvestorService::validatePhone — Coverage: 100.0% | Lines: 3 | Complexity: 2 App\Domain\Notification\Service\NotificationPreferenceService::applicableTypesForRole — Coverage: 100.0% | Lines: 3 | Complexity: 2 App\Domain\SuperAdmin\Service\SuperAdminService::generateRandomInvestment — Coverage: 100.0% | Lines: 3 | Complexity: 1 App\Middleware\ExceptionMiddleware::getHttpStatusCode — Coverage: 100.0% | Lines: 3 | Complexity: 4 App\Middleware\ExceptionMiddleware::getErrorLabel — Coverage: 100.0% | Lines: 3 | Complexity: 4 App\Support\ProvidedDocumentDownload::sanitiseAttachmentFilename — Coverage: 100.0% | Lines: 3 | Complexity: 2 App\Support\Row::nullableInt — Coverage: 100.0% | Lines: 3 | Complexity: 3 App\Support\Row::nullableString — Coverage: 100.0% | Lines: 3 | Complexity: 3 App\Support\Row::nullableFloat — Coverage: 100.0% | Lines: 3 | Complexity: 3 App\Support\Row::nullableBool — Coverage: 100.0% | Lines: 3 | Complexity: 3 App\Support\Row::nullableArray — Coverage: 100.0% | Lines: 3 | Complexity: 3 App\Support\Row::require — Coverage: 66.7% | Lines: 3 | Complexity: 2 App\Action\Account\CreateAccountAction::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Action\Account\GetAccountAction::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Action\Account\GetAccountBalanceHistoryAction::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Action\Admin\GetAdminInvestorDetailAction::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Action\Admin\GetAdminInvestorsAction::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Action\Admin\GetAdminStatsAction::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Action\Home\HomeAction::__invoke — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Action\Investor\CreateInvestorAction::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Action\SuperAdmin\DeleteErrorLogsAction::__construct — Coverage: 0.0% | Lines: 2 | Complexity: 1 App\Action\SuperAdmin\GetSystemSettingsAction::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Action\SuperAdmin\ListErrorLogsAction::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Domain\Account\Data\BalanceHistoryPointData::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Domain\Auth\Service\AuthService::logout — Coverage: 100.0% | Lines: 2 | Complexity: 2 App\Domain\Consent\Repository\ConsentRepository::getCurrentForUser — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Domain\Consent\Repository\ConsentRepository::getHistoryForUser — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Domain\Document\Service\PandaDocService::getDocumentDetails — Coverage: 0.0% | Lines: 2 | Complexity: 1 App\Domain\Document\Service\PandaDocService::getDocumentStatus — Coverage: 0.0% | Lines: 2 | Complexity: 1 App\Domain\Document\Service\PandaDocService::inspectTemplate — Coverage: 0.0% | Lines: 2 | Complexity: 1 App\Domain\Exception\ValidationException::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Domain\Investor\Service\InvestorService::validateZipCode — Coverage: 100.0% | Lines: 2 | Complexity: 2 App\Domain\Loan\Service\LoanService::getPaymentSchedule — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Domain\Storage\Service\LocalFileStorage::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 2 App\Domain\Stripe\Service\InvestorStripeService::createSetupIntentClientSecret — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Domain\Stripe\Service\InvestorStripeService::detachPaymentMethod — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Domain\Stripe\Service\InvestorStripeService::setDefaultPaymentMethod — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Domain\SuperAdmin\Service\SuperAdminService::generateRandomDateInRange — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Domain\SuperAdmin\Service\SuperAdminService::guardNonProduction — Coverage: 0.0% | Lines: 2 | Complexity: 2 App\Action\Account\GetAccountByInvestorAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Account\GetAccountSummaryAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Account\GetAccountTransactionsAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Account\UpdateAccountStatusAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Admin\CreateAdminTransactionAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Admin\CreateInvestorAccountAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Admin\GetAdminInvestorLoansAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Admin\GetAdminTransactionsAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Admin\GetAumHistoryAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Admin\GetConfigurationAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Admin\GetCronJobStatusesAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Admin\GetLendingActivityAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Admin\SendInvestorPasswordResetAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Admin\SetInvestorPasswordAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Admin\UpdateConfigurationAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Auth\ChangePasswordAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Auth\ConfirmEmailChangeAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Auth\ForgotPasswordAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Auth\GetCurrentUserAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Auth\LoginAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Auth\LogoutAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Auth\RefreshTokenAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Auth\RegisterAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Auth\RegisterAction::isCompleteRegistration — Coverage: 100.0% | Lines: 1 | Complexity: 2 App\Action\Auth\RequestEmailChangeAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Auth\ResetPasswordAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Consent\GetMyConsentsAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Consent\UpdateMyConsentsAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Contact\SubmitContactAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Contact\SubmitPublicContactAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Disbursement\GetDisbursementHistoryAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Disbursement\ListPendingDisbursementsAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Disbursement\MarkDisbursedAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Admin\DownloadInvestorAgreementAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Admin\GetInvestorAgreementsAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\CreateRegistrationDocumentsAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Document\CreateSigningSessionAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\DownloadDocumentAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\GetDocumentAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\GetDocumentsAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Provided\Admin\DeleteProvidedDocumentAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Provided\Admin\DownloadProvidedDocumentAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Provided\Admin\ListInvestorProvidedDocumentsAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Provided\Admin\UploadProvidedDocumentAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Provided\DownloadMyProvidedDocumentAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Provided\ListMyProvidedDocumentsAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\ResendDocumentAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Submission\Admin\AcceptUploadAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Submission\Admin\DownloadUploadAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Submission\Admin\GetUploadAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Submission\Admin\ListInvestorUploadsAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Submission\Admin\ListPendingUploadsAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Submission\Admin\RejectUploadAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Submission\DiscardUploadAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Submission\DownloadMyUploadAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Submission\ListMyUploadsAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Submission\UploadDocumentAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Document\Type\ListDocumentTypesAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Funding\ListPendingFundingRequestsAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Funding\SubmitFundingRequestAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Funding\UpdateFundingRequestStatusAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Home\PingAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Home\PingAction::__invoke — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Home\VersionAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Investor\CreateSetupIntentAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Investor\DetachPaymentMethodAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Investor\GetInvestorAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Investor\GetInvestorByUserIdAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Investor\ListPaymentMethodsAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Investor\SetDefaultPaymentMethodAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Investor\UpdateInvestorAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Investor\UpdateInvestorStatusAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Investor\UpdateKycStatusAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Loan\AcceptLoanAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Loan\ApproveLoanAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Loan\CheckEligibilityAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Loan\DeclineLoanAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Loan\DenyLoanAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Loan\GetActiveLoansAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Loan\GetApprovedLoansAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Loan\GetLoanAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Loan\GetMyLoansAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Loan\GetPendingLoansAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Loan\MakeAdditionalPaymentAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Loan\MakePaymentAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Loan\RequestLoanAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Notification\GetMyEmailsAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\Notification\GetMyNotificationPreferencesAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Notification\UpdateMyNotificationPreferencesAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\Stripe\WebhookAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\SuperAdmin\AccrueInterestAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\SuperAdmin\CreateTestUserAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\SuperAdmin\DeleteTestDataAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\SuperAdmin\DeleteUserAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\SuperAdmin\GenerateBulkDataAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\SuperAdmin\GenerateTransactionsAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\SuperAdmin\GetAccountsForSuperAdminAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\SuperAdmin\GetErrorLogAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\SuperAdmin\ListUsersAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Action\SuperAdmin\PostInterestAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\SuperAdmin\ProjectInterestAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\SuperAdmin\ResolveErrorLogAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\SuperAdmin\UpdateSystemSettingAction::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Action\SuperAdmin\UpdateUserRoleAction::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Console\AccrueInterestCommand::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Console\InspectPandaDocTemplateCommand::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Console\ListPandaDocTemplatesCommand::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Console\PostMonthlyInterestCommand::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Console\SeedE2eUsersCommand::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Console\SendTestEmailCommand::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Console\SnapshotAccountBalancesCommand::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Account\Data\AccountData::jsonSerialize — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Account\Data\AccountSummaryData::jsonSerialize — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Account\Repository\AccountRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Account\Service\AccountService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Admin\Repository\AdminRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Admin\Service\AdminService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Admin\Service\AdminService::getStats — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Audit\AuditService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Audit\AuditService::getRequestId — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Auth\Data\AdminActor::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Auth\Data\TokenData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Auth\Data\UserAuthData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Auth\Repository\AuthRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Auth\Service\AdminPasswordService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Auth\Service\AuthService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Auth\Service\AuthService::logoutAllDevices — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Auth\Service\EmailChangeService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Auth\Service\JwtService::getAccessTokenExpiry — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Auth\Service\JwtService::getRefreshTokenExpiry — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Auth\Service\PasswordResetService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Auth\Service\PasswordService::hashPassword — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Auth\Service\PasswordService::verifyPassword — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Auth\Service\PasswordService::needsRehash — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Auth\Service\RegistrationService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Configuration\ConfigKeyPolicy::canRoleRead — Coverage: 100.0% | Lines: 1 | Complexity: 2 App\Domain\Consent\Data\ConsentRecord::isGranted — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Consent\Data\ConsentRecord::jsonSerialize — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Consent\Data\ConsentType::requiredTypes — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Consent\Data\ConsentType::optionalTypes — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Consent\Data\ConsentType::allTypes — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Consent\Data\ConsentType::isValid — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Consent\Data\ConsentType::isOptional — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Consent\Data\ConsentType::isValidSource — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Consent\Data\ConsentType::actionFor — Coverage: 100.0% | Lines: 1 | Complexity: 2 App\Domain\Consent\Repository\ConsentRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Consent\Service\ConsentService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Contact\Data\ContactMessageData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Contact\Repository\ContactRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Contact\Service\CloudflareTurnstileVerifier::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Contact\Service\ContactService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Disbursement\Data\DisbursementData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Disbursement\Repository\DisbursementRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Disbursement\Service\DisbursementService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Disbursement\Service\DisbursementService::listPending — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Disbursement\Service\DisbursementService::countByStatus — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Data\DocumentTemplateData::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Data\PandaDocDocumentData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Data\PandaDocDocumentRefData::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Data\PandaDocRecipientData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Data\PandaDocSigningSessionData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Data\PandaDocTemplateDetailsData::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Data\PandaDocTemplateFieldData::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Data\PandaDocTemplateTokenData::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Provided\Data\ProvidedDocumentData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Provided\Repository\ProvidedDocumentRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Provided\Service\ProvidedDocumentService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Provided\Service\ProvidedDocumentService::listForInvestor — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Provided\Service\ProvidedDocumentService::getStream — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Repository\DocumentTemplateRepository::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Repository\InvestorAgreementRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Service\IdentityVerificationService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Service\InvestorAgreementService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Service\PandaDocService::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Submission\Data\AdminInvestorDocumentData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Submission\Data\InvestorDocumentData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Submission\Data\InvestorDocumentEventData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Submission\Repository\InvestorDocumentRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Submission\Service\InvestorDocumentService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Submission\Service\InvestorDocumentService::listForInvestor — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Submission\Service\InvestorDocumentService::listActiveTypes — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Submission\Service\InvestorDocumentService::getStream — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Submission\Service\InvestorDocumentService::listPendingForAdmin — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Submission\Service\InvestorDocumentService::listForInvestorAsAdmin — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Type\Data\DocumentTypeData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Document\Type\Repository\DocumentTypeRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\ErrorLog\Data\ErrorLogFilterData::getOffset — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\ErrorLog\Repository\ErrorLogRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\ErrorLog\Service\ErrorLogService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\ErrorLog\Service\ErrorLogService::debug — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\ErrorLog\Service\ErrorLogService::info — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\ErrorLog\Service\ErrorLogService::notice — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\ErrorLog\Service\ErrorLogService::warning — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\ErrorLog\Service\ErrorLogService::error — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\ErrorLog\Service\ErrorLogService::critical — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\ErrorLog\Service\ErrorLogService::alert — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\ErrorLog\Service\ErrorLogService::emergency — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\ErrorLog\Service\ErrorLogService::getById — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\ErrorLog\Service\ErrorLogService::resolve — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\ErrorLog\Service\ErrorLogService::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\ErrorLog\Service\ErrorLogService::getLogLevels — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Exception\AuthenticationException::getStatusCode — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Exception\AuthenticationException::getTitle — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Exception\BadRequestException::getStatusCode — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Exception\BadRequestException::getTitle — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Exception\ConflictException::getStatusCode — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Exception\ConflictException::getTitle — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Exception\ForbiddenException::getStatusCode — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Exception\ForbiddenException::getTitle — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Exception\NotFoundException::getStatusCode — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Exception\NotFoundException::getTitle — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Exception\ValidationException::forField — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Exception\ValidationException::getStatusCode — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Exception\ValidationException::getTitle — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Exception\ValidationException::getErrors — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Funding\Data\FundingRequestData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Funding\Repository\FundingRequestRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Funding\Service\FundingRequestService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Funding\Service\FundingRequestService::listPending — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Funding\Service\FundingRequestService::countPending — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Investor\Data\InvestorData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Investor\Repository\InvestorRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Investor\Service\InvestorService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Investor\Service\InvestorService::activateInvestor — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Investor\Service\InvestorService::deactivateInvestor — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Investor\Service\InvestorService::suspendInvestor — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Loan\Data\LoanData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Loan\Data\LoanEligibilityData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Loan\Repository\LoanRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Loan\Service\LoanService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Loan\Service\LoanService::checkEligibility — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Loan\Service\LoanService::getInvestorLoans — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Loan\Service\LoanService::getPendingLoans — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Loan\Service\LoanService::getActiveLoans — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Loan\Service\LoanService::getApprovedLoans — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Loan\Service\LoanService::getConfig — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Loan\Service\LoanService::getValidTerms — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Notification\Data\EmailMessage::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Notification\Data\NotificationPreference::jsonSerialize — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Notification\Data\NotificationType::allKnownTypes — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Notification\Data\NotificationType::isValid — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Notification\Data\NotificationType::isAdminType — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Notification\Data\SentEmailData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Notification\Repository\NotificationPreferenceRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Notification\Repository\SentEmailRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Notification\Service\CronEmailNotifier::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Notification\Service\HealthcheckPinger::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Notification\Service\NotificationDispatcher::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Notification\Service\NotificationPreferenceService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Notification\Service\RecordingEmailService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Notification\Service\SmtpEmailService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Storage\Service\LocalFileStorage::exists — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Stripe\Data\PaymentChargeData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Stripe\Data\PaymentMethodData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Stripe\Data\SetupIntentData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Stripe\Data\StripeCustomerData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Stripe\Data\WebhookEventData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Stripe\Exception\WebhookSignatureException::getStatusCode — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Stripe\Exception\WebhookSignatureException::getTitle — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Stripe\Repository\StripeWebhookRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Stripe\Service\InvestorStripeService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Stripe\Service\StripeService::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Stripe\Service\StripeService::detachPaymentMethod — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Stripe\Service\StripeWebhookService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\SuperAdmin\Repository\SuperAdminRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\SuperAdmin\Repository\SuperAdminRepository::toIntArrayLiteral — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\SuperAdmin\Service\SuperAdminService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\SuperAdmin\Service\SuperAdminService::replayAccountHistory — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\SuperAdmin\Service\SuperAdminService::getAccountsForDropdown — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\SuperAdmin\Service\SuperAdminService::deleteTestData — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\SuperAdmin\Service\SuperAdminService::getTestDataCounts — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\SuperAdmin\Service\SuperAdminService::generateUsername — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\SystemSettings\Data\SystemSettingData::getValue — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\SystemSettings\Repository\SystemSettingsRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\SystemSettings\Repository\SystemSettingsRepository::getValue — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\SystemSettings\Service\SystemSettingsService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\SystemSettings\Service\SystemSettingsService::getAll — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\SystemSettings\Service\SystemSettingsService::getByKey — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\SystemSettings\Service\SystemSettingsService::getLogLevelThreshold — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Domain\Transaction\Data\TransactionData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Transaction\Repository\TransactionRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Transaction\Service\TransactionFinder::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Transaction\Service\TransactionService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Domain\Transaction\Service\TransactionService::getValidTypes — Coverage: 0.0% | Lines: 1 | Complexity: 1 App\Middleware\ErrorLoggingMiddleware::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Middleware\ExceptionMiddleware::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Middleware\JwtAuthMiddleware::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Middleware\ResourceOwnershipMiddleware::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Middleware\RoleMiddleware::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1

 

Sorted by descending CRAP (Change Risk Anti-Patterns) index.

Method CRAP Coverage
App\Domain\Contact\Service\CloudflareTurnstileVerifier::verify1820.0%
App\Domain\Admin\Repository\AdminRepository::getAllTransactions1560.0%
App\Console\InspectPandaDocTemplateCommand::execute1320.0%
App\Console\SeedE2eUsersCommand::loadE2eEnvFile1320.0%
App\Domain\Document\Data\PandaDocTemplateDetailsData::fromPandaDocResponse900.0%
App\Domain\SystemSettings\Service\SystemSettingsService::validateSetting900.0%
App\Action\Auth\ResetPasswordAction::__invoke720.0%
App\Domain\Document\Provided\Service\ProvidedDocumentService::describeUploadError720.0%
App\Domain\Document\Submission\Service\InvestorDocumentService::describeUploadError720.0%
App\Domain\SuperAdmin\Service\SuperAdminService::projectInterest720.0%
App\Action\Admin\CreateAdminTransactionAction::__invoke560.0%
App\Domain\Document\Service\PandaDocService::makeRequest560.0%
App\Domain\Notification\Service\CurlHealthcheckClient::get560.0%
App\Domain\ErrorLog\Repository\ErrorLogRepository::findAll44.5469.8%
App\Support\Row::bool44.3030.0%
App\Action\SuperAdmin\ResolveErrorLogAction::__invoke420.0%
App\Action\SuperAdmin\UpdateSystemSettingAction::__invoke420.0%
App\Console\SeedE2eUsersCommand::execute420.0%
App\Domain\Document\Service\PandaDocService::listTemplates420.0%
App\Domain\Notification\Service\SmtpEmailService::send420.0%
App\Domain\Stripe\Service\StripeService::listPaymentMethods420.0%
App\Action\Admin\GetAdminTransactionsAction::__invoke300.0%
App\Action\Document\CreateRegistrationDocumentsAction::__invoke300.0%
App\Action\SuperAdmin\DeleteErrorLogsAction::__invoke300.0%
App\Action\SuperAdmin\DeleteUserAction::__invoke300.0%
App\Domain\Stripe\Service\StripeService::chargePaymentMethod300.0%
App\Domain\SuperAdmin\Service\SuperAdminService::accrueInterest300.0%
App\Domain\Document\Submission\Service\InvestorDocumentService::uploadForInvestor24.2865.5%
App\Domain\SuperAdmin\Service\SuperAdminService::generateMonthTransactions21.2292.1%
App\Action\Document\CreateRegistrationDocumentsAction::sendWhenDraftReady200.0%
App\Action\Funding\UpdateFundingRequestStatusAction::__invoke200.0%
App\Action\Loan\DenyLoanAction::__invoke200.0%
App\Action\Loan\GetLoanAction::__invoke200.0%
App\Domain\Admin\Service\AdminService::getAllTransactions200.0%
App\Domain\Admin\Service\AdminService::getLendingActivity200.0%
App\Domain\Document\Service\PandaDocService::createDocumentFromTemplate200.0%
App\Domain\Document\Service\PandaDocService::downloadDocument200.0%
App\Domain\Stripe\Service\StripeService::createCustomer200.0%
App\Domain\SystemSettings\Service\SystemSettingsService::update200.0%
App\Domain\Transaction\Service\TransactionService::createTransaction19.4183.7%
App\Middleware\ErrorLoggingMiddleware::determineLogLevel16.1965.0%
App\Domain\Document\Provided\Service\ProvidedDocumentService::uploadForInvestor15.0876.9%
App\Domain\Contact\Service\ContactService::submitPublic14.5053.3%
App\Domain\SuperAdmin\Service\SuperAdminService::createTestUser1498.3%
App\Domain\Disbursement\Service\DisbursementService::markDisbursed13.3187.8%
App\Middleware\ErrorLoggingMiddleware::buildContext13.0563.2%
App\Domain\Storage\Service\LocalFileStorage::writeStreamAtomic13.0457.1%
App\Domain\Transaction\Service\TransactionFinder::findByAccountId13100.0%
App\Domain\Funding\Service\FundingRequestService::notifyAdmins12.8717.9%
App\Action\Funding\ListPendingFundingRequestsAction::__invoke120.0%
App\Action\Funding\SubmitFundingRequestAction::__invoke120.0%
App\Action\Loan\ApproveLoanAction::__invoke120.0%
App\Action\Loan\DeclineLoanAction::__invoke120.0%
App\Action\Loan\GetPendingLoansAction::__invoke120.0%
App\Action\Loan\RequestLoanAction::__invoke120.0%
App\Console\AccrueInterestCommand::execute120.0%
App\Console\ListPandaDocTemplatesCommand::execute120.0%
App\Console\SeedE2eUsersCommand::generateAccountNumber120.0%
App\Console\SeedE2eUsersCommand::requireEnv120.0%
App\Console\SendTestEmailCommand::execute120.0%
App\Console\SnapshotAccountBalancesCommand::execute120.0%
App\Domain\Auth\Repository\AuthRepository::findValidResetToken120.0%
App\Domain\Document\Data\PandaDocDocumentData::fromPandaDocResponse120.0%
App\Domain\Document\Repository\DocumentTemplateRepository::findActive120.0%
App\Domain\Document\Service\PandaDocService::parseStatusCode120.0%
App\Domain\Funding\Repository\FundingRequestRepository::findByInvestorId120.0%
App\Domain\Loan\Repository\LoanRepository::findApproved120.0%
App\Domain\Stripe\Service\StripeService::findCustomer120.0%
App\Domain\Stripe\Service\StripeService::parseWebhookEvent120.0%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::postMonthlyInterest120.0%
App\Domain\SuperAdmin\Service\SuperAdminService::generateTransactions1298.0%
App\Domain\SystemSettings\Repository\SystemSettingsRepository::update120.0%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::deleteUser11.1090.5%
App\Domain\Account\Service\AccountService::createAccountForInvestor1196.2%
App\Action\Disbursement\GetDisbursementHistoryAction::__invoke10.7180.8%
App\Domain\Funding\Service\FundingRequestService::submit10.5582.4%
App\Domain\Funding\Service\FundingRequestService::updateStatus10.2985.7%
App\Action\Notification\UpdateMyNotificationPreferencesAction::validatePreferences10.2775.0%
App\Domain\Loan\Service\LoanService::makeAdditionalPayment10.2187.2%
App\Support\AppUrlResolver::resolve10.0294.1%
App\Domain\Admin\Repository\AdminRepository::getInvestorsList1097.0%
App\Middleware\ErrorLoggingMiddleware::extractErrorCode9.1986.7%
App\Domain\Auth\Service\RegistrationService::registerComplete9.0989.6%
App\Domain\Auth\Service\AuthService::login9.0294.3%
App\Domain\ErrorLog\Data\ErrorLogFilterData::__construct9100.0%
App\Action\Consent\UpdateMyConsentsAction::validateConsents8.2584.2%
App\Domain\Loan\Service\LoanService::approveLoan8.0293.8%
App\Domain\Investor\Service\InvestorService::createInvestor8.0194.4%
App\Domain\Transaction\Repository\TransactionRepository::findByAccountId8.0194.4%
App\Domain\SuperAdmin\Service\SuperAdminService::generateBulkData898.1%
App\Support\Row::string7.9137.5%
App\Domain\Document\Type\Data\DocumentTypeData::decodeMimeList7.3980.0%
App\Domain\Investor\Service\InvestorService::updateKycStatus7.0590.0%
App\Action\Consent\UpdateMyConsentsAction::__invoke7.0391.7%
App\Domain\ErrorLog\Repository\ErrorLogRepository::findById7.0292.9%
App\Domain\Loan\Service\LoanService::requestLoan7.0193.8%
App\Domain\SuperAdmin\Service\SuperAdminService::classifyStatus7.0193.8%
App\Action\Admin\ImpersonateUserAction::__invoke7100.0%
App\Domain\Auth\Service\RegistrationService::extractConsents7100.0%
App\Domain\Storage\Service\LocalFileStorage::resolveKey7100.0%
App\Action\Auth\RegisterAction::getClientIp6.9270.6%
App\Middleware\JwtAuthMiddleware::getClientIp6.9270.6%
App\Domain\Auth\Service\EmailChangeService::confirmChange6.4277.3%
App\Domain\Contact\Service\ContactService::submit6.4277.3%
App\Middleware\ErrorLoggingMiddleware::getClientIp6.3262.5%
App\Support\Row::float6.3262.5%
App\Domain\Investor\Service\InvestorService::updateInvestor6.2980.0%
App\Domain\Audit\AuditService::setContext6.2481.2%
App\Action\Document\DownloadDocumentAction::getOwnedDocumentName6.1384.6%
App\Domain\Stripe\Service\InvestorStripeService::chargeLoanPayment6.0490.0%
App\Action\Admin\SendInvestorPasswordResetAction::requireAdmin6.0291.7%
App\Action\Admin\SetInvestorPasswordAction::requireAdmin6.0291.7%
App\Domain\Document\Submission\Service\InvestorDocumentService::acceptForAdmin6.0291.3%
App\Domain\Auth\Service\EmailChangeService::requestChange6.0193.3%
App\Domain\Loan\Service\LoanService::makePayment6.0193.0%
App\Action\Account\UpdateAccountStatusAction::__invoke6100.0%
App\Action\Admin\GetAdminInvestorLoansAction::__invoke60.0%
App\Action\Auth\ChangePasswordAction::__invoke6100.0%
App\Action\Disbursement\MarkDisbursedAction::__invoke6100.0%
App\Action\Document\CreateRegistrationDocumentsAction::createAndSendDocument60.0%
App\Action\Document\CreateRegistrationDocumentsAction::saveDocument60.0%
App\Action\Document\CreateRegistrationDocumentsAction::updateDocumentStatus60.0%
App\Action\Home\VersionAction::__invoke60.0%
App\Action\Loan\MakeAdditionalPaymentAction::__invoke60.0%
App\Action\Notification\GetMyEmailsAction::__invoke60.0%
App\Action\SuperAdmin\GetErrorLogAction::__invoke60.0%
App\Action\SuperAdmin\ProjectInterestAction::__invoke60.0%
App\Console\PostMonthlyInterestCommand::execute60.0%
App\Console\SeedE2eUsersCommand::seedInvestor60.0%
App\Console\SeedE2eUsersCommand::resetPendingLoans60.0%
App\Domain\Auth\Repository\AuthRepository::markResetTokenUsed60.0%
App\Domain\Auth\Service\AuthService::refreshToken6100.0%
App\Domain\Auth\Service\AuthService::validatePassword6100.0%
App\Domain\Auth\Service\RegistrationService::validatePassword6100.0%
App\Domain\Consent\Service\ConsentService::getCurrentForUser6100.0%
App\Domain\Document\Data\PandaDocSigningSessionData::fromPandaDocResponse60.0%
App\Domain\Document\Data\PandaDocTemplateFieldData::fromPandaDocResponse60.0%
App\Domain\Document\Service\InvestorAgreementService::listForInvestor6100.0%
App\Domain\ErrorLog\Service\ErrorLogService::sanitize6100.0%
App\Domain\Storage\Service\LocalFileStorage::ensureDirectory6.0050.0%
App\Domain\Stripe\Repository\StripeWebhookRepository::markProcessed60.0%
App\Domain\Stripe\Repository\StripeWebhookRepository::markFailed60.0%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::accrueDailyInterest60.0%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::snapshotDailyAccountBalance60.0%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::getActiveAccountsWithBalances60.0%
App\Domain\SuperAdmin\Service\SuperAdminService::deleteUser60.0%
App\Domain\SuperAdmin\Service\SuperAdminService::postInterest60.0%
App\Domain\SuperAdmin\Service\SuperAdminService::guardNonProduction60.0%
App\Domain\SystemSettings\Service\SystemSettingsService::updateLogLevelThreshold60.0%
App\Middleware\ResourceOwnershipMiddleware::process6100.0%
App\Domain\Document\Submission\Service\InvestorDocumentService::rejectForAdmin5.5572.0%
App\Domain\Auth\Service\RegistrationService::validateRequiredString5.2657.1%
App\Domain\Funding\Service\FundingRequestService::assertWithdrawable5.1681.2%
App\Domain\SuperAdmin\Service\SuperAdminService::generateTransactionDescription5.1283.3%
App\Domain\Audit\AuditService::logAccountStatusChange5.0587.5%
App\Domain\Investor\Service\InvestorService::updateInvestorStatus5.0587.5%
App\Domain\Investor\Repository\InvestorRepository::getStripeCustomerId5.0390.0%
App\Domain\Account\Service\AccountService::closeAccount5.0290.9%
App\Domain\Auth\Service\PasswordService::validateStrength5.0290.9%
App\Domain\Disbursement\Service\DisbursementService::listHistory5.0260.0%
App\Domain\Document\Repository\InvestorAgreementRepository::findOwnedDocumentName5.0290.9%
App\Action\SuperAdmin\GenerateTransactionsAction::__invoke5.0193.8%
App\Domain\Auth\Repository\AuthRepository::isAccountLocked5.0194.1%
App\Domain\Notification\Repository\SentEmailRepository::record5.0193.3%
App\Action\Admin\UpdateConfigurationAction::__invoke5100.0%
App\Domain\Audit\AuditService::log595.2%
App\Domain\Audit\AuditService::getRecentActivity5.0094.4%
App\Domain\Auth\Service\AuthService::getCurrentUser5100.0%
App\Domain\Auth\Service\AuthService::validateUsername5100.0%
App\Domain\Auth\Service\RegistrationService::validateUsername5100.0%
App\Domain\Auth\Service\RegistrationService::validateDateOfBirth5100.0%
App\Domain\Consent\Service\ConsentService::applyDecisions5100.0%
App\Domain\ErrorLog\Service\ErrorLogService::log5100.0%
App\Domain\Investor\Repository\InvestorRepository::updateInvestor596.6%
App\Domain\Investor\Service\InvestorService::validateRequiredFields5100.0%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::countTestData5.0094.4%
App\Domain\SuperAdmin\Service\SuperAdminService::updateUserRole5100.0%
App\Domain\Auth\Service\RegistrationService::validateOptionalString4.9440.0%
App\Support\Row::int4.8462.5%
App\Domain\Auth\Service\EmailChangeService::validateEmail4.5966.7%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::generateUniqueAccountNumber4.4769.2%
App\Domain\Document\Submission\Repository\InvestorDocumentRepository::findByInvestorId4.4370.0%
App\Domain\Document\Submission\Service\InvestorDocumentService::getCurrentFileForAdmin4.3771.4%
App\Domain\Funding\Service\FundingRequestService::recordApprovedTransaction4.3472.2%
App\Domain\SystemSettings\Data\SystemSettingData::__construct4.2076.9%
App\Domain\Auth\Service\EmailChangeService::assertEmailAvailable4.1380.0%
App\Domain\Document\Submission\Service\InvestorDocumentService::withTransaction4.1250.0%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::replayAccountHistory4.1181.2%
App\Domain\Auth\Service\RegistrationService::generateAccountNumber4.1081.8%
App\Domain\Contact\Service\ContactService::dispatchAdminEmail4.0684.8%
App\Domain\Document\Submission\Service\InvestorDocumentService::getCurrentFileForInvestor4.0585.7%
App\Domain\Storage\Service\LocalFileStorage::retrieve4.0585.7%
App\Domain\Stripe\Service\InvestorStripeService::assertInvestorOwnsPaymentMethod4.0387.5%
App\Domain\Account\Service\AccountService::updateInterestRate4.0288.9%
App\Domain\Account\Service\AccountService::updateLoanToValueRatio4.0288.9%
App\Domain\Document\Provided\Repository\ProvidedDocumentRepository::findByInvestorId4.0290.0%
App\Domain\Document\Provided\Service\ProvidedDocumentService::hashStream4.0288.9%
App\Domain\Document\Submission\Repository\InvestorDocumentRepository::findPending4.0290.0%
App\Domain\Document\Submission\Repository\InvestorDocumentRepository::findByInvestorIdForAdmin4.0290.0%
App\Domain\Document\Submission\Service\InvestorDocumentService::hashStream4.0288.9%
App\Domain\Account\Service\AccountService::activateAccount4.0192.9%
App\Domain\Document\Submission\Repository\InvestorDocumentRepository::findEventsForDocument4.0191.7%
App\Domain\Document\Type\Repository\DocumentTypeRepository::findActive4.0190.9%
App\Domain\Loan\Repository\LoanRepository::recordPayment4.0190.3%
App\Domain\Loan\Service\LoanService::declineLoan4.0192.3%
App\Middleware\ErrorLoggingMiddleware::logException4.0192.3%
App\Action\Account\GetAccountTransactionsAction::__invoke4100.0%
App\Action\Auth\ForgotPasswordAction::__invoke4100.0%
App\Action\Document\Submission\UploadDocumentAction::__invoke495.8%
App\Action\Notification\UpdateMyNotificationPreferencesAction::__invoke4.0093.8%
App\Domain\Admin\Service\AdminService::getInvestorsList4100.0%
App\Domain\Audit\AuditService::logKycStatusChange4.0093.3%
App\Domain\Auth\Service\AdminPasswordService::resolveCustomer4100.0%
App\Domain\Auth\Service\AuthService::register4.0094.7%
App\Domain\Auth\Service\AuthService::validateEmail4100.0%
App\Domain\Auth\Service\RegistrationService::validateEmail4100.0%
App\Domain\Document\Provided\Service\ProvidedDocumentService::sniffMime4100.0%
App\Domain\Document\Service\PandaDocFieldMapper::map4100.0%
App\Domain\Document\Submission\Service\InvestorDocumentService::persist4100.0%
App\Domain\Document\Submission\Service\InvestorDocumentService::sniffMime4100.0%
App\Domain\ErrorLog\Repository\ErrorLogRepository::insert495.2%
App\Domain\Notification\Service\NotificationDispatcher::dispatch4100.0%
App\Domain\Notification\Service\NotificationDispatcher::resolveRecipients4100.0%
App\Domain\Notification\Service\NotificationPreferenceService::updatePreferences4100.0%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::getCronJobLastRunSummaries4100.0%
App\Middleware\ExceptionMiddleware::process495.8%
App\Middleware\ExceptionMiddleware::getHttpStatusCode4100.0%
App\Middleware\ExceptionMiddleware::getErrorLabel4100.0%
App\Middleware\JwtAuthMiddleware::process4100.0%
App\Domain\Account\Repository\AccountRepository::generateUniqueAccountNumber3.7955.6%
App\Domain\Document\Provided\Service\ProvidedDocumentService::delete3.3366.7%
App\Domain\SuperAdmin\Service\SuperAdminService::pickWithdrawalAmount3.1475.0%
App\Domain\Admin\Repository\AdminRepository::getStats3.1077.8%
App\Action\Contact\SubmitPublicContactAction::clientIp3.0780.0%
App\Domain\Configuration\ConfigKeyPolicy::canRoleEdit3.0780.0%
App\Domain\Loan\Repository\LoanRepository::checkEligibility3.0780.0%
App\Domain\Loan\Repository\LoanRepository::getConfigBool3.0780.0%
App\Domain\Storage\Service\LocalFileStorage::delete3.0780.0%
App\Action\Auth\RegisterAction::validateCompleteRegistrationInput3.0484.2%
App\Domain\Account\Repository\AccountRepository::getTotalAccounts3.0483.3%
App\Domain\Account\Repository\AccountRepository::getTotalBalance3.0483.3%
App\Action\Document\Admin\DownloadInvestorAgreementAction::makeAttachmentFilename3.0385.7%
App\Action\Document\DownloadDocumentAction::makeAttachmentFilename3.0385.7%
App\Domain\Account\Service\AccountService::freezeAccount3.0385.7%
App\Domain\Account\Service\AccountService::unfreezeAccount3.0385.7%
App\Domain\Document\Provided\Repository\ProvidedDocumentRepository::findById3.0385.7%
App\Domain\Document\Provided\Repository\ProvidedDocumentRepository::findByIdForInvestor3.0385.7%
App\Domain\Document\Submission\Repository\InvestorDocumentRepository::findByIdForAdmin3.0385.7%
App\Domain\Document\Submission\Repository\InvestorDocumentRepository::findByIdForInvestor3.0385.7%
App\Action\SuperAdmin\ListUsersAction::__invoke3.0287.5%
App\Domain\Admin\Repository\AdminRepository::getInvestorDetail3.0287.5%
App\Domain\Auth\Repository\AuthRepository::getPasswordHash3.0287.5%
App\Domain\Document\Type\Repository\DocumentTypeRepository::findById3.0287.5%
App\Domain\ErrorLog\Repository\ErrorLogRepository::deleteByIds3.0287.5%
App\Domain\Investor\Repository\InvestorRepository::findInvestorById3.0287.5%
App\Domain\Investor\Repository\InvestorRepository::findInvestorByEmail3.0287.5%
App\Domain\Investor\Repository\InvestorRepository::findInvestorByUserId3.0287.5%
App\Domain\Loan\Repository\LoanRepository::findById3.0287.5%
App\Domain\Loan\Repository\LoanRepository::getInvestorAccountId3.0287.5%
App\Domain\Loan\Repository\LoanRepository::getNextUnpaidScheduleEntry3.0287.5%
App\Domain\Notification\Repository\SentEmailRepository::resolveInvestorId3.0287.5%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::getAccountYieldRate3.0287.5%
App\Domain\Transaction\Repository\TransactionRepository::create3.0287.5%
App\Domain\Transaction\Repository\TransactionRepository::getAccountStatus3.0287.5%
App\Domain\Transaction\Repository\TransactionRepository::getAccountAvailableBalance3.0287.5%
App\Action\Investor\UpdateInvestorStatusAction::__invoke3.0188.9%
App\Action\Investor\UpdateKycStatusAction::__invoke3.0188.9%
App\Action\SuperAdmin\DeleteTestDataAction::__invoke3.0190.0%
App\Action\SuperAdmin\GetAccountsForSuperAdminAction::__invoke3.0191.7%
App\Action\SuperAdmin\UpdateUserRoleAction::__invoke3.0191.7%
App\Domain\Admin\Repository\AdminRepository::getAumHistory3.0188.9%
App\Domain\Admin\Repository\AdminRepository::getLendingActivity3.0189.5%
App\Domain\Audit\AuditService::getUserActivity3.0191.7%
App\Domain\Auth\Repository\AuthRepository::findUserByEmail3.0188.9%
App\Domain\Auth\Repository\AuthRepository::findUserByUsername3.0188.9%
App\Domain\Auth\Repository\AuthRepository::findUserByInvestorId3.0188.9%
App\Domain\Auth\Repository\AuthRepository::findUserById3.0188.9%
App\Domain\Auth\Repository\AuthRepository::findSessionByRefreshToken3.0188.9%
App\Domain\Disbursement\Repository\DisbursementRepository::findById3.0188.9%
App\Domain\Disbursement\Repository\DisbursementRepository::listPending3.0188.9%
App\Domain\Document\Submission\Repository\InvestorDocumentRepository::findOneByInvestorAndType3.0190.0%
App\Domain\Document\Submission\Repository\InvestorDocumentRepository::findCurrentFileEvent3.0188.9%
App\Domain\ErrorLog\Repository\ErrorLogRepository::resolve3.0190.0%
App\Domain\ErrorLog\Repository\ErrorLogRepository::getCountsByLevel3.0190.0%
App\Domain\Funding\Repository\FundingRequestRepository::create3.0188.2%
App\Domain\Funding\Repository\FundingRequestRepository::listPending3.0190.0%
App\Domain\Funding\Repository\FundingRequestRepository::findById3.0188.9%
App\Domain\Investor\Repository\InvestorRepository::updateKycStatus3.0191.7%
App\Domain\Investor\Repository\InvestorRepository::updateInvestorStatus3.0191.7%
App\Domain\Loan\Repository\LoanRepository::findByInvestorId3.0190.0%
App\Domain\Loan\Repository\LoanRepository::findActive3.0188.9%
App\Domain\Loan\Repository\LoanRepository::getConfig3.0188.9%
App\Domain\Loan\Repository\LoanRepository::getPaymentSchedule3.0190.0%
App\Domain\Loan\Repository\LoanRepository::findPending3.0188.9%
App\Domain\Notification\Repository\SentEmailRepository::findByInvestorId3.0190.0%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::getAccountById3.0188.9%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::getAllAccountsWithInvestors3.0190.0%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::getAllUsers3.0190.0%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::getUserById3.0188.9%
App\Domain\SystemSettings\Repository\SystemSettingsRepository::findAll3.0190.0%
App\Domain\SystemSettings\Repository\SystemSettingsRepository::findByKey3.0188.9%
App\Domain\Transaction\Repository\TransactionRepository::findById3.0188.9%
App\Domain\Transaction\Repository\TransactionRepository::getLockedInvestmentBalance3.0190.9%
App\Action\Admin\GetConfigurationAction::__invoke3100.0%
App\Action\Admin\GetCronJobStatusesAction::__invoke3100.0%
App\Action\Admin\SetInvestorPasswordAction::__invoke3100.0%
App\Action\Auth\LoginAction::validateInput3100.0%
App\Action\Auth\LogoutAction::__invoke3100.0%
App\Action\Auth\RefreshTokenAction::__invoke3100.0%
App\Action\Auth\RegisterAction::validateSimpleRegistrationInput3100.0%
App\Action\Disbursement\ListPendingDisbursementsAction::__invoke3100.0%
App\Action\SuperAdmin\CreateTestUserAction::__invoke3.0094.7%
App\Action\SuperAdmin\GenerateBulkDataAction::__invoke3.0094.1%
App\Domain\Account\Service\AccountService::getAccount3100.0%
App\Domain\Account\Service\AccountService::getAccountByInvestorId3100.0%
App\Domain\Audit\AuditService::logConsent3100.0%
App\Domain\Audit\AuditService::getRecordHistory3.0092.3%
App\Domain\Auth\Repository\AuthRepository::findValidEmailChangeToken3.0093.3%
App\Domain\Auth\Service\RegistrationService::validatePhone3100.0%
App\Domain\Auth\Service\RegistrationService::validateState3100.0%
App\Domain\Auth\Service\RegistrationService::validateZipCode3100.0%
App\Domain\Disbursement\Repository\DisbursementRepository::listHistory3.0092.3%
App\Domain\Disbursement\Service\DisbursementService::enqueue3100.0%
App\Domain\Document\Repository\InvestorAgreementRepository::findByInvestorId3.0094.4%
App\Domain\Document\Submission\Repository\InvestorDocumentRepository::listSelect3100.0%
App\Domain\Document\Submission\Service\InvestorDocumentService::discardForInvestor3.0094.1%
App\Domain\Investor\Service\InvestorService::getInvestorByUserId3100.0%
App\Domain\Investor\Service\InvestorService::validateAge3100.0%
App\Domain\Loan\Repository\LoanRepository::getLoanConfig3.0093.3%
App\Domain\Loan\Service\LoanService::acceptLoan3100.0%
App\Domain\Loan\Service\LoanService::denyLoan3100.0%
App\Domain\Notification\Service\NotificationPreferenceService::getPreferencesForUser3100.0%
App\Domain\Storage\Service\LocalFileStorage::sanitiseExtension3100.0%
App\Domain\Stripe\Service\InvestorStripeService::ensureCustomerExists3100.0%
App\Middleware\RoleMiddleware::process3100.0%
App\Support\Row::nullableInt3100.0%
App\Support\Row::nullableString3100.0%
App\Support\Row::nullableFloat3100.0%
App\Support\Row::nullableBool3100.0%
App\Support\Row::nullableArray3100.0%
App\Support\Row::from2.8640.0%
App\Support\Row::array2.5050.0%
App\Domain\Document\Provided\Service\ProvidedDocumentService::extractExtension2.1566.7%
App\Domain\Document\Submission\Service\InvestorDocumentService::extractExtension2.1566.7%
App\Support\Row::require2.1566.7%
App\Domain\Auth\Service\EmailChangeService::notifyOldAddress2.0873.3%
App\Domain\Consent\Data\ConsentCopy::current2.0675.0%
App\Domain\Document\Provided\Service\ProvidedDocumentService::getForAdmin2.0675.0%
App\Domain\ErrorLog\Repository\ErrorLogRepository::getUnresolvedCount2.0675.0%
App\Domain\Loan\Repository\LoanRepository::generatePaymentSchedule2.0675.0%
App\Domain\Loan\Repository\LoanRepository::reamortizeLoan2.0675.0%
App\Domain\Auth\Service\RegistrationService::investorEmailExists2.0380.0%
App\Domain\Disbursement\Repository\DisbursementRepository::countByStatus2.0380.0%
App\Domain\Document\Submission\Service\InvestorDocumentService::getForAdmin2.0380.0%
App\Domain\Funding\Repository\FundingRequestRepository::countByStatus2.0380.0%
App\Domain\Loan\Repository\LoanRepository::acceptLoan2.0380.0%
App\Domain\Loan\Repository\LoanRepository::declineLoan2.0380.0%
App\Domain\SuperAdmin\Service\SuperAdminService::pickFeeAmount2.0380.0%
App\Domain\Auth\Repository\AuthRepository::updatePassword2.0283.3%
App\Domain\Auth\Repository\AuthRepository::updateUserEmail2.0283.3%
App\Domain\Auth\Repository\AuthRepository::markEmailChangeTokenUsed2.0283.3%
App\Domain\Document\Provided\Repository\ProvidedDocumentRepository::delete2.0283.3%
App\Domain\Document\Repository\InvestorAgreementRepository::updateStatus2.0283.3%
App\Domain\Investor\Repository\InvestorRepository::updateEmailById2.0283.3%
App\Domain\Loan\Repository\LoanRepository::updateLoanConfig2.0283.3%
App\Domain\Loan\Repository\LoanRepository::markActive2.0283.3%
App\Domain\Loan\Repository\LoanRepository::markRemainingScheduleEntriesPaid2.0283.3%
App\Action\Admin\ImpersonateUserAction::logImpersonation2.0188.9%
App\Action\Consent\GetMyConsentsAction::__invoke2.0185.7%
App\Action\Document\GetDocumentsAction::__invoke2.0187.5%
App\Action\Document\Provided\DownloadMyProvidedDocumentAction::__invoke2.0185.7%
App\Action\Notification\GetMyNotificationPreferencesAction::__invoke2.0187.5%
App\Domain\Account\Service\AccountService::getAccountSummary2.0187.5%
App\Domain\Auth\Repository\AuthRepository::emailExists2.0185.7%
App\Domain\Auth\Repository\AuthRepository::usernameExists2.0185.7%
App\Domain\Auth\Repository\AuthRepository::revokeRefreshToken2.0185.7%
App\Domain\Auth\Repository\AuthRepository::revokeAllUserTokens2.0185.7%
App\Domain\Auth\Repository\AuthRepository::cleanupExpiredTokens2.0185.7%
App\Domain\Auth\Repository\AuthRepository::updateLastLogin2.0185.7%
App\Domain\Auth\Repository\AuthRepository::incrementFailedLoginAttempts2.0185.7%
App\Domain\Auth\Repository\AuthRepository::invalidateResetTokensForUser2.0187.5%
App\Domain\Auth\Repository\AuthRepository::isEmailTakenByAnotherUser2.0185.7%
App\Domain\Document\Submission\Repository\InvestorDocumentRepository::updateStatus2.0185.7%
App\Domain\Investor\Repository\InvestorRepository::emailExists2.0185.7%
App\Domain\Investor\Repository\InvestorRepository::isEmailTakenByAnotherInvestor2.0185.7%
App\Domain\Loan\Repository\LoanRepository::investorHasBlockingLoan2.0185.7%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::getAccountBalance2.0185.7%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::emailExistsInUsers2.0185.7%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::emailExistsInInvestors2.0185.7%
App\Domain\SystemSettings\Repository\SystemSettingsRepository::getLogLevelThreshold2.0185.7%
App\Domain\Transaction\Repository\TransactionRepository::accountExists2.0185.7%
App\Action\Account\GetAccountBalanceHistoryAction::__invoke2100.0%
App\Action\Admin\CreateAdminTransactionAction::__construct20.0%
App\Action\Admin\CreateInvestorAccountAction::__construct20.0%
App\Action\Admin\CreateInvestorAccountAction::__invoke20.0%
App\Action\Admin\GetAdminInvestorDetailAction::__invoke2100.0%
App\Action\Admin\GetAdminInvestorLoansAction::__construct20.0%
App\Action\Admin\GetAdminTransactionsAction::__construct20.0%
App\Action\Admin\GetAumHistoryAction::__construct20.0%
App\Action\Admin\GetAumHistoryAction::__invoke20.0%
App\Action\Admin\GetLendingActivityAction::__construct20.0%
App\Action\Admin\GetLendingActivityAction::__invoke20.0%
App\Action\Admin\SendInvestorPasswordResetAction::__invoke2.0090.0%
App\Action\Auth\GetCurrentUserAction::__invoke2.0093.3%
App\Action\Auth\RegisterAction::__invoke2100.0%
App\Action\Auth\RegisterAction::isCompleteRegistration2100.0%
App\Action\Auth\RegisterAction::handleCompleteRegistration2100.0%
App\Action\Auth\ResetPasswordAction::__construct20.0%
App\Action\Contact\SubmitPublicContactAction::__invoke2100.0%
App\Action\Document\Admin\DownloadInvestorAgreementAction::__invoke2100.0%
App\Action\Document\CreateRegistrationDocumentsAction::__construct20.0%
App\Action\Document\Provided\Admin\UploadProvidedDocumentAction::__invoke2100.0%
App\Action\Document\Provided\ListMyProvidedDocumentsAction::__invoke2.0090.0%
App\Action\Document\Submission\Admin\DownloadUploadAction::sanitiseAttachmentFilename2100.0%
App\Action\Document\Submission\Admin\RejectUploadAction::__invoke2100.0%
App\Action\Document\Submission\DiscardUploadAction::__invoke2.0090.9%
App\Action\Document\Submission\DownloadMyUploadAction::__invoke2.0093.3%
App\Action\Document\Submission\DownloadMyUploadAction::sanitiseAttachmentFilename2100.0%
App\Action\Document\Submission\ListMyUploadsAction::__invoke2.0090.0%
App\Action\Funding\ListPendingFundingRequestsAction::__construct20.0%
App\Action\Funding\SubmitFundingRequestAction::__construct20.0%
App\Action\Funding\UpdateFundingRequestStatusAction::__construct20.0%
App\Action\Home\VersionAction::__construct20.0%
App\Action\Investor\GetInvestorAction::__invoke296.0%
App\Action\Investor\GetInvestorByUserIdAction::__invoke2100.0%
App\Action\Loan\AcceptLoanAction::__construct20.0%
App\Action\Loan\AcceptLoanAction::__invoke20.0%
App\Action\Loan\ApproveLoanAction::__construct20.0%
App\Action\Loan\DeclineLoanAction::__construct20.0%
App\Action\Loan\DenyLoanAction::__construct20.0%
App\Action\Loan\GetActiveLoansAction::__construct20.0%
App\Action\Loan\GetActiveLoansAction::__invoke20.0%
App\Action\Loan\GetApprovedLoansAction::__construct20.0%
App\Action\Loan\GetApprovedLoansAction::__invoke20.0%
App\Action\Loan\GetLoanAction::__construct20.0%
App\Action\Loan\GetMyLoansAction::__construct20.0%
App\Action\Loan\GetMyLoansAction::__invoke20.0%
App\Action\Loan\GetPendingLoansAction::__construct20.0%
App\Action\Loan\MakeAdditionalPaymentAction::__construct20.0%
App\Action\Loan\MakePaymentAction::__construct20.0%
App\Action\Loan\MakePaymentAction::__invoke20.0%
App\Action\Loan\RequestLoanAction::__construct20.0%
App\Action\Notification\GetMyEmailsAction::__construct20.0%
App\Action\SuperAdmin\AccrueInterestAction::__construct20.0%
App\Action\SuperAdmin\AccrueInterestAction::__invoke20.0%
App\Action\SuperAdmin\DeleteErrorLogsAction::__construct20.0%
App\Action\SuperAdmin\DeleteUserAction::__construct20.0%
App\Action\SuperAdmin\GetErrorLogAction::__construct20.0%
App\Action\SuperAdmin\PostInterestAction::__construct20.0%
App\Action\SuperAdmin\PostInterestAction::__invoke20.0%
App\Action\SuperAdmin\ProjectInterestAction::__construct20.0%
App\Action\SuperAdmin\ResolveErrorLogAction::__construct20.0%
App\Action\SuperAdmin\UpdateSystemSettingAction::__construct20.0%
App\Console\AccrueInterestCommand::__construct20.0%
App\Console\AccrueInterestCommand::configure20.0%
App\Console\InspectPandaDocTemplateCommand::__construct20.0%
App\Console\InspectPandaDocTemplateCommand::configure20.0%
App\Console\ListPandaDocTemplatesCommand::__construct20.0%
App\Console\ListPandaDocTemplatesCommand::configure20.0%
App\Console\PostMonthlyInterestCommand::__construct20.0%
App\Console\PostMonthlyInterestCommand::configure20.0%
App\Console\SeedE2eUsersCommand::__construct20.0%
App\Console\SeedE2eUsersCommand::configure20.0%
App\Console\SeedE2eUsersCommand::seedStaffUser20.0%
App\Console\SendTestEmailCommand::__construct20.0%
App\Console\SendTestEmailCommand::configure20.0%
App\Console\SnapshotAccountBalancesCommand::__construct20.0%
App\Console\SnapshotAccountBalancesCommand::configure20.0%
App\Domain\Account\Data\AccountSummaryData::jsonSerialize20.0%
App\Domain\Account\Repository\AccountRepository::findAccountById2100.0%
App\Domain\Account\Repository\AccountRepository::findAccountByInvestorId2100.0%
App\Domain\Account\Repository\AccountRepository::findAccountByAccountNumber2100.0%
App\Domain\Account\Repository\AccountRepository::getAccountSummary2100.0%
App\Domain\Account\Repository\AccountRepository::getBalanceHistory2100.0%
App\Domain\Account\Service\AccountService::getBalanceHistory2100.0%
App\Domain\Admin\Service\AdminService::getInvestorDetail2100.0%
App\Domain\Admin\Service\AdminService::getAumHistory20.0%
App\Domain\Audit\AuditService::logImpersonationEnd20.0%
App\Domain\Auth\Data\TokenData::toArray20.0%
App\Domain\Auth\Repository\AuthRepository::createUser2.0092.9%
App\Domain\Auth\Repository\AuthRepository::storeRefreshToken2.0092.9%
App\Domain\Auth\Repository\AuthRepository::lockAccount2.0090.0%
App\Domain\Auth\Repository\AuthRepository::storePasswordResetToken2.0090.0%
App\Domain\Auth\Repository\AuthRepository::storeEmailChangeToken2.0091.7%
App\Domain\Auth\Service\AuthService::logout2100.0%
App\Domain\Auth\Service\JwtService::validateToken2100.0%
App\Domain\Auth\Service\JwtService::decodeToken2100.0%
App\Domain\Auth\Service\PasswordService::__construct2100.0%
App\Domain\Auth\Service\RegistrationService::createInvestor295.7%
App\Domain\Auth\Service\RegistrationService::createAccount2.0093.8%
App\Domain\Configuration\ConfigKeyPolicy::canRoleRead2100.0%
App\Domain\Consent\Data\ConsentRecord::jsonSerialize20.0%
App\Domain\Consent\Data\ConsentType::actionFor2100.0%
App\Domain\Consent\Repository\ConsentRepository::append2100.0%
App\Domain\Consent\Repository\ConsentRepository::hydrate2100.0%
App\Domain\Consent\Service\ConsentService::currentActionMap2100.0%
App\Domain\Contact\Repository\ContactRepository::insert2.0090.9%
App\Domain\Contact\Repository\ContactRepository::insertPublic2.0091.7%
App\Domain\Contact\Service\CloudflareTurnstileVerifier::__construct20.0%
App\Domain\Disbursement\Repository\DisbursementRepository::enqueue2.0090.0%
App\Domain\Disbursement\Repository\DisbursementRepository::markDisbursed2.0091.7%
App\Domain\Document\Data\DocumentTemplateData::__construct20.0%
App\Domain\Document\Data\DocumentTemplateData::fromRow20.0%
App\Domain\Document\Data\DocumentTemplateData::toArray20.0%
App\Domain\Document\Data\PandaDocDocumentRefData::__construct20.0%
App\Domain\Document\Data\PandaDocDocumentRefData::fromPandaDocResponse20.0%
App\Domain\Document\Data\PandaDocDocumentRefData::toArray20.0%
App\Domain\Document\Data\PandaDocRecipientData::fromPandaDocResponse20.0%
App\Domain\Document\Data\PandaDocTemplateDetailsData::__construct20.0%
App\Domain\Document\Data\PandaDocTemplateFieldData::__construct20.0%
App\Domain\Document\Data\PandaDocTemplateFieldData::toArray20.0%
App\Domain\Document\Data\PandaDocTemplateTokenData::__construct20.0%
App\Domain\Document\Data\PandaDocTemplateTokenData::fromPandaDocResponse20.0%
App\Domain\Document\Data\PandaDocTemplateTokenData::toArray20.0%
App\Domain\Document\Provided\Repository\ProvidedDocumentRepository::create2.0094.4%
App\Domain\Document\Provided\Service\ProvidedDocumentService::getForInvestor2100.0%
App\Domain\Document\Provided\Service\ProvidedDocumentService::rewindable2100.0%
App\Domain\Document\Repository\DocumentTemplateRepository::__construct20.0%
App\Domain\Document\Service\IdentityVerificationService::markIdentityVerifiedIfApplicable2.0090.0%
App\Domain\Document\Service\PandaDocFieldMapper::mapForW92100.0%
App\Domain\Document\Service\PandaDocService::__construct20.0%
App\Domain\Document\Service\PandaDocService::getDocumentDetails20.0%
App\Domain\Document\Service\PandaDocService::createSigningSession20.0%
App\Domain\Document\Service\PandaDocService::resendDocument20.0%
App\Domain\Document\Service\PandaDocService::getDocumentStatus20.0%
App\Domain\Document\Service\PandaDocService::sendDocument20.0%
App\Domain\Document\Service\PandaDocService::inspectTemplate20.0%
App\Domain\Document\Submission\Repository\InvestorDocumentRepository::create2.0091.7%
App\Domain\Document\Submission\Repository\InvestorDocumentRepository::insertEvent2.0094.4%
App\Domain\Document\Submission\Service\InvestorDocumentService::listActiveTypes20.0%
App\Domain\Document\Submission\Service\InvestorDocumentService::rewindable2100.0%
App\Domain\ErrorLog\Data\ErrorLogData::jsonSerialize20.0%
App\Domain\ErrorLog\Service\ErrorLogService::info20.0%
App\Domain\ErrorLog\Service\ErrorLogService::notice20.0%
App\Domain\ErrorLog\Service\ErrorLogService::warning20.0%
App\Domain\ErrorLog\Service\ErrorLogService::formatStackTrace2100.0%
App\Domain\Exception\ValidationException::forField20.0%
App\Domain\Exception\ValidationException::getErrors20.0%
App\Domain\Funding\Data\FundingRequestData::toArray20.0%
App\Domain\Funding\Data\FundingRequestData::toAdminArray20.0%
App\Domain\Funding\Repository\FundingRequestRepository::updateStatus2.0090.9%
App\Domain\Investor\Repository\InvestorRepository::createInvestor295.5%
App\Domain\Investor\Repository\InvestorRepository::setStripeCustomerId2.0090.0%
App\Domain\Investor\Service\InvestorService::getInvestor2100.0%
App\Domain\Investor\Service\InvestorService::getInvestorByEmail2100.0%
App\Domain\Investor\Service\InvestorService::validatePhone2100.0%
App\Domain\Investor\Service\InvestorService::validateZipCode2100.0%
App\Domain\Loan\Data\LoanData::toArray20.0%
App\Domain\Loan\Repository\LoanRepository::createLoanRequest2.0092.9%
App\Domain\Loan\Repository\LoanRepository::approveLoan2.0092.3%
App\Domain\Loan\Repository\LoanRepository::denyLoan2.0090.0%
App\Domain\Loan\Repository\LoanRepository::recordAdditionalPayment2.0091.7%
App\Domain\Loan\Service\LoanService::getLoan2100.0%
App\Domain\Loan\Service\LoanService::getApprovedLoans20.0%
App\Domain\Notification\Data\NotificationPreference::jsonSerialize20.0%
App\Domain\Notification\Data\NotificationType::allKnownTypes20.0%
App\Domain\Notification\Data\NotificationType::isValid20.0%
App\Domain\Notification\Data\SentEmailData::toArray20.0%
App\Domain\Notification\Repository\NotificationPreferenceRepository::getByUserId2100.0%
App\Domain\Notification\Repository\NotificationPreferenceRepository::upsert2100.0%
App\Domain\Notification\Service\CronEmailNotifier::typeFor2100.0%
App\Domain\Notification\Service\HealthcheckPinger::pingSuccess2100.0%
App\Domain\Notification\Service\HealthcheckPinger::pingFailure2100.0%
App\Domain\Notification\Service\HealthcheckPinger::send2100.0%
App\Domain\Notification\Service\NotificationPreferenceService::applicableTypesForRole2100.0%
App\Domain\Notification\Service\RecordingEmailService::send2100.0%
App\Domain\Storage\Service\LocalFileStorage::__construct2100.0%
App\Domain\Stripe\Repository\StripeWebhookRepository::recordReceived2.0091.7%
App\Domain\Stripe\Service\InvestorStripeService::listPaymentMethods2100.0%
App\Domain\Stripe\Service\StripeService::__construct20.0%
App\Domain\Stripe\Service\StripeService::createSetupIntent20.0%
App\Domain\Stripe\Service\StripeService::detachPaymentMethod20.0%
App\Domain\Stripe\Service\StripeService::setDefaultPaymentMethod20.0%
App\Domain\Stripe\Service\StripeWebhookService::handleIncomingEvent2100.0%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::createUser2.0092.3%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::createInvestor295.5%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::createAccount295.2%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::createTransaction2.0094.1%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::updateAccountBalance2.0090.0%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::updateAccountStatus2.0090.0%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::updateUserRole2.0090.0%
App\Domain\SuperAdmin\Service\SuperAdminService::getCronJobStatuses296.2%
App\Domain\SuperAdmin\Service\SuperAdminService::generateReferenceNumber2100.0%
App\Domain\SystemSettings\Data\SystemSettingData::getValue20.0%
App\Domain\SystemSettings\Service\SystemSettingsService::getByKey20.0%
App\Domain\SystemSettings\Service\SystemSettingsService::getLogLevelThreshold20.0%
App\Domain\Transaction\Service\TransactionFinder::isValidDate2100.0%
App\Domain\Transaction\Service\TransactionService::getValidTypes20.0%
App\Factory\DatabaseFactory::__invoke2.0094.7%
App\Middleware\ErrorLoggingMiddleware::process2100.0%
App\Support\ProvidedDocumentDownload::sanitiseAttachmentFilename2100.0%
App\Action\Account\CreateAccountAction::__construct1100.0%
App\Action\Account\CreateAccountAction::__invoke1100.0%
App\Action\Account\GetAccountAction::__construct1100.0%
App\Action\Account\GetAccountAction::__invoke1100.0%
App\Action\Account\GetAccountBalanceHistoryAction::__construct1100.0%
App\Action\Account\GetAccountByInvestorAction::__construct1100.0%
App\Action\Account\GetAccountByInvestorAction::__invoke1100.0%
App\Action\Account\GetAccountSummaryAction::__construct1100.0%
App\Action\Account\GetAccountSummaryAction::__invoke1100.0%
App\Action\Account\GetAccountTransactionsAction::__construct1100.0%
App\Action\Account\UpdateAccountStatusAction::__construct1100.0%
App\Action\Admin\GetAdminInvestorDetailAction::__construct1100.0%
App\Action\Admin\GetAdminInvestorsAction::__construct1100.0%
App\Action\Admin\GetAdminInvestorsAction::__invoke1100.0%
App\Action\Admin\GetAdminStatsAction::__construct1100.0%
App\Action\Admin\GetAdminStatsAction::__invoke1100.0%
App\Action\Admin\GetConfigurationAction::__construct1100.0%
App\Action\Admin\GetCronJobStatusesAction::__construct1100.0%
App\Action\Admin\ImpersonateUserAction::__construct1100.0%
App\Action\Admin\SendInvestorPasswordResetAction::__construct1100.0%
App\Action\Admin\SetInvestorPasswordAction::__construct1100.0%
App\Action\Admin\UpdateConfigurationAction::__construct1100.0%
App\Action\Auth\ChangePasswordAction::__construct1100.0%
App\Action\Auth\ConfirmEmailChangeAction::__construct1100.0%
App\Action\Auth\ConfirmEmailChangeAction::__invoke1100.0%
App\Action\Auth\ForgotPasswordAction::__construct1100.0%
App\Action\Auth\GetCurrentUserAction::__construct1100.0%
App\Action\Auth\LoginAction::__construct1100.0%
App\Action\Auth\LoginAction::__invoke1100.0%
App\Action\Auth\LogoutAction::__construct1100.0%
App\Action\Auth\RefreshTokenAction::__construct1100.0%
App\Action\Auth\RegisterAction::__construct1100.0%
App\Action\Auth\RegisterAction::handleSimpleRegistration1100.0%
App\Action\Auth\RequestEmailChangeAction::__construct1100.0%
App\Action\Auth\RequestEmailChangeAction::__invoke1100.0%
App\Action\Consent\GetMyConsentsAction::__construct1100.0%
App\Action\Consent\UpdateMyConsentsAction::__construct1100.0%
App\Action\Contact\SubmitContactAction::__construct1100.0%
App\Action\Contact\SubmitContactAction::__invoke1100.0%
App\Action\Contact\SubmitPublicContactAction::__construct1100.0%
App\Action\Disbursement\GetDisbursementHistoryAction::__construct1100.0%
App\Action\Disbursement\ListPendingDisbursementsAction::__construct1100.0%
App\Action\Disbursement\MarkDisbursedAction::__construct1100.0%
App\Action\Document\Admin\DownloadInvestorAgreementAction::__construct1100.0%
App\Action\Document\Admin\GetInvestorAgreementsAction::__construct1100.0%
App\Action\Document\Admin\GetInvestorAgreementsAction::__invoke1100.0%
App\Action\Document\CreateSigningSessionAction::__construct1100.0%
App\Action\Document\CreateSigningSessionAction::__invoke1100.0%
App\Action\Document\DownloadDocumentAction::__construct1100.0%
App\Action\Document\DownloadDocumentAction::__invoke1100.0%
App\Action\Document\GetDocumentAction::__construct1100.0%
App\Action\Document\GetDocumentAction::__invoke1100.0%
App\Action\Document\GetDocumentsAction::__construct1100.0%
App\Action\Document\Provided\Admin\DeleteProvidedDocumentAction::__construct1100.0%
App\Action\Document\Provided\Admin\DeleteProvidedDocumentAction::__invoke1100.0%
App\Action\Document\Provided\Admin\DownloadProvidedDocumentAction::__construct1100.0%
App\Action\Document\Provided\Admin\DownloadProvidedDocumentAction::__invoke1100.0%
App\Action\Document\Provided\Admin\ListInvestorProvidedDocumentsAction::__construct1100.0%
App\Action\Document\Provided\Admin\ListInvestorProvidedDocumentsAction::__invoke1100.0%
App\Action\Document\Provided\Admin\UploadProvidedDocumentAction::__construct1100.0%
App\Action\Document\Provided\DownloadMyProvidedDocumentAction::__construct1100.0%
App\Action\Document\Provided\ListMyProvidedDocumentsAction::__construct1100.0%
App\Action\Document\ResendDocumentAction::__construct1100.0%
App\Action\Document\ResendDocumentAction::__invoke1100.0%
App\Action\Document\Submission\Admin\AcceptUploadAction::__construct1100.0%
App\Action\Document\Submission\Admin\AcceptUploadAction::__invoke1100.0%
App\Action\Document\Submission\Admin\DownloadUploadAction::__construct1100.0%
App\Action\Document\Submission\Admin\DownloadUploadAction::__invoke1100.0%
App\Action\Document\Submission\Admin\GetUploadAction::__construct1100.0%
App\Action\Document\Submission\Admin\GetUploadAction::__invoke1100.0%
App\Action\Document\Submission\Admin\ListInvestorUploadsAction::__construct1100.0%
App\Action\Document\Submission\Admin\ListInvestorUploadsAction::__invoke1100.0%
App\Action\Document\Submission\Admin\ListPendingUploadsAction::__construct1100.0%
App\Action\Document\Submission\Admin\ListPendingUploadsAction::__invoke1100.0%
App\Action\Document\Submission\Admin\RejectUploadAction::__construct1100.0%
App\Action\Document\Submission\DiscardUploadAction::__construct1100.0%
App\Action\Document\Submission\DownloadMyUploadAction::__construct1100.0%
App\Action\Document\Submission\ListMyUploadsAction::__construct1100.0%
App\Action\Document\Submission\UploadDocumentAction::__construct1100.0%
App\Action\Document\Type\ListDocumentTypesAction::__construct1100.0%
App\Action\Document\Type\ListDocumentTypesAction::__invoke1100.0%
App\Action\Home\HomeAction::__invoke1100.0%
App\Action\Home\PingAction::__construct1100.0%
App\Action\Home\PingAction::__invoke1100.0%
App\Action\Investor\CreateInvestorAction::__construct1100.0%
App\Action\Investor\CreateInvestorAction::__invoke1100.0%
App\Action\Investor\CreateSetupIntentAction::__construct1100.0%
App\Action\Investor\CreateSetupIntentAction::__invoke1100.0%
App\Action\Investor\DetachPaymentMethodAction::__construct1100.0%
App\Action\Investor\DetachPaymentMethodAction::__invoke1100.0%
App\Action\Investor\GetInvestorAction::__construct1100.0%
App\Action\Investor\GetInvestorByUserIdAction::__construct1100.0%
App\Action\Investor\ListPaymentMethodsAction::__construct1100.0%
App\Action\Investor\ListPaymentMethodsAction::__invoke1100.0%
App\Action\Investor\SetDefaultPaymentMethodAction::__construct1100.0%
App\Action\Investor\SetDefaultPaymentMethodAction::__invoke1100.0%
App\Action\Investor\UpdateInvestorAction::__construct1100.0%
App\Action\Investor\UpdateInvestorAction::__invoke1100.0%
App\Action\Investor\UpdateInvestorStatusAction::__construct1100.0%
App\Action\Investor\UpdateKycStatusAction::__construct1100.0%
App\Action\Loan\CheckEligibilityAction::__construct1100.0%
App\Action\Loan\CheckEligibilityAction::__invoke1100.0%
App\Action\Notification\GetMyNotificationPreferencesAction::__construct1100.0%
App\Action\Notification\UpdateMyNotificationPreferencesAction::__construct1100.0%
App\Action\Stripe\WebhookAction::__construct1100.0%
App\Action\Stripe\WebhookAction::__invoke1100.0%
App\Action\SuperAdmin\CreateTestUserAction::__construct1100.0%
App\Action\SuperAdmin\DeleteTestDataAction::__construct1100.0%
App\Action\SuperAdmin\GenerateBulkDataAction::__construct1100.0%
App\Action\SuperAdmin\GenerateTransactionsAction::__construct1100.0%
App\Action\SuperAdmin\GetAccountsForSuperAdminAction::__construct1100.0%
App\Action\SuperAdmin\GetSystemSettingsAction::__construct1100.0%
App\Action\SuperAdmin\GetSystemSettingsAction::__invoke1100.0%
App\Action\SuperAdmin\ListErrorLogsAction::__construct1100.0%
App\Action\SuperAdmin\ListErrorLogsAction::__invoke1100.0%
App\Action\SuperAdmin\ListUsersAction::__construct1100.0%
App\Action\SuperAdmin\UpdateUserRoleAction::__construct1100.0%
App\Domain\Account\Data\AccountData::__construct1100.0%
App\Domain\Account\Data\AccountData::jsonSerialize1100.0%
App\Domain\Account\Data\AccountSummaryData::__construct1100.0%
App\Domain\Account\Data\BalanceHistoryPointData::__construct1100.0%
App\Domain\Account\Data\BalanceHistoryPointData::jsonSerialize1100.0%
App\Domain\Account\Repository\AccountRepository::__construct1100.0%
App\Domain\Account\Repository\AccountRepository::accountNumberExists1100.0%
App\Domain\Account\Repository\AccountRepository::createAccount1100.0%
App\Domain\Account\Repository\AccountRepository::investorHasAccount1100.0%
App\Domain\Account\Repository\AccountRepository::updateAccountStatus1100.0%
App\Domain\Account\Repository\AccountRepository::updateBankAccountStatus1100.0%
App\Domain\Account\Repository\AccountRepository::setBankAccountId1100.0%
App\Domain\Account\Repository\AccountRepository::updateInterestRate1100.0%
App\Domain\Account\Repository\AccountRepository::updateLoanToValueRatio1100.0%
App\Domain\Account\Repository\AccountRepository::getAvailableForLoan1100.0%
App\Domain\Account\Repository\AccountRepository::hasActiveLoans1100.0%
App\Domain\Account\Repository\AccountRepository::canCloseAccount1100.0%
App\Domain\Account\Service\AccountService::__construct1100.0%
App\Domain\Admin\Data\AdminStatsData::__construct1100.0%
App\Domain\Admin\Data\AdminStatsData::jsonSerialize1100.0%
App\Domain\Admin\Repository\AdminRepository::__construct1100.0%
App\Domain\Admin\Service\AdminService::__construct1100.0%
App\Domain\Admin\Service\AdminService::getStats1100.0%
App\Domain\Audit\AuditService::__construct1100.0%
App\Domain\Audit\AuditService::getRequestId1100.0%
App\Domain\Audit\AuditService::logLogin1100.0%
App\Domain\Audit\AuditService::logLoginFailed1100.0%
App\Domain\Audit\AuditService::logLogout1100.0%
App\Domain\Audit\AuditService::logImpersonationStart1100.0%
App\Domain\Audit\AuditService::logSensitiveDataAccess1100.0%
App\Domain\Auth\Data\AdminActor::__construct1100.0%
App\Domain\Auth\Data\TokenData::__construct1100.0%
App\Domain\Auth\Data\UserAuthData::__construct1100.0%
App\Domain\Auth\Data\UserAuthData::fromRow1100.0%
App\Domain\Auth\Repository\AuthRepository::__construct1100.0%
App\Domain\Auth\Service\AdminPasswordService::__construct1100.0%
App\Domain\Auth\Service\AdminPasswordService::sendResetLinkForInvestor1100.0%
App\Domain\Auth\Service\AdminPasswordService::setPasswordForInvestor1100.0%
App\Domain\Auth\Service\AuthService::__construct1100.0%
App\Domain\Auth\Service\AuthService::generateTokens1100.0%
App\Domain\Auth\Service\AuthService::logoutAllDevices1100.0%
App\Domain\Auth\Service\EmailChangeService::__construct1100.0%
App\Domain\Auth\Service\EmailChangeService::buildEmailHtml1100.0%
App\Domain\Auth\Service\EmailChangeService::buildChangedNoticeHtml1100.0%
App\Domain\Auth\Service\JwtService::__construct1100.0%
App\Domain\Auth\Service\JwtService::generateTokenPair1100.0%
App\Domain\Auth\Service\JwtService::generateAccessToken1100.0%
App\Domain\Auth\Service\JwtService::generateRefreshToken1100.0%
App\Domain\Auth\Service\JwtService::getAccessTokenExpiry1100.0%
App\Domain\Auth\Service\JwtService::getRefreshTokenExpiry1100.0%
App\Domain\Auth\Service\PasswordResetService::__construct1100.0%
App\Domain\Auth\Service\PasswordResetService::sendResetLink1100.0%
App\Domain\Auth\Service\PasswordResetService::buildEmailHtml1100.0%
App\Domain\Auth\Service\PasswordService::hashPassword1100.0%
App\Domain\Auth\Service\PasswordService::verifyPassword1100.0%
App\Domain\Auth\Service\PasswordService::needsRehash1100.0%
App\Domain\Auth\Service\RegistrationService::__construct1100.0%
App\Domain\Auth\Service\RegistrationService::validateAllInput1100.0%
App\Domain\Consent\Data\ConsentCopy::all1100.0%
App\Domain\Consent\Data\ConsentRecord::__construct1100.0%
App\Domain\Consent\Data\ConsentRecord::isGranted1100.0%
App\Domain\Consent\Data\ConsentType::requiredTypes1100.0%
App\Domain\Consent\Data\ConsentType::optionalTypes1100.0%
App\Domain\Consent\Data\ConsentType::allTypes1100.0%
App\Domain\Consent\Data\ConsentType::isValid1100.0%
App\Domain\Consent\Data\ConsentType::isOptional1100.0%
App\Domain\Consent\Data\ConsentType::isValidSource1100.0%
App\Domain\Consent\Repository\ConsentRepository::__construct1100.0%
App\Domain\Consent\Repository\ConsentRepository::getCurrentForUser1100.0%
App\Domain\Consent\Repository\ConsentRepository::getHistoryForUser1100.0%
App\Domain\Consent\Service\ConsentService::__construct1100.0%
App\Domain\Contact\Data\ContactMessageData::__construct1100.0%
App\Domain\Contact\Data\ContactMessageData::fromRow1100.0%
App\Domain\Contact\Data\ContactMessageData::toArray1100.0%
App\Domain\Contact\Repository\ContactRepository::__construct1100.0%
App\Domain\Contact\Service\ContactService::__construct1100.0%
App\Domain\Disbursement\Data\DisbursementData::__construct1100.0%
App\Domain\Disbursement\Data\DisbursementData::fromRow1100.0%
App\Domain\Disbursement\Data\DisbursementData::toArray1100.0%
App\Domain\Disbursement\Repository\DisbursementRepository::__construct1100.0%
App\Domain\Disbursement\Service\DisbursementService::__construct1100.0%
App\Domain\Disbursement\Service\DisbursementService::listPending1100.0%
App\Domain\Disbursement\Service\DisbursementService::countByStatus1100.0%
App\Domain\Document\Data\PandaDocDocumentData::__construct1100.0%
App\Domain\Document\Data\PandaDocDocumentData::fromStoredFallback1100.0%
App\Domain\Document\Data\PandaDocDocumentData::toArray1100.0%
App\Domain\Document\Data\PandaDocRecipientData::__construct1100.0%
App\Domain\Document\Data\PandaDocRecipientData::toArray1100.0%
App\Domain\Document\Data\PandaDocSigningSessionData::__construct1100.0%
App\Domain\Document\Data\PandaDocSigningSessionData::toArray1100.0%
App\Domain\Document\Provided\Data\ProvidedDocumentData::__construct1100.0%
App\Domain\Document\Provided\Data\ProvidedDocumentData::fromRow1100.0%
App\Domain\Document\Provided\Data\ProvidedDocumentData::toArray1100.0%
App\Domain\Document\Provided\Repository\ProvidedDocumentRepository::__construct1100.0%
App\Domain\Document\Provided\Repository\ProvidedDocumentRepository::listSelect1100.0%
App\Domain\Document\Provided\Service\ProvidedDocumentService::__construct1100.0%
App\Domain\Document\Provided\Service\ProvidedDocumentService::listForInvestor1100.0%
App\Domain\Document\Provided\Service\ProvidedDocumentService::getStream1100.0%
App\Domain\Document\Repository\InvestorAgreementRepository::__construct1100.0%
App\Domain\Document\Service\IdentityVerificationService::__construct1100.0%
App\Domain\Document\Service\InvestorAgreementService::__construct1100.0%
App\Domain\Document\Service\PandaDocFieldMapper::mapForMpa1100.0%
App\Domain\Document\Submission\Data\AdminInvestorDocumentData::__construct1100.0%
App\Domain\Document\Submission\Data\AdminInvestorDocumentData::fromRow1100.0%
App\Domain\Document\Submission\Data\AdminInvestorDocumentData::toArray1100.0%
App\Domain\Document\Submission\Data\InvestorDocumentData::__construct1100.0%
App\Domain\Document\Submission\Data\InvestorDocumentData::fromRow1100.0%
App\Domain\Document\Submission\Data\InvestorDocumentData::toArray1100.0%
App\Domain\Document\Submission\Data\InvestorDocumentEventData::__construct1100.0%
App\Domain\Document\Submission\Data\InvestorDocumentEventData::fromRow1100.0%
App\Domain\Document\Submission\Data\InvestorDocumentEventData::toArray1100.0%
App\Domain\Document\Submission\Repository\InvestorDocumentRepository::__construct1100.0%
App\Domain\Document\Submission\Service\InvestorDocumentService::__construct1100.0%
App\Domain\Document\Submission\Service\InvestorDocumentService::listForInvestor1100.0%
App\Domain\Document\Submission\Service\InvestorDocumentService::getStream1100.0%
App\Domain\Document\Submission\Service\InvestorDocumentService::listPendingForAdmin1100.0%
App\Domain\Document\Submission\Service\InvestorDocumentService::listForInvestorAsAdmin1100.0%
App\Domain\Document\Type\Data\DocumentTypeData::__construct1100.0%
App\Domain\Document\Type\Data\DocumentTypeData::fromRow1100.0%
App\Domain\Document\Type\Data\DocumentTypeData::toArray1100.0%
App\Domain\Document\Type\Repository\DocumentTypeRepository::__construct1100.0%
App\Domain\ErrorLog\Data\ErrorLogData::__construct1100.0%
App\Domain\ErrorLog\Data\ErrorLogFilterData::getOffset1100.0%
App\Domain\ErrorLog\Repository\ErrorLogRepository::__construct1100.0%
App\Domain\ErrorLog\Service\ErrorLogService::__construct1100.0%
App\Domain\ErrorLog\Service\ErrorLogService::debug1100.0%
App\Domain\ErrorLog\Service\ErrorLogService::error1100.0%
App\Domain\ErrorLog\Service\ErrorLogService::critical1100.0%
App\Domain\ErrorLog\Service\ErrorLogService::alert1100.0%
App\Domain\ErrorLog\Service\ErrorLogService::emergency1100.0%
App\Domain\ErrorLog\Service\ErrorLogService::getById1100.0%
App\Domain\ErrorLog\Service\ErrorLogService::list1100.0%
App\Domain\ErrorLog\Service\ErrorLogService::resolve1100.0%
App\Domain\ErrorLog\Service\ErrorLogService::delete1100.0%
App\Domain\ErrorLog\Service\ErrorLogService::getLogLevels1100.0%
App\Domain\Exception\AuthenticationException::getStatusCode1100.0%
App\Domain\Exception\AuthenticationException::getTitle1100.0%
App\Domain\Exception\BadRequestException::getStatusCode1100.0%
App\Domain\Exception\BadRequestException::getTitle1100.0%
App\Domain\Exception\ConflictException::getStatusCode1100.0%
App\Domain\Exception\ConflictException::getTitle1100.0%
App\Domain\Exception\ForbiddenException::getStatusCode1100.0%
App\Domain\Exception\ForbiddenException::getTitle1100.0%
App\Domain\Exception\NotFoundException::getStatusCode1100.0%
App\Domain\Exception\NotFoundException::getTitle1100.0%
App\Domain\Exception\ValidationException::__construct1100.0%
App\Domain\Exception\ValidationException::getStatusCode1100.0%
App\Domain\Exception\ValidationException::getTitle1100.0%
App\Domain\Funding\Data\FundingRequestData::__construct1100.0%
App\Domain\Funding\Data\FundingRequestData::fromRow1100.0%
App\Domain\Funding\Repository\FundingRequestRepository::__construct1100.0%
App\Domain\Funding\Service\FundingRequestService::__construct1100.0%
App\Domain\Funding\Service\FundingRequestService::listPending1100.0%
App\Domain\Funding\Service\FundingRequestService::countPending1100.0%
App\Domain\Investor\Data\InvestorData::__construct1100.0%
App\Domain\Investor\Data\InvestorData::fromRow1100.0%
App\Domain\Investor\Repository\InvestorRepository::__construct1100.0%
App\Domain\Investor\Service\InvestorService::__construct1100.0%
App\Domain\Investor\Service\InvestorService::activateInvestor1100.0%
App\Domain\Investor\Service\InvestorService::deactivateInvestor1100.0%
App\Domain\Investor\Service\InvestorService::suspendInvestor1100.0%
App\Domain\Loan\Data\LoanData::__construct1100.0%
App\Domain\Loan\Data\LoanData::fromRow1100.0%
App\Domain\Loan\Data\LoanEligibilityData::__construct1100.0%
App\Domain\Loan\Data\LoanEligibilityData::fromRow1100.0%
App\Domain\Loan\Data\LoanEligibilityData::toArray1100.0%
App\Domain\Loan\Repository\LoanRepository::__construct1100.0%
App\Domain\Loan\Service\LoanService::__construct1100.0%
App\Domain\Loan\Service\LoanService::checkEligibility1100.0%
App\Domain\Loan\Service\LoanService::getInvestorLoans1100.0%
App\Domain\Loan\Service\LoanService::getPendingLoans1100.0%
App\Domain\Loan\Service\LoanService::getActiveLoans1100.0%
App\Domain\Loan\Service\LoanService::getConfig1100.0%
App\Domain\Loan\Service\LoanService::getPaymentSchedule1100.0%
App\Domain\Loan\Service\LoanService::getValidTerms1100.0%
App\Domain\Notification\Data\EmailMessage::__construct1100.0%
App\Domain\Notification\Data\NotificationPreference::__construct1100.0%
App\Domain\Notification\Data\NotificationType::adminTypes1100.0%
App\Domain\Notification\Data\NotificationType::isAdminType1100.0%
App\Domain\Notification\Data\SentEmailData::__construct1100.0%
App\Domain\Notification\Data\SentEmailData::fromRow1100.0%
App\Domain\Notification\Repository\NotificationPreferenceRepository::__construct1100.0%
App\Domain\Notification\Repository\NotificationPreferenceRepository::getEnabledRecipientsForAdminType1100.0%
App\Domain\Notification\Repository\SentEmailRepository::__construct1100.0%
App\Domain\Notification\Service\CronEmailNotifier::__construct1100.0%
App\Domain\Notification\Service\CronEmailNotifier::notifyJobSuccess1100.0%
App\Domain\Notification\Service\CronEmailNotifier::notifyJobAnomaly1100.0%
App\Domain\Notification\Service\CronEmailNotifier::notifyJobFailure1100.0%
App\Domain\Notification\Service\HealthcheckPinger::__construct1100.0%
App\Domain\Notification\Service\NotificationDispatcher::__construct1100.0%
App\Domain\Notification\Service\NotificationPreferenceService::__construct1100.0%
App\Domain\Notification\Service\RecordingEmailService::__construct1100.0%
App\Domain\Notification\Service\SmtpEmailService::__construct1100.0%
App\Domain\Storage\Service\LocalFileStorage::store1100.0%
App\Domain\Storage\Service\LocalFileStorage::exists1100.0%
App\Domain\Storage\Service\LocalFileStorage::generateUuidV41100.0%
App\Domain\Stripe\Data\PaymentChargeData::__construct1100.0%
App\Domain\Stripe\Data\PaymentMethodData::__construct1100.0%
App\Domain\Stripe\Data\SetupIntentData::__construct1100.0%
App\Domain\Stripe\Data\StripeCustomerData::__construct1100.0%
App\Domain\Stripe\Data\WebhookEventData::__construct1100.0%
App\Domain\Stripe\Exception\WebhookSignatureException::getStatusCode1100.0%
App\Domain\Stripe\Exception\WebhookSignatureException::getTitle1100.0%
App\Domain\Stripe\Repository\StripeWebhookRepository::__construct1100.0%
App\Domain\Stripe\Service\InvestorStripeService::__construct1100.0%
App\Domain\Stripe\Service\InvestorStripeService::createSetupIntentClientSecret1100.0%
App\Domain\Stripe\Service\InvestorStripeService::detachPaymentMethod1100.0%
App\Domain\Stripe\Service\InvestorStripeService::setDefaultPaymentMethod1100.0%
App\Domain\Stripe\Service\StripeWebhookService::__construct1100.0%
App\Domain\SuperAdmin\Data\CronJobStatusData::__construct1100.0%
App\Domain\SuperAdmin\Data\CronJobStatusData::jsonSerialize1100.0%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::__construct1100.0%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::deleteTestData1100.0%
App\Domain\SuperAdmin\Repository\SuperAdminRepository::toIntArrayLiteral1100.0%
App\Domain\SuperAdmin\Service\SuperAdminService::__construct1100.0%
App\Domain\SuperAdmin\Service\SuperAdminService::replayAccountHistory1100.0%
App\Domain\SuperAdmin\Service\SuperAdminService::getAccountsForDropdown1100.0%
App\Domain\SuperAdmin\Service\SuperAdminService::deleteTestData1100.0%
App\Domain\SuperAdmin\Service\SuperAdminService::getTestDataCounts1100.0%
App\Domain\SuperAdmin\Service\SuperAdminService::generateEmail1100.0%
App\Domain\SuperAdmin\Service\SuperAdminService::generateUsername1100.0%
App\Domain\SuperAdmin\Service\SuperAdminService::generateRandomDateOfBirth1100.0%
App\Domain\SuperAdmin\Service\SuperAdminService::generateRandomInvestment1100.0%
App\Domain\SuperAdmin\Service\SuperAdminService::generateRandomDateInRange1100.0%
App\Domain\SystemSettings\Data\SystemSettingData::jsonSerialize1100.0%
App\Domain\SystemSettings\Repository\SystemSettingsRepository::__construct1100.0%
App\Domain\SystemSettings\Repository\SystemSettingsRepository::getValue1100.0%
App\Domain\SystemSettings\Service\SystemSettingsService::__construct1100.0%
App\Domain\SystemSettings\Service\SystemSettingsService::getAll1100.0%
App\Domain\Transaction\Data\TransactionData::__construct1100.0%
App\Domain\Transaction\Data\TransactionData::fromRow1100.0%
App\Domain\Transaction\Data\TransactionData::jsonSerialize1100.0%
App\Domain\Transaction\Repository\TransactionRepository::__construct1100.0%
App\Domain\Transaction\Service\TransactionFinder::__construct1100.0%
App\Domain\Transaction\Service\TransactionService::__construct1100.0%
App\Middleware\ErrorLoggingMiddleware::__construct1100.0%
App\Middleware\ExceptionMiddleware::__construct1100.0%
App\Middleware\JwtAuthMiddleware::__construct1100.0%
App\Middleware\JwtAuthMiddleware::unauthorizedResponse1100.0%
App\Middleware\ResourceOwnershipMiddleware::__construct1100.0%
App\Middleware\ResourceOwnershipMiddleware::forbiddenResponse1100.0%
App\Middleware\RoleMiddleware::__construct1100.0%
App\Middleware\RoleMiddleware::forbiddenResponse1100.0%
App\Renderer\JsonRenderer::json1100.0%
App\Support\ProvidedDocumentDownload::respond1100.0%