# GroundednessBadge

- File ID: file:108l4jq:groundednessbadge-razor
- Path: NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor
- Role: ui-component
- Layer: frontend

## Purpose

Blazor UI component that displays a groundedness badge for an Answer relative to a Context by invoking an application verification command and showing status, icon and rationale.

## Key Details

Component caches previous Answer/Context to avoid repeated checks, delays check until component is interactive (first render), derives tenant id from authenticated user (fallback 'global'), dispatches a VerifyGroundednessCommand and applies result on success to control UI state and CSS/icon selection.

## Symbols

- GroundednessBadge: Blazor UI component that displays a groundedness badge for an Answer relative to a Context by invoking an application verification command and showing status, icon and rationale.
- OnParametersSet(): Resets cached result when Answer or Context parameters change.
- OnParametersSetAsync(): Triggers a background groundedness check if component is interactive and inputs are present and no result cached.
- OnAfterRenderAsync(): Marks component as interactive on first render and triggers a check if needed.
- RunCheck(): Performs the verification: sets checking state, obtains tenant id from auth, requests groundedness verification, stores result on success, and clears checking state.
- GetStatusClass(): Maps numeric groundedness score to a CSS status class with thresholds for high/medium/low.
- GetIcon(): Selects an icon name based on groundedness score thresholds, with fallback for unknown.

## Dependencies

- No resolved dependencies.

## Calls

- No resolved calls.

## Unresolved References

- dependency-target: NexusReader.Application.Commands.AI
- dependency-target: NexusReader.Application.Abstractions.Services
- dependency-target: NexusReader.UI.Shared.Components.Atoms
- dependency-target: Microsoft.AspNetCore.Components.Authorization
- call-target: unknown
- call-target: unknown
- call-target: unknown
- interaction-target: var tenantId = authState.User.FindFirst("TenantId")?.Value ?? "global";
- interaction-target: await AuthProvider.GetAuthenticationStateAsync() (reads current user/claims)
- interaction-target: await Mediator.Send(new VerifyGroundednessCommand(Answer, Context, tenantId)); (dispatches to application handler)

## Coverage

- Symbols: 7
- Executable symbols: 6
- Executable symbols with control flow: 6
- Grounded edges: 7
- Unresolved references: 10
- Control-flow fragments: 6
- Unresolved jumps: 3
- Unsupported constructs: 0
- Control-flow coverage: 100%
- Required diagrams: 2
- Generated diagrams: 8

## Control Flow Fragments

- OnParametersSet: 10 nodes, 11 edges, 0 jumps, 0 unsupported constructs
- OnParametersSetAsync: 12 nodes, 13 edges, 1 jumps, 0 unsupported constructs
- OnAfterRenderAsync: 16 nodes, 18 edges, 1 jumps, 0 unsupported constructs
- RunCheck: 19 nodes, 20 edges, 1 jumps, 0 unsupported constructs
- GetStatusClass: 22 nodes, 26 edges, 0 jumps, 0 unsupported constructs
- GetIcon: 22 nodes, 26 edges, 0 jumps, 0 unsupported constructs

## Diagrams

### GroundednessBadge Neighborhood

```mermaid
flowchart LR
    class_3ugxc0_groundednessbadge("GroundednessBadge")
    file_108l4jq_groundednessbadge_razor("GroundednessBadge")
    method_1nedo1_onafterrenderasync[["OnAfterRenderAsync()"]]
    method_8ug383_getstatusclass[["GetStatusClass()"]]
    method_gfuk2l_onparametersset[["OnParametersSet()"]]
    method_mes1h8_onparameterssetasync[["OnParametersSetAsync()"]]
    method_xt4lks_runcheck[["RunCheck()"]]
    method_zopugm_geticon[["GetIcon()"]]
```

### GroundednessBadge Execution Overview

```mermaid
flowchart TD
    class_3ugxc0_groundednessbadge("GroundednessBadge")
    method_1nedo1_onafterrenderasync[["OnAfterRenderAsync()"]]
    method_8ug383_getstatusclass[["GetStatusClass()"]]
    method_gfuk2l_onparametersset[["OnParametersSet()"]]
    method_mes1h8_onparameterssetasync[["OnParametersSetAsync()"]]
    method_xt4lks_runcheck[["RunCheck()"]]
    method_zopugm_geticon[["GetIcon()"]]
    unresolved_unresolved_1heq3ju_call_target{"Unresolved: RunCheck"}
    unresolved_unresolved_1ro0lk4_call_target{"Unresolved: RunCheck"}
    unresolved_unresolved_44hz6e_call_target{"Unresolved: VerifyGroundednessCommand handler"}
    unresolved_unresolved_e262m7_interaction_target{"Unresolved: var tenantId = authState.User.FindFirst(\\"TenantId\\")?.Value ?? \\"global\\";"}
    unresolved_unresolved_e58p8m_interaction_target{"Unresolved: await Mediator.Send(new VerifyGroundednessCommand(Answer, Context, tenantId)); (dispatches to application handler)"}
    unresolved_unresolved_nrgd14_interaction_target{"Unresolved: await AuthProvider.GetAuthenticationStateAsync() (reads current user/claims)"}
    class_3ugxc0_groundednessbadge -->|contains| method_1nedo1_onafterrenderasync
    class_3ugxc0_groundednessbadge -->|contains| method_8ug383_getstatusclass
    class_3ugxc0_groundednessbadge -->|contains| method_gfuk2l_onparametersset
    class_3ugxc0_groundednessbadge -->|contains| method_mes1h8_onparameterssetasync
    class_3ugxc0_groundednessbadge -->|contains| method_xt4lks_runcheck
    class_3ugxc0_groundednessbadge -->|contains| method_zopugm_geticon
    class_3ugxc0_groundednessbadge -->|unresolved interaction| unresolved_unresolved_e262m7_interaction_target
    class_3ugxc0_groundednessbadge -->|unresolved interaction| unresolved_unresolved_e58p8m_interaction_target
    class_3ugxc0_groundednessbadge -->|unresolved interaction| unresolved_unresolved_nrgd14_interaction_target
    method_1nedo1_onafterrenderasync -->|unresolved call| unresolved_unresolved_1heq3ju_call_target
    method_mes1h8_onparameterssetasync -->|unresolved call| unresolved_unresolved_1ro0lk4_call_target
    method_xt4lks_runcheck -->|unresolved call| unresolved_unresolved_44hz6e_call_target
```

### OnParametersSet() Control Flow

```mermaid
flowchart TD
    method_gfuk2l_onparametersset__action_35_guard_clause_35__condition{"Answer != _previousAnswer || Context != _previousContext"}
    method_gfuk2l_onparametersset__action_35_guard_clause_35__false("update previous values")
    method_gfuk2l_onparametersset__action_35_guard_clause_35__merge("merge")
    method_gfuk2l_onparametersset__action_35_guard_clause_35__true("reset _result")
    method_gfuk2l_onparametersset__action_35_onparametersset_branch_35_0__condition{"Answer != _previousAnswer || Context != _previousContext"}
    method_gfuk2l_onparametersset__action_35_onparametersset_branch_35_0__false("false")
    method_gfuk2l_onparametersset__action_35_onparametersset_branch_35_0__merge("merge")
    method_gfuk2l_onparametersset__action_35_onparametersset_branch_35_0__true("true")
    method_gfuk2l_onparametersset__entry(["OnParametersSet entry"])
    method_gfuk2l_onparametersset__implicit_return(["return"])
    method_gfuk2l_onparametersset__action_35_guard_clause_35__condition -->|update previous values| method_gfuk2l_onparametersset__action_35_guard_clause_35__false
    method_gfuk2l_onparametersset__action_35_guard_clause_35__condition -->|reset _result| method_gfuk2l_onparametersset__action_35_guard_clause_35__true
    method_gfuk2l_onparametersset__action_35_guard_clause_35__false -->|next| method_gfuk2l_onparametersset__action_35_guard_clause_35__merge
    method_gfuk2l_onparametersset__action_35_guard_clause_35__merge -->|return| method_gfuk2l_onparametersset__implicit_return
    method_gfuk2l_onparametersset__action_35_guard_clause_35__true -->|next| method_gfuk2l_onparametersset__action_35_guard_clause_35__merge
    method_gfuk2l_onparametersset__action_35_onparametersset_branch_35_0__condition -->|false| method_gfuk2l_onparametersset__action_35_onparametersset_branch_35_0__false
    method_gfuk2l_onparametersset__action_35_onparametersset_branch_35_0__condition -->|true| method_gfuk2l_onparametersset__action_35_onparametersset_branch_35_0__true
    method_gfuk2l_onparametersset__action_35_onparametersset_branch_35_0__false -->|next| method_gfuk2l_onparametersset__action_35_onparametersset_branch_35_0__merge
    method_gfuk2l_onparametersset__action_35_onparametersset_branch_35_0__merge -->|next| method_gfuk2l_onparametersset__action_35_guard_clause_35__condition
    method_gfuk2l_onparametersset__action_35_onparametersset_branch_35_0__true -->|next| method_gfuk2l_onparametersset__action_35_onparametersset_branch_35_0__merge
    method_gfuk2l_onparametersset__entry -->|next| method_gfuk2l_onparametersset__action_35_onparametersset_branch_35_0__condition
```

### OnParametersSetAsync() Control Flow

```mermaid
flowchart TD
    method_mes1h8_onparameterssetasync__call_47_RunCheck[["RunCheck"]]
    method_mes1h8_onparameterssetasync__action_45_guard_clause_45__condition{"_isInteractive && !string.IsNullOrEmpty(Answer) && !string.IsNullOrEmpty(Context) && _result == null"}
    method_mes1h8_onparameterssetasync__action_45_guard_clause_45__false("skip")
    method_mes1h8_onparameterssetasync__action_45_guard_clause_45__merge("merge")
    method_mes1h8_onparameterssetasync__action_45_guard_clause_45__true("invoke RunCheck")
    method_mes1h8_onparameterssetasync__action_45_onparameterssetasync_branch_45_0__condition{"_isInteractive && !string.IsNullOrEmpty(Answer) && !string.IsNullOrEmpty(Context) && _result == null"}
    method_mes1h8_onparameterssetasync__action_45_onparameterssetasync_branch_45_0__false("false")
    method_mes1h8_onparameterssetasync__action_45_onparameterssetasync_branch_45_0__merge("merge")
    method_mes1h8_onparameterssetasync__action_45_onparameterssetasync_branch_45_0__true("true")
    method_mes1h8_onparameterssetasync__action_47_onparameterssetasync_await_47_1__await[["Waits for async work"]]
    method_mes1h8_onparameterssetasync__entry(["OnParametersSetAsync entry"])
    method_mes1h8_onparameterssetasync__implicit_return(["return"])
    method_mes1h8_onparameterssetasync__action_45_guard_clause_45__condition -->|skip| method_mes1h8_onparameterssetasync__action_45_guard_clause_45__false
    method_mes1h8_onparameterssetasync__action_45_guard_clause_45__condition -->|invoke RunCheck| method_mes1h8_onparameterssetasync__action_45_guard_clause_45__true
    method_mes1h8_onparameterssetasync__action_45_guard_clause_45__false -->|next| method_mes1h8_onparameterssetasync__action_45_guard_clause_45__merge
    method_mes1h8_onparameterssetasync__action_45_guard_clause_45__merge -->|next| method_mes1h8_onparameterssetasync__action_45_onparameterssetasync_branch_45_0__condition
    method_mes1h8_onparameterssetasync__action_45_guard_clause_45__true -->|next| method_mes1h8_onparameterssetasync__action_45_guard_clause_45__merge
    method_mes1h8_onparameterssetasync__action_45_onparameterssetasync_branch_45_0__condition -->|false| method_mes1h8_onparameterssetasync__action_45_onparameterssetasync_branch_45_0__false
    method_mes1h8_onparameterssetasync__action_45_onparameterssetasync_branch_45_0__condition -->|true| method_mes1h8_onparameterssetasync__action_45_onparameterssetasync_branch_45_0__true
    method_mes1h8_onparameterssetasync__action_45_onparameterssetasync_branch_45_0__false -->|next| method_mes1h8_onparameterssetasync__action_45_onparameterssetasync_branch_45_0__merge
    method_mes1h8_onparameterssetasync__action_45_onparameterssetasync_branch_45_0__merge -->|next| method_mes1h8_onparameterssetasync__action_47_onparameterssetasync_await_47_1__await
    method_mes1h8_onparameterssetasync__action_45_onparameterssetasync_branch_45_0__true -->|next| method_mes1h8_onparameterssetasync__action_45_onparameterssetasync_branch_45_0__merge
    method_mes1h8_onparameterssetasync__action_47_onparameterssetasync_await_47_1__await -->|no args| method_mes1h8_onparameterssetasync__call_47_RunCheck
    method_mes1h8_onparameterssetasync__call_47_RunCheck -->|return| method_mes1h8_onparameterssetasync__implicit_return
    method_mes1h8_onparameterssetasync__entry -->|next| method_mes1h8_onparameterssetasync__action_45_guard_clause_45__condition
```

### OnAfterRenderAsync() Control Flow

```mermaid
flowchart TD
    method_1nedo1_onafterrenderasync__call_58_RunCheck[["RunCheck"]]
    method_1nedo1_onafterrenderasync__action_53_guard_clause_53__condition{"firstRender"}
    method_1nedo1_onafterrenderasync__action_53_guard_clause_53__false("maybe RunCheck")
    method_1nedo1_onafterrenderasync__action_53_guard_clause_53__merge("merge")
    method_1nedo1_onafterrenderasync__action_53_guard_clause_53__true("set _isInteractive true")
    method_1nedo1_onafterrenderasync__action_53_onafterrenderasync_branch_53_0__condition{"firstRender"}
    method_1nedo1_onafterrenderasync__action_53_onafterrenderasync_branch_53_0__false("false")
    method_1nedo1_onafterrenderasync__action_53_onafterrenderasync_branch_53_0__merge("merge")
    method_1nedo1_onafterrenderasync__action_53_onafterrenderasync_branch_53_0__true("true")
    method_1nedo1_onafterrenderasync__action_56_onafterrenderasync_branch_56_1__condition{"!string.IsNullOrEmpty(Answer) && !string.IsNullOrEmpty(Context) && _result == null"}
    method_1nedo1_onafterrenderasync__action_56_onafterrenderasync_branch_56_1__false("false")
    method_1nedo1_onafterrenderasync__action_56_onafterrenderasync_branch_56_1__merge("merge")
    method_1nedo1_onafterrenderasync__action_56_onafterrenderasync_branch_56_1__true("true")
    method_1nedo1_onafterrenderasync__action_58_onafterrenderasync_await_58_2__await[["Waits for async work"]]
    method_1nedo1_onafterrenderasync__entry(["OnAfterRenderAsync entry"])
    method_1nedo1_onafterrenderasync__implicit_return(["return"])
    method_1nedo1_onafterrenderasync__action_53_guard_clause_53__condition -->|maybe RunCheck| method_1nedo1_onafterrenderasync__action_53_guard_clause_53__false
    method_1nedo1_onafterrenderasync__action_53_guard_clause_53__condition -->|set _isInteractive true| method_1nedo1_onafterrenderasync__action_53_guard_clause_53__true
    method_1nedo1_onafterrenderasync__action_53_guard_clause_53__false -->|next| method_1nedo1_onafterrenderasync__action_53_guard_clause_53__merge
    method_1nedo1_onafterrenderasync__action_53_guard_clause_53__merge -->|next| method_1nedo1_onafterrenderasync__action_53_onafterrenderasync_branch_53_0__condition
    method_1nedo1_onafterrenderasync__action_53_guard_clause_53__true -->|next| method_1nedo1_onafterrenderasync__action_53_guard_clause_53__merge
    method_1nedo1_onafterrenderasync__action_53_onafterrenderasync_branch_53_0__condition -->|false| method_1nedo1_onafterrenderasync__action_53_onafterrenderasync_branch_53_0__false
    method_1nedo1_onafterrenderasync__action_53_onafterrenderasync_branch_53_0__condition -->|true| method_1nedo1_onafterrenderasync__action_53_onafterrenderasync_branch_53_0__true
    method_1nedo1_onafterrenderasync__action_53_onafterrenderasync_branch_53_0__false -->|next| method_1nedo1_onafterrenderasync__action_53_onafterrenderasync_branch_53_0__merge
    method_1nedo1_onafterrenderasync__action_53_onafterrenderasync_branch_53_0__merge -->|next| method_1nedo1_onafterrenderasync__action_56_onafterrenderasync_branch_56_1__condition
    method_1nedo1_onafterrenderasync__action_53_onafterrenderasync_branch_53_0__true -->|next| method_1nedo1_onafterrenderasync__action_53_onafterrenderasync_branch_53_0__merge
    method_1nedo1_onafterrenderasync__action_56_onafterrenderasync_branch_56_1__condition -->|false| method_1nedo1_onafterrenderasync__action_56_onafterrenderasync_branch_56_1__false
    method_1nedo1_onafterrenderasync__action_56_onafterrenderasync_branch_56_1__condition -->|true| method_1nedo1_onafterrenderasync__action_56_onafterrenderasync_branch_56_1__true
    method_1nedo1_onafterrenderasync__action_56_onafterrenderasync_branch_56_1__false -->|next| method_1nedo1_onafterrenderasync__action_56_onafterrenderasync_branch_56_1__merge
    method_1nedo1_onafterrenderasync__action_56_onafterrenderasync_branch_56_1__merge -->|next| method_1nedo1_onafterrenderasync__action_58_onafterrenderasync_await_58_2__await
    method_1nedo1_onafterrenderasync__action_56_onafterrenderasync_branch_56_1__true -->|next| method_1nedo1_onafterrenderasync__action_56_onafterrenderasync_branch_56_1__merge
    method_1nedo1_onafterrenderasync__action_58_onafterrenderasync_await_58_2__await -->|no args| method_1nedo1_onafterrenderasync__call_58_RunCheck
    method_1nedo1_onafterrenderasync__call_58_RunCheck -->|return| method_1nedo1_onafterrenderasync__implicit_return
    method_1nedo1_onafterrenderasync__entry -->|next| method_1nedo1_onafterrenderasync__action_53_guard_clause_53__condition
```

### RunCheck() Control Flow

_Warnings: diagram method_xt4lks_runcheck__fragment_diagram exceeds preferred complexity thresholds (19 nodes, 20 edges)._

```mermaid
---
config:
  flowchart:
    defaultRenderer: "elk"
---
flowchart TD
    method_xt4lks_runcheck__call_71_VerifyGroundednessCommand_handler[["VerifyGroundednessCommand handler"]]
    method_xt4lks_runcheck__action_65_state_change_65__linear("enter checking")
    method_xt4lks_runcheck__action_68_runcheck_await_68_0__await[["Waits for async work"]]
    method_xt4lks_runcheck__action_69_mapping_69__linear("Derive tenant id")
    method_xt4lks_runcheck__action_71_runcheck_await_71_2__await[["Waits for async work"]]
    method_xt4lks_runcheck__action_72_branch_72__condition{"res.IsSuccess"}
    method_xt4lks_runcheck__action_72_branch_72__false("ignore failure")
    method_xt4lks_runcheck__action_72_branch_72__merge("merge")
    method_xt4lks_runcheck__action_72_branch_72__true("store result")
    method_xt4lks_runcheck__action_72_runcheck_branch_72_3__condition{"res.IsSuccess"}
    method_xt4lks_runcheck__action_72_runcheck_branch_72_3__false("false")
    method_xt4lks_runcheck__action_72_runcheck_branch_72_3__merge("merge")
    method_xt4lks_runcheck__action_72_runcheck_branch_72_3__true("true")
    method_xt4lks_runcheck__action_77_state_change_77__linear("exit checking")
    method_xt4lks_runcheck__entry(["RunCheck entry"])
    method_xt4lks_runcheck__action_68_external_call_68__linear("Get authentication state")
    method_xt4lks_runcheck__action_69_runcheck_repository_read_69_1__linear[("Reads repository or persistence state")]
    method_xt4lks_runcheck__action_71_external_call_71__linear("Request groundedness verification")
    method_xt4lks_runcheck__implicit_return(["return"])
    method_xt4lks_runcheck__action_65_state_change_65__linear -->|next| method_xt4lks_runcheck__action_68_runcheck_await_68_0__await
    method_xt4lks_runcheck__action_68_external_call_68__linear -->|next| method_xt4lks_runcheck__action_69_runcheck_repository_read_69_1__linear
    method_xt4lks_runcheck__action_68_runcheck_await_68_0__await -->|next| method_xt4lks_runcheck__action_68_external_call_68__linear
    method_xt4lks_runcheck__action_69_mapping_69__linear -->|next| method_xt4lks_runcheck__action_71_runcheck_await_71_2__await
    method_xt4lks_runcheck__action_69_runcheck_repository_read_69_1__linear -->|next| method_xt4lks_runcheck__action_69_mapping_69__linear
    method_xt4lks_runcheck__action_71_external_call_71__linear -->|new VerifyGroundednessCommand Answer, Context, tenantId sent via IMediator| method_xt4lks_runcheck__call_71_VerifyGroundednessCommand_handler
    method_xt4lks_runcheck__action_71_runcheck_await_71_2__await -->|next| method_xt4lks_runcheck__action_71_external_call_71__linear
    method_xt4lks_runcheck__action_72_branch_72__condition -->|ignore failure| method_xt4lks_runcheck__action_72_branch_72__false
    method_xt4lks_runcheck__action_72_branch_72__condition -->|store result| method_xt4lks_runcheck__action_72_branch_72__true
    method_xt4lks_runcheck__action_72_branch_72__false -->|next| method_xt4lks_runcheck__action_72_branch_72__merge
    method_xt4lks_runcheck__action_72_branch_72__merge -->|next| method_xt4lks_runcheck__action_77_state_change_77__linear
    method_xt4lks_runcheck__action_72_branch_72__true -->|next| method_xt4lks_runcheck__action_72_branch_72__merge
    method_xt4lks_runcheck__action_72_runcheck_branch_72_3__condition -->|false| method_xt4lks_runcheck__action_72_runcheck_branch_72_3__false
    method_xt4lks_runcheck__action_72_runcheck_branch_72_3__condition -->|true| method_xt4lks_runcheck__action_72_runcheck_branch_72_3__true
    method_xt4lks_runcheck__action_72_runcheck_branch_72_3__false -->|next| method_xt4lks_runcheck__action_72_runcheck_branch_72_3__merge
    method_xt4lks_runcheck__action_72_runcheck_branch_72_3__merge -->|next| method_xt4lks_runcheck__action_72_branch_72__condition
    method_xt4lks_runcheck__action_72_runcheck_branch_72_3__true -->|next| method_xt4lks_runcheck__action_72_runcheck_branch_72_3__merge
    method_xt4lks_runcheck__action_77_state_change_77__linear -->|return| method_xt4lks_runcheck__implicit_return
    method_xt4lks_runcheck__call_71_VerifyGroundednessCommand_handler -->|next| method_xt4lks_runcheck__action_72_runcheck_branch_72_3__condition
    method_xt4lks_runcheck__entry -->|next| method_xt4lks_runcheck__action_65_state_change_65__linear
```

### GetStatusClass() Control Flow

_Warnings: diagram method_8ug383_getstatusclass__fragment_diagram exceeds preferred complexity thresholds (22 nodes, 26 edges)._

```mermaid
---
config:
  flowchart:
    defaultRenderer: "elk"
---
flowchart TD
    method_8ug383_getstatusclass__action_83_getstatusclass_guard_clause_83_0__condition{"_result == null"}
    method_8ug383_getstatusclass__action_83_getstatusclass_guard_clause_83_0__false("continue")
    method_8ug383_getstatusclass__action_83_getstatusclass_guard_clause_83_0__merge("merge")
    method_8ug383_getstatusclass__action_83_getstatusclass_guard_clause_83_0__true("exit")
    method_8ug383_getstatusclass__action_83_guard_clause_83__condition{"_result == null"}
    method_8ug383_getstatusclass__action_83_guard_clause_83__false("evaluate score")
    method_8ug383_getstatusclass__action_83_guard_clause_83__merge("merge")
    method_8ug383_getstatusclass__action_83_guard_clause_83__true("return empty string")
    method_8ug383_getstatusclass__action_84_branch_84__condition{"_result.Score >= 0.8, >= 0.5, else"}
    method_8ug383_getstatusclass__action_84_branch_84__false("status-medium")
    method_8ug383_getstatusclass__action_84_branch_84__merge("merge")
    method_8ug383_getstatusclass__action_84_branch_84__true("status-high")
    method_8ug383_getstatusclass__action_84_getstatusclass_guard_clause_84_1__condition{"_result.Score >= 0.8"}
    method_8ug383_getstatusclass__action_84_getstatusclass_guard_clause_84_1__false("continue")
    method_8ug383_getstatusclass__action_84_getstatusclass_guard_clause_84_1__merge("merge")
    method_8ug383_getstatusclass__action_84_getstatusclass_guard_clause_84_1__true("exit")
    method_8ug383_getstatusclass__action_85_getstatusclass_guard_clause_85_2__condition{"_result.Score >= 0.5"}
    method_8ug383_getstatusclass__action_85_getstatusclass_guard_clause_85_2__false("continue")
    method_8ug383_getstatusclass__action_85_getstatusclass_guard_clause_85_2__merge("merge")
    method_8ug383_getstatusclass__action_85_getstatusclass_guard_clause_85_2__true("exit")
    method_8ug383_getstatusclass__entry(["GetStatusClass entry"])
    method_8ug383_getstatusclass__action_86_getstatusclass_return_86_3__return(["Returns result"])
    method_8ug383_getstatusclass__action_83_getstatusclass_guard_clause_83_0__condition -->|continue| method_8ug383_getstatusclass__action_83_getstatusclass_guard_clause_83_0__false
    method_8ug383_getstatusclass__action_83_getstatusclass_guard_clause_83_0__condition -->|exit| method_8ug383_getstatusclass__action_83_getstatusclass_guard_clause_83_0__true
    method_8ug383_getstatusclass__action_83_getstatusclass_guard_clause_83_0__false -->|next| method_8ug383_getstatusclass__action_83_getstatusclass_guard_clause_83_0__merge
    method_8ug383_getstatusclass__action_83_getstatusclass_guard_clause_83_0__merge -->|next| method_8ug383_getstatusclass__action_84_branch_84__condition
    method_8ug383_getstatusclass__action_83_getstatusclass_guard_clause_83_0__true -->|next| method_8ug383_getstatusclass__action_83_getstatusclass_guard_clause_83_0__merge
    method_8ug383_getstatusclass__action_83_guard_clause_83__condition -->|evaluate score| method_8ug383_getstatusclass__action_83_guard_clause_83__false
    method_8ug383_getstatusclass__action_83_guard_clause_83__condition -->|return empty string| method_8ug383_getstatusclass__action_83_guard_clause_83__true
    method_8ug383_getstatusclass__action_83_guard_clause_83__false -->|next| method_8ug383_getstatusclass__action_83_guard_clause_83__merge
    method_8ug383_getstatusclass__action_83_guard_clause_83__merge -->|next| method_8ug383_getstatusclass__action_83_getstatusclass_guard_clause_83_0__condition
    method_8ug383_getstatusclass__action_83_guard_clause_83__true -->|next| method_8ug383_getstatusclass__action_83_guard_clause_83__merge
    method_8ug383_getstatusclass__action_84_branch_84__condition -->|status-medium| method_8ug383_getstatusclass__action_84_branch_84__false
    method_8ug383_getstatusclass__action_84_branch_84__condition -->|status-high| method_8ug383_getstatusclass__action_84_branch_84__true
    method_8ug383_getstatusclass__action_84_branch_84__false -->|next| method_8ug383_getstatusclass__action_84_branch_84__merge
    method_8ug383_getstatusclass__action_84_branch_84__merge -->|next| method_8ug383_getstatusclass__action_84_getstatusclass_guard_clause_84_1__condition
    method_8ug383_getstatusclass__action_84_branch_84__true -->|next| method_8ug383_getstatusclass__action_84_branch_84__merge
    method_8ug383_getstatusclass__action_84_getstatusclass_guard_clause_84_1__condition -->|continue| method_8ug383_getstatusclass__action_84_getstatusclass_guard_clause_84_1__false
    method_8ug383_getstatusclass__action_84_getstatusclass_guard_clause_84_1__condition -->|exit| method_8ug383_getstatusclass__action_84_getstatusclass_guard_clause_84_1__true
    method_8ug383_getstatusclass__action_84_getstatusclass_guard_clause_84_1__false -->|next| method_8ug383_getstatusclass__action_84_getstatusclass_guard_clause_84_1__merge
    method_8ug383_getstatusclass__action_84_getstatusclass_guard_clause_84_1__merge -->|next| method_8ug383_getstatusclass__action_85_getstatusclass_guard_clause_85_2__condition
    method_8ug383_getstatusclass__action_84_getstatusclass_guard_clause_84_1__true -->|next| method_8ug383_getstatusclass__action_84_getstatusclass_guard_clause_84_1__merge
    method_8ug383_getstatusclass__action_85_getstatusclass_guard_clause_85_2__condition -->|continue| method_8ug383_getstatusclass__action_85_getstatusclass_guard_clause_85_2__false
    method_8ug383_getstatusclass__action_85_getstatusclass_guard_clause_85_2__condition -->|exit| method_8ug383_getstatusclass__action_85_getstatusclass_guard_clause_85_2__true
    method_8ug383_getstatusclass__action_85_getstatusclass_guard_clause_85_2__false -->|next| method_8ug383_getstatusclass__action_85_getstatusclass_guard_clause_85_2__merge
    method_8ug383_getstatusclass__action_85_getstatusclass_guard_clause_85_2__merge -->|return| method_8ug383_getstatusclass__action_86_getstatusclass_return_86_3__return
    method_8ug383_getstatusclass__action_85_getstatusclass_guard_clause_85_2__true -->|next| method_8ug383_getstatusclass__action_85_getstatusclass_guard_clause_85_2__merge
    method_8ug383_getstatusclass__entry -->|next| method_8ug383_getstatusclass__action_83_guard_clause_83__condition
```

### GetIcon() Control Flow

_Warnings: diagram method_zopugm_geticon__fragment_diagram exceeds preferred complexity thresholds (22 nodes, 26 edges)._

```mermaid
---
config:
  flowchart:
    defaultRenderer: "elk"
---
flowchart TD
    method_zopugm_geticon__action_91_geticon_guard_clause_91_0__condition{"_result == null"}
    method_zopugm_geticon__action_91_geticon_guard_clause_91_0__false("continue")
    method_zopugm_geticon__action_91_geticon_guard_clause_91_0__merge("merge")
    method_zopugm_geticon__action_91_geticon_guard_clause_91_0__true("exit")
    method_zopugm_geticon__action_91_guard_clause_91__condition{"_result == null"}
    method_zopugm_geticon__action_91_guard_clause_91__false("evaluate score")
    method_zopugm_geticon__action_91_guard_clause_91__merge("merge")
    method_zopugm_geticon__action_91_guard_clause_91__true("return 'help'")
    method_zopugm_geticon__action_92_branch_92__condition{"_result.Score >= 0.8, >= 0.5, else"}
    method_zopugm_geticon__action_92_branch_92__false("info-circle")
    method_zopugm_geticon__action_92_branch_92__merge("merge")
    method_zopugm_geticon__action_92_branch_92__true("check-circle")
    method_zopugm_geticon__action_92_geticon_guard_clause_92_1__condition{"_result.Score >= 0.8"}
    method_zopugm_geticon__action_92_geticon_guard_clause_92_1__false("continue")
    method_zopugm_geticon__action_92_geticon_guard_clause_92_1__merge("merge")
    method_zopugm_geticon__action_92_geticon_guard_clause_92_1__true("exit")
    method_zopugm_geticon__action_93_geticon_guard_clause_93_2__condition{"_result.Score >= 0.5"}
    method_zopugm_geticon__action_93_geticon_guard_clause_93_2__false("continue")
    method_zopugm_geticon__action_93_geticon_guard_clause_93_2__merge("merge")
    method_zopugm_geticon__action_93_geticon_guard_clause_93_2__true("exit")
    method_zopugm_geticon__entry(["GetIcon entry"])
    method_zopugm_geticon__action_94_geticon_return_94_3__return(["Returns result"])
    method_zopugm_geticon__action_91_geticon_guard_clause_91_0__condition -->|continue| method_zopugm_geticon__action_91_geticon_guard_clause_91_0__false
    method_zopugm_geticon__action_91_geticon_guard_clause_91_0__condition -->|exit| method_zopugm_geticon__action_91_geticon_guard_clause_91_0__true
    method_zopugm_geticon__action_91_geticon_guard_clause_91_0__false -->|next| method_zopugm_geticon__action_91_geticon_guard_clause_91_0__merge
    method_zopugm_geticon__action_91_geticon_guard_clause_91_0__merge -->|next| method_zopugm_geticon__action_92_branch_92__condition
    method_zopugm_geticon__action_91_geticon_guard_clause_91_0__true -->|next| method_zopugm_geticon__action_91_geticon_guard_clause_91_0__merge
    method_zopugm_geticon__action_91_guard_clause_91__condition -->|evaluate score| method_zopugm_geticon__action_91_guard_clause_91__false
    method_zopugm_geticon__action_91_guard_clause_91__condition -->|transforms input| method_zopugm_geticon__action_91_guard_clause_91__true
    method_zopugm_geticon__action_91_guard_clause_91__false -->|next| method_zopugm_geticon__action_91_guard_clause_91__merge
    method_zopugm_geticon__action_91_guard_clause_91__merge -->|next| method_zopugm_geticon__action_91_geticon_guard_clause_91_0__condition
    method_zopugm_geticon__action_91_guard_clause_91__true -->|next| method_zopugm_geticon__action_91_guard_clause_91__merge
    method_zopugm_geticon__action_92_branch_92__condition -->|info-circle| method_zopugm_geticon__action_92_branch_92__false
    method_zopugm_geticon__action_92_branch_92__condition -->|check-circle| method_zopugm_geticon__action_92_branch_92__true
    method_zopugm_geticon__action_92_branch_92__false -->|next| method_zopugm_geticon__action_92_branch_92__merge
    method_zopugm_geticon__action_92_branch_92__merge -->|next| method_zopugm_geticon__action_92_geticon_guard_clause_92_1__condition
    method_zopugm_geticon__action_92_branch_92__true -->|next| method_zopugm_geticon__action_92_branch_92__merge
    method_zopugm_geticon__action_92_geticon_guard_clause_92_1__condition -->|continue| method_zopugm_geticon__action_92_geticon_guard_clause_92_1__false
    method_zopugm_geticon__action_92_geticon_guard_clause_92_1__condition -->|exit| method_zopugm_geticon__action_92_geticon_guard_clause_92_1__true
    method_zopugm_geticon__action_92_geticon_guard_clause_92_1__false -->|next| method_zopugm_geticon__action_92_geticon_guard_clause_92_1__merge
    method_zopugm_geticon__action_92_geticon_guard_clause_92_1__merge -->|next| method_zopugm_geticon__action_93_geticon_guard_clause_93_2__condition
    method_zopugm_geticon__action_92_geticon_guard_clause_92_1__true -->|next| method_zopugm_geticon__action_92_geticon_guard_clause_92_1__merge
    method_zopugm_geticon__action_93_geticon_guard_clause_93_2__condition -->|continue| method_zopugm_geticon__action_93_geticon_guard_clause_93_2__false
    method_zopugm_geticon__action_93_geticon_guard_clause_93_2__condition -->|exit| method_zopugm_geticon__action_93_geticon_guard_clause_93_2__true
    method_zopugm_geticon__action_93_geticon_guard_clause_93_2__false -->|next| method_zopugm_geticon__action_93_geticon_guard_clause_93_2__merge
    method_zopugm_geticon__action_93_geticon_guard_clause_93_2__merge -->|return| method_zopugm_geticon__action_94_geticon_return_94_3__return
    method_zopugm_geticon__action_93_geticon_guard_clause_93_2__true -->|next| method_zopugm_geticon__action_93_geticon_guard_clause_93_2__merge
    method_zopugm_geticon__entry -->|next| method_zopugm_geticon__action_91_guard_clause_91__condition
```

## Diagram Validation

- Status: warn
- Warning: Control-flow extraction left 3 unresolved jumps.
- Warning: control-flow: diagram method_xt4lks_runcheck__fragment_diagram exceeds preferred complexity thresholds (19 nodes, 20 edges).
- Warning: control-flow: diagram method_8ug383_getstatusclass__fragment_diagram exceeds preferred complexity thresholds (22 nodes, 26 edges).
- Warning: control-flow: diagram method_zopugm_geticon__fragment_diagram exceeds preferred complexity thresholds (22 nodes, 26 edges).
