# cyrusmccollim/simplepos architecture

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

## Overview

SimplePOS is a Java Swing grocery point-of-sale desktop app. A cashier selects products, enters quantity or weight, reviews the cart, confirms a sale, and the application records it and produces a receipt; saved transactions can later be reviewed in History. Product search, settings, and receipt printing/saving are supporting workflows. The graph follows the documented capabilities and sampled startup, state, database, and receipt code; several UI panels and transaction persistence implementations were not sampled, so their internal wiring is shown only where documented or supported by the tree.

Main entry points: [`src/main/java/pos/app/POSApplication.java`](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/app/POSApplication.java) (POS coordinator), [`src/main/java/pos/app/ApplicationState.java`](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/app/ApplicationState.java) (Application state), [`src/main/java/pos/db/DatabaseManager.java`](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/db/DatabaseManager.java) (Database manager), [`src/main/java/pos/ui/dialogs/ReceiptDialog.java`](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/ui/dialogs/ReceiptDialog.java) (Receipt view)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_catalog["Product catalog"]
  node_productsui["Product catalog<br/>[ProductsPanel.java]"]
  node_productdao["Product access<br/>[ProductDAO.java]"]
  node_product["Product model<br/>[Product.java]"]
end

subgraph group_checkout["Checkout"]
  node_currentitem["Pending item entry"]
  node_numpad["Quantity keypad<br/>[NumberPad.java]"]
  node_cart["Cart state<br/>[Cart.java]"]
  node_cartsummary["Cart summary"]
  node_checkoutui["Checkout review<br/>[CheckoutPanel.java]"]
end

subgraph group_records["Sales records"]
  node_historyui["Transaction history<br/>[HistoryPanel.java]"]
  node_transaction["Transaction model<br/>[Transaction.java]"]
  node_transactiondao["Transaction access"]
  node_receiptdialog["Receipt view<br/>[ReceiptDialog.java]"]
  node_pdf["PDF receipt generator"]
end

subgraph group_app["Application services"]
  node_main["Application entry<br/>[Main.java]"]
  node_posapp["POS coordinator"]
  node_state["Application state"]
  node_theme["Theme manager<br/>[ThemeManager.java]"]
  node_config["Settings and config<br/>[Config.java]"]
  node_dbmanager["Database manager"]
end

node_cashier(("Cashier"))
node_sqlite[("Local SQLite database")]
node_printer["System printer"]

node_cashier -->|"selects products"| node_productsui
node_cashier -->|"enters amounts"| node_currentitem
node_cashier -->|"reviews cart"| node_checkoutui
node_cashier -->|"confirms sale"| node_posapp
node_main -->|"applies theme"| node_theme
node_main -->|"starts UI"| node_posapp
node_posapp -->|"initializes schema"| node_dbmanager
node_posapp -->|"initializes state"| node_state
node_posapp -->|"creates view"| node_productsui
node_posapp -->|"creates view"| node_checkoutui
node_posapp -->|"creates view"| node_historyui
node_posapp -->|"handles pending item"| node_state
node_posapp -->|"saves sale"| node_transactiondao
node_posapp -->|"generates receipt"| node_pdf
node_posapp -->|"shows receipt"| node_receiptdialog
node_productsui -->|"searches catalog"| node_productdao
node_productdao -->|"uses connection"| node_dbmanager
node_productdao -->|"builds products"| node_product
node_currentitem -->|"updates pending item"| node_state
node_currentitem -->|"confirms item"| node_posapp
node_numpad -->|"updates input"| node_state
node_state -->|"maintains cart"| node_cart
node_cartsummary -->|"observes cart"| node_state
node_checkoutui -->|"reads cart"| node_state
node_historyui -->|"loads history"| node_transactiondao
node_transactiondao -->|"uses connection"| node_dbmanager
node_transactiondao -->|"loads and saves"| node_transaction
node_receiptdialog -->|"formats receipt"| node_transaction
node_receiptdialog -->|"prints receipt"| node_printer
node_receiptdialog -->|"reads store details"| node_config
node_pdf -->|"reads sale details"| node_transaction
node_dbmanager -->|"reads database path"| node_config
node_dbmanager -->|"opens database"| node_sqlite
node_posapp -->|"reads store settings"| node_config

click node_main "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/Main.java"
click node_posapp "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/app/POSApplication.java"
click node_state "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/app/ApplicationState.java"
click node_theme "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/app/ThemeManager.java"
click node_config "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/util/Config.java"
click node_productsui "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/ui/panels/ProductsPanel.java"
click node_productdao "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/db/ProductDAO.java"
click node_product "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/model/Product.java"
click node_currentitem "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/ui/components/CurrentItemPanel.java"
click node_numpad "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/ui/components/NumberPad.java"
click node_cart "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/model/Cart.java"
click node_cartsummary "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/ui/components/CartSummaryPanel.java"
click node_checkoutui "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/ui/panels/CheckoutPanel.java"
click node_historyui "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/ui/panels/HistoryPanel.java"
click node_transaction "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/model/Transaction.java"
click node_transactiondao "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/db/TransactionDAO.java"
click node_receiptdialog "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/ui/dialogs/ReceiptDialog.java"
click node_pdf "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/util/PdfReceiptGenerator.java"
click node_dbmanager "https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/db/DatabaseManager.java"

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_productsui,node_productdao,node_product toneBlue
class node_currentitem,node_numpad,node_cart,node_cartsummary,node_checkoutui,node_sqlite toneAmber
class node_historyui,node_transaction,node_transactiondao,node_receiptdialog,node_pdf toneMint
class node_main,node_posapp,node_state,node_theme,node_config,node_dbmanager toneRose
class node_cashier,node_printer toneIndigo
```

## Components

### Product catalog

- [Product catalog](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/ui/panels/ProductsPanel.java): `src/main/java/pos/ui/panels/ProductsPanel.java`
- [Product access](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/db/ProductDAO.java): `src/main/java/pos/db/ProductDAO.java`
- [Product model](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/model/Product.java): `src/main/java/pos/model/Product.java`

### Checkout

- [Pending item entry](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/ui/components/CurrentItemPanel.java): `src/main/java/pos/ui/components/CurrentItemPanel.java`
- [Quantity keypad](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/ui/components/NumberPad.java): `src/main/java/pos/ui/components/NumberPad.java`
- [Cart state](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/model/Cart.java): `src/main/java/pos/model/Cart.java`
- [Cart summary](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/ui/components/CartSummaryPanel.java): `src/main/java/pos/ui/components/CartSummaryPanel.java`
- [Checkout review](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/ui/panels/CheckoutPanel.java): `src/main/java/pos/ui/panels/CheckoutPanel.java`

### Sales records

- [Transaction history](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/ui/panels/HistoryPanel.java): `src/main/java/pos/ui/panels/HistoryPanel.java`
- [Transaction model](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/model/Transaction.java): `src/main/java/pos/model/Transaction.java`
- [Transaction access](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/db/TransactionDAO.java): `src/main/java/pos/db/TransactionDAO.java`
- [Receipt view](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/ui/dialogs/ReceiptDialog.java): `src/main/java/pos/ui/dialogs/ReceiptDialog.java`
- [PDF receipt generator](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/util/PdfReceiptGenerator.java): `src/main/java/pos/util/PdfReceiptGenerator.java`

### Application services

- [Application entry](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/Main.java): `src/main/java/pos/Main.java`
- [POS coordinator](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/app/POSApplication.java): `src/main/java/pos/app/POSApplication.java`
- [Application state](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/app/ApplicationState.java): `src/main/java/pos/app/ApplicationState.java`
- [Theme manager](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/app/ThemeManager.java): `src/main/java/pos/app/ThemeManager.java`
- [Settings and config](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/util/Config.java): `src/main/java/pos/util/Config.java`
- [Database manager](https://github.com/cyrusmccollim/simplepos/blob/main/src/main/java/pos/db/DatabaseManager.java): `src/main/java/pos/db/DatabaseManager.java`

### Other components

- **Cashier**
- **Local SQLite database**
- **System printer**

## Connections

- Cashier → Product catalog: selects products
- Cashier → Pending item entry: enters amounts
- Cashier → Checkout review: reviews cart
- Cashier → POS coordinator: confirms sale
- Application entry → Theme manager: applies theme
- Application entry → POS coordinator: starts UI
- POS coordinator → Database manager: initializes schema
- POS coordinator → Application state: initializes state
- POS coordinator → Product catalog: creates view
- POS coordinator → Checkout review: creates view
- POS coordinator → Transaction history: creates view
- POS coordinator → Application state: handles pending item
- POS coordinator → Transaction access: saves sale
- POS coordinator → PDF receipt generator: generates receipt
- POS coordinator → Receipt view: shows receipt
- Product catalog → Product access: searches catalog
- Product access → Database manager: uses connection
- Product access → Product model: builds products
- Pending item entry → Application state: updates pending item
- Pending item entry → POS coordinator: confirms item
- Quantity keypad → Application state: updates input
- Application state → Cart state: maintains cart
- Cart summary → Application state: observes cart
- Checkout review → Application state: reads cart
- Transaction history → Transaction access: loads history
- Transaction access → Database manager: uses connection
- Transaction access → Transaction model: loads and saves
- Receipt view → Transaction model: formats receipt
- Receipt view → System printer: prints receipt
- Receipt view → Settings and config: reads store details
- PDF receipt generator → Transaction model: reads sale details
- Database manager → Settings and config: reads database path
- Database manager → Local SQLite database: opens database
- POS coordinator → Settings and config: reads store settings
