Skip to content

StandardizationController

  • Namespace: Insorce.Controllers
  • Project: Andromeda.Web

Overview

The StandardizationController manages features related to project standardization, including activity property management, clustering, and similarity analysis.

Feature Summary

  • Implements project data retrieval and activity management for standardization purposes.
  • Supports clustering of activities and similarity computations for process maps, products, and DOE data.
  • Enables adding, deleting, and assigning activity properties within projects.
  • Provides JSON endpoints for dynamic data retrieval and updates related to clustering and similarity.

UX Summary

  • Primary user actions include viewing variance data, managing activity properties, and analyzing similarity clusters.
  • UX depends on clear error messaging, smooth data updates, and handling of empty or invalid inputs.
  • Redirects and POST operations require clear communication to avoid user confusion.
  • Data returned in JSON format supports dynamic UI updates and enhances interactivity.

Data Dependencies

  • Relies on project and activity data models, including XML project representations.
  • Uses caching mechanisms for cluster data to optimize performance.
  • Depends on services or repositories for database access and data sanitization.
  • Processes input parameters that require validation to prevent SQL injection and data tampering.

Authentication / Authorization Notes

  • Controller actions likely require authenticated access due to project data sensitivity.
  • Permission checks should be enforced to restrict modifications to authorized users.
  • Input validation and sanitization are critical to maintain security and data integrity.

Controller Call Chain Diagram

flowchart TD
    Andromeda_Core_DataManager_Execute["Andromeda.Core.DataManager.Execute"]
    Andromeda_Core_Database_helper_SqlParameters["Andromeda.Core.Database.helper.SqlParameters"]
    Andromeda_Core_Entities_Project_GetTags["Andromeda.Core.Entities.Project.GetTags"]
    Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace["Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialCharwithSpace"]
    Andromeda_Core_LoggingManager_Debug["Andromeda.Core.LoggingManager.Debug"]
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_Services_KClusters_RunChildClustering["Andromeda.Core.Services.KClusters.RunChildClustering"]
    Andromeda_Core_Services_KClusters_RunClustering["Andromeda.Core.Services.KClusters.RunClustering"]
    Insorce_Helpers_ClusterHelper_GenerateCluster["Insorce.Helpers.ClusterHelper.GenerateCluster"]
    Insorce_Helpers_InsorceOpenAICalls_GenerateClusterResponse["Insorce.Helpers.InsorceOpenAICalls.GenerateClusterResponse"]
    StandardizationController_AssignTemplateActivityToActivity["StandardizationController.AssignTemplateActivityToActivity"]
    StandardizationController_DeleteActivityProperty["StandardizationController.DeleteActivityProperty"]
    StandardizationController_GetClusters["StandardizationController.GetClusters"]
    StandardizationController_GetDOESimilarity["StandardizationController.GetDOESimilarity"]
    StandardizationController_GetProcessMapRejectionsSimilarity["StandardizationController.GetProcessMapRejectionsSimilarity"]
    StandardizationController_GetProductSimilarity["StandardizationController.GetProductSimilarity"]
    StandardizationController_Variance["StandardizationController.Variance"]
    System_Web_Mvc_LargeJsonResult_JsonEncode["System.Web.Mvc.LargeJsonResult.JsonEncode"]
    Andromeda_Core_DataManager_Execute --> Andromeda_Core_Database_helper_SqlParameters
    Andromeda_Core_DataManager_Execute --> Andromeda_Core_LoggingManager_Debug
    Andromeda_Core_Services_KClusters_RunChildClustering --> Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace
    Insorce_Helpers_ClusterHelper_GenerateCluster --> Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace
    Insorce_Helpers_ClusterHelper_GenerateCluster --> Andromeda_Core_Services_KClusters_RunClustering
    Insorce_Helpers_ClusterHelper_GenerateCluster --> Insorce_Helpers_InsorceOpenAICalls_GenerateClusterResponse
    StandardizationController_AssignTemplateActivityToActivity --> Andromeda_Core_LoggingManager_Error
    StandardizationController_DeleteActivityProperty --> Andromeda_Core_DataManager_Execute
    StandardizationController_GetClusters --> Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace
    StandardizationController_GetClusters --> Andromeda_Core_Services_KClusters_RunChildClustering
    StandardizationController_GetClusters --> Insorce_Helpers_ClusterHelper_GenerateCluster
    StandardizationController_GetClusters --> System_Web_Mvc_LargeJsonResult_JsonEncode
    StandardizationController_GetDOESimilarity --> Andromeda_Core_Services_KClusters_RunChildClustering
    StandardizationController_GetDOESimilarity --> Insorce_Helpers_ClusterHelper_GenerateCluster
    StandardizationController_GetProcessMapRejectionsSimilarity --> Andromeda_Core_Services_KClusters_RunChildClustering
    StandardizationController_GetProcessMapRejectionsSimilarity --> Insorce_Helpers_ClusterHelper_GenerateCluster
    StandardizationController_GetProductSimilarity --> Andromeda_Core_Services_KClusters_RunChildClustering
    StandardizationController_GetProductSimilarity --> Insorce_Helpers_ClusterHelper_GenerateCluster
    StandardizationController_Variance --> Andromeda_Core_Entities_Project_GetTags

System Dependencies

Incoming Dependencies (Fan-In): None

Outgoing Dependencies (Fan-Out): None

Cycle Detection

No dependency cycles detected for this controller.

View → Action Mapping

Action View Model Path
variance Variance - Andromeda.Web\Views\Standardization\Variance.cshtml

Methods at a Glance

Command / Save Operations

Type Method HTTP URL Summary
entrypoint GetDOESimilarity GET /Standardization/GetDOESimilarity Retrieve project and DOE data, generate clusters, compare DOE values, and...

Query & View Methods

Type Method HTTP URL Summary
entrypoint Variance `` /Standardization/Variance Retrieve current project data and activities, handle empty activities, and...
entrypoint GetProductSimilarity GET /Standardization/GetProductSimilarity Retrieve project data, generate clusters, filter product similarity records...

Validation & Rules

Type Method HTTP URL Summary
entrypoint GetClusters GET /Standardization/GetClusters GetClusters validates project ID and returns cached or freshly computed cluster...

Workflow & Routing

Type Method HTTP URL Summary
entrypoint DeleteActivityProperty POST /Standardization/DeleteActivityProperty The method processes a POST request to delete a specified activity property by...
entrypoint AddActivityProperty POST /Standardization/AddActivityProperty AddActivityProperty processes POST data, converts inputs, updates activity...
entrypoint AssignTemplateActivityToActivity POST /Standardization/AssignTemplateActivityToActivity Update activity details and properties in the project XML and process model...
entrypoint GetProcessMapRejectionsSimilarity GET /Standardization/GetProcessMapRejectionsSimilarity Retrieve project and template details, generate clusters if template exists...

Associated Screens / Views

  • VarianceVariance (Andromeda.Web\Views\Standardization\Variance.cshtml)

Entrypoint Methods

Variance

Summary: Retrieve current project data and activities, handle empty activities, and prepare related project info for the view.

ActionResult StandardizationController.Variance()

Routing

  • URL: /Standardization/Variance

Cross-layer call chain - StandardizationController.Variance → Andromeda.Core.Entities.Project.GetTags

Call Chain Diagram

flowchart TD
    Andromeda_Core_Entities_Project_GetTags["Andromeda.Core.Entities.Project.GetTags"]
    StandardizationController_Variance["StandardizationController.Variance"]
    StandardizationController_Variance --> Andromeda_Core_Entities_Project_GetTags
View Metadata
  • View: Variance (Andromeda.Web\Views\Standardization\Variance.cshtml)
Detailed Analysis

Key Flows - handle empty activities - Redirect if no activities found - Retrieve current project ID from context, Get activities for current project, Retrieve project details and tags, Filter template projects by shared tags, Store data in ViewData for view

Error Flows - Summary: Redirects on empty activities and contains syntax errors causing runtime or compile failures. - Redirect to ProcessCreation if activities collection is empty - Syntax errors causing runtime failures or compilation issues

Performance Issues - Summary: Using Any() and Contains() inside Where() causes inefficient query performance. - Inefficient queries from Any() in Where() clause, Inefficient queries from Contains() in Where() clause

Maintainability Issues - Summary: Incomplete code and commented-out lines reduce readability and maintainability. - Incomplete and syntactically incorrect code segments, Commented-out lines indicating unfinished or disabled functionality

UX Impact Notes - Summary: Redirects disrupt user flow and require clear communication to prevent confusion. - Need clear communication for redirects to avoid user confusion - Redirect interrupts expected user flow - Redirect to ProcessCreation navigates away from current context

Test Case Ideas - and correct redirects. - Process data retrieval and filtering on non-empty activities - Redirect on empty activities collection - Redirect to ProcessCreation action when required - Call GetActivities and validate returned activities

Dependencies & Called Services - Summary: Uses collections and interfaces for actor, process, and project models. - Enumerable collection, IActorModel interface, IProcessModel interface, IProjectModel interface, List collection, Project class

GetClusters

Summary: GetClusters validates project ID and returns cached or freshly computed cluster and activity data as JSON.

JsonResult StandardizationController.GetClusters(int? tmpProjId, double? rigid, int? refresh)

Routing

  • HTTP: GET
  • URL: /Standardization/GetClusters

Cross-layer call chain - StandardizationController.GetClusters → Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialCharwithSpace - StandardizationController.GetClusters → Insorce.Helpers.ClusterHelper.GenerateCluster - StandardizationController.GetClusters → Andromeda.Core.Services.KClusters.RunChildClustering - StandardizationController.GetClusters → System.Web.Mvc.LargeJsonResult.JsonEncode - Insorce.Helpers.ClusterHelper.GenerateCluster → Andromeda.Core.Services.KClusters.RunClustering - Insorce.Helpers.ClusterHelper.GenerateCluster → Insorce.Helpers.InsorceOpenAICalls.GenerateClusterResponse - Insorce.Helpers.ClusterHelper.GenerateCluster → Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialCharwithSpace - Andromeda.Core.Services.KClusters.RunChildClustering → Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialCharwithSpace

Call Chain Diagram

flowchart TD
    Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace["Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialCharwithSpace"]
    Andromeda_Core_Services_KClusters_RunChildClustering["Andromeda.Core.Services.KClusters.RunChildClustering"]
    Andromeda_Core_Services_KClusters_RunClustering["Andromeda.Core.Services.KClusters.RunClustering"]
    Insorce_Helpers_ClusterHelper_GenerateCluster["Insorce.Helpers.ClusterHelper.GenerateCluster"]
    Insorce_Helpers_InsorceOpenAICalls_GenerateClusterResponse["Insorce.Helpers.InsorceOpenAICalls.GenerateClusterResponse"]
    StandardizationController_GetClusters["StandardizationController.GetClusters"]
    System_Web_Mvc_LargeJsonResult_JsonEncode["System.Web.Mvc.LargeJsonResult.JsonEncode"]
    Andromeda_Core_Services_KClusters_RunChildClustering --> Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace
    Insorce_Helpers_ClusterHelper_GenerateCluster --> Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace
    Insorce_Helpers_ClusterHelper_GenerateCluster --> Andromeda_Core_Services_KClusters_RunClustering
    Insorce_Helpers_ClusterHelper_GenerateCluster --> Insorce_Helpers_InsorceOpenAICalls_GenerateClusterResponse
    StandardizationController_GetClusters --> Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace
    StandardizationController_GetClusters --> Andromeda_Core_Services_KClusters_RunChildClustering
    StandardizationController_GetClusters --> Insorce_Helpers_ClusterHelper_GenerateCluster
    StandardizationController_GetClusters --> System_Web_Mvc_LargeJsonResult_JsonEncode
Detailed Analysis

Key Flows - Summary: GetClusters validates project ID and returns cached or freshly computed cluster and activity data as JSON. - Return cached cluster and activity data if valid and no refresh requested - Return updated cluster and activity data as JSON - Process activity embeddings - Update activity cluster ranks - Validate project ID

Error Flows - Summary: GetClusters returns error on invalid project ID and risks null reference exceptions. - Return error JSON for invalid or missing project ID - Null reference exceptions from unchecked variance report or cluster evaluation objects

Security Issues - Summary: Sanitize project ID parameters to prevent SQL injection in database calls. - Unsanitized project ID parameters, SQL injection risk in database queries

Performance Issues - Summary: Multiple database calls and inefficient LINQ usage degrade performance on large datasets. - Multiple database calls for actors, activities, product factors, and properties, Inefficient LINQ queries with multiple Where, Select, and Aggregate calls inside loops, String concatenation via Aggregate causing high memory usage and slow execution, Loops over large collections causing performance bottlenecks

Maintainability Issues - Summary: The method mixes responsibilities, uses unclear names, magic values, and incomplete code, reducing maintainability. - Incomplete and syntactically incorrect code segments, Use of magic strings and numbers, Unclear and typo-prone variable names, Tight coupling with multiple models and helper classes, Multiple unrelated tasks violating single responsibility principle, Complex anonymous types and nested LINQ expressions, Hardcoded error messages and incomplete conditionals

UX Impact Notes - Summary: Provide clear, localized error messages and ensure accurate, timely cluster data for users. - Hardcoded, non-localized error messages for invalid project ID, JSON response impacts user-facing components, Errors or delays degrade user experience, Incomplete or incorrect data causes inaccurate cluster info

Test Case Ideas - Summary: Verify data retrieval, filtering, clustering, saving, and performance under varied conditions. - Saving variance report data and validating returned JSON structure and values - Performance and correctness with large datasets - String comparison logic for property names with case and culture variations

Dependencies & Called Services - Summary: GetClusters uses data models, collections, helpers, and JSON result formatting. - ClusterHelper for cluster operations, Enumerable and LinqExtensions for data querying, IActorModel, IControlModel, IProcessModel for domain models, KClusters for cluster data structures, LargeJsonResult for JSON response formatting, List for collection management, Math for calculations, String for text manipulation, TimeSpan for time intervals

DeleteActivityProperty

Summary: The method processes a POST request to delete a specified activity property by converting inputs and invoking the deletion on the model.

JsonResult StandardizationController.DeleteActivityProperty()

Routing

  • HTTP: POST
  • URL: /Standardization/DeleteActivityProperty

Cross-layer call chain - StandardizationController.DeleteActivityProperty → Andromeda.Core.DataManager.Execute - Andromeda.Core.DataManager.Execute → Andromeda.Core.LoggingManager.Debug - Andromeda.Core.DataManager.Execute → Andromeda.Core.Database.helper.SqlParameters

Call Chain Diagram

flowchart TD
    Andromeda_Core_DataManager_Execute["Andromeda.Core.DataManager.Execute"]
    Andromeda_Core_Database_helper_SqlParameters["Andromeda.Core.Database.helper.SqlParameters"]
    Andromeda_Core_LoggingManager_Debug["Andromeda.Core.LoggingManager.Debug"]
    StandardizationController_DeleteActivityProperty["StandardizationController.DeleteActivityProperty"]
    Andromeda_Core_DataManager_Execute --> Andromeda_Core_Database_helper_SqlParameters
    Andromeda_Core_DataManager_Execute --> Andromeda_Core_LoggingManager_Debug
    StandardizationController_DeleteActivityProperty --> Andromeda_Core_DataManager_Execute
Detailed Analysis

Key Flows - Summary: The method processes a POST request to delete a specified activity property by converting inputs and invoking the deletion on the model. - Receive POST request with ActivityId, property, and propVal, Convert ActivityId to integer and extract property strings, Invoke processModel.DeleteActivityProperty with parameters

Error Flows - Summary: The method lacks validation for missing or invalid form data, causing errors. - Missing validation for non-integer ActivityId, No handling of missing property values, Potential exceptions from invalid input

Security Issues - Summary: DeleteActivityProperty risks SQL injection from unsanitized user input. - Direct use of user input without validation, Potential SQL injection vulnerability, Risk of data tampering

Maintainability Issues - Summary: Separate HTTP request handling from business logic to improve maintainability. - Mixing data retrieval and business logic

Test Case Ideas - Summary: Verify DeleteActivityProperty handles parameters correctly and manages missing or empty inputs. - Call DeleteActivityProperty with correct parameters from request form - Handle missing or empty property or propVal inputs

Dependencies & Called Services - Summary: DeleteActivityProperty uses Convert and IProcessModel services. - Convert service, IProcessModel interface

AddActivityProperty

Summary: AddActivityProperty processes POST data, converts inputs, updates activity properties, and saves changes.

JsonResult StandardizationController.AddActivityProperty()

Routing

  • HTTP: POST
  • URL: /Standardization/AddActivityProperty
Detailed Analysis

Key Flows - updates activity properties - Create new activity property object from input - Receive POST request with ActivityId, property, propVal, and skill, Convert ActivityId and skill to integers, Retrieve existing activity properties by ActivityId, Add new property to existing properties list - Update activity properties via UpdateActivityProperties method

Error Flows - Summary: AddActivityProperty lacks input validation and exception handling for data operations. - No exception handling for data retrieval and update errors

Security Issues - Summary: Validate and sanitize user input to prevent SQL injection and data tampering. - Risk of SQL injection from unvalidated input

Performance Issues - Summary: Converting large query results to a list causes performance degradation. - Using ToList() on large result sets

Maintainability Issues - Summary: Replace magic strings with constants or enums to improve maintainability. - Use of magic strings, Lack of constants or enums for key identifiers

UX Impact Notes - Summary: Handles POST requests and updates activity properties affecting UI data display. - Handles HTTP POST requests - Updates activity properties impacting UI data display

Test Case Ideas - Summary: Verify AddActivityProperty handles POST requests - updates properties correctly - Call UpdateActivityProperties with updated list - Handle HTTP POST requests only

Dependencies & Called Services - Summary: Uses collection conversion and processing interfaces for activity property addition. - Enumerable conversion, IProcessModel interface, List collection

AssignTemplateActivityToActivity

Summary: Update activity details and properties in the project XML and process model based on input parameters.

JsonResult StandardizationController.AssignTemplateActivityToActivity()

Routing

  • HTTP: POST
  • URL: /Standardization/AssignTemplateActivityToActivity

Cross-layer call chain - StandardizationController.AssignTemplateActivityToActivity → Andromeda.Core.LoggingManager.Error

Call Chain Diagram

flowchart TD
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    StandardizationController_AssignTemplateActivityToActivity["StandardizationController.AssignTemplateActivityToActivity"]
    StandardizationController_AssignTemplateActivityToActivity --> Andromeda_Core_LoggingManager_Error
Detailed Analysis

Key Flows - Summary: Update activity details and properties in the project XML and process model based on input parameters. - Create and set new ActivityProperty objects from business rules - Retrieve and convert input parameters from HTTP POST request, Read project XML and initialize activity shape list, Retrieve activity properties for main and temporary projects by activity IDs - Update activity shape text if matching activity ID exists - Update or save new products using product factors and new product name - Update activity properties in process model for BusinessRule

Error Flows - Summary: Catch exceptions - log errors - and return failure JSON on invalid input or processing errors. - Catch and log exceptions using LoggingManager - Return JSON failure response with exception message - Handle errors from invalid or missing request form data

Security Issues - Summary: Direct user input conversion and magic strings risk SQL injection and data tampering. - Direct conversion of user input to integers without validation, Use of magic strings for form fields and properties increasing injection risk

Performance Issues - Summary: Optimize collection queries and string comparisons to improve performance. - Multiple FirstOrDefault calls inside loops degrade performance on large collections, Unnecessary ToList() calls cause extra memory allocation and copying, StringComparison.CurrentCultureIgnoreCase slows string comparisons

Maintainability Issues - Summary: Magic strings, incomplete code, and naming errors reduce code clarity and maintainability. - Use of magic strings for form field and property names, Incomplete and truncated code snippets, Variable naming inconsistencies and typos

UX Impact Notes - Summary: Input errors and internal exception details degrade user experience and UI consistency. - Culture settings affect UI formats

Test Case Ideas - property updates - String comparison with different casing and cultural settings - Update activity properties for BusinessRule

Dependencies & Called Services - Summary: Uses collection interfaces and logging for processing actor - Collection interfaces: Enumerable, ICollection, Model interfaces: IActorModel, IControlModel, IProcessModel, String operations - Logging via LoggingManager

GetProcessMapRejectionsSimilarity

Summary: Retrieve project and template details, generate clusters if template exists, and perform child clustering with evaluation data.

JsonResult StandardizationController.GetProcessMapRejectionsSimilarity()

Routing

  • HTTP: GET
  • URL: /Standardization/GetProcessMapRejectionsSimilarity

Cross-layer call chain - StandardizationController.GetProcessMapRejectionsSimilarity → Insorce.Helpers.ClusterHelper.GenerateCluster - StandardizationController.GetProcessMapRejectionsSimilarity → Andromeda.Core.Services.KClusters.RunChildClustering - Insorce.Helpers.ClusterHelper.GenerateCluster → Andromeda.Core.Services.KClusters.RunClustering - Insorce.Helpers.ClusterHelper.GenerateCluster → Insorce.Helpers.InsorceOpenAICalls.GenerateClusterResponse - Insorce.Helpers.ClusterHelper.GenerateCluster → Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialCharwithSpace - Andromeda.Core.Services.KClusters.RunChildClustering → Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialCharwithSpace

Call Chain Diagram

flowchart TD
    Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace["Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialCharwithSpace"]
    Andromeda_Core_Services_KClusters_RunChildClustering["Andromeda.Core.Services.KClusters.RunChildClustering"]
    Andromeda_Core_Services_KClusters_RunClustering["Andromeda.Core.Services.KClusters.RunClustering"]
    Insorce_Helpers_ClusterHelper_GenerateCluster["Insorce.Helpers.ClusterHelper.GenerateCluster"]
    Insorce_Helpers_InsorceOpenAICalls_GenerateClusterResponse["Insorce.Helpers.InsorceOpenAICalls.GenerateClusterResponse"]
    StandardizationController_GetProcessMapRejectionsSimilarity["StandardizationController.GetProcessMapRejectionsSimilarity"]
    Andromeda_Core_Services_KClusters_RunChildClustering --> Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace
    Insorce_Helpers_ClusterHelper_GenerateCluster --> Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace
    Insorce_Helpers_ClusterHelper_GenerateCluster --> Andromeda_Core_Services_KClusters_RunClustering
    Insorce_Helpers_ClusterHelper_GenerateCluster --> Insorce_Helpers_InsorceOpenAICalls_GenerateClusterResponse
    StandardizationController_GetProcessMapRejectionsSimilarity --> Andromeda_Core_Services_KClusters_RunChildClustering
    StandardizationController_GetProcessMapRejectionsSimilarity --> Insorce_Helpers_ClusterHelper_GenerateCluster
Detailed Analysis

Key Flows - Summary: Retrieve project and template details, generate clusters if template exists, and perform child clustering with evaluation data. - Retrieve project, template, activities, actors, properties, and product factors, Retrieve template activities and generate clusters if template project ID is valid, Initialize ClusterInfo and run child clustering on filtered activities with evaluation data

Error Flows - Summary: Handle null actClusterEval by returning empty data; lack error handling for malformed conditions. - Return empty activities and cluster info if actClusterEval is null - Set ProjectId to 0 when actClusterEval is null

Performance Issues - Summary: Excessive ToList() and FirstOrDefault calls cause high memory use and slow performance. - Multiple ToList() calls on large collections increase memory usage, FirstOrDefault usage on large collections reduces performance, ToList() during filtering and clustering causes large memory allocations

Maintainability Issues - Summary: Excessive variables, tight coupling, unclear types, incomplete code, and poor naming reduce maintainability. - Excessive variable declarations and assignments

UX Impact Notes - Summary: Displays similarity and clustering data clearly, handling empty data gracefully. - Display similarity and clustering data to user - Handle null or empty data with empty arrays for UI stability

Test Case Ideas - Summary: Verify correct data retrieval, JSON structure, clustering call, and handling of empty inputs. - Returned JSON object has correct structure - and lateProjId set

Dependencies & Called Services - Summary: Uses cluster and model interfaces with collection utilities for processing. - ClusterHelper for cluster operations, Enumerable for collection processing, IActorModel interface, IControlModel interface, IProcessModel interface, IProjectModel interface, KClusters for cluster management, List collection

GetProductSimilarity

Summary: Retrieve project data, generate clusters, filter product similarity records, and return distinct matches and non-matches in JSON.

JsonResult StandardizationController.GetProductSimilarity()

Routing

  • HTTP: GET
  • URL: /Standardization/GetProductSimilarity

Cross-layer call chain - StandardizationController.GetProductSimilarity → Insorce.Helpers.ClusterHelper.GenerateCluster - StandardizationController.GetProductSimilarity → Andromeda.Core.Services.KClusters.RunChildClustering - Insorce.Helpers.ClusterHelper.GenerateCluster → Andromeda.Core.Services.KClusters.RunClustering - Insorce.Helpers.ClusterHelper.GenerateCluster → Insorce.Helpers.InsorceOpenAICalls.GenerateClusterResponse - Insorce.Helpers.ClusterHelper.GenerateCluster → Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialCharwithSpace - Andromeda.Core.Services.KClusters.RunChildClustering → Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialCharwithSpace

Call Chain Diagram

flowchart TD
    Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace["Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialCharwithSpace"]
    Andromeda_Core_Services_KClusters_RunChildClustering["Andromeda.Core.Services.KClusters.RunChildClustering"]
    Andromeda_Core_Services_KClusters_RunClustering["Andromeda.Core.Services.KClusters.RunClustering"]
    Insorce_Helpers_ClusterHelper_GenerateCluster["Insorce.Helpers.ClusterHelper.GenerateCluster"]
    Insorce_Helpers_InsorceOpenAICalls_GenerateClusterResponse["Insorce.Helpers.InsorceOpenAICalls.GenerateClusterResponse"]
    StandardizationController_GetProductSimilarity["StandardizationController.GetProductSimilarity"]
    Andromeda_Core_Services_KClusters_RunChildClustering --> Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace
    Insorce_Helpers_ClusterHelper_GenerateCluster --> Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace
    Insorce_Helpers_ClusterHelper_GenerateCluster --> Andromeda_Core_Services_KClusters_RunClustering
    Insorce_Helpers_ClusterHelper_GenerateCluster --> Insorce_Helpers_InsorceOpenAICalls_GenerateClusterResponse
    StandardizationController_GetProductSimilarity --> Andromeda_Core_Services_KClusters_RunChildClustering
    StandardizationController_GetProductSimilarity --> Insorce_Helpers_ClusterHelper_GenerateCluster
Detailed Analysis

Key Flows - and return distinct matches and non-matches in JSON. - Check cluster evaluations and project ID existence - Return JSON with distinct matching and non-matching records and template project name

Error Flows - Summary: Handle null or empty inputs and collections to prevent exceptions and ensure data integrity. - Null checks for project and template project details - Null checks for cluster evaluations before processing

Security Issues - Summary: Incomplete code causes unexpected behavior and security vulnerabilities. - Incomplete code sections, Unexpected behavior risks, Security vulnerabilities

Performance Issues - Summary: Optimize LINQ usage and avoid repeated queries to improve performance on large datasets. - Repeated FirstOrDefault calls inside loops degrade performance, LINQ Any and Distinct without comparers slow large collection processing, ToArray causes extra memory allocation and copying overhead

Maintainability Issues - Summary: The method suffers from unclear, incomplete code and poor naming, complicating maintenance and testing. - High dependency on multiple models and services, Incomplete and syntactically incorrect code fragments, Use of magic numbers instead of named constants, Variable naming issues including typos and non-descriptive names, Misspelled or incomplete variable names causing potential errors

UX Impact Notes - Summary: The method's data output and code integrity directly affect user experience. - JSON return object structure impacts data display

Test Case Ideas - handle missing or empty inputs - validate clustering logic - Performance testing with large datasets

Dependencies & Called Services - Summary: Uses clustering and collection utilities for product similarity computation. - ClusterHelper for clustering operations, Enumerable for collection processing, KClusters for cluster management, List and String for data structures, IActorModel, IControlModel, IProcessModel, IProjectModel interfaces for domain modeling

GetDOESimilarity

Summary: Retrieve project and DOE data, generate clusters, compare DOE values, and update matching records.

JsonResult StandardizationController.GetDOESimilarity()

Routing

  • HTTP: GET
  • URL: /Standardization/GetDOESimilarity

Cross-layer call chain - StandardizationController.GetDOESimilarity → Insorce.Helpers.ClusterHelper.GenerateCluster - StandardizationController.GetDOESimilarity → Andromeda.Core.Services.KClusters.RunChildClustering - Insorce.Helpers.ClusterHelper.GenerateCluster → Andromeda.Core.Services.KClusters.RunClustering - Insorce.Helpers.ClusterHelper.GenerateCluster → Insorce.Helpers.InsorceOpenAICalls.GenerateClusterResponse - Insorce.Helpers.ClusterHelper.GenerateCluster → Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialCharwithSpace - Andromeda.Core.Services.KClusters.RunChildClustering → Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialCharwithSpace

Call Chain Diagram

flowchart TD
    Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace["Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialCharwithSpace"]
    Andromeda_Core_Services_KClusters_RunChildClustering["Andromeda.Core.Services.KClusters.RunChildClustering"]
    Andromeda_Core_Services_KClusters_RunClustering["Andromeda.Core.Services.KClusters.RunClustering"]
    Insorce_Helpers_ClusterHelper_GenerateCluster["Insorce.Helpers.ClusterHelper.GenerateCluster"]
    Insorce_Helpers_InsorceOpenAICalls_GenerateClusterResponse["Insorce.Helpers.InsorceOpenAICalls.GenerateClusterResponse"]
    StandardizationController_GetDOESimilarity["StandardizationController.GetDOESimilarity"]
    Andromeda_Core_Services_KClusters_RunChildClustering --> Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace
    Insorce_Helpers_ClusterHelper_GenerateCluster --> Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace
    Insorce_Helpers_ClusterHelper_GenerateCluster --> Andromeda_Core_Services_KClusters_RunClustering
    Insorce_Helpers_ClusterHelper_GenerateCluster --> Insorce_Helpers_InsorceOpenAICalls_GenerateClusterResponse
    StandardizationController_GetDOESimilarity --> Andromeda_Core_Services_KClusters_RunChildClustering
    StandardizationController_GetDOESimilarity --> Insorce_Helpers_ClusterHelper_GenerateCluster
Detailed Analysis

Key Flows - and update matching records. - Retrieve project details and DOE properties, Extract and identify duplicate DOE values, Retrieve activities, actors, product factors, and activity properties for valid project ID, Generate clusters and perform child clustering, Compare DOE values across child activity embeddings, Remove duplicates from unmatched records based on DOE values - Update matching and unmatched DOE records

Error Flows - Summary: Handle null and missing data to prevent errors during clustering and iteration. - Null checks on cluster evaluation objects before clustering - Null checks on activities and cluster titles to avoid reference exceptions

Performance Issues - Summary: Optimize data processing and database calls to prevent slowdowns on large datasets. - Use of Distinct() and ToArray() on large datasets causing slowdowns

Maintainability Issues - Summary: Code uses unclear naming, magic numbers, repeated code, and tight coupling, reducing maintainability. - Tight coupling between models and complex data processing logic

UX Impact Notes - Summary: Returns JSON updating UI with DOE similarity results - UI update reflecting similarity data

Test Case Ideas - Summary: Verify method handles empty inputs - and returns correct JSON. - Verify matching logic with empty and non-matching gRecords - Handle empty project and no DOE properties - Handle empty product factors and activities - Process empty entries in DOE splitting - Validate JSON output correctness under various conditions

Dependencies & Called Services - Summary: Uses multiple interfaces and collections for semantic similarity and clustering operations. - ClusterHelper for clustering operations, Enumerable for collection manipulation, IActorModel interface, IControlModel interface, IProcessModel interface, IProjectModel interface, ISemanticSimilarity interface for similarity calculations, KClusters for cluster management, List collection, String type