| Platform (application-wide) |
The application is built on ASP.NET WebForms targeting .NET Framework and relies on IIS-hosted NTLM/Kerberos Windows authentication for all internal users; there is no portable, framework-independent authentication layer.* |
Ties the application to Windows-domain-joined IIS hosting, blocking migration to modern cross-platform or cloud-native hosting models without a parallel authentication rework, and leaves the app dependent on legacy NTLM infrastructure with its known relay/downgrade weaknesses. |
Plan a phased migration path (e.g., to ASP.NET Core with a modern identity provider) and, in the interim, harden NTLM configuration (disable NTLMv1, enforce channel binding) and document the authentication dependency for infrastructure teams. |
| SAIF.Application.Claim |
ClaimServices.HasOverrideAcess is the only confidential-claim override path, but the repository analysis could not resolve the owning library or inspect the logic behind it. |
The single mechanism that can bypass the conflict-claim access denial (BR-APP-001) is undocumented, making its correctness and audit posture unverifiable. |
Trace the dependency to its owning assembly, document the override rules, and add an explicit contract or wrapper interface in the application layer. |
| SAIF.Application.Claim |
CollateralHealthClaim and ClaimUserAccess.HealthIssueAccess are declared, but ClaimSecurity.CheckClaim never consults them, so the resource key has no effect. |
Health-issue claim access restrictions intended by the CollateralHealthClaim AD resource are not actually enforced, creating a false sense of security around health-issue claim data. |
Align ClaimSecurity.CheckClaim with the intended health-issue resource check and add regression tests for health-issue claim access. |
| SAIF.Presentation.Web.Controls.PopUps.Infragistics111 |
ImageMovePopup.CheckImageSecurity returns True for six system mail IDs without performing an AD authorization check. |
A hard-coded allow-list bypasses centralized authorization for system mailbox image-move actions, making the access grant unauditable and inflexible to change. |
Replace the hard-coded allow-list with an auditable service-account authorization path or an explicit centrally managed entitlement check. |
| SAIF.Application |
ServiceResponse.ProcessException re-reads ex.InnerException on each loop iteration instead of advancing through the current exception chain, creating an infinite-loop risk on nested exceptions. |
A multi-level nested exception can cause the exception-processing loop to hang, potentially exhausting a request thread or worker process. |
Fix the loop to advance through the current inner exception, add a unit test with a multi-level exception chain, and backfill coverage for service-response error handling. |
| SAIF.Application |
UserAccess.CheckAccess discards its computed result and provides no observable enforcement beyond cache warming. |
Callers may believe CheckAccess performs an authorization gate when it does not, risking an unintended access-control gap wherever it is relied upon as an enforcement point. |
Either remove the method and migrate callers to HasAccess, or change it to return a meaningful authorization outcome and add call-site tests. |
| SAIF.Business.Policy |
PolicyInformation.PolicyMinimumPremium wraps the stored-procedure call in an empty Catch block and can silently return 0 when the lookup fails. |
A failed premium lookup is indistinguishable from a genuine zero-premium result, risking incorrect downstream premium calculations without any visible error. |
Replace the empty catch with structured error handling, log failures, and distinguish an actual zero premium from a lookup failure. |
| SAIF.Services.Export |
ExportServices.GetCSV skips null fields instead of emitting empty columns, which can create column-misaligned CSV output. |
Exported assignment-list and other CSV files may have shifted columns whenever a null field is encountered, corrupting downstream consumption of the export (Generate reports and PDF previews). |
Emit explicit empty fields for null values and add a regression test that verifies consistent column counts across rows. |
| SAIF.Business.View.Policy |
clsMCOCollection and clsPolicyMCOCollection execute the same stored procedure with near-identical retrieval logic. |
Duplicated retrieval logic risks the two code paths diverging over time, producing inconsistent results for what should be the same underlying data. |
Consolidate the two collection paths behind one implementation or one shared retrieval helper to eliminate divergence risk. |
| SAIF.Business.View.Policy |
PolicyAssociations.vb duplicates the newer association model implemented through clsAssociationTypeCode and clsPolicyAssociationFactory. |
Maintaining two parallel association models increases maintenance burden and risks inconsistent policy-association data being returned depending on which path a caller uses. |
Retire the legacy association path or formally designate one canonical association model and migrate consumers to it. |
| SAIF.Application |
The library declares two different AppSecurityRole enum types with the same members: AppManagerBase.AppSecurityRole and SAIF.Application.AppSecurityRole. |
Ambiguity over which enum downstream consumers reference for security-role state risks type-mismatch bugs and inconsistent security-role handling across the application. |
Remove the duplicate declaration or alias one canonical type, then update downstream references and serialization points to use a single enum. |
| SAIF.Services.Printing |
documentGeneratorServiceUrl, documentMSMQPath, idmFilePath, and sqlReportingServiceUrl are required at runtime, but the library configs provide no local fallback or visible source for those values. |
Missing or misconfigured environment values can cause silent or hard-to-diagnose report/PDF generation failures in production. |
Publish an explicit configuration contract for the environment service, validate keys on startup, and surface missing-key failures with actionable diagnostics. |
| SAIF.Business.Claim.Legal |
SAIF.Business.Claim.Legal depends transitively on BDS_USER, bdsDatabase, and BDS_DATABASENAME through SAIF.Business.View.Policy, but those keys are not declared in the library itself. |
Undocumented transitive configuration dependencies risk deployment failures that are difficult to trace back to the missing SQL Server BDS keys. |
Document the transitive configuration contract in deployment guidance and add startup validation in the host application for required BDS keys. |