# li-broon/26inf1103-p4-3 architecture

> Architecture diagram of the GitHub repository li-broon/26inf1103-p4-3, 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/li-broon/26inf1103-p4-3
- Repository: https://github.com/li-broon/26inf1103-p4-3

## Overview

This is a workplace incident reporting assistant: workers submit reports conversationally in their own language, the AI collects and enriches the details, business rules score and classify the report, and the data layer saves it. Safety staff can browse, filter, and analyze saved reports through terminal or GUI interfaces. The graph preserves the documented analysis and charting capabilities; several links to unsampled subsystems are omitted where the excerpts do not establish runtime calls.

Main entry points: [`src/io_manager/manager.py`](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/io_manager/manager.py) (Terminal interface), [`src/logic_manager/logic_manager.py`](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/logic_manager/logic_manager.py) (Rule evaluation), [`src/ai_manager/conversation/incident_conversation.py`](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/ai_manager/conversation/incident_conversation.py) (Incident conversation), [`src/gui_manager.py`](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/gui_manager.py) (GUI interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Application interfaces"]
  node_entrypoint["Application entry<br/>[main.py]"]
  node_terminal_ui["Terminal interface<br/>[manager.py]"]
  node_gui["GUI interface<br/>[gui_manager.py]"]
  node_report_views["Report browsing"]
end

subgraph group_reporting["Incident reporting"]
  node_conversation["Incident conversation"]
  node_field_set["Report fields<br/>[field_set.py]"]
  node_analysis["AI analysis<br/>[analysis_task.py]"]
  node_ai_provider["Gemini service<br/>[gemini_service.py]"]
end

subgraph group_rules["Business rules"]
  node_business_rules["Rule evaluation<br/>[logic_manager.py]"]
  node_scoring["Importance scoring"]
  node_mom_rule["MOM reporting rule"]
  node_priority["Priority classification"]
end

subgraph group_records["Report data"]
  node_data_manager["Report data manager<br/>[manager.py]"]
  node_filters["Report filters"]
  node_record_store["Record store<br/>[record_store.py]"]
  node_csv_store[("CSV storage")]
end

subgraph group_insights["Report insights"]
  node_charts["Incident charts"]
  node_chart_manager["Chart manager<br/>[chart_manager.py]"]
end

node_worker(("Worker"))
node_safety_staff(("Safety staff"))

node_worker -->|"submits report"| node_terminal_ui
node_worker -->|"submits report"| node_gui
node_entrypoint -->|"starts interface"| node_terminal_ui
node_entrypoint -->|"starts GUI"| node_gui
node_terminal_ui -->|"starts conversation"| node_conversation
node_gui -.->|"runs conversation"| node_conversation
node_conversation -->|"validates fields"| node_field_set
node_conversation -->|"requests analysis"| node_analysis
node_conversation -->|"sends chat requests"| node_ai_provider
node_analysis -->|"generates JSON"| node_ai_provider
node_terminal_ui -.->|"processes report"| node_business_rules
node_gui -.->|"processes report"| node_business_rules
node_business_rules -->|"scores report"| node_scoring
node_business_rules -->|"checks reporting"| node_mom_rule
node_business_rules -->|"classifies priority"| node_priority
node_business_rules -->|"saves evaluated report"| node_data_manager
node_terminal_ui -->|"loads reports"| node_data_manager
node_data_manager -->|"delegates storage"| node_record_store
node_data_manager -->|"applies filters"| node_filters
node_record_store -.->|"implemented by"| node_csv_store
node_safety_staff -->|"browses reports"| node_report_views
node_terminal_ui -->|"renders report table"| node_report_views
node_safety_staff -.->|"reviews insights"| node_charts
node_chart_manager -->|"uses chart drawer"| node_charts

click node_entrypoint "https://github.com/li-broon/26inf1103-p4-3/blob/main/main.py"
click node_terminal_ui "https://github.com/li-broon/26inf1103-p4-3/blob/main/src/io_manager/manager.py"
click node_gui "https://github.com/li-broon/26inf1103-p4-3/blob/main/src/gui_manager.py"
click node_conversation "https://github.com/li-broon/26inf1103-p4-3/blob/main/src/ai_manager/conversation/incident_conversation.py"
click node_field_set "https://github.com/li-broon/26inf1103-p4-3/blob/main/src/ai_manager/fields/field_set.py"
click node_analysis "https://github.com/li-broon/26inf1103-p4-3/blob/main/src/ai_manager/conversation/analysis_task.py"
click node_ai_provider "https://github.com/li-broon/26inf1103-p4-3/blob/main/src/ai_manager/services/gemini_service.py"
click node_business_rules "https://github.com/li-broon/26inf1103-p4-3/blob/main/src/logic_manager/logic_manager.py"
click node_scoring "https://github.com/li-broon/26inf1103-p4-3/blob/main/src/logic_manager/scoring/importance_scorer.py"
click node_mom_rule "https://github.com/li-broon/26inf1103-p4-3/blob/main/src/logic_manager/rules/mom_reporting_rule.py"
click node_priority "https://github.com/li-broon/26inf1103-p4-3/blob/main/src/logic_manager/rules/priority_classifier.py"
click node_data_manager "https://github.com/li-broon/26inf1103-p4-3/blob/main/src/data_manager/manager.py"
click node_filters "https://github.com/li-broon/26inf1103-p4-3/tree/main/src/data_manager/filters"
click node_record_store "https://github.com/li-broon/26inf1103-p4-3/blob/main/src/data_manager/storage/record_store.py"
click node_csv_store "https://github.com/li-broon/26inf1103-p4-3/blob/main/src/data_manager/storage/csv_record_store.py"
click node_report_views "https://github.com/li-broon/26inf1103-p4-3/blob/main/src/io_manager/display/report_table_view.py"
click node_charts "https://github.com/li-broon/26inf1103-p4-3/tree/main/src/data_manager/charts"
click node_chart_manager "https://github.com/li-broon/26inf1103-p4-3/blob/main/src/data_manager/charts/chart_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_entrypoint,node_terminal_ui,node_gui,node_report_views toneBlue
class node_conversation,node_field_set,node_analysis,node_ai_provider toneAmber
class node_business_rules,node_scoring,node_mom_rule,node_priority toneMint
class node_data_manager,node_filters,node_record_store,node_csv_store,node_worker toneRose
class node_charts,node_chart_manager,node_safety_staff toneIndigo
```

## Components

### Application interfaces

- [Application entry](https://github.com/li-broon/26inf1103-p4-3/blob/main/main.py): `main.py`
- [Terminal interface](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/io_manager/manager.py): `src/io_manager/manager.py`
- [GUI interface](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/gui_manager.py): `src/gui_manager.py`
- [Report browsing](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/io_manager/display/report_table_view.py): `src/io_manager/display/report_table_view.py`

### Incident reporting

- [Incident conversation](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/ai_manager/conversation/incident_conversation.py): `src/ai_manager/conversation/incident_conversation.py`
- [Report fields](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/ai_manager/fields/field_set.py): `src/ai_manager/fields/field_set.py`
- [AI analysis](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/ai_manager/conversation/analysis_task.py): `src/ai_manager/conversation/analysis_task.py`
- [Gemini service](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/ai_manager/services/gemini_service.py): `src/ai_manager/services/gemini_service.py`

### Business rules

- [Rule evaluation](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/logic_manager/logic_manager.py): `src/logic_manager/logic_manager.py`
- [Importance scoring](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/logic_manager/scoring/importance_scorer.py): `src/logic_manager/scoring/importance_scorer.py`
- [MOM reporting rule](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/logic_manager/rules/mom_reporting_rule.py): `src/logic_manager/rules/mom_reporting_rule.py`
- [Priority classification](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/logic_manager/rules/priority_classifier.py): `src/logic_manager/rules/priority_classifier.py`

### Report data

- [Report data manager](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/data_manager/manager.py): `src/data_manager/manager.py`
- [Report filters](https://github.com/li-broon/26inf1103-p4-3/tree/main/src/data_manager/filters): `src/data_manager/filters`
- [Record store](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/data_manager/storage/record_store.py): `src/data_manager/storage/record_store.py`
- [CSV storage](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/data_manager/storage/csv_record_store.py): `src/data_manager/storage/csv_record_store.py`

### Report insights

- [Incident charts](https://github.com/li-broon/26inf1103-p4-3/tree/main/src/data_manager/charts): `src/data_manager/charts`
- [Chart manager](https://github.com/li-broon/26inf1103-p4-3/blob/main/src/data_manager/charts/chart_manager.py): `src/data_manager/charts/chart_manager.py`

### Other components

- **Worker**
- **Safety staff**

## Connections

- Worker → Terminal interface: submits report (evidence: `README.md`)
- Worker → GUI interface: submits report (evidence: `README.md`)
- Application entry → Terminal interface: starts interface (evidence: `main.py`)
- Application entry → GUI interface: starts GUI (evidence: `main.py`)
- Terminal interface → Incident conversation: starts conversation (evidence: `src/io_manager/manager.py`)
- GUI interface → Incident conversation: runs conversation
- Incident conversation → Report fields: validates fields (evidence: `src/ai_manager/conversation/incident_conversation.py`)
- Incident conversation → AI analysis: requests analysis (evidence: `src/ai_manager/conversation/incident_conversation.py`)
- Incident conversation → Gemini service: sends chat requests (evidence: `src/ai_manager/conversation/incident_conversation.py`)
- AI analysis → Gemini service: generates JSON (evidence: `src/ai_manager/conversation/analysis_task.py`)
- Terminal interface → Rule evaluation: processes report
- GUI interface → Rule evaluation: processes report
- Rule evaluation → Importance scoring: scores report (evidence: `src/logic_manager/logic_manager.py`)
- Rule evaluation → MOM reporting rule: checks reporting (evidence: `src/logic_manager/logic_manager.py`)
- Rule evaluation → Priority classification: classifies priority (evidence: `src/logic_manager/logic_manager.py`)
- Rule evaluation → Report data manager: saves evaluated report (evidence: `src/logic_manager/logic_manager.py`)
- Terminal interface → Report data manager: loads reports (evidence: `src/io_manager/manager.py`)
- Report data manager → Record store: delegates storage (evidence: `src/data_manager/manager.py`)
- Report data manager → Report filters: applies filters (evidence: `src/data_manager/manager.py`)
- Record store → CSV storage: implemented by (evidence: `src/data_manager/storage/csv_record_store.py`)
- Safety staff → Report browsing: browses reports (evidence: `README.md`)
- Terminal interface → Report browsing: renders report table (evidence: `src/io_manager/manager.py`)
- Safety staff → Incident charts: reviews insights
- Chart manager → Incident charts: uses chart drawer (evidence: `src/data_manager/charts/chart_manager.py`)
