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¶
- Variance →
Variance(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