# gabsiq73/vitalis architecture

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

## Overview

Vitalis is a Spring backend for commercial operations at a water-and-gas distributor. Staff use its API to manage customers and orders; order handling splits water and gas items, while gas transactions can trigger settlement work. Payments apply to order debt and distribute excess FIFO, updating client credit. Separate capabilities cover stock, borrowed bottles, supplier and settlement management, and financial reporting. Services hold business rules, repositories persist domain data, and security loads users through UserService. The sampled excerpts confirm order, payment, client, reporting, and authentication links; unsampled feature wiring is not inferred.

Main entry points: [`src/main/java/com/vitalis/demo/service/PaymentService.java`](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/PaymentService.java) (Payments and FIFO), [`src/main/java/com/vitalis/demo/service/OrderService.java`](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/OrderService.java) (Order workflow), [`src/main/java/com/vitalis/demo/service/FinancialService.java`](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/FinancialService.java) (Financial reporting), [`src/main/java/com/vitalis/demo/service/ClientService.java`](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/ClientService.java) (Client accounts)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API endpoints"]
  node_order_api["Orders API"]
  node_client_api["Clients API"]
  node_payment_api["Payments API"]
  node_stock_api["Stock API"]
  node_bottle_api["Bottle loans API"]
  node_settlement_api["Gas settlement API"]
  node_report_api["Financial reports API"]
  node_user_api["User API"]
end

subgraph group_business["Business services"]
  node_order_service["Order workflow<br/>[OrderService.java]"]
  node_payment_service["Payments and FIFO"]
  node_client_service["Client accounts<br/>[ClientService.java]"]
  node_stock_service["Stock control<br/>[StockService.java]"]
  node_bottle_service["Bottle loans"]
  node_settlement_service["Gas settlements"]
  node_supplier_service["Gas suppliers"]
  node_report_service["Financial reporting"]
  node_product_service["Product catalog"]
end

subgraph group_persistence["Persistence"]
  node_order_repo[("Order records")]
  node_payment_repo[("Payment records")]
  node_settlement_repo[("Settlement records")]
  node_client_repo[("Client records")]
end

subgraph group_identity["Security"]
  node_user_service["User accounts<br/>[UserService.java]"]
  node_user_details["User lookup"]
  node_security_config["Security setup"]
end

node_staff(("Staff user"))

node_staff -->|"submits orders"| node_order_api
node_staff -->|"manages clients"| node_client_api
node_staff -->|"records payments"| node_payment_api
node_staff -->|"checks stock"| node_stock_api
node_staff -->|"tracks loans"| node_bottle_api
node_staff -->|"settles gas"| node_settlement_api
node_staff -->|"requests reports"| node_report_api
node_staff -->|"manages users"| node_user_api
node_order_api -->|"delegates"| node_order_service
node_order_service -->|"creates gas settlements"| node_settlement_service
node_order_service -->|"adds excess credit"| node_client_service
node_order_service -->|"persists orders"| node_order_repo
node_payment_api -->|"delegates"| node_payment_service
node_payment_service -->|"loads order"| node_order_service
node_payment_service -->|"updates credit and debt"| node_client_service
node_payment_service -->|"fetches open orders"| node_order_repo
node_payment_service -->|"persists payments"| node_payment_repo
node_client_api -->|"delegates"| node_client_service
node_client_service -->|"reads and writes clients"| node_client_repo
node_report_api -->|"delegates"| node_report_service
node_report_service -->|"reads orders"| node_order_repo
node_report_service -->|"aggregates payments"| node_payment_repo
node_report_service -->|"aggregates profit"| node_settlement_repo
node_settlement_api -->|"delegates"| node_settlement_service
node_settlement_service -->|"stores settlements"| node_settlement_repo
node_bottle_api -->|"delegates"| node_bottle_service
node_stock_api -->|"delegates"| node_stock_service
node_user_api -->|"delegates"| node_user_service
node_security_config -->|"configures lookup"| node_user_details
node_user_details -->|"loads account"| node_user_service

click node_order_api "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/controller/OrderController.java"
click node_client_api "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/controller/ClientController.java"
click node_payment_api "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/controller/PaymentController.java"
click node_stock_api "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/controller/StockController.java"
click node_bottle_api "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/controller/LoanedBottleController.java"
click node_settlement_api "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/controller/GasSettlementController.java"
click node_report_api "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/controller/FinancialReportController.java"
click node_order_service "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/OrderService.java"
click node_payment_service "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/PaymentService.java"
click node_client_service "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/ClientService.java"
click node_stock_service "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/StockService.java"
click node_bottle_service "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/LoanedBottleService.java"
click node_settlement_service "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/GasSettlementService.java"
click node_supplier_service "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/GasSupplierService.java"
click node_report_service "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/FinancialService.java"
click node_product_service "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/ProductService.java"
click node_order_repo "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/repository/OrderRepository.java"
click node_payment_repo "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/repository/PaymentRepository.java"
click node_settlement_repo "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/repository/GasSettlementRepository.java"
click node_client_repo "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/repository/ClientRepository.java"
click node_user_api "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/controller/UserController.java"
click node_user_service "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/UserService.java"
click node_user_details "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/security/CustomUserDetailsService.java"
click node_security_config "https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/config/SecurityConfig.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_order_api,node_client_api,node_payment_api,node_stock_api,node_bottle_api,node_settlement_api,node_report_api,node_user_api,node_staff toneBlue
class node_order_service,node_payment_service,node_client_service,node_stock_service,node_bottle_service,node_settlement_service,node_supplier_service,node_report_service,node_product_service toneAmber
class node_order_repo,node_payment_repo,node_settlement_repo,node_client_repo toneMint
class node_user_service,node_user_details,node_security_config toneRose
```

## Components

### API endpoints

- [Orders API](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/controller/OrderController.java): `src/main/java/com/vitalis/demo/controller/OrderController.java`
- [Clients API](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/controller/ClientController.java): `src/main/java/com/vitalis/demo/controller/ClientController.java`
- [Payments API](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/controller/PaymentController.java): `src/main/java/com/vitalis/demo/controller/PaymentController.java`
- [Stock API](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/controller/StockController.java): `src/main/java/com/vitalis/demo/controller/StockController.java`
- [Bottle loans API](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/controller/LoanedBottleController.java): `src/main/java/com/vitalis/demo/controller/LoanedBottleController.java`
- [Gas settlement API](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/controller/GasSettlementController.java): `src/main/java/com/vitalis/demo/controller/GasSettlementController.java`
- [Financial reports API](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/controller/FinancialReportController.java): `src/main/java/com/vitalis/demo/controller/FinancialReportController.java`
- [User API](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/controller/UserController.java): `src/main/java/com/vitalis/demo/controller/UserController.java`

### Business services

- [Order workflow](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/OrderService.java): `src/main/java/com/vitalis/demo/service/OrderService.java`
- [Payments and FIFO](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/PaymentService.java): `src/main/java/com/vitalis/demo/service/PaymentService.java`
- [Client accounts](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/ClientService.java): `src/main/java/com/vitalis/demo/service/ClientService.java`
- [Stock control](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/StockService.java): `src/main/java/com/vitalis/demo/service/StockService.java`
- [Bottle loans](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/LoanedBottleService.java): `src/main/java/com/vitalis/demo/service/LoanedBottleService.java`
- [Gas settlements](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/GasSettlementService.java): `src/main/java/com/vitalis/demo/service/GasSettlementService.java`
- [Gas suppliers](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/GasSupplierService.java): `src/main/java/com/vitalis/demo/service/GasSupplierService.java`
- [Financial reporting](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/FinancialService.java): `src/main/java/com/vitalis/demo/service/FinancialService.java`
- [Product catalog](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/ProductService.java): `src/main/java/com/vitalis/demo/service/ProductService.java`

### Persistence

- [Order records](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/repository/OrderRepository.java): `src/main/java/com/vitalis/demo/repository/OrderRepository.java`
- [Payment records](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/repository/PaymentRepository.java): `src/main/java/com/vitalis/demo/repository/PaymentRepository.java`
- [Settlement records](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/repository/GasSettlementRepository.java): `src/main/java/com/vitalis/demo/repository/GasSettlementRepository.java`
- [Client records](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/repository/ClientRepository.java): `src/main/java/com/vitalis/demo/repository/ClientRepository.java`

### Security

- [User accounts](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/service/UserService.java): `src/main/java/com/vitalis/demo/service/UserService.java`
- [User lookup](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/security/CustomUserDetailsService.java): `src/main/java/com/vitalis/demo/security/CustomUserDetailsService.java`
- [Security setup](https://github.com/gabsiq73/vitalis/blob/main/src/main/java/com/vitalis/demo/config/SecurityConfig.java): `src/main/java/com/vitalis/demo/config/SecurityConfig.java`

### Other components

- **Staff user**

## Connections

- Staff user → Orders API: submits orders
- Staff user → Clients API: manages clients
- Staff user → Payments API: records payments
- Staff user → Stock API: checks stock
- Staff user → Bottle loans API: tracks loans
- Staff user → Gas settlement API: settles gas
- Staff user → Financial reports API: requests reports
- Staff user → User API: manages users
- Orders API → Order workflow: delegates
- Order workflow → Gas settlements: creates gas settlements
- Order workflow → Client accounts: adds excess credit
- Order workflow → Order records: persists orders
- Payments API → Payments and FIFO: delegates
- Payments and FIFO → Order workflow: loads order
- Payments and FIFO → Client accounts: updates credit and debt
- Payments and FIFO → Order records: fetches open orders
- Payments and FIFO → Payment records: persists payments
- Clients API → Client accounts: delegates
- Client accounts → Client records: reads and writes clients
- Financial reports API → Financial reporting: delegates
- Financial reporting → Order records: reads orders
- Financial reporting → Payment records: aggregates payments
- Financial reporting → Settlement records: aggregates profit
- Gas settlement API → Gas settlements: delegates
- Gas settlements → Settlement records: stores settlements
- Bottle loans API → Bottle loans: delegates
- Stock API → Stock control: delegates
- User API → User accounts: delegates
- Security setup → User lookup: configures lookup
- User lookup → User accounts: loads account
