# vbmenzel/emergencyresponse architecture

> Architecture diagram of the GitHub repository vbmenzel/emergencyresponse, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/vbmenzel/emergencyresponse
- Repository: https://github.com/vbmenzel/emergencyresponse

## Overview

Emergency Response is a C# emergency-dispatch domain with console and Raylib hosts. The principal workflow reports an incident with location, severity, and required capabilities; the command centre finds an eligible, available responder under its current policy and records the assignment atomically; the incident is later resolved and registered callbacks are notified. The graph also shows responder capability/energy checks, generic search, and the two presentation hosts. Wiring for unsampled UI actions is limited to documented or visible interactions.

Main entry points: [`src/EmergencyResponse.Core/Coordination/CommandCentre.cs`](https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.Core/Coordination/CommandCentre.cs) (Command Centre), [`src/EmergencyResponse.ConsoleDemo/Program.cs`](https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.ConsoleDemo/Program.cs) (Console Demo), [`src/EmergencyResponse.Core/Search/SearchTool.cs`](https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.Core/Search/SearchTool.cs) (Generic Search), [`src/EmergencyResponse.RaylibUi/Program.cs`](https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.RaylibUi/Program.cs) (Raylib Host)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_domain["Emergency Domain"]
  node_incident["Incident Lifecycle<br/>[Incident.cs]"]
  node_responders["Responder Types<br/>[Responders]"]
  node_capabilities["Responder Skills<br/>[Capabilities]"]
end

subgraph group_dispatch["Dispatch Logic"]
  node_centre["Command Centre<br/>[CommandCentre.cs]"]
  node_strategy["Assignment Policy"]
  node_first["First Available"]
  node_energy["Highest Energy"]
  node_search["Generic Search<br/>[SearchTool.cs]"]
  node_callbacks["Resolution Callbacks"]
end

subgraph group_hosts["Application Hosts"]
  node_console["Console Demo<br/>[Program.cs]"]
  node_demo_data["Demo Setup<br/>[DemoData.cs]"]
  node_console_report["Console Reporting<br/>[ConsoleReport.cs]"]
  node_ray_program["Raylib Host<br/>[Program.cs]"]
  node_seed_data["UI Seed Data<br/>[SeedData.cs]"]
  node_board["Dispatch Board<br/>[DispatchBoard.cs]"]
end

node_citizen(("Incident Reporter"))

node_citizen -->|"reports"| node_incident
node_console -->|"runs dispatch"| node_centre
node_console -->|"sets up"| node_demo_data
node_demo_data -->|"registers and reports"| node_centre
node_ray_program -->|"creates centre"| node_centre
node_ray_program -->|"sets up"| node_seed_data
node_seed_data -->|"registers and reports"| node_centre
node_ray_program -->|"creates and draws"| node_board
node_centre -->|"selects through"| node_strategy
node_first -->|"chooses eligible"| node_responders
node_energy -->|"filters with"| node_search
node_search -->|"tests candidates"| node_responders
node_responders -->|"implements skills"| node_capabilities
node_centre -->|"records lifecycle"| node_incident
node_centre -->|"notifies on resolution"| node_callbacks
node_console -->|"prints sections"| node_console_report
node_console -->|"queries roster"| node_search
node_board -->|"reads and dispatches"| node_centre
node_board -->|"filters incidents"| node_search

click node_incident "https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.Core/Incidents/Incident.cs"
click node_responders "https://github.com/vbmenzel/emergencyresponse/tree/main/src/EmergencyResponse.Core/Responders"
click node_capabilities "https://github.com/vbmenzel/emergencyresponse/tree/main/src/EmergencyResponse.Core/Capabilities"
click node_centre "https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.Core/Coordination/CommandCentre.cs"
click node_strategy "https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.Core/Assignment/IAssignmentStrategy.cs"
click node_first "https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.Core/Assignment/FirstAvailableStrategy.cs"
click node_energy "https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.Core/Assignment/HighestEnergyAvailableStrategy.cs"
click node_search "https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.Core/Search/SearchTool.cs"
click node_callbacks "https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.Core/Coordination/ResolutionCallback.cs"
click node_console "https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.ConsoleDemo/Program.cs"
click node_demo_data "https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.ConsoleDemo/DemoData.cs"
click node_console_report "https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.ConsoleDemo/ConsoleReport.cs"
click node_ray_program "https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.RaylibUi/Program.cs"
click node_seed_data "https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.RaylibUi/SeedData.cs"
click node_board "https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.RaylibUi/DispatchBoard.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_incident,node_responders,node_capabilities toneBlue
class node_centre,node_strategy,node_first,node_energy,node_search,node_callbacks toneAmber
class node_console,node_demo_data,node_console_report,node_ray_program,node_seed_data,node_board toneMint
class node_citizen toneIndigo
```

## Components

### Emergency Domain

- [Incident Lifecycle](https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.Core/Incidents/Incident.cs): `src/EmergencyResponse.Core/Incidents/Incident.cs`
- [Responder Types](https://github.com/vbmenzel/emergencyresponse/tree/main/src/EmergencyResponse.Core/Responders): `src/EmergencyResponse.Core/Responders`
- [Responder Skills](https://github.com/vbmenzel/emergencyresponse/tree/main/src/EmergencyResponse.Core/Capabilities): `src/EmergencyResponse.Core/Capabilities`

### Dispatch Logic

- [Command Centre](https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.Core/Coordination/CommandCentre.cs): `src/EmergencyResponse.Core/Coordination/CommandCentre.cs`
- [Assignment Policy](https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.Core/Assignment/IAssignmentStrategy.cs): `src/EmergencyResponse.Core/Assignment/IAssignmentStrategy.cs`
- [First Available](https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.Core/Assignment/FirstAvailableStrategy.cs): `src/EmergencyResponse.Core/Assignment/FirstAvailableStrategy.cs`
- [Highest Energy](https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.Core/Assignment/HighestEnergyAvailableStrategy.cs): `src/EmergencyResponse.Core/Assignment/HighestEnergyAvailableStrategy.cs`
- [Generic Search](https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.Core/Search/SearchTool.cs): `src/EmergencyResponse.Core/Search/SearchTool.cs`
- [Resolution Callbacks](https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.Core/Coordination/ResolutionCallback.cs): `src/EmergencyResponse.Core/Coordination/ResolutionCallback.cs`

### Application Hosts

- [Console Demo](https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.ConsoleDemo/Program.cs): `src/EmergencyResponse.ConsoleDemo/Program.cs`
- [Demo Setup](https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.ConsoleDemo/DemoData.cs): `src/EmergencyResponse.ConsoleDemo/DemoData.cs`
- [Console Reporting](https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.ConsoleDemo/ConsoleReport.cs): `src/EmergencyResponse.ConsoleDemo/ConsoleReport.cs`
- [Raylib Host](https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.RaylibUi/Program.cs): `src/EmergencyResponse.RaylibUi/Program.cs`
- [UI Seed Data](https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.RaylibUi/SeedData.cs): `src/EmergencyResponse.RaylibUi/SeedData.cs`
- [Dispatch Board](https://github.com/vbmenzel/emergencyresponse/blob/main/src/EmergencyResponse.RaylibUi/DispatchBoard.cs): `src/EmergencyResponse.RaylibUi/DispatchBoard.cs`

### Other components

- **Incident Reporter**

## Connections

- Incident Reporter → Incident Lifecycle: reports
- Console Demo → Command Centre: runs dispatch
- Console Demo → Demo Setup: sets up
- Demo Setup → Command Centre: registers and reports
- Raylib Host → Command Centre: creates centre
- Raylib Host → UI Seed Data: sets up
- UI Seed Data → Command Centre: registers and reports
- Raylib Host → Dispatch Board: creates and draws
- Command Centre → Assignment Policy: selects through
- First Available → Responder Types: chooses eligible
- Highest Energy → Generic Search: filters with
- Generic Search → Responder Types: tests candidates
- Responder Types → Responder Skills: implements skills
- Command Centre → Incident Lifecycle: records lifecycle
- Command Centre → Resolution Callbacks: notifies on resolution
- Console Demo → Console Reporting: prints sections
- Console Demo → Generic Search: queries roster
- Dispatch Board → Command Centre: reads and dispatches
- Dispatch Board → Generic Search: filters incidents
