# aangusamy/peoplesoft-ai-analyzer architecture

> Architecture diagram of the GitHub repository aangusamy/peoplesoft-ai-analyzer, 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/aangusamy/peoplesoft-ai-analyzer
- Repository: https://github.com/aangusamy/peoplesoft-ai-analyzer
- Video tour (about a minute): https://gitdiagram.com/aangusamy/peoplesoft-ai-analyzer/video

## Overview

PeopleSoft Upgrade Impact Analyzer compares Oracle-delivered project exports against customized source and a vanilla demo export, producing retrofit decisions and investigation guidance. Its primary workflow is a three-way object comparison, followed by code merge/conflict analysis, optional LLM resolution or checking, and impact reporting. A separate metadata-analysis workflow builds indexes used to find custom objects that reference changed objects. The architecture documentation and README establish the product capabilities; sampled source confirms the parser, index, tool, and LLM layers, but not every orchestration detail.

Main entry points: [`upgrade_impact_analyzer.py`](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/upgrade_impact_analyzer.py) (Upgrade Analyzer), [`compare_analyzer.py`](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/compare_analyzer.py) (Compare Report), [`analyzers/psft_metadata_analyzer.py`](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/analyzers/psft_metadata_analyzer.py) (Metadata Analyzer), [`psft_analyzer/engine.py`](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/psft_analyzer/engine.py) (Analysis Engine)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_inputs["Export Inputs"]
  node_delivered["Delivered Export"]
  node_custom["Customized Export"]
  node_demo["Vanilla Export"]
end

subgraph group_retrofit["Retrofit Analysis"]
  node_upgrade_cli["Upgrade Analyzer"]
  node_compare["Object Comparator"]
  node_merge_review["Merge and Review"]
  node_impact_scan["Changed-Object Impact"]
  node_compare_cli["Compare Report"]
  node_impact_report["Upgrade Report"]
end

subgraph group_metadata["Metadata Analysis"]
  node_static_cli["Static Analyzer<br/>[static_analyzer.py]"]
  node_metadata_adapter["Metadata Analyzer"]
  node_engine["Analysis Engine<br/>[engine.py]"]
  node_parser["XML Parser<br/>[xml_parser.py]"]
  node_models["Canonical Models<br/>[objects.py]"]
  node_index[("Dependency Index<br/>[index_builder.py]")]
  node_tools["Analysis Tools<br/>[analysis_tools.py]"]
  node_metadata_pickle[("Metadata Pickle")]
end

subgraph group_assist["LLM Assistance"]
  node_llm_client["LLM Client<br/>[llm_client.py]"]
  node_llm_service(("LLM Provider"))
  node_llm_output[("LLM Cache")]
end

node_engineer(("PeopleSoft Engineer"))

node_engineer -->|"runs"| node_upgrade_cli
node_delivered -->|"supplies project"| node_upgrade_cli
node_custom -->|"supplies source"| node_upgrade_cli
node_demo -->|"supplies base"| node_upgrade_cli
node_upgrade_cli -->|"compares objects"| node_compare
node_compare -->|"provides comparisons"| node_merge_review
node_merge_review -.->|"requests resolve/check"| node_llm_client
node_llm_client -.->|"sends prompts"| node_llm_service
node_llm_service -.->|"returns replies"| node_llm_client
node_llm_client -.->|"caches replies"| node_llm_output
node_merge_review -->|"checks references"| node_impact_scan
node_upgrade_cli -->|"writes results"| node_impact_report
node_engineer -->|"runs"| node_compare_cli
node_delivered -->|"supplies project"| node_compare_cli
node_custom -->|"supplies source"| node_compare_cli
node_demo -->|"supplies base"| node_compare_cli
node_compare_cli -->|"scans changed objects"| node_impact_scan
node_compare_cli -->|"writes compare report"| node_impact_report
node_engineer -->|"runs"| node_static_cli
node_custom -->|"supplies metadata"| node_static_cli
node_static_cli -->|"dispatches analysis"| node_metadata_adapter
node_metadata_adapter -->|"loads XML"| node_engine
node_engine -->|"parses exports"| node_parser
node_parser -->|"yields objects"| node_models
node_engine -->|"ingests objects"| node_index
node_metadata_adapter -->|"parses incrementals"| node_parser
node_metadata_adapter -->|"merges incrementals"| node_index
node_engine -->|"exposes queries"| node_tools
node_index -->|"serves indexed data"| node_tools
node_static_cli -->|"builds cache"| node_metadata_pickle
node_metadata_pickle -->|"supplies references"| node_impact_scan

click node_upgrade_cli "https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/upgrade_impact_analyzer.py"
click node_compare "https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/compare_analyzer.py"
click node_merge_review "https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/upgrade_impact_analyzer.py"
click node_impact_scan "https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/upgrade_impact_analyzer.py"
click node_compare_cli "https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/compare_analyzer.py"
click node_impact_report "https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/upgrade_impact_analyzer.py"
click node_static_cli "https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/static_analyzer.py"
click node_metadata_adapter "https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/analyzers/psft_metadata_analyzer.py"
click node_engine "https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/psft_analyzer/engine.py"
click node_parser "https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/psft_analyzer/xml_parser.py"
click node_models "https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/psft_analyzer/models/objects.py"
click node_index "https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/psft_analyzer/index_builder.py"
click node_tools "https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/psft_analyzer/analysis_tools.py"
click node_llm_client "https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/llm_client.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_delivered,node_custom,node_demo toneBlue
class node_upgrade_cli,node_compare,node_merge_review,node_impact_scan,node_compare_cli,node_impact_report toneAmber
class node_static_cli,node_metadata_adapter,node_engine,node_parser,node_models,node_index,node_tools,node_metadata_pickle toneMint
class node_llm_client,node_llm_service,node_llm_output toneRose
class node_engineer toneIndigo
```

## Components

### Export Inputs

- **Delivered Export**
- **Customized Export**
- **Vanilla Export**

### Retrofit Analysis

- [Upgrade Analyzer](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/upgrade_impact_analyzer.py): `upgrade_impact_analyzer.py`
- [Object Comparator](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/compare_analyzer.py): `compare_analyzer.py`
- [Merge and Review](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/upgrade_impact_analyzer.py): `upgrade_impact_analyzer.py`
- [Changed-Object Impact](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/upgrade_impact_analyzer.py): `upgrade_impact_analyzer.py`
- [Compare Report](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/compare_analyzer.py): `compare_analyzer.py`
- [Upgrade Report](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/upgrade_impact_analyzer.py): `upgrade_impact_analyzer.py`

### Metadata Analysis

- [Static Analyzer](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/static_analyzer.py): `static_analyzer.py`
- [Metadata Analyzer](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/analyzers/psft_metadata_analyzer.py): `analyzers/psft_metadata_analyzer.py`
- [Analysis Engine](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/psft_analyzer/engine.py): `psft_analyzer/engine.py`
- [XML Parser](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/psft_analyzer/xml_parser.py): `psft_analyzer/xml_parser.py`
- [Canonical Models](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/psft_analyzer/models/objects.py): `psft_analyzer/models/objects.py`
- [Dependency Index](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/psft_analyzer/index_builder.py): `psft_analyzer/index_builder.py`
- [Analysis Tools](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/psft_analyzer/analysis_tools.py): `psft_analyzer/analysis_tools.py`
- **Metadata Pickle**

### LLM Assistance

- [LLM Client](https://github.com/aangusamy/peoplesoft-ai-analyzer/blob/main/llm_client.py): `llm_client.py`
- **LLM Provider**
- **LLM Cache**

### Other components

- **PeopleSoft Engineer**

## Connections

- PeopleSoft Engineer → Upgrade Analyzer: runs
- Delivered Export → Upgrade Analyzer: supplies project
- Customized Export → Upgrade Analyzer: supplies source
- Vanilla Export → Upgrade Analyzer: supplies base
- Upgrade Analyzer → Object Comparator: compares objects
- Object Comparator → Merge and Review: provides comparisons
- Merge and Review → LLM Client: requests resolve/check
- LLM Client → LLM Provider: sends prompts
- LLM Provider → LLM Client: returns replies
- LLM Client → LLM Cache: caches replies
- Merge and Review → Changed-Object Impact: checks references
- Upgrade Analyzer → Upgrade Report: writes results
- PeopleSoft Engineer → Compare Report: runs
- Delivered Export → Compare Report: supplies project
- Customized Export → Compare Report: supplies source
- Vanilla Export → Compare Report: supplies base
- Compare Report → Changed-Object Impact: scans changed objects
- Compare Report → Upgrade Report: writes compare report
- PeopleSoft Engineer → Static Analyzer: runs
- Customized Export → Static Analyzer: supplies metadata
- Static Analyzer → Metadata Analyzer: dispatches analysis
- Metadata Analyzer → Analysis Engine: loads XML
- Analysis Engine → XML Parser: parses exports
- XML Parser → Canonical Models: yields objects
- Analysis Engine → Dependency Index: ingests objects
- Metadata Analyzer → XML Parser: parses incrementals
- Metadata Analyzer → Dependency Index: merges incrementals
- Analysis Engine → Analysis Tools: exposes queries
- Dependency Index → Analysis Tools: serves indexed data
- Static Analyzer → Metadata Pickle: builds cache
- Metadata Pickle → Changed-Object Impact: supplies references
