# azizahadovv/moysklad architecture

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

## Overview

Kassa Nazorati is a Telegram-first cash-accounting and operations system, with a web admin interface and MoySklad/Google Sheets integrations. The main workflow is staff interaction through the bot, role-based routing to finance or operational handlers, business services updating domain state and persistent records, then reports or notifications returned to users. Distinct branches cover daily cash and submissions, inventory control, fines/shipments, and external synchronization. The README documents these capabilities; sampled excerpts support selected service interactions, so uncertain internal wiring is omitted.

Main entry points: [`src/main/java/uz/kassa/repo/OperationRepo.java`](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/repo/OperationRepo.java) (Repositories), [`src/main/java/uz/kassa/bot/handlers/KassirHandler.java`](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/bot/handlers/KassirHandler.java) (Finance handlers), [`src/main/java/uz/kassa/service/LedgerService.java`](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/LedgerService.java) (Ledger and balances), [`src/main/java/uz/kassa/scheduler/Jobs.java`](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/scheduler/Jobs.java) (Scheduled jobs)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["User interfaces"]
  node_bot["Bot entry<br/>[KassaBot.java]"]
  node_router["Role router<br/>[Router.java]"]
  node_finance_handlers["Finance handlers<br/>[KassirHandler.java]"]
  node_admin_handlers["Admin handlers<br/>[AdminHandler.java]"]
  node_web["Web admin"]
  node_web_services["Web admin services"]
end

subgraph group_finance["Cash accounting"]
  node_ledger["Ledger and balances<br/>[LedgerService.java]"]
  node_day["Daily close<br/>[DayService.java]"]
  node_transfers["Transfers and debts"]
  node_submissions["Cash submissions"]
  node_finance_reports["Reports and balances"]
end

subgraph group_operations["Operations control"]
  node_inventory["Inventory workflows"]
  node_stock_count["Stock counting"]
  node_control["Shipment control"]
  node_fines["Fines<br/>[JarimaService.java]"]
end

subgraph group_integrations["External integrations"]
  node_ms_sync["MoySklad sync"]
  node_ms_client["MoySklad client"]
  node_sheets_sync["Sheets sync"]
  node_tg_reader["Telegram reader"]
  node_reader_gateway["Reader gateway"]
end

subgraph group_persistence["Persistence and messaging"]
  node_notifications["Notifications"]
  node_repositories["Repositories<br/>[OperationRepo.java]"]
  node_database[("PostgreSQL")]
  node_scheduler["Scheduled jobs<br/>[Jobs.java]"]
end

node_staff(("Staff and admins"))
node_telegram(("Telegram"))
node_moysklad(("MoySklad"))
node_sheets(("Google Sheets"))
node_reader_service(("tg-reader service<br/>[reader.py]"))

node_staff -->|"sends requests"| node_telegram
node_telegram -->|"delivers updates"| node_bot
node_bot -->|"dispatches updates"| node_router
node_router -->|"routes finance"| node_finance_handlers
node_router -->|"routes admin"| node_admin_handlers
node_finance_handlers -->|"records money"| node_ledger
node_finance_handlers -->|"requests transfers"| node_transfers
node_finance_handlers -->|"submits reports"| node_submissions
node_finance_handlers -->|"requests reports"| node_finance_reports
node_admin_handlers -->|"manages stock"| node_inventory
node_admin_handlers -->|"manages control"| node_control
node_admin_handlers -->|"manages fines"| node_fines
node_web -->|"dispatches requests"| node_web_services
node_web_services -->|"reads and updates"| node_ledger
node_ledger -->|"updates daily records"| node_day
node_ledger -->|"persists operations"| node_repositories
node_day -->|"persists daily records"| node_repositories
node_transfers -->|"persists transfers"| node_repositories
node_submissions -->|"persists submissions"| node_repositories
node_finance_reports -->|"reads records"| node_repositories
node_inventory -->|"reads and writes stock"| node_repositories
node_stock_count -->|"stores counts"| node_repositories
node_control -->|"stores shipment state"| node_repositories
node_control -->|"checks balances"| node_ms_client
node_fines -->|"stores fine records"| node_repositories
node_repositories -->|"reads and writes"| node_database
node_scheduler -->|"closes business days"| node_day
node_scheduler -->|"starts synchronization"| node_ms_sync
node_ms_sync -->|"fetches documents"| node_ms_client
node_ms_client -->|"requests data"| node_moysklad
node_ms_sync -->|"applies transactions"| node_ledger
node_scheduler -.->|"starts synchronization"| node_sheets_sync
node_sheets_sync -.->|"reads and writes sheets"| node_sheets
node_scheduler -.->|"polls reader"| node_tg_reader
node_tg_reader -.->|"calls gateway"| node_reader_gateway
node_reader_gateway -.->|"exchanges messages"| node_reader_service
node_tg_reader -.->|"stores reader data"| node_repositories
node_notifications -->|"sends notifications"| node_telegram

click node_bot "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/bot/KassaBot.java"
click node_router "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/bot/Router.java"
click node_finance_handlers "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/bot/handlers/KassirHandler.java"
click node_admin_handlers "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/bot/handlers/AdminHandler.java"
click node_web "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/webapp/WebAdminController.java"
click node_web_services "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/webapp/AdminApiService.java"
click node_ledger "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/LedgerService.java"
click node_day "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/DayService.java"
click node_transfers "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/TransferService.java"
click node_submissions "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/SubmissionService.java"
click node_finance_reports "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/DailyReportService.java"
click node_inventory "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/ombor/OmborSyncService.java"
click node_stock_count "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/ombor/OmborSanoqService.java"
click node_control "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/control/ShipmentControlService.java"
click node_fines "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/jarima/JarimaService.java"
click node_notifications "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/NotificationService.java"
click node_repositories "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/repo/OperationRepo.java"
click node_scheduler "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/scheduler/Jobs.java"
click node_ms_sync "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/moysklad/MoySkladSyncService.java"
click node_ms_client "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/moysklad/MoySkladClient.java"
click node_sheets_sync "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/gsheets/SheetsSyncService.java"
click node_tg_reader "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/tg/TgReaderService.java"
click node_reader_gateway "https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/tg/TgReaderHttpGateway.java"
click node_reader_service "https://github.com/azizahadovv/moysklad/blob/main/tg-reader/reader.py"

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_bot,node_router,node_finance_handlers,node_admin_handlers,node_web,node_web_services toneBlue
class node_ledger,node_day,node_transfers,node_submissions,node_finance_reports toneAmber
class node_inventory,node_stock_count,node_control,node_fines toneMint
class node_ms_sync,node_ms_client,node_sheets_sync,node_tg_reader,node_reader_gateway toneRose
class node_notifications,node_repositories,node_database,node_scheduler,node_staff,node_telegram,node_moysklad,node_sheets toneIndigo
class node_reader_service toneTeal
```

## Components

### User interfaces

- [Bot entry](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/bot/KassaBot.java): `src/main/java/uz/kassa/bot/KassaBot.java`
- [Role router](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/bot/Router.java): `src/main/java/uz/kassa/bot/Router.java`
- [Finance handlers](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/bot/handlers/KassirHandler.java): `src/main/java/uz/kassa/bot/handlers/KassirHandler.java`
- [Admin handlers](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/bot/handlers/AdminHandler.java): `src/main/java/uz/kassa/bot/handlers/AdminHandler.java`
- [Web admin](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/webapp/WebAdminController.java): `src/main/java/uz/kassa/webapp/WebAdminController.java`
- [Web admin services](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/webapp/AdminApiService.java): `src/main/java/uz/kassa/webapp/AdminApiService.java`

### Cash accounting

- [Ledger and balances](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/LedgerService.java): `src/main/java/uz/kassa/service/LedgerService.java`
- [Daily close](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/DayService.java): `src/main/java/uz/kassa/service/DayService.java`
- [Transfers and debts](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/TransferService.java): `src/main/java/uz/kassa/service/TransferService.java`
- [Cash submissions](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/SubmissionService.java): `src/main/java/uz/kassa/service/SubmissionService.java`
- [Reports and balances](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/DailyReportService.java): `src/main/java/uz/kassa/service/DailyReportService.java`

### Operations control

- [Inventory workflows](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/ombor/OmborSyncService.java): `src/main/java/uz/kassa/service/ombor/OmborSyncService.java`
- [Stock counting](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/ombor/OmborSanoqService.java): `src/main/java/uz/kassa/service/ombor/OmborSanoqService.java`
- [Shipment control](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/control/ShipmentControlService.java): `src/main/java/uz/kassa/service/control/ShipmentControlService.java`
- [Fines](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/jarima/JarimaService.java): `src/main/java/uz/kassa/service/jarima/JarimaService.java`

### External integrations

- [MoySklad sync](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/moysklad/MoySkladSyncService.java): `src/main/java/uz/kassa/service/moysklad/MoySkladSyncService.java`
- [MoySklad client](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/moysklad/MoySkladClient.java): `src/main/java/uz/kassa/service/moysklad/MoySkladClient.java`
- [Sheets sync](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/gsheets/SheetsSyncService.java): `src/main/java/uz/kassa/gsheets/SheetsSyncService.java`
- [Telegram reader](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/tg/TgReaderService.java): `src/main/java/uz/kassa/service/tg/TgReaderService.java`
- [Reader gateway](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/tg/TgReaderHttpGateway.java): `src/main/java/uz/kassa/service/tg/TgReaderHttpGateway.java`

### Persistence and messaging

- [Notifications](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/service/NotificationService.java): `src/main/java/uz/kassa/service/NotificationService.java`
- [Repositories](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/repo/OperationRepo.java): `src/main/java/uz/kassa/repo/OperationRepo.java`
- **PostgreSQL**
- [Scheduled jobs](https://github.com/azizahadovv/moysklad/blob/main/src/main/java/uz/kassa/scheduler/Jobs.java): `src/main/java/uz/kassa/scheduler/Jobs.java`

### Other components

- **Staff and admins**
- **Telegram**
- **MoySklad**
- **Google Sheets**
- [tg-reader service](https://github.com/azizahadovv/moysklad/blob/main/tg-reader/reader.py): `tg-reader/reader.py`

## Connections

- Staff and admins → Telegram: sends requests
- Telegram → Bot entry: delivers updates
- Bot entry → Role router: dispatches updates
- Role router → Finance handlers: routes finance
- Role router → Admin handlers: routes admin
- Finance handlers → Ledger and balances: records money
- Finance handlers → Transfers and debts: requests transfers
- Finance handlers → Cash submissions: submits reports
- Finance handlers → Reports and balances: requests reports
- Admin handlers → Inventory workflows: manages stock
- Admin handlers → Shipment control: manages control
- Admin handlers → Fines: manages fines
- Web admin → Web admin services: dispatches requests
- Web admin services → Ledger and balances: reads and updates
- Ledger and balances → Daily close: updates daily records
- Ledger and balances → Repositories: persists operations
- Daily close → Repositories: persists daily records
- Transfers and debts → Repositories: persists transfers
- Cash submissions → Repositories: persists submissions
- Reports and balances → Repositories: reads records
- Inventory workflows → Repositories: reads and writes stock
- Stock counting → Repositories: stores counts
- Shipment control → Repositories: stores shipment state
- Shipment control → MoySklad client: checks balances
- Fines → Repositories: stores fine records
- Repositories → PostgreSQL: reads and writes
- Scheduled jobs → Daily close: closes business days
- Scheduled jobs → MoySklad sync: starts synchronization
- MoySklad sync → MoySklad client: fetches documents
- MoySklad client → MoySklad: requests data
- MoySklad sync → Ledger and balances: applies transactions
- Scheduled jobs → Sheets sync: starts synchronization
- Sheets sync → Google Sheets: reads and writes sheets
- Scheduled jobs → Telegram reader: polls reader
- Telegram reader → Reader gateway: calls gateway
- Reader gateway → tg-reader service: exchanges messages
- Telegram reader → Repositories: stores reader data
- Notifications → Telegram: sends notifications
