# dseichter/vatvalidation architecture

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

- Interactive diagram: https://gitdiagram.com/dseichter/vatvalidation
- Repository: https://github.com/dseichter/vatvalidation

## Overview

VATValidation offers desktop, CLI, and REST interfaces for single and batch VAT checks. Requests enter through an interface, use the shared single- or batch-processing layer, then pass through a workflow dispatcher to a country-specific validator and official service. Batch processing reads and writes CSV, XLSX, or JSON. The graph also shows configuration, networking, and desktop presentation. Several connections are supported by the SOURCE INDEX rather than full excerpts; unsampled subsystem links are omitted where ownership is unclear.

Main entry points: [`src/vatvalidation.py`](https://github.com/dseichter/vatvalidation/blob/main/src/vatvalidation.py) (Desktop app), [`src/network.py`](https://github.com/dseichter/vatvalidation/blob/main/src/network.py) (HTTP and proxy), [`src/validate_workflow.py`](https://github.com/dseichter/vatvalidation/blob/main/src/validate_workflow.py) (Workflow dispatcher), [`src/single.py`](https://github.com/dseichter/vatvalidation/blob/main/src/single.py) (Single checks)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User interfaces"]
  node_desktop["Desktop app<br/>[vatvalidation.py]"]
  node_desktop_ui["GUI views"]
  node_cli["CLI"]
  node_api["REST API"]
  node_about["About dialog<br/>[about_ui.py]"]
  node_gui_about["About window<br/>[gui_about.py]"]
  node_icons["UI icons<br/>[icons.py]"]
end

subgraph group_processing["Validation processing"]
  node_single["Single checks<br/>[single.py]"]
  node_batch["Batch files<br/>[batch.py]"]
  node_workflow["Workflow dispatcher"]
end

subgraph group_providers["Tax authority integrations"]
  node_bzst["BZSt validation<br/>[validate_bzst.py]"]
  node_hmrc["HMRC validation<br/>[validate_hmrc.py]"]
  node_vies["VIES validation<br/>[validate_vies.py]"]
  node_swiss["Swiss UID validation<br/>[validate_swiss.py]"]
  node_bzst_codes["BZSt codes<br/>[codes_bzst.py]"]
  node_hmrc_codes["HMRC codes<br/>[codes_hmrc.py]"]
  node_vies_codes["VIES codes<br/>[codes_vies.py]"]
end

subgraph group_shared["Shared services"]
  node_network["HTTP and proxy<br/>[network.py]"]
  node_settings[("Runtime settings<br/>[settings.py]")]
  node_logging["Logging setup<br/>[logging_config.py]"]
  node_helper["App utilities<br/>[helper.py]"]
  node_theme["Theme manager<br/>[theme_manager.py]"]
end

node_user(("User or integrator"))
node_bzst_service{{"BZSt service"}}
node_hmrc_service{{"HMRC service"}}
node_vies_service{{"VIES service"}}
node_swiss_service{{"Swiss UID service"}}

node_user -->|"uses"| node_desktop
node_user -->|"invokes"| node_cli
node_user -->|"integrates"| node_api
node_desktop -->|"uses views"| node_desktop_ui
node_desktop -->|"starts checks"| node_single
node_desktop -->|"starts batches"| node_batch
node_desktop -->|"loads and saves"| node_settings
node_desktop -->|"applies theme"| node_theme
node_desktop -->|"uses dialog"| node_about
node_desktop -.->|"opens about"| node_gui_about
node_desktop_ui -->|"loads icons"| node_icons
node_gui_about -->|"loads icons"| node_icons
node_about -->|"uses window"| node_gui_about
node_cli -->|"runs checks"| node_single
node_cli -->|"runs batches"| node_batch
node_api -->|"runs checks"| node_single
node_api -->|"runs batches"| node_batch
node_single -->|"dispatches to"| node_workflow
node_batch -->|"validates rows"| node_single
node_workflow -->|"dispatches to"| node_bzst
node_workflow -->|"dispatches to"| node_hmrc
node_workflow -->|"dispatches to"| node_vies
node_workflow -->|"dispatches to"| node_swiss
node_bzst -->|"looks up codes"| node_bzst_codes
node_vies -->|"looks up codes"| node_vies_codes
node_hmrc -->|"uses codes"| node_hmrc_codes
node_bzst -->|"sends requests"| node_network
node_hmrc -->|"sends requests"| node_network
node_vies -->|"sends requests"| node_network
node_swiss -->|"sends requests"| node_network
node_network -->|"reads proxy"| node_settings
node_logging -->|"reads log config"| node_settings
node_helper -->|"checks release"| node_network
node_bzst -->|"queries"| node_bzst_service
node_hmrc -->|"queries"| node_hmrc_service
node_vies -->|"queries"| node_vies_service
node_swiss -->|"queries"| node_swiss_service

click node_desktop "https://github.com/dseichter/vatvalidation/blob/main/src/vatvalidation.py"
click node_desktop_ui "https://github.com/dseichter/vatvalidation/blob/main/src/gui_vatvalidation.py"
click node_cli "https://github.com/dseichter/vatvalidation/blob/main/src/vatvalidation_cli.py"
click node_api "https://github.com/dseichter/vatvalidation/blob/main/src/vatvalidation_api.py"
click node_single "https://github.com/dseichter/vatvalidation/blob/main/src/single.py"
click node_batch "https://github.com/dseichter/vatvalidation/blob/main/src/batch.py"
click node_workflow "https://github.com/dseichter/vatvalidation/blob/main/src/validate_workflow.py"
click node_bzst "https://github.com/dseichter/vatvalidation/blob/main/src/validate_bzst.py"
click node_hmrc "https://github.com/dseichter/vatvalidation/blob/main/src/validate_hmrc.py"
click node_vies "https://github.com/dseichter/vatvalidation/blob/main/src/validate_vies.py"
click node_swiss "https://github.com/dseichter/vatvalidation/blob/main/src/validate_swiss.py"
click node_bzst_codes "https://github.com/dseichter/vatvalidation/blob/main/src/codes_bzst.py"
click node_hmrc_codes "https://github.com/dseichter/vatvalidation/blob/main/src/codes_hmrc.py"
click node_vies_codes "https://github.com/dseichter/vatvalidation/blob/main/src/codes_vies.py"
click node_network "https://github.com/dseichter/vatvalidation/blob/main/src/network.py"
click node_settings "https://github.com/dseichter/vatvalidation/blob/main/src/settings.py"
click node_logging "https://github.com/dseichter/vatvalidation/blob/main/src/logging_config.py"
click node_helper "https://github.com/dseichter/vatvalidation/blob/main/src/helper.py"
click node_theme "https://github.com/dseichter/vatvalidation/blob/main/src/theme_manager.py"
click node_about "https://github.com/dseichter/vatvalidation/blob/main/src/about_ui.py"
click node_gui_about "https://github.com/dseichter/vatvalidation/blob/main/src/gui_about.py"
click node_icons "https://github.com/dseichter/vatvalidation/blob/main/src/icons.py"

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_desktop,node_desktop_ui,node_cli,node_api,node_about,node_gui_about,node_icons,node_user toneBlue
class node_single,node_batch,node_workflow toneAmber
class node_bzst,node_hmrc,node_vies,node_swiss,node_bzst_codes,node_hmrc_codes,node_vies_codes toneMint
class node_network,node_settings,node_logging,node_helper,node_theme toneRose
class node_bzst_service,node_hmrc_service,node_vies_service,node_swiss_service toneIndigo
```

## Components

### User interfaces

- [Desktop app](https://github.com/dseichter/vatvalidation/blob/main/src/vatvalidation.py): `src/vatvalidation.py`
- [GUI views](https://github.com/dseichter/vatvalidation/blob/main/src/gui_vatvalidation.py): `src/gui_vatvalidation.py`
- [CLI](https://github.com/dseichter/vatvalidation/blob/main/src/vatvalidation_cli.py): `src/vatvalidation_cli.py`
- [REST API](https://github.com/dseichter/vatvalidation/blob/main/src/vatvalidation_api.py): `src/vatvalidation_api.py`
- [About dialog](https://github.com/dseichter/vatvalidation/blob/main/src/about_ui.py): `src/about_ui.py`
- [About window](https://github.com/dseichter/vatvalidation/blob/main/src/gui_about.py): `src/gui_about.py`
- [UI icons](https://github.com/dseichter/vatvalidation/blob/main/src/icons.py): `src/icons.py`

### Validation processing

- [Single checks](https://github.com/dseichter/vatvalidation/blob/main/src/single.py): `src/single.py`
- [Batch files](https://github.com/dseichter/vatvalidation/blob/main/src/batch.py): `src/batch.py`
- [Workflow dispatcher](https://github.com/dseichter/vatvalidation/blob/main/src/validate_workflow.py): `src/validate_workflow.py`

### Tax authority integrations

- [BZSt validation](https://github.com/dseichter/vatvalidation/blob/main/src/validate_bzst.py): `src/validate_bzst.py`
- [HMRC validation](https://github.com/dseichter/vatvalidation/blob/main/src/validate_hmrc.py): `src/validate_hmrc.py`
- [VIES validation](https://github.com/dseichter/vatvalidation/blob/main/src/validate_vies.py): `src/validate_vies.py`
- [Swiss UID validation](https://github.com/dseichter/vatvalidation/blob/main/src/validate_swiss.py): `src/validate_swiss.py`
- [BZSt codes](https://github.com/dseichter/vatvalidation/blob/main/src/codes_bzst.py): `src/codes_bzst.py`
- [HMRC codes](https://github.com/dseichter/vatvalidation/blob/main/src/codes_hmrc.py): `src/codes_hmrc.py`
- [VIES codes](https://github.com/dseichter/vatvalidation/blob/main/src/codes_vies.py): `src/codes_vies.py`

### Shared services

- [HTTP and proxy](https://github.com/dseichter/vatvalidation/blob/main/src/network.py): `src/network.py`
- [Runtime settings](https://github.com/dseichter/vatvalidation/blob/main/src/settings.py): `src/settings.py`
- [Logging setup](https://github.com/dseichter/vatvalidation/blob/main/src/logging_config.py): `src/logging_config.py`
- [App utilities](https://github.com/dseichter/vatvalidation/blob/main/src/helper.py): `src/helper.py`
- [Theme manager](https://github.com/dseichter/vatvalidation/blob/main/src/theme_manager.py): `src/theme_manager.py`

### Other components

- **User or integrator**
- **BZSt service**
- **HMRC service**
- **VIES service**
- **Swiss UID service**

## Connections

- User or integrator → Desktop app: uses (evidence: `README.md`)
- User or integrator → CLI: invokes (evidence: `README.md`)
- User or integrator → REST API: integrates (evidence: `README.md`)
- Desktop app → GUI views: uses views (evidence: `src/vatvalidation.py`)
- Desktop app → Single checks: starts checks (evidence: `src/vatvalidation.py`)
- Desktop app → Batch files: starts batches (evidence: `src/vatvalidation.py`)
- Desktop app → Runtime settings: loads and saves (evidence: `src/vatvalidation.py`)
- Desktop app → Theme manager: applies theme (evidence: `src/vatvalidation.py`)
- Desktop app → About dialog: uses dialog (evidence: `src/vatvalidation.py`)
- Desktop app → About window: opens about
- GUI views → UI icons: loads icons (evidence: `src/gui_vatvalidation.py`)
- About window → UI icons: loads icons (evidence: `src/gui_about.py`)
- About dialog → About window: uses window (evidence: `src/about_ui.py`)
- CLI → Single checks: runs checks (evidence: `src/vatvalidation_cli.py`)
- CLI → Batch files: runs batches (evidence: `src/vatvalidation_cli.py`)
- REST API → Single checks: runs checks (evidence: `src/vatvalidation_api.py`)
- REST API → Batch files: runs batches (evidence: `src/vatvalidation_api.py`)
- Single checks → Workflow dispatcher: dispatches to (evidence: `src/single.py`)
- Batch files → Single checks: validates rows (evidence: `src/batch.py`)
- Workflow dispatcher → BZSt validation: dispatches to (evidence: `src/validate_workflow.py`)
- Workflow dispatcher → HMRC validation: dispatches to (evidence: `src/validate_workflow.py`)
- Workflow dispatcher → VIES validation: dispatches to (evidence: `src/validate_workflow.py`)
- Workflow dispatcher → Swiss UID validation: dispatches to (evidence: `src/validate_workflow.py`)
- BZSt validation → BZSt codes: looks up codes (evidence: `src/validate_bzst.py`)
- VIES validation → VIES codes: looks up codes (evidence: `src/validate_vies.py`)
- HMRC validation → HMRC codes: uses codes (evidence: `src/validate_hmrc.py`)
- BZSt validation → HTTP and proxy: sends requests (evidence: `src/validate_bzst.py`)
- HMRC validation → HTTP and proxy: sends requests (evidence: `src/validate_hmrc.py`)
- VIES validation → HTTP and proxy: sends requests (evidence: `src/validate_vies.py`)
- Swiss UID validation → HTTP and proxy: sends requests (evidence: `src/validate_swiss.py`)
- HTTP and proxy → Runtime settings: reads proxy (evidence: `src/network.py`)
- Logging setup → Runtime settings: reads log config (evidence: `src/logging_config.py`)
- App utilities → HTTP and proxy: checks release (evidence: `src/helper.py`)
- BZSt validation → BZSt service: queries (evidence: `README.md`)
- HMRC validation → HMRC service: queries (evidence: `README.md`)
- VIES validation → VIES service: queries (evidence: `README.md`)
- Swiss UID validation → Swiss UID service: queries (evidence: `README.md`)
