# advaitt17/invoiceai architecture

> Architecture diagram of the GitHub repository advaitt17/invoiceai, 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/advaitt17/invoiceai
- Repository: https://github.com/advaitt17/invoiceai

## Overview

Invoice AI is a Flask web application for uploading PDF invoices, extracting structured invoice and product data with confidence scores, and presenting, exporting, and revisiting results. The documented workflow is browser upload → Flask processing → invoice extraction → saved results → browser review/export; batch handling and history are additional capabilities. Sampled excerpts support the upload/API, extraction, and history/export links, but do not show all route implementations or persistence details, so uncertain internal wiring is omitted.

Main entry points: [`app.py`](https://github.com/advaitt17/invoiceai/blob/main/app.py) (Flask routes), [`templates/index.html`](https://github.com/advaitt17/invoiceai/blob/main/templates/index.html) (Invoice UI), [`invoice_processor.py`](https://github.com/advaitt17/invoiceai/blob/main/invoice_processor.py) (Invoice processor), [`static/js/main.js`](https://github.com/advaitt17/invoiceai/blob/main/static/js/main.js) (Upload and batch UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_browser["Invoice UI<br/>[index.html]"]
  node_uploadui["Upload and batch UI<br/>[main.js]"]
  node_appjs["Application interactions<br/>[app.js]"]
  node_resultsjs["Results display<br/>[results.js]"]
  node_dashboard["Dashboard<br/>[dashboard.js]"]
  node_style["Web styling<br/>[style.css]"]
end

subgraph group_backend["Processing API"]
  node_flask["Flask routes<br/>[app.py]"]
end

subgraph group_extract["Extraction engine"]
  node_processor["Invoice processor"]
  node_pdftext["PDF text and OCR"]
  node_fieldextract["Field and table extraction"]
  node_confidence["Confidence scoring"]
end

subgraph group_records["Results and history"]
  node_resultstore[("Result files<br/>[app.py]")]
  node_history["Extraction history<br/>[app.py]"]
  node_export["Data export<br/>[app.py]"]
end

node_user(("Invoice user"))
node_gemini["Gemini service"]
node_tesseract["Tesseract OCR"]
node_pdfinput["PDF invoice"]
node_excel["Excel writer"]

node_user -->|"uses"| node_browser
node_user -->|"selects"| node_pdfinput
node_browser -->|"loads"| node_uploadui
node_uploadui -->|"uploads PDFs"| node_flask
node_appjs -->|"requests API"| node_flask
node_flask -->|"processes invoices"| node_processor
node_processor -->|"extracts text"| node_pdftext
node_pdftext -.->|"uses OCR"| node_tesseract
node_processor -->|"analyzes invoice"| node_fieldextract
node_processor -.->|"requests extraction"| node_gemini
node_processor -->|"scores fields"| node_confidence
node_flask -->|"writes results"| node_resultstore
node_flask -->|"reads results"| node_resultstore
node_flask -->|"serves history"| node_history
node_history -->|"reads records"| node_resultstore
node_flask -->|"generates exports"| node_export
node_export -->|"writes workbook"| node_excel
node_flask -->|"returns results"| node_browser
node_browser -->|"displays results"| node_resultsjs
node_browser -->|"loads dashboard"| node_dashboard
node_user -->|"requests download"| node_export
node_browser -->|"uses styles"| node_style

click node_browser "https://github.com/advaitt17/invoiceai/blob/main/templates/index.html"
click node_uploadui "https://github.com/advaitt17/invoiceai/blob/main/static/js/main.js"
click node_appjs "https://github.com/advaitt17/invoiceai/blob/main/static/js/app.js"
click node_resultsjs "https://github.com/advaitt17/invoiceai/blob/main/static/js/results.js"
click node_dashboard "https://github.com/advaitt17/invoiceai/blob/main/static/js/dashboard.js"
click node_flask "https://github.com/advaitt17/invoiceai/blob/main/app.py"
click node_processor "https://github.com/advaitt17/invoiceai/blob/main/invoice_processor.py"
click node_pdftext "https://github.com/advaitt17/invoiceai/blob/main/invoice_processor.py"
click node_fieldextract "https://github.com/advaitt17/invoiceai/blob/main/invoice_processor.py"
click node_confidence "https://github.com/advaitt17/invoiceai/blob/main/invoice_processor.py"
click node_resultstore "https://github.com/advaitt17/invoiceai/blob/main/app.py"
click node_history "https://github.com/advaitt17/invoiceai/blob/main/app.py"
click node_export "https://github.com/advaitt17/invoiceai/blob/main/app.py"
click node_style "https://github.com/advaitt17/invoiceai/blob/main/static/css/style.css"

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_browser,node_uploadui,node_appjs,node_resultsjs,node_dashboard,node_style,node_user toneBlue
class node_flask toneAmber
class node_processor,node_pdftext,node_fieldextract,node_confidence toneMint
class node_resultstore,node_history,node_export toneRose
class node_gemini,node_tesseract,node_pdfinput,node_excel toneIndigo
```

## Components

### Web experience

- [Invoice UI](https://github.com/advaitt17/invoiceai/blob/main/templates/index.html): `templates/index.html`
- [Upload and batch UI](https://github.com/advaitt17/invoiceai/blob/main/static/js/main.js): `static/js/main.js`
- [Application interactions](https://github.com/advaitt17/invoiceai/blob/main/static/js/app.js): `static/js/app.js`
- [Results display](https://github.com/advaitt17/invoiceai/blob/main/static/js/results.js): `static/js/results.js`
- [Dashboard](https://github.com/advaitt17/invoiceai/blob/main/static/js/dashboard.js): `static/js/dashboard.js`
- [Web styling](https://github.com/advaitt17/invoiceai/blob/main/static/css/style.css): `static/css/style.css`

### Processing API

- [Flask routes](https://github.com/advaitt17/invoiceai/blob/main/app.py): `app.py`

### Extraction engine

- [Invoice processor](https://github.com/advaitt17/invoiceai/blob/main/invoice_processor.py): `invoice_processor.py`
- [PDF text and OCR](https://github.com/advaitt17/invoiceai/blob/main/invoice_processor.py): `invoice_processor.py`
- [Field and table extraction](https://github.com/advaitt17/invoiceai/blob/main/invoice_processor.py): `invoice_processor.py`
- [Confidence scoring](https://github.com/advaitt17/invoiceai/blob/main/invoice_processor.py): `invoice_processor.py`

### Results and history

- [Result files](https://github.com/advaitt17/invoiceai/blob/main/app.py): `app.py`
- [Extraction history](https://github.com/advaitt17/invoiceai/blob/main/app.py): `app.py`
- [Data export](https://github.com/advaitt17/invoiceai/blob/main/app.py): `app.py`

### Other components

- **Invoice user**
- **Gemini service**
- **Tesseract OCR**
- **PDF invoice**
- **Excel writer**

## Connections

- Invoice user → Invoice UI: uses
- Invoice user → PDF invoice: selects
- Invoice UI → Upload and batch UI: loads
- Upload and batch UI → Flask routes: uploads PDFs
- Application interactions → Flask routes: requests API
- Flask routes → Invoice processor: processes invoices
- Invoice processor → PDF text and OCR: extracts text
- PDF text and OCR → Tesseract OCR: uses OCR
- Invoice processor → Field and table extraction: analyzes invoice
- Invoice processor → Gemini service: requests extraction
- Invoice processor → Confidence scoring: scores fields
- Flask routes → Result files: writes results
- Flask routes → Result files: reads results
- Flask routes → Extraction history: serves history
- Extraction history → Result files: reads records
- Flask routes → Data export: generates exports
- Data export → Excel writer: writes workbook
- Flask routes → Invoice UI: returns results
- Invoice UI → Results display: displays results
- Invoice UI → Dashboard: loads dashboard
- Invoice user → Data export: requests download
- Invoice UI → Web styling: uses styles
