# riteshk28/cae_audit_tool architecture

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

- Interactive diagram: https://gitdiagram.com/riteshk28/cae_audit_tool
- Repository: https://github.com/riteshk28/cae_audit_tool

## Overview

This is a Flask dashboard for auditing course-outline PDFs. The main workflow uploads a PDF, extracts its text, applies assessment-weight and course-learning-outcome analyses, then renders the results. The sampled code shows separate cognitive, psychomotor, and affective analyses, plus CLO counting. The README also mentions PDF-derived text and the audit dashboard. The template is not present in the supplied tree, and the excerpt omits parts of utils.py, so those implementation details are not expanded.

Main entry points: [`proj_submission/app.py`](https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/app.py) (Flask app), [`proj_submission/word_list.xlsx`](https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/word_list.xlsx) (Domain verb lists), [`proj_submission/utils.py`](https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/utils.py) (PDF text extraction), [`proj_submission/static`](https://github.com/riteshk28/cae_audit_tool/tree/main/proj_submission/static) (Uploaded PDF)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Dashboard"]
  node_app["Flask app<br/>[app.py]"]
  node_upload["Uploaded PDF"]
  node_response["Dashboard results<br/>[app.py]"]
end

subgraph group_analysis["Course analysis"]
  node_extract["PDF text extraction<br/>[utils.py]"]
  node_course["Course identification<br/>[utils.py]"]
  node_assessment["Assessment audit<br/>[utils.py]"]
  node_clo_count["CLO count<br/>[utils.py]"]
  node_cognitive["Cognitive analysis<br/>[utils.py]"]
  node_psychomotor["Psychomotor analysis<br/>[utils.py]"]
  node_affective["Affective analysis<br/>[utils.py]"]
end

subgraph group_reference["Reference data"]
  node_word_list["Domain verb lists<br/>[word_list.xlsx]"]
  node_rules["Audit rules<br/>[rules.xlsx]"]
end

node_user(("Dashboard user"))

node_user -->|"uploads PDF"| node_app
node_app -->|"saves file"| node_upload
node_app -->|"calls read_file"| node_extract
node_extract -->|"reads PDF"| node_upload
node_app -->|"calls parse_course_name"| node_course
node_app -->|"calls rule_1"| node_assessment
node_app -->|"calls page_len"| node_clo_count
node_app -->|"calls rule_2_cd"| node_cognitive
node_app -->|"calls rule_2_pd"| node_psychomotor
node_app -->|"calls rule_2_ad"| node_affective
node_cognitive -->|"reads domain terms"| node_word_list
node_psychomotor -->|"reads domain terms"| node_word_list
node_affective -->|"reads domain terms"| node_word_list
node_assessment -->|"uses audit rules"| node_rules
node_app -->|"renders results"| node_response
node_response -->|"displays tables"| node_user

click node_app "https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/app.py"
click node_upload "https://github.com/riteshk28/cae_audit_tool/tree/main/proj_submission/static"
click node_response "https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/app.py"
click node_extract "https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/utils.py"
click node_course "https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/utils.py"
click node_assessment "https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/utils.py"
click node_clo_count "https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/utils.py"
click node_cognitive "https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/utils.py"
click node_psychomotor "https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/utils.py"
click node_affective "https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/utils.py"
click node_word_list "https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/word_list.xlsx"
click node_rules "https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/rules.xlsx"

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_upload,node_response,node_user toneBlue
class node_extract,node_course,node_assessment,node_clo_count,node_cognitive,node_psychomotor,node_affective toneAmber
class node_word_list,node_rules toneMint
```

## Components

### Dashboard

- [Flask app](https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/app.py): `proj_submission/app.py`
- [Uploaded PDF](https://github.com/riteshk28/cae_audit_tool/tree/main/proj_submission/static): `proj_submission/static`
- [Dashboard results](https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/app.py): `proj_submission/app.py`

### Course analysis

- [PDF text extraction](https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/utils.py): `proj_submission/utils.py`
- [Course identification](https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/utils.py): `proj_submission/utils.py`
- [Assessment audit](https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/utils.py): `proj_submission/utils.py`
- [CLO count](https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/utils.py): `proj_submission/utils.py`
- [Cognitive analysis](https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/utils.py): `proj_submission/utils.py`
- [Psychomotor analysis](https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/utils.py): `proj_submission/utils.py`
- [Affective analysis](https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/utils.py): `proj_submission/utils.py`

### Reference data

- [Domain verb lists](https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/word_list.xlsx): `proj_submission/word_list.xlsx`
- [Audit rules](https://github.com/riteshk28/cae_audit_tool/blob/main/proj_submission/rules.xlsx): `proj_submission/rules.xlsx`

### Other components

- **Dashboard user**

## Connections

- Dashboard user → Flask app: uploads PDF
- Flask app → Uploaded PDF: saves file
- Flask app → PDF text extraction: calls read_file
- PDF text extraction → Uploaded PDF: reads PDF
- Flask app → Course identification: calls parse_course_name
- Flask app → Assessment audit: calls rule_1
- Flask app → CLO count: calls page_len
- Flask app → Cognitive analysis: calls rule_2_cd
- Flask app → Psychomotor analysis: calls rule_2_pd
- Flask app → Affective analysis: calls rule_2_ad
- Cognitive analysis → Domain verb lists: reads domain terms
- Psychomotor analysis → Domain verb lists: reads domain terms
- Affective analysis → Domain verb lists: reads domain terms
- Assessment audit → Audit rules: uses audit rules
- Flask app → Dashboard results: renders results
- Dashboard results → Dashboard user: displays tables
