# gerpo/siterm architecture

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

- Interactive diagram: https://gitdiagram.com/gerpo/siterm
- Repository: https://github.com/gerpo/siterm

## Overview

Siterm is a WPF desktop application for managing facilities and devices, creating instructions and service reports, and viewing substance and first-aid information. The user-facing workflow is launched by the WPF app; the sampled service-report flow fetches devices and users, builds a draft, loads templates for a selected device, and invokes report creation. Data access is provided by Entity Framework, while settings and optional mail, PDF, Excel, signature, and import capabilities support the broader product. Several links are based on the SOURCE INDEX or documented module references; unsampled implementations limit certainty.

Main entry points: [`Siterm.WPF/App.xaml.cs`](https://github.com/gerpo/siterm/blob/master/Siterm.WPF/App.xaml.cs) (WPF application), [`Siterm.WPF/ViewModels/CreateServiceReportViewModel.cs`](https://github.com/gerpo/siterm/blob/master/Siterm.WPF/ViewModels/CreateServiceReportViewModel.cs) (Report view model), [`Siterm.Mail/Services/InstructionWarningMailService.cs`](https://github.com/gerpo/siterm/blob/master/Siterm.Mail/Services/InstructionWarningMailService.cs) (Warning mail), [`Siterm.EntityFramework/SitermDbContextFactory.cs`](https://github.com/gerpo/siterm/blob/master/Siterm.EntityFramework/SitermDbContextFactory.cs) (Context factory)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop UI"]
  node_app["WPF application<br/>[App.xaml.cs]"]
  node_reportui["Report view model"]
end

subgraph group_operations["Operational workflows"]
  node_reportdraft["Report draft"]
  node_reportservice["Report service"]
  node_instructionpdf["Instruction PDF"]
  node_substance["Substance information"]
end

subgraph group_data["Data and settings"]
  node_models["Domain models<br/>[DomainObject.cs]"]
  node_dataaccess["Data services"]
  node_dbcontext[("Database context<br/>[SitermDbContext.cs]")]
  node_contextfactory["Context factory"]
  node_settings["Settings provider"]
  node_appsettings["Application settings<br/>[AppSettings.cs]"]
end

subgraph group_capabilities["Supporting capabilities"]
  node_exceltemplate["Excel templates"]
  node_signature["Signature capture"]
  node_mail["Warning mail"]
  node_importers["Database importers"]
  node_filemodel["File model<br/>[File.cs]"]
end

node_user(("User"))
node_smtp["SMTP server"]

node_user -->|"uses"| node_app
node_app -->|"registers"| node_reportui
node_reportui -->|"fetches devices/users"| node_dataaccess
node_reportui -->|"creates draft"| node_reportdraft
node_reportui -->|"submits draft"| node_reportservice
node_reportdraft -->|"loads templates"| node_reportservice
node_reportservice -->|"reads template"| node_exceltemplate
node_dataaccess -->|"creates context"| node_contextfactory
node_contextfactory -->|"constructs"| node_dbcontext
node_contextfactory -->|"gets connection"| node_settings
node_settings -->|"reads values"| node_appsettings
node_mail -->|"gets mail config"| node_settings
node_mail -->|"queries instructions"| node_dataaccess
node_mail -->|"sends messages"| node_smtp
node_app -->|"registers capability"| node_instructionpdf
node_app -->|"registers capability"| node_substance
node_app -->|"registers capability"| node_signature
node_app -->|"registers capability"| node_mail
node_importers -->|"uses files"| node_filemodel
node_models -.->|"persisted as entities"| node_dbcontext

click node_app "https://github.com/gerpo/siterm/blob/master/Siterm.WPF/App.xaml.cs"
click node_reportui "https://github.com/gerpo/siterm/blob/master/Siterm.WPF/ViewModels/CreateServiceReportViewModel.cs"
click node_models "https://github.com/gerpo/siterm/blob/master/Siterm.Domain/Models/DomainObject.cs"
click node_reportdraft "https://github.com/gerpo/siterm/blob/master/Siterm.ServiceReports/Models/ServiceReportDraft.cs"
click node_reportservice "https://github.com/gerpo/siterm/blob/master/Siterm.ServiceReports/Services/ServiceReportService.cs"
click node_exceltemplate "https://github.com/gerpo/siterm/blob/master/Siterm.Excel/Services/ReadServiceTemplateService.cs"
click node_dataaccess "https://github.com/gerpo/siterm/blob/master/Siterm.EntityFramework/Services/GenericDataService.cs"
click node_dbcontext "https://github.com/gerpo/siterm/blob/master/Siterm.EntityFramework/SitermDbContext.cs"
click node_contextfactory "https://github.com/gerpo/siterm/blob/master/Siterm.EntityFramework/SitermDbContextFactory.cs"
click node_settings "https://github.com/gerpo/siterm/blob/master/Siterm.Settings/Services/SettingsProvider.cs"
click node_appsettings "https://github.com/gerpo/siterm/blob/master/Siterm.Settings/Models/AppSettings.cs"
click node_instructionpdf "https://github.com/gerpo/siterm/blob/master/Siterm.Instructions/Services/InstructionPdfService.cs"
click node_substance "https://github.com/gerpo/siterm/blob/master/Siterm.Substance/Services/SubstanceInfoService.cs"
click node_signature "https://github.com/gerpo/siterm/blob/master/Siterm.Signature/Services/SignatureService.cs"
click node_mail "https://github.com/gerpo/siterm/blob/master/Siterm.Mail/Services/InstructionWarningMailService.cs"
click node_importers "https://github.com/gerpo/siterm/blob/master/Siterm.DatabaseInitialization/Services/ImporterPipeline.cs"
click node_filemodel "https://github.com/gerpo/siterm/blob/master/Siterm.Support/ControlModels/File.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_app,node_reportui,node_user toneBlue
class node_reportdraft,node_reportservice,node_instructionpdf,node_substance toneAmber
class node_models,node_dataaccess,node_dbcontext,node_contextfactory,node_settings,node_appsettings,node_smtp toneMint
class node_exceltemplate,node_signature,node_mail,node_importers,node_filemodel toneRose
```

## Components

### Desktop UI

- [WPF application](https://github.com/gerpo/siterm/blob/master/Siterm.WPF/App.xaml.cs): `Siterm.WPF/App.xaml.cs`
- [Report view model](https://github.com/gerpo/siterm/blob/master/Siterm.WPF/ViewModels/CreateServiceReportViewModel.cs): `Siterm.WPF/ViewModels/CreateServiceReportViewModel.cs`

### Operational workflows

- [Report draft](https://github.com/gerpo/siterm/blob/master/Siterm.ServiceReports/Models/ServiceReportDraft.cs): `Siterm.ServiceReports/Models/ServiceReportDraft.cs`
- [Report service](https://github.com/gerpo/siterm/blob/master/Siterm.ServiceReports/Services/ServiceReportService.cs): `Siterm.ServiceReports/Services/ServiceReportService.cs`
- [Instruction PDF](https://github.com/gerpo/siterm/blob/master/Siterm.Instructions/Services/InstructionPdfService.cs): `Siterm.Instructions/Services/InstructionPdfService.cs`
- [Substance information](https://github.com/gerpo/siterm/blob/master/Siterm.Substance/Services/SubstanceInfoService.cs): `Siterm.Substance/Services/SubstanceInfoService.cs`

### Data and settings

- [Domain models](https://github.com/gerpo/siterm/blob/master/Siterm.Domain/Models/DomainObject.cs): `Siterm.Domain/Models/DomainObject.cs`
- [Data services](https://github.com/gerpo/siterm/blob/master/Siterm.EntityFramework/Services/GenericDataService.cs): `Siterm.EntityFramework/Services/GenericDataService.cs`
- [Database context](https://github.com/gerpo/siterm/blob/master/Siterm.EntityFramework/SitermDbContext.cs): `Siterm.EntityFramework/SitermDbContext.cs`
- [Context factory](https://github.com/gerpo/siterm/blob/master/Siterm.EntityFramework/SitermDbContextFactory.cs): `Siterm.EntityFramework/SitermDbContextFactory.cs`
- [Settings provider](https://github.com/gerpo/siterm/blob/master/Siterm.Settings/Services/SettingsProvider.cs): `Siterm.Settings/Services/SettingsProvider.cs`
- [Application settings](https://github.com/gerpo/siterm/blob/master/Siterm.Settings/Models/AppSettings.cs): `Siterm.Settings/Models/AppSettings.cs`

### Supporting capabilities

- [Excel templates](https://github.com/gerpo/siterm/blob/master/Siterm.Excel/Services/ReadServiceTemplateService.cs): `Siterm.Excel/Services/ReadServiceTemplateService.cs`
- [Signature capture](https://github.com/gerpo/siterm/blob/master/Siterm.Signature/Services/SignatureService.cs): `Siterm.Signature/Services/SignatureService.cs`
- [Warning mail](https://github.com/gerpo/siterm/blob/master/Siterm.Mail/Services/InstructionWarningMailService.cs): `Siterm.Mail/Services/InstructionWarningMailService.cs`
- [Database importers](https://github.com/gerpo/siterm/blob/master/Siterm.DatabaseInitialization/Services/ImporterPipeline.cs): `Siterm.DatabaseInitialization/Services/ImporterPipeline.cs`
- [File model](https://github.com/gerpo/siterm/blob/master/Siterm.Support/ControlModels/File.cs): `Siterm.Support/ControlModels/File.cs`

### Other components

- **User**
- **SMTP server**

## Connections

- User → WPF application: uses (evidence: `Siterm.WPF/App.xaml.cs`)
- WPF application → Report view model: registers (evidence: `Siterm.WPF/App.xaml.cs`)
- Report view model → Data services: fetches devices/users (evidence: `Siterm.WPF/ViewModels/CreateServiceReportViewModel.cs`)
- Report view model → Report draft: creates draft (evidence: `Siterm.WPF/ViewModels/CreateServiceReportViewModel.cs`)
- Report view model → Report service: submits draft (evidence: `Siterm.WPF/ViewModels/CreateServiceReportViewModel.cs`)
- Report draft → Report service: loads templates (evidence: `Siterm.ServiceReports/Models/ServiceReportDraft.cs`)
- Report service → Excel templates: reads template (evidence: `Siterm.ServiceReports/Services/ServiceReportService.cs`)
- Data services → Context factory: creates context (evidence: `Siterm.EntityFramework/Services/GenericDataService.cs`)
- Context factory → Database context: constructs (evidence: `Siterm.EntityFramework/SitermDbContextFactory.cs`)
- Context factory → Settings provider: gets connection (evidence: `Siterm.EntityFramework/SitermDbContextFactory.cs`)
- Settings provider → Application settings: reads values (evidence: `Siterm.Settings/Services/SettingsProvider.cs`)
- Warning mail → Settings provider: gets mail config (evidence: `Siterm.Mail/Services/InstructionWarningMailService.cs`)
- Warning mail → Data services: queries instructions (evidence: `Siterm.Mail/Services/InstructionWarningMailService.cs`)
- Warning mail → SMTP server: sends messages (evidence: `Siterm.Mail/Services/InstructionWarningMailService.cs`)
- WPF application → Instruction PDF: registers capability (evidence: `Siterm.WPF/App.xaml.cs`)
- WPF application → Substance information: registers capability (evidence: `Siterm.WPF/App.xaml.cs`)
- WPF application → Signature capture: registers capability (evidence: `Siterm.WPF/App.xaml.cs`)
- WPF application → Warning mail: registers capability (evidence: `Siterm.WPF/App.xaml.cs`)
- Database importers → File model: uses files (evidence: `Siterm.DatabaseInitialization/Program.cs`)
- Domain models → Database context: persisted as entities
