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\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\Domain\Transaction\Repository\TransactionRepository — Coverage: 90.6% | Lines: 96 | Complexity: 26 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\Domain\Funding\Repository\FundingRequestRepository — Coverage: 73.4% | Lines: 64 | Complexity: 17 App\Domain\Storage\Service\LocalFileStorage — Coverage: 79.4% | Lines: 63 | Complexity: 34 App\Domain\Disbursement\Repository\DisbursementRepository — Coverage: 89.8% | Lines: 59 | Complexity: 16 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\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\Domain\SystemSettings\Repository\SystemSettingsRepository — Coverage: 64.1% | Lines: 39 | Complexity: 13 App\Domain\Document\Data\PandaDocDocumentData — Coverage: 57.9% | Lines: 38 | Complexity: 6 App\Domain\Notification\Service\SmtpEmailService — Coverage: 2.7% | Lines: 37 | Complexity: 7 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\Domain\Funding\Data\FundingRequestData — Coverage: 41.2% | Lines: 34 | Complexity: 4 App\Domain\Notification\Repository\SentEmailRepository — Coverage: 91.2% | Lines: 34 | Complexity: 12 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\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\Domain\Notification\Repository\NotificationPreferenceRepository — Coverage: 100.0% | Lines: 27 | Complexity: 6 App\Domain\Document\Submission\Data\InvestorDocumentEventData — Coverage: 100.0% | Lines: 26 | Complexity: 3 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\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\Domain\Account\Data\AccountSummaryData — Coverage: 95.5% | Lines: 22 | Complexity: 2 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\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\Domain\Loan\Data\LoanEligibilityData — Coverage: 100.0% | Lines: 19 | Complexity: 3 App\Domain\Notification\Service\CurlHealthcheckClient — Coverage: 0.0% | Lines: 19 | Complexity: 7 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\Domain\Auth\Service\PasswordService — Coverage: 94.1% | Lines: 17 | Complexity: 10 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\Domain\Auth\Data\UserAuthData — Coverage: 100.0% | Lines: 13 | Complexity: 2 App\Domain\Consent\Data\ConsentRecord — Coverage: 91.7% | Lines: 12 | Complexity: 3 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\Domain\Document\Data\PandaDocSigningSessionData — Coverage: 50.0% | Lines: 10 | 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\Domain\Notification\Data\NotificationPreference — Coverage: 87.5% | Lines: 8 | Complexity: 2 App\Domain\Notification\Data\NotificationType — Coverage: 75.0% | Lines: 8 | Complexity: 4 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\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\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\Domain\Stripe\Service\StripeService6500.0%
App\Domain\SystemSettings\Service\SystemSettingsService337.584.1%
App\Domain\SuperAdmin\Service\SuperAdminService245.7877.6%
App\Domain\Contact\Service\CloudflareTurnstileVerifier2100.0%
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\Domain\Funding\Service\FundingRequestService89.4365.5%
App\Domain\Admin\Service\AdminService83.7838.6%
App\Domain\Loan\Repository\LoanRepository80.6884.5%
App\Domain\Document\Provided\Service\ProvidedDocumentService69.9275.6%
App\Domain\Auth\Service\RegistrationService66.1891.9%
App\Domain\ErrorLog\Repository\ErrorLogRepository65.6980.9%
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\Domain\Document\Submission\Repository\InvestorDocumentRepository39.5989.7%
App\Domain\Investor\Repository\InvestorRepository36.8291.4%
App\Domain\Account\Repository\AccountRepository3195.2%
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\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\Domain\Disbursement\Repository\DisbursementRepository16.2789.8%
App\Domain\Document\Provided\Repository\ProvidedDocumentRepository16.2789.8%
App\Domain\Transaction\Service\TransactionFinder16100.0%
App\Domain\Consent\Service\ConsentService14100.0%
App\Domain\Notification\Repository\SentEmailRepository12.1091.2%
App\Domain\Document\Data\DocumentTemplateData120.0%
App\Domain\Document\Data\PandaDocDocumentRefData120.0%
App\Domain\Document\Data\PandaDocTemplateTokenData120.0%
App\Domain\Document\Repository\InvestorAgreementRepository11.0791.7%
App\Domain\Auth\Service\PasswordService10.0294.1%
App\Domain\Document\Type\Data\DocumentTypeData10.0294.4%
App\Domain\Auth\Service\JwtService10100.0%
App\Domain\ErrorLog\Data\ErrorLogFilterData10100.0%
App\Domain\Notification\Service\NotificationPreferenceService10100.0%
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\Domain\Funding\Data\FundingRequestData7.2641.2%
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\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\Domain\Auth\Data\TokenData4.5214.3%
App\Domain\Notification\Data\NotificationType4.2575.0%
App\Domain\Loan\Data\LoanData4.0850.7%
App\Domain\Document\Data\PandaDocRecipientData3.9153.3%
App\Domain\Notification\Data\SentEmailData3.8255.0%
App\Domain\Consent\Data\ConsentRecord3.0191.7%
App\Domain\Document\Service\IdentityVerificationService3.0190.9%
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\Domain\ErrorLog\Data\ErrorLogData2.5747.9%
App\Domain\Notification\Data\NotificationPreference2.0187.5%
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\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\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\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\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\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\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\Domain\Loan\Service\LoanService::requestLoan — Coverage: 93.8% | Lines: 32 | Complexity: 7 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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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

 

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\Domain\Document\Data\PandaDocTemplateDetailsData::fromPandaDocResponse900.0%
App\Domain\SystemSettings\Service\SystemSettingsService::validateSetting900.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\Domain\Document\Service\PandaDocService::makeRequest560.0%
App\Domain\Notification\Service\CurlHealthcheckClient::get560.0%
App\Domain\ErrorLog\Repository\ErrorLogRepository::findAll44.5469.8%
App\Domain\Document\Service\PandaDocService::listTemplates420.0%
App\Domain\Notification\Service\SmtpEmailService::send420.0%
App\Domain\Stripe\Service\StripeService::listPaymentMethods420.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\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\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\Domain\Storage\Service\LocalFileStorage::writeStreamAtomic13.0457.1%
App\Domain\Transaction\Service\TransactionFinder::findByAccountId13100.0%
App\Domain\Funding\Service\FundingRequestService::notifyAdmins12.8717.9%
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\Domain\Funding\Service\FundingRequestService::submit10.5582.4%
App\Domain\Funding\Service\FundingRequestService::updateStatus10.2985.7%
App\Domain\Loan\Service\LoanService::makeAdditionalPayment10.2187.2%
App\Domain\Admin\Repository\AdminRepository::getInvestorsList1097.0%
App\Domain\Auth\Service\RegistrationService::registerComplete9.0989.6%
App\Domain\Auth\Service\AuthService::login9.0294.3%
App\Domain\ErrorLog\Data\ErrorLogFilterData::__construct9100.0%
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\Domain\Document\Type\Data\DocumentTypeData::decodeMimeList7.3980.0%
App\Domain\Investor\Service\InvestorService::updateKycStatus7.0590.0%
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\Domain\Auth\Service\RegistrationService::extractConsents7100.0%
App\Domain\Storage\Service\LocalFileStorage::resolveKey7100.0%
App\Domain\Auth\Service\EmailChangeService::confirmChange6.4277.3%
App\Domain\Contact\Service\ContactService::submit6.4277.3%
App\Domain\Investor\Service\InvestorService::updateInvestor6.2980.0%
App\Domain\Audit\AuditService::setContext6.2481.2%
App\Domain\Stripe\Service\InvestorStripeService::chargeLoanPayment6.0490.0%
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\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\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\Domain\Auth\Repository\AuthRepository::isAccountLocked5.0194.1%
App\Domain\Notification\Repository\SentEmailRepository::record5.0193.3%
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\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\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\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\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\Domain\Account\Repository\AccountRepository::getTotalAccounts3.0483.3%
App\Domain\Account\Repository\AccountRepository::getTotalBalance3.0483.3%
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\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\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\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\Domain\Document\Provided\Service\ProvidedDocumentService::extractExtension2.1566.7%
App\Domain\Document\Submission\Service\InvestorDocumentService::extractExtension2.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\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\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\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%