# awisbay/trfs-automation-desktop architecture

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

- Interactive diagram: https://gitdiagram.com/awisbay/trfs-automation-desktop
- Repository: https://github.com/awisbay/trfs-automation-desktop

## Overview

NodeCraft is a Windows desktop tool for Ericsson RAN integration and CDD configuration audits. Operators configure a site and credentials, run selected integration steps over SSH/AMOS, and review per-run results; separately, they supply CDD workbooks and node dumps (or live GSM data) to compare configuration and generate reports or correction scripts. The tree also shows a cutover workflow, but its detailed wiring is not evidenced by the sampled excerpts, so only its visible UI and runtime modules are included.

Main entry points: [`src/gui/audit_page.py`](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/gui/audit_page.py) (Audit UI), [`src/gui_app.py`](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/gui_app.py) (App routing), [`src/integration_runner.py`](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/integration_runner.py) (Integration runner), [`src/cutover_runner.py`](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/cutover_runner.py) (Cutover runner)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop application"]
  node_app["App routing<br/>[gui_app.py]"]
  node_form["Site form<br/>[form_page.py]"]
  node_integration_ui["Integration UI"]
  node_audit_ui["Audit UI<br/>[audit_page.py]"]
  node_cutover_ui["Cutover UI<br/>[cutover_page.py]"]
end

subgraph group_integration["Node integration"]
  node_integration_runner["Integration runner"]
  node_ssh_runner["SSH execution<br/>[ssh_runner.py]"]
  node_session["SSH session<br/>[session.py]"]
  node_baseline_parser["Baseline parsing"]
  node_relation_parser["Relation parsing"]
  node_excel_writer["Excel output<br/>[excel_writer.py]"]
end

subgraph group_audit["CDD audit"]
  node_audit_reader["CDD reader<br/>[cdd_reader.py]"]
  node_dump_parser["Dump parser<br/>[dump_parser.py]"]
  node_cmedit["Live GSM source<br/>[cmedit_source.py]"]
  node_audit_core["Audit comparison<br/>[audit_core.py]"]
  node_audit_specialists["Specialized audits"]
end

subgraph group_cutover["Cutover workflow"]
  node_cutover_runner["Cutover runner<br/>[cutover_runner.py]"]
  node_cutover_parsers["Cutover parsers<br/>[cutover_parsers.py]"]
  node_cutover_model["Cutover model<br/>[cutover_model.py]"]
  node_cutover_persistence[("Cutover persistence")]
end

subgraph group_shared["Shared services"]
  node_license_manager["License checks<br/>[license_manager.py]"]
end

node_operator(("Operator"))
node_gateway{{"AMOS / ENM"}}
node_cdd_workbooks["CDD workbooks"]
node_node_dumps["Node dumps"]
node_reports_scripts["Audit outputs"]

node_operator -->|"opens"| node_app
node_app -->|"routes to"| node_form
node_app -->|"routes to"| node_integration_ui
node_app -->|"routes to"| node_audit_ui
node_app -->|"routes to"| node_cutover_ui
node_app -->|"verifies license"| node_license_manager
node_operator -->|"selects steps"| node_integration_ui
node_integration_ui -->|"starts run"| node_integration_runner
node_integration_runner -->|"executes steps"| node_ssh_runner
node_ssh_runner -->|"uses session"| node_session
node_session -->|"connects"| node_gateway
node_integration_runner -->|"parses baseline logs"| node_baseline_parser
node_integration_runner -->|"parses relation logs"| node_relation_parser
node_integration_runner -->|"writes report"| node_excel_writer
node_integration_ui -->|"preflight checks"| node_gateway
node_operator -->|"submits audit inputs"| node_audit_ui
node_audit_ui -->|"reads CDD"| node_cdd_workbooks
node_audit_ui -->|"loads dumps"| node_node_dumps
node_audit_ui -->|"loads CDD items"| node_audit_reader
node_audit_ui -->|"parses dumps"| node_dump_parser
node_audit_ui -->|"requests GSM data"| node_cmedit
node_cmedit -->|"queries live"| node_gateway
node_audit_ui -->|"compares values"| node_audit_core
node_audit_ui -->|"runs extra audits"| node_audit_specialists
node_audit_ui -->|"exports reports and scripts"| node_reports_scripts
node_operator -->|"starts cutover"| node_cutover_ui
node_cutover_ui -->|"runs workflow"| node_cutover_runner
node_cutover_runner -->|"uses domain model"| node_cutover_model
node_cutover_runner -->|"parses node output"| node_cutover_parsers
node_cutover_runner -->|"stores cutover state"| node_cutover_persistence

click node_app "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/gui_app.py"
click node_form "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/gui/form_page.py"
click node_integration_ui "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/gui/integration_page.py"
click node_audit_ui "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/gui/audit_page.py"
click node_cutover_ui "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/gui/cutover_page.py"
click node_integration_runner "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/integration_runner.py"
click node_ssh_runner "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/ssh_runner.py"
click node_session "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/session.py"
click node_baseline_parser "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/baseline_log_parser.py"
click node_relation_parser "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/relation_log_parser.py"
click node_excel_writer "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/excel_writer.py"
click node_audit_reader "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/audit/cdd_reader.py"
click node_dump_parser "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/audit/dump_parser.py"
click node_cmedit "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/audit/cmedit_source.py"
click node_audit_core "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/audit/audit_core.py"
click node_audit_specialists "https://github.com/awisbay/trfs-automation-desktop/tree/main/src/audit"
click node_cutover_runner "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/cutover_runner.py"
click node_cutover_parsers "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/cutover_parsers.py"
click node_cutover_model "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/cutover_model.py"
click node_cutover_persistence "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/cutover_persistence.py"
click node_license_manager "https://github.com/awisbay/trfs-automation-desktop/blob/main/src/license_manager.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_app,node_form,node_integration_ui,node_audit_ui,node_cutover_ui toneBlue
class node_integration_runner,node_ssh_runner,node_session,node_baseline_parser,node_relation_parser,node_excel_writer toneAmber
class node_audit_reader,node_dump_parser,node_cmedit,node_audit_core,node_audit_specialists toneMint
class node_cutover_runner,node_cutover_parsers,node_cutover_model,node_cutover_persistence toneRose
class node_license_manager,node_operator,node_gateway,node_cdd_workbooks,node_node_dumps,node_reports_scripts toneIndigo
```

## Components

### Desktop application

- [App routing](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/gui_app.py): `src/gui_app.py`
- [Site form](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/gui/form_page.py): `src/gui/form_page.py`
- [Integration UI](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/gui/integration_page.py): `src/gui/integration_page.py`
- [Audit UI](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/gui/audit_page.py): `src/gui/audit_page.py`
- [Cutover UI](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/gui/cutover_page.py): `src/gui/cutover_page.py`

### Node integration

- [Integration runner](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/integration_runner.py): `src/integration_runner.py`
- [SSH execution](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/ssh_runner.py): `src/ssh_runner.py`
- [SSH session](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/session.py): `src/session.py`
- [Baseline parsing](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/baseline_log_parser.py): `src/baseline_log_parser.py`
- [Relation parsing](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/relation_log_parser.py): `src/relation_log_parser.py`
- [Excel output](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/excel_writer.py): `src/excel_writer.py`

### CDD audit

- [CDD reader](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/audit/cdd_reader.py): `src/audit/cdd_reader.py`
- [Dump parser](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/audit/dump_parser.py): `src/audit/dump_parser.py`
- [Live GSM source](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/audit/cmedit_source.py): `src/audit/cmedit_source.py`
- [Audit comparison](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/audit/audit_core.py): `src/audit/audit_core.py`
- [Specialized audits](https://github.com/awisbay/trfs-automation-desktop/tree/main/src/audit): `src/audit`

### Cutover workflow

- [Cutover runner](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/cutover_runner.py): `src/cutover_runner.py`
- [Cutover parsers](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/cutover_parsers.py): `src/cutover_parsers.py`
- [Cutover model](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/cutover_model.py): `src/cutover_model.py`
- [Cutover persistence](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/cutover_persistence.py): `src/cutover_persistence.py`

### Shared services

- [License checks](https://github.com/awisbay/trfs-automation-desktop/blob/main/src/license_manager.py): `src/license_manager.py`

### Other components

- **Operator**
- **AMOS / ENM**
- **CDD workbooks**
- **Node dumps**
- **Audit outputs**

## Connections

- Operator → App routing: opens
- App routing → Site form: routes to
- App routing → Integration UI: routes to
- App routing → Audit UI: routes to
- App routing → Cutover UI: routes to
- App routing → License checks: verifies license
- Operator → Integration UI: selects steps
- Integration UI → Integration runner: starts run
- Integration runner → SSH execution: executes steps
- SSH execution → SSH session: uses session
- SSH session → AMOS / ENM: connects
- Integration runner → Baseline parsing: parses baseline logs
- Integration runner → Relation parsing: parses relation logs
- Integration runner → Excel output: writes report
- Integration UI → AMOS / ENM: preflight checks
- Operator → Audit UI: submits audit inputs
- Audit UI → CDD workbooks: reads CDD
- Audit UI → Node dumps: loads dumps
- Audit UI → CDD reader: loads CDD items
- Audit UI → Dump parser: parses dumps
- Audit UI → Live GSM source: requests GSM data
- Live GSM source → AMOS / ENM: queries live
- Audit UI → Audit comparison: compares values
- Audit UI → Specialized audits: runs extra audits
- Audit UI → Audit outputs: exports reports and scripts
- Operator → Cutover UI: starts cutover
- Cutover UI → Cutover runner: runs workflow
- Cutover runner → Cutover model: uses domain model
- Cutover runner → Cutover parsers: parses node output
- Cutover runner → Cutover persistence: stores cutover state
