# agnare/autotransakt architecture

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

- Interactive diagram: https://gitdiagram.com/agnare/autotransakt
- Repository: https://github.com/agnare/autotransakt

## Overview

AutoTransact is a Spring Boot acquiring-transaction automation service. Users import registry data manually or fetch it from MPC; the service deduplicates and stores transactions, groups pending transactions by device and currency, converts amounts to KGS, maps devices to bank accounts, and creates accounting postings. Users can then inspect transactions and postings, manage reference data and bindings, view dashboard summaries, and generate CSV/PDF reports. The README documents scheduled processing, audit logging, JWT roles, and email alerts; unsampled subsystem wiring is shown only where supported by the documented capabilities.

Main entry points: [`src/main/java/com/autotransact/service/RegistryService.java`](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/RegistryService.java) (Registry workflow), [`src/main/java/com/autotransact/repository/TransactionRepository.java`](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/repository/TransactionRepository.java) (JPA repositories), [`src/main/java/com/autotransact/service/AuthService.java`](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/AuthService.java) (Authentication), [`src/main/java/com/autotransact/service/ReportService.java`](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/ReportService.java) (Report builder)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and security"]
  node_application["Spring Boot app"]
  node_registry_api["Registry API"]
  node_auth_api["Auth API"]
  node_auth["Authentication<br/>[AuthService.java]"]
  node_jwt["JWT service<br/>[JwtService.java]"]
  node_jwt_filter["JWT filter"]
  node_user_details["User details"]
  node_device_binding_api["Device binding API"]
  node_reference_api["Reference API"]
  node_dashboard_api["Dashboard API"]
  node_report_api["Report API"]
  node_notifications_api["Notification API"]
end

subgraph group_processing["Registry processing"]
  node_registry["Registry workflow"]
  node_mpc_client["MPC client"]
  node_currency["Currency rates"]
  node_bank_client["Bank posting client"]
end

subgraph group_insights["Reporting and operations"]
  node_dashboard["Dashboard summary"]
  node_report["Report builder<br/>[ReportService.java]"]
  node_notifications["Alerts and email"]
  node_scheduled["Scheduled jobs<br/>[ScheduledJobs.java]"]
  node_audit["Audit service<br/>[AuditService.java]"]
end

subgraph group_data["Persistence and integrations"]
  node_repositories["JPA repositories"]
  node_postgres[("PostgreSQL")]
  node_mpc["MPC system"]
  node_bank["Bank posting system"]
  node_smtp["SMTP service"]
end

node_operator(("Staff user"))

node_operator -->|"submits registry"| node_registry_api
node_operator -->|"authenticates"| node_auth_api
node_operator -->|"requests report"| node_report_api
node_registry_api -->|"imports or fetches"| node_registry
node_registry -->|"fetches registry"| node_mpc_client
node_mpc_client -.->|"requests data"| node_mpc
node_registry -->|"reads and writes"| node_repositories
node_registry -->|"converts amounts"| node_currency
node_registry -->|"dispatches posting"| node_bank_client
node_bank_client -.->|"sends posting"| node_bank
node_registry -->|"records events"| node_audit
node_registry -->|"sends alerts"| node_notifications
node_auth_api -->|"handles login"| node_auth
node_auth -->|"issues token"| node_jwt
node_auth -->|"loads user"| node_repositories
node_jwt_filter -->|"parses token"| node_jwt
node_user_details -->|"loads user"| node_repositories
node_device_binding_api -->|"manages bindings"| node_repositories
node_reference_api -->|"reads reference and audit data"| node_repositories
node_dashboard_api -->|"requests overview"| node_dashboard
node_dashboard -->|"reads transaction data"| node_repositories
node_report_api -->|"builds and exports"| node_report
node_report -->|"reads transactions and postings"| node_repositories
node_report -->|"looks up rates"| node_currency
node_notifications_api -->|"reads history"| node_notifications
node_notifications -.->|"sends email"| node_smtp
node_scheduled -->|"loads registries"| node_registry
node_repositories -->|"persists data"| node_postgres

click node_application "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/AutoTransactApplication.java"
click node_registry_api "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/controller/RegistryController.java"
click node_auth_api "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/controller/AuthController.java"
click node_auth "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/AuthService.java"
click node_jwt "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/security/JwtService.java"
click node_jwt_filter "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/security/JwtAuthenticationFilter.java"
click node_user_details "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/security/AppUserDetailsService.java"
click node_registry "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/RegistryService.java"
click node_mpc_client "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/MpcRegistryClient.java"
click node_currency "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/CurrencyRateService.java"
click node_bank_client "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/BankPostingClient.java"
click node_device_binding_api "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/controller/DeviceBindingController.java"
click node_reference_api "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/controller/ReferenceController.java"
click node_dashboard_api "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/controller/DashboardController.java"
click node_dashboard "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/DashboardService.java"
click node_report_api "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/controller/ReportController.java"
click node_report "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/ReportService.java"
click node_notifications_api "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/controller/NotificationController.java"
click node_notifications "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/NotificationService.java"
click node_scheduled "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/ScheduledJobs.java"
click node_audit "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/AuditService.java"
click node_repositories "https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/repository/TransactionRepository.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_application,node_registry_api,node_auth_api,node_auth,node_jwt,node_jwt_filter,node_user_details,node_device_binding_api,node_reference_api,node_dashboard_api,node_report_api,node_notifications_api,node_operator toneBlue
class node_registry,node_mpc_client,node_currency,node_bank_client toneAmber
class node_dashboard,node_report,node_notifications,node_scheduled,node_audit toneMint
class node_repositories,node_postgres,node_mpc,node_bank,node_smtp toneRose
```

## Components

### API and security

- [Spring Boot app](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/AutoTransactApplication.java): `src/main/java/com/autotransact/AutoTransactApplication.java`
- [Registry API](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/controller/RegistryController.java): `src/main/java/com/autotransact/controller/RegistryController.java`
- [Auth API](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/controller/AuthController.java): `src/main/java/com/autotransact/controller/AuthController.java`
- [Authentication](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/AuthService.java): `src/main/java/com/autotransact/service/AuthService.java`
- [JWT service](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/security/JwtService.java): `src/main/java/com/autotransact/security/JwtService.java`
- [JWT filter](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/security/JwtAuthenticationFilter.java): `src/main/java/com/autotransact/security/JwtAuthenticationFilter.java`
- [User details](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/security/AppUserDetailsService.java): `src/main/java/com/autotransact/security/AppUserDetailsService.java`
- [Device binding API](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/controller/DeviceBindingController.java): `src/main/java/com/autotransact/controller/DeviceBindingController.java`
- [Reference API](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/controller/ReferenceController.java): `src/main/java/com/autotransact/controller/ReferenceController.java`
- [Dashboard API](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/controller/DashboardController.java): `src/main/java/com/autotransact/controller/DashboardController.java`
- [Report API](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/controller/ReportController.java): `src/main/java/com/autotransact/controller/ReportController.java`
- [Notification API](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/controller/NotificationController.java): `src/main/java/com/autotransact/controller/NotificationController.java`

### Registry processing

- [Registry workflow](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/RegistryService.java): `src/main/java/com/autotransact/service/RegistryService.java`
- [MPC client](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/MpcRegistryClient.java): `src/main/java/com/autotransact/service/MpcRegistryClient.java`
- [Currency rates](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/CurrencyRateService.java): `src/main/java/com/autotransact/service/CurrencyRateService.java`
- [Bank posting client](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/BankPostingClient.java): `src/main/java/com/autotransact/service/BankPostingClient.java`

### Reporting and operations

- [Dashboard summary](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/DashboardService.java): `src/main/java/com/autotransact/service/DashboardService.java`
- [Report builder](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/ReportService.java): `src/main/java/com/autotransact/service/ReportService.java`
- [Alerts and email](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/NotificationService.java): `src/main/java/com/autotransact/service/NotificationService.java`
- [Scheduled jobs](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/ScheduledJobs.java): `src/main/java/com/autotransact/service/ScheduledJobs.java`
- [Audit service](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/service/AuditService.java): `src/main/java/com/autotransact/service/AuditService.java`

### Persistence and integrations

- [JPA repositories](https://github.com/agnare/autotransakt/blob/master/src/main/java/com/autotransact/repository/TransactionRepository.java): `src/main/java/com/autotransact/repository/TransactionRepository.java`
- **PostgreSQL**
- **MPC system**
- **Bank posting system**
- **SMTP service**

### Other components

- **Staff user**

## Connections

- Staff user → Registry API: submits registry
- Staff user → Auth API: authenticates
- Staff user → Report API: requests report
- Registry API → Registry workflow: imports or fetches
- Registry workflow → MPC client: fetches registry
- MPC client → MPC system: requests data
- Registry workflow → JPA repositories: reads and writes
- Registry workflow → Currency rates: converts amounts
- Registry workflow → Bank posting client: dispatches posting
- Bank posting client → Bank posting system: sends posting
- Registry workflow → Audit service: records events
- Registry workflow → Alerts and email: sends alerts
- Auth API → Authentication: handles login
- Authentication → JWT service: issues token
- Authentication → JPA repositories: loads user
- JWT filter → JWT service: parses token
- User details → JPA repositories: loads user
- Device binding API → JPA repositories: manages bindings
- Reference API → JPA repositories: reads reference and audit data
- Dashboard API → Dashboard summary: requests overview
- Dashboard summary → JPA repositories: reads transaction data
- Report API → Report builder: builds and exports
- Report builder → JPA repositories: reads transactions and postings
- Report builder → Currency rates: looks up rates
- Notification API → Alerts and email: reads history
- Alerts and email → SMTP service: sends email
- Scheduled jobs → Registry workflow: loads registries
- JPA repositories → PostgreSQL: persists data
