# Unicenta oPOS - C4 Architecture Diagram ## Overview Unicenta oPOS (v5.4.0) is an enterprise-level Point of Sale system built with Java. It provides comprehensive sales, inventory, customer, and reporting management capabilities with support for multiple operating systems (Windows, Linux, macOS). --- ## Level 1: System Context Diagram ```mermaid graph TB user["👤 POS Operators/Staff"] system["📱 Unicenta oPOS System
Java Desktop Application
v5.4.0"] devices["🖨️ Peripheral Devices
Printer • Scale
Barcode Scanner
Card Reader"] db["💾 Database
MySQL • Derby
SQLite • PostgreSQL"] fs["📂 File System
Reports • Templates
Locales • Config"] user -->|interacts| system system -->|controls| devices system -->|reads/writes| db system -->|reads/writes| fs devices -.->|feedback| system style system fill:#4A90E2,stroke:#2E5C8A,color:#fff,stroke-width:3px style user fill:#50C878,stroke:#2D7A4A,color:#fff style devices fill:#FF6B6B,stroke:#A53D3D,color:#fff style db fill:#FFB84D,stroke:#8B6914,color:#fff style fs fill:#9B59B6,stroke:#5B2C6F,color:#fff ``` --- ## Level 2: Container Architecture ```mermaid graph TB subgraph app["🏗️ UNICENTA oPOS APPLICATION"] subgraph ui["PRESENTATION LAYER
(Swing/JavaFX)"] ui1["StartPOS Entry Point"] ui2["Sales Screens
Simple • Restaurant
Shared Modes"] ui3["Admin Panels
User Mgmt • Settings"] ui4["Forms & Dialogs
Customers • Suppliers
Inventory"] ui5["Reporting Dashboards
JFreeChart"] end subgraph service["SERVICE LAYER
(Business Logic)"] svc1["Sales Service"] svc2["Inventory Service"] svc3["Customer Service"] svc4["Payment Service"] svc5["Reporting Service"] svc6["Config/Admin Service"] end subgraph dao["DATA ACCESS LAYER
(DAOs)"] dao1["ProductDAO"] dao2["TicketDAO"] dao3["CustomerDAO"] dao4["EmployeeDAO"] dao5["CompanyDAO"] dao6["SupplierDAO"] end subgraph peripheral["PERIPHERAL INTEGRATION
(Drivers & APIs)"] per1["Printer Drivers
ESC-POS • JavaPOS"] per2["Scale Reader
Serial Comm"] per3["Barcode Scanner
ZXing"] per4["Card Reader
USB/Serial"] end subgraph utils["UTILITIES & SUPPORT"] util1["Logging
Logback"] util2["Formatting
Date • Currency"] util3["Localization
i18n"] util4["Reporting
JasperReports"] util5["Scripting
BeanShell"] util6["Plugins"] end end subgraph external["📦 EXTERNAL SYSTEMS"] extdb["💾 Database
MySQL/Derby/SQLite
PostgreSQL"] extfs["📂 File System
Configs • Templates
Locales • Reports"] devices["🖨️ Physical Devices
Printers • Scales
Scanners • Card Readers"] end ui -->|calls| service service -->|uses| dao service -->|uses| peripheral service -->|uses| utils ui -->|uses| utils dao -->|reads/writes| extdb peripheral -->|controls| devices service -->|reads/writes| extfs ui -->|reads/writes| extfs style app fill:#E8F4F8,stroke:#2E5C8A,stroke-width:2px style ui fill:#4A90E2,stroke:#2E5C8A,color:#fff style service fill:#50C878,stroke:#2D7A4A,color:#fff style dao fill:#FF9F43,stroke:#B8690F,color:#fff style peripheral fill:#FF6B6B,stroke:#A53D3D,color:#fff style utils fill:#9B59B6,stroke:#5B2C6F,color:#fff style external fill:#F0F0F0,stroke:#666 style extdb fill:#FFB84D,stroke:#8B6914,color:#fff style extfs fill:#9B59B6,stroke:#5B2C6F,color:#fff style devices fill:#FF6B6B,stroke:#A53D3D,color:#fff ``` --- ## Level 3: Component Architecture ### Sales Module ```mermaid graph LR subgraph sales["com.unicenta.pos.sales"] simple["simple/
Simple POS Mode"] restaurant["restaurant/
Table/Order Mode"] shared["shared/
Shared Ticket Logic"] end simple -.-> shared restaurant -.-> shared style sales fill:#4A90E2,stroke:#2E5C8A,color:#fff style simple fill:#5BA3D0,stroke:#2E5C8A,color:#fff style restaurant fill:#5BA3D0,stroke:#2E5C8A,color:#fff style shared fill:#6BB3E0,stroke:#2E5C8A,color:#fff ``` ### Inventory & Catalog Modules ```mermaid graph TB subgraph inventory["com.unicenta.pos.inventory"] inv_prod["Product Management"] inv_stock["Stock Tracking"] inv_cat["Category Management"] end subgraph catalog["com.unicenta.pos.catalog"] cat_prod["Product Categorization"] cat_search["Product Search/Filter"] cat_display["Display Management"] end inv_prod ---|shared data| cat_prod inv_cat ---|manages| cat_display style inventory fill:#50C878,stroke:#2D7A4A,color:#fff style catalog fill:#50C878,stroke:#2D7A4A,color:#fff style inv_prod fill:#68D989,stroke:#2D7A4A,color:#fff style inv_stock fill:#68D989,stroke:#2D7A4A,color:#fff style inv_cat fill:#68D989,stroke:#2D7A4A,color:#fff style cat_prod fill:#68D989,stroke:#2D7A4A,color:#fff style cat_search fill:#68D989,stroke:#2D7A4A,color:#fff style cat_display fill:#68D989,stroke:#2D7A4A,color:#fff ``` ### Ticket & Payment Processing ```mermaid graph TB subgraph ticket["com.unicenta.pos.ticket"] ticket_create["Ticket Creation"] ticket_items["Line Items Mgmt"] ticket_lifecycle["Lifecycle Management"] end subgraph payment["com.unicenta.pos.payment"] pay_method["Payment Methods"] pay_process["Payment Processing"] pay_card["Card Integration"] end ticket_create -->|on completion| pay_method ticket_items -->|on finalize| pay_process pay_process -->|if card| pay_card style ticket fill:#FF9F43,stroke:#B8690F,color:#fff style payment fill:#FF9F43,stroke:#B8690F,color:#fff style ticket_create fill:#FDB44B,stroke:#B8690F,color:#fff style ticket_items fill:#FDB44B,stroke:#B8690F,color:#fff style ticket_lifecycle fill:#FDB44B,stroke:#B8690F,color:#fff style pay_method fill:#FDB44B,stroke:#B8690F,color:#fff style pay_process fill:#FDB44B,stroke:#B8690F,color:#fff style pay_card fill:#FDB44B,stroke:#B8690F,color:#fff ``` ### Reporting & Administration ```mermaid graph TB subgraph reports["com.unicenta.pos.reports"] report_gen["Report Generation"] report_chart["Chart Generation
JFreeChart"] report_export["PDF/Excel Export"] end subgraph admin["com.unicenta.pos.admin"] admin_user["User Management"] admin_config["System Configuration"] admin_security["Access Control"] end report_gen -->|uses| report_chart report_chart -->|renders to| report_export admin_user -->|applies| admin_security style reports fill:#9B59B6,stroke:#5B2C6F,color:#fff style admin fill:#9B59B6,stroke:#5B2C6F,color:#fff style report_gen fill:#B76AC2,stroke:#5B2C6F,color:#fff style report_chart fill:#B76AC2,stroke:#5B2C6F,color:#fff style report_export fill:#B76AC2,stroke:#5B2C6F,color:#fff style admin_user fill:#B76AC2,stroke:#5B2C6F,color:#fff style admin_config fill:#B76AC2,stroke:#5B2C6F,color:#fff style admin_security fill:#B76AC2,stroke:#5B2C6F,color:#fff ``` ### Printer System ```mermaid graph LR subgraph printer["com.unicenta.pos.printer"] escpos["escpos/
ESC-POS Driver"] javapos["javapos/
JavaPOS Driver"] screen["screen/
Screen Preview"] end reports["JasperReports
JFreeChart"] reports -->|routes to| escpos reports -->|routes to| javapos reports -->|routes to| screen style printer fill:#FF6B6B,stroke:#A53D3D,color:#fff style escpos fill:#FF8E8E,stroke:#A53D3D,color:#fff style javapos fill:#FF8E8E,stroke:#A53D3D,color:#fff style screen fill:#FF8E8E,stroke:#A53D3D,color:#fff style reports fill:#9B59B6,stroke:#5B2C6F,color:#fff ``` ### Communication & Integration ```mermaid graph TB subgraph comm["com.unicenta.pos.comm"] serial["Serial Communication
RXTX • jSerialComm"] usb["USB Communication
USB4Java"] end scale["Scale Reader"] scanner["Barcode Scanner
ZXing"] reader["Card Reader"] serial -->|reads| scale serial -->|reads| scanner usb -->|reads| reader style comm fill:#FF6B6B,stroke:#A53D3D,color:#fff style serial fill:#FF8E8E,stroke:#A53D3D,color:#fff style usb fill:#FF8E8E,stroke:#A53D3D,color:#fff style scale fill:#D9534F,stroke:#A53D3D,color:#fff style scanner fill:#D9534F,stroke:#A53D3D,color:#fff style reader fill:#D9534F,stroke:#A53D3D,color:#fff ``` --- ## Level 4: Data Flow Diagrams ### Sales Transaction Flow ```mermaid sequenceDiagram actor User as POS Operator participant UI as Sales Screen participant Service as Sales Service participant DAO as TicketDAO participant DB as Database participant Payment as Payment Service participant Printer as Printer Service User->>UI: Create/Edit Ticket UI->>Service: Process Ticket Service->>DAO: Save Ticket DAO->>DB: INSERT/UPDATE DB-->>DAO: Confirm DAO-->>Service: Ticket ID User->>UI: Process Payment UI->>Service: Payment Request Service->>Payment: Process Payment Payment-->>Service: Payment Confirmed Service->>Printer: Print Receipt Printer-->>Service: Print Complete Service-->>UI: Transaction Complete UI-->>User: Display Confirmation ``` ### Product Lookup Flow ```mermaid sequenceDiagram actor Device as Barcode Scanner participant UI as Sales Screen participant DAO as ProductDAO participant DB as Database Device->>UI: Scan Barcode UI->>DAO: Query Product DAO->>DB: SELECT Product DB-->>DAO: Product Data DAO-->>UI: Product Details UI-->>Device: Display Product Info ``` ### Report Generation Flow ```mermaid sequenceDiagram actor User as Admin/Manager participant UI as Admin Panel participant Service as Reporting Service participant JasperReports as JasperReports Engine participant DB as Database participant FileSystem as File System User->>UI: Request Report UI->>Service: Generate Report Service->>DB: Query Data DB-->>Service: Report Data Service->>JasperReports: Render Report JasperReports->>FileSystem: Generate PDF/Excel FileSystem-->>JasperReports: File Path JasperReports-->>Service: Report Ready Service-->>UI: Display/Download UI-->>User: Provide Report ``` --- ## Level 5: Package Structure ```mermaid graph TB com["com.unicenta"] com -->|core| basic["basic
Exception Handling
Logging"] com -->|ui| beans["beans
Custom UI Components
Dialogs • Date Pickers
Number Pads"] com -->|ui| orderpop["orderpop
Order Popup Module"] com -->|plugins| plugins["plugins
Plugin Architecture
Metrics System"] pos["com.unicenta.pos"] com -->|main| pos pos -->|sales| sales["sales
Simple • Restaurant
Shared Modes"] pos -->|inventory| inventory["inventory
Products • Stock
Categories"] pos -->|customers| customers["customers
Customer Management
Loyalty Programs"] pos -->|catalog| catalog["catalog
Product Catalog
Display Management"] pos -->|ticket| ticket["ticket
Ticket Lifecycle
Line Items"] pos -->|payment| payment["payment
Payment Methods
Card Integration
Cash Handling"] pos -->|reports| reports["reports
JasperReports
JFreeChart
PDF/Excel Export"] pos -->|admin| admin["admin
User Management
System Configuration
Access Control"] pos -->|printer| printer["printer
ESC-POS • JavaPOS
Screen Preview"] pos -->|comm| comm["comm
Serial • USB
Scale • Scanner
Card Reader"] pos -->|scripting| scripting["scripting
BeanShell
Custom Logic"] pos -->|forms| forms["forms
Main UI
Data Entry Forms"] pos -->|config| config["config
Configuration Mgmt
Settings"] pos -->|instance| instance["instance
Instance Management
Singleton Patterns"] pos -->|mant| mant["mant
Maintenance
Utilities"] style com fill:#E8F4F8,stroke:#2E5C8A style pos fill:#4A90E2,stroke:#2E5C8A,color:#fff style basic fill:#5BA3D0,stroke:#2E5C8A,color:#fff style beans fill:#5BA3D0,stroke:#2E5C8A,color:#fff style orderpop fill:#5BA3D0,stroke:#2E5C8A,color:#fff style plugins fill:#5BA3D0,stroke:#2E5C8A,color:#fff style sales fill:#50C878,stroke:#2D7A4A,color:#fff style inventory fill:#50C878,stroke:#2D7A4A,color:#fff style customers fill:#50C878,stroke:#2D7A4A,color:#fff style catalog fill:#50C878,stroke:#2D7A4A,color:#fff style ticket fill:#FF9F43,stroke:#B8690F,color:#fff style payment fill:#FF9F43,stroke:#B8690F,color:#fff style reports fill:#9B59B6,stroke:#5B2C6F,color:#fff style admin fill:#9B59B6,stroke:#5B2C6F,color:#fff style printer fill:#FF6B6B,stroke:#A53D3D,color:#fff style comm fill:#FF6B6B,stroke:#A53D3D,color:#fff style scripting fill:#FFB84D,stroke:#8B6914,color:#fff style forms fill:#4A90E2,stroke:#2E5C8A,color:#fff style config fill:#4A90E2,stroke:#2E5C8A,color:#fff style instance fill:#4A90E2,stroke:#2E5C8A,color:#fff style mant fill:#4A90E2,stroke:#2E5C8A,color:#fff ``` --- ## Level 6: Database Schema Overview ```mermaid graph TB subgraph core["CORE ENTITIES"] company["COMPANY
company_id
name
code"] location["LOCATION
location_id
name
address"] products["PRODUCTS
product_id
name
code
price"] categories["CATEGORIES
category_id
name
description"] end subgraph transactions["TRANSACTION ENTITIES"] tickets["TICKETS
ticket_id
number
date
customer_id"] lines["TICKETLINES
line_id
ticket_id
product_id
qty"] payments["PAYMENTS
payment_id
ticket_id
method
amount"] end subgraph master["MASTER DATA"] customers["CUSTOMERS
customer_id
name
email
phone"] suppliers["SUPPLIERS
supplier_id
name
contact
products"] employees["EMPLOYEES
employee_id
name
role
access_level"] taxes["TAXCATEGORIES
tax_id
name
rate"] end subgraph inventory["INVENTORY ENTITIES"] stock["STOCK
stock_id
product_id
location_id
quantity"] movements["STOCKMOVEMENTS
movement_id
product_id
qty
type"] end company -->|operates| location location -->|manages| products products -->|in| categories location -->|in| stock products -->|in| stock customers -->|creates| tickets employees -->|processes| tickets products -->|in| lines tickets -->|contains| lines tickets -->|has| payments tickets -->|has| taxes products -->|from| suppliers stock -->|tracks| movements style core fill:#4A90E2,stroke:#2E5C8A,color:#fff style transactions fill:#FF9F43,stroke:#B8690F,color:#fff style master fill:#50C878,stroke:#2D7A4A,color:#fff style inventory fill:#9B59B6,stroke:#5B2C6F,color:#fff style company fill:#5BA3D0,stroke:#2E5C8A,color:#fff style location fill:#5BA3D0,stroke:#2E5C8A,color:#fff style products fill:#5BA3D0,stroke:#2E5C8A,color:#fff style categories fill:#5BA3D0,stroke:#2E5C8A,color:#fff style tickets fill:#FDB44B,stroke:#B8690F,color:#fff style lines fill:#FDB44B,stroke:#B8690F,color:#fff style payments fill:#FDB44B,stroke:#B8690F,color:#fff style customers fill:#68D989,stroke:#2D7A4A,color:#fff style suppliers fill:#68D989,stroke:#2D7A4A,color:#fff style employees fill:#68D989,stroke:#2D7A4A,color:#fff style taxes fill:#68D989,stroke:#2D7A4A,color:#fff style stock fill:#B76AC2,stroke:#5B2C6F,color:#fff style movements fill:#B76AC2,stroke:#5B2C6F,color:#fff ``` --- ## Technology Stack ```mermaid graph TB subgraph frontend["FRONTEND"] swing["Swing
Traditional UI"] javafx["JavaFX
Modern UI"] flatlaf["FlatLAF
Modern Look & Feel"] end subgraph backend["BACKEND"] java["Java 8+
Core Logic"] lombok["Lombok
Boilerplate Reduction"] beanshell["BeanShell
Dynamic Scripting"] end subgraph data["DATA & PERSISTENCE"] jdbc["JDBC
Database Abstraction"] mysql["MySQL
Primary Database"] derby["Derby
Embedded DB"] sqlite["SQLite
Lightweight DB"] postgres["PostgreSQL
Enterprise DB"] end subgraph reporting["REPORTING & ANALYTICS"] jasper["JasperReports
Report Generation"] jfreechart["JFreeChart
Charts & Graphs"] poi["Apache POI
Excel Export"] itext["iText
PDF Generation"] end subgraph devices["DEVICE INTEGRATION"] rxtx["RXTX/jSerialComm
Serial Communication"] usb4j["USB4Java
USB Communication"] zxing["ZXing
Barcode Processing"] jpos["JavaPOS
POS Device Standard"] end subgraph support["SUPPORT LIBRARIES"] logback["Logback
Logging"] gson["GSON
JSON Processing"] xstream["XStream
XML Serialization"] velocity["Apache Velocity
Template Engine"] end style frontend fill:#4A90E2,stroke:#2E5C8A,color:#fff style backend fill:#50C878,stroke:#2D7A4A,color:#fff style data fill:#FF9F43,stroke:#B8690F,color:#fff style reporting fill:#9B59B6,stroke:#5B2C6F,color:#fff style devices fill:#FF6B6B,stroke:#A53D3D,color:#fff style support fill:#FFB84D,stroke:#8B6914,color:#fff style swing fill:#5BA3D0,stroke:#2E5C8A,color:#fff style javafx fill:#5BA3D0,stroke:#2E5C8A,color:#fff style flatlaf fill:#5BA3D0,stroke:#2E5C8A,color:#fff style java fill:#68D989,stroke:#2D7A4A,color:#fff style lombok fill:#68D989,stroke:#2D7A4A,color:#fff style beanshell fill:#68D989,stroke:#2D7A4A,color:#fff style jdbc fill:#FDB44B,stroke:#B8690F,color:#fff style mysql fill:#FDB44B,stroke:#B8690F,color:#fff style derby fill:#FDB44B,stroke:#B8690F,color:#fff style sqlite fill:#FDB44B,stroke:#B8690F,color:#fff style postgres fill:#FDB44B,stroke:#B8690F,color:#fff style jasper fill:#B76AC2,stroke:#5B2C6F,color:#fff style jfreechart fill:#B76AC2,stroke:#5B2C6F,color:#fff style poi fill:#B76AC2,stroke:#5B2C6F,color:#fff style itext fill:#B76AC2,stroke:#5B2C6F,color:#fff style rxtx fill:#FF8E8E,stroke:#A53D3D,color:#fff style usb4j fill:#FF8E8E,stroke:#A53D3D,color:#fff style zxing fill:#FF8E8E,stroke:#A53D3D,color:#fff style jpos fill:#FF8E8E,stroke:#A53D3D,color:#fff style logback fill:#F5B041,stroke:#8B6914,color:#fff style gson fill:#F5B041,stroke:#8B6914,color:#fff style xstream fill:#F5B041,stroke:#8B6914,color:#fff style velocity fill:#F5B041,stroke:#8B6914,color:#fff ``` --- ## Key Architectural Patterns ```mermaid graph TB subgraph patterns["DESIGN PATTERNS"] dao_pat["📋 DAO Pattern
Data Abstraction"] service_pat["🔧 Service Pattern
Business Logic"] singleton_pat["🎯 Singleton Pattern
Resource Management"] factory_pat["🏭 Factory Pattern
Object Creation"] plugin_pat["🔌 Plugin Pattern
Extensibility"] end subgraph layers["ARCHITECTURAL LAYERS"] presentation["📱 Presentation
UI Components"] business["💼 Business Logic
Services"] data["💾 Data Access
DAOs & Queries"] external["🔌 External Integration
Devices & Files"] end subgraph principles["DESIGN PRINCIPLES"] sep_concern["Separation of Concerns
Distinct responsibilities"] loose_coupling["Loose Coupling
Independent modules"] high_cohesion["High Cohesion
Related functionality"] abstraction["Abstraction
Hide complexity"] end presentation -->|calls| business business -->|uses| data business -->|uses| external dao_pat -->|implements| data service_pat -->|implements| business singleton_pat -->|ensures| resource_management["Resource
Management"] factory_pat -->|creates| objects["Objects"] plugin_pat -->|enables| extensions["Extensions"] style patterns fill:#4A90E2,stroke:#2E5C8A,color:#fff style layers fill:#50C878,stroke:#2D7A4A,color:#fff style principles fill:#9B59B6,stroke:#5B2C6F,color:#fff style dao_pat fill:#5BA3D0,stroke:#2E5C8A,color:#fff style service_pat fill:#5BA3D0,stroke:#2E5C8A,color:#fff style singleton_pat fill:#5BA3D0,stroke:#2E5C8A,color:#fff style factory_pat fill:#5BA3D0,stroke:#2E5C8A,color:#fff style plugin_pat fill:#5BA3D0,stroke:#2E5C8A,color:#fff style presentation fill:#68D989,stroke:#2D7A4A,color:#fff style business fill:#68D989,stroke:#2D7A4A,color:#fff style data fill:#68D989,stroke:#2D7A4A,color:#fff style external fill:#68D989,stroke:#2D7A4A,color:#fff style sep_concern fill:#B76AC2,stroke:#5B2C6F,color:#fff style loose_coupling fill:#B76AC2,stroke:#5B2C6F,color:#fff style high_cohesion fill:#B76AC2,stroke:#5B2C6F,color:#fff style abstraction fill:#B76AC2,stroke:#5B2C6F,color:#fff style resource_management fill:#FFB84D,stroke:#8B6914,color:#fff style objects fill:#FFB84D,stroke:#8B6914,color:#fff style extensions fill:#FFB84D,stroke:#8B6914,color:#fff ``` --- ## Core Features Architecture ```mermaid graph TB system["🏪 Unicenta oPOS
Enterprise POS System"] system -->|Sales Management| sales_feat["Sales Processing
Multiple modes
Ticket management
Payment handling"] system -->|Inventory Management| inventory_feat["Product Management
Stock tracking
Category organization
Quantity monitoring"] system -->|Customer Management| customer_feat["Customer Database
Transaction history
Loyalty programs
Communication"] system -->|Supplier Management| supplier_feat["Supplier Directory
Purchase orders
Product sourcing
Vendor info"] system -->|Employee Management| employee_feat["User Accounts
Access Control
Role Assignment
Activity Logging"] system -->|Reporting & Analytics| reporting_feat["Sales Reports
Inventory Reports
Financial Reports
Charts & Graphs"] system -->|Device Integration| device_feat["Thermal Printers
Barcode Scanners
Weight Scales
Card Readers"] system -->|Multi-platform| platform_feat["Windows Support
Linux Support
macOS Support
Cross-platform UI"] style system fill:#4A90E2,stroke:#2E5C8A,color:#fff,stroke-width:3px style sales_feat fill:#50C878,stroke:#2D7A4A,color:#fff style inventory_feat fill:#50C878,stroke:#2D7A4A,color:#fff style customer_feat fill:#50C878,stroke:#2D7A4A,color:#fff style supplier_feat fill:#50C878,stroke:#2D7A4A,color:#fff style employee_feat fill:#9B59B6,stroke:#5B2C6F,color:#fff style reporting_feat fill:#9B59B6,stroke:#5B2C6F,color:#fff style device_feat fill:#FF6B6B,stroke:#A53D3D,color:#fff style platform_feat fill:#FFB84D,stroke:#8B6914,color:#fff ``` --- ## Deployment Architecture ```mermaid graph TB subgraph client["CLIENT TIER"] desktop["💻 Desktop Machine
Windows • Linux • macOS
Java Runtime (JRE 8+)"] end subgraph app_tier["APPLICATION TIER"] jar["📦 unicentaopos.jar
Version 5.4.0
Java Swing/JavaFX"] end subgraph data_tier["DATA TIER"] db_choice["Database Engine
MySQL 5.x
Derby
SQLite
PostgreSQL"] db_instance["Database Instance
Schema: unicentaopos
Tables & Indexes"] end subgraph files["FILE STORAGE"] reports_dir["📁 Reports Directory
Generated PDFs
Excel Files"] config_dir["📁 Config Directory
Application Settings
User Preferences"] templates["📁 Templates
Report Templates
Print Layouts"] locales["📁 Localization
Language Files
i18n Resources"] end desktop -->|runs| jar jar -->|connects to| db_choice db_choice -->|manages| db_instance jar -->|reads/writes| reports_dir jar -->|reads/writes| config_dir jar -->|reads| templates jar -->|reads| locales style client fill:#E8F4F8,stroke:#2E5C8A,stroke-width:2px style app_tier fill:#4A90E2,stroke:#2E5C8A,color:#fff,stroke-width:2px style data_tier fill:#FF9F43,stroke:#B8690F,color:#fff,stroke-width:2px style files fill:#9B59B6,stroke:#5B2C6F,color:#fff,stroke-width:2px style desktop fill:#5BA3D0,stroke:#2E5C8A,color:#fff style jar fill:#5BA3D0,stroke:#2E5C8A,color:#fff style db_choice fill:#FDB44B,stroke:#B8690F,color:#fff style db_instance fill:#FDB44B,stroke:#B8690F,color:#fff style reports_dir fill:#B76AC2,stroke:#5B2C6F,color:#fff style config_dir fill:#B76AC2,stroke:#5B2C6F,color:#fff style templates fill:#B76AC2,stroke:#5B2C6F,color:#fff style locales fill:#B76AC2,stroke:#5B2C6F,color:#fff ``` --- ## Quick Start ### Prerequisites - Java 8+ (JRE) - MySQL 5.x (or Derby/SQLite/PostgreSQL) - Create database schema: `unicentaopos` ### Build ```bash mvn clean package ``` ### Run ```bash java -jar ./target/unicentaopos.jar ``` ### Platform Support - ✅ Windows - ✅ Linux - ✅ macOS --- ## Summary **Unicenta oPOS** is a layered, modular Java desktop application with clear separation between: 1. **Presentation Layer** - Swing/JavaFX UI 2. **Service Layer** - Business logic & orchestration 3. **Data Access Layer** - DAO pattern for database abstraction 4. **Peripheral Integration** - Hardware device drivers 5. **Support Layer** - Utilities, logging, plugins The architecture supports **multi-database backends**, **multiple POS sales modes** (simple, restaurant), **comprehensive reporting**, and **extensive peripheral device integration**, making it a flexible, enterprise-grade point-of-sale system.