# Effigenix Fleischerei ERP ERP-System für Fleischereien mit HACCP-Compliance, GoBD-konform, Mehrfilialen-Support. ## Architektur **Domain-Driven Design + Clean Architecture + Java 21 + Spring Boot** ``` ┌─────────────────────────────────────────────────────┐ │ Presentation (REST Controllers) │ └─────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────┐ │ Application Layer (Use Cases) │ │ - Transaction Script for Generic Subdomains │ │ - Rich Domain Model for Core Domains │ └─────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────┐ │ Domain Layer (DDD Tactical Patterns) │ │ - Aggregates, Entities, Value Objects │ │ - Domain Events, Repositories │ └─────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────┐ │ Infrastructure Layer │ │ - Spring, JPA, PostgreSQL, JWT, REST │ └─────────────────────────────────────────────────────┘ ``` ## Bounded Contexts (11) ### Core Domains (7) - **Production Management** - Rezeptverwaltung, Chargenproduktion - **Quality Management** - HACCP-Compliance, Temperaturüberwachung - **Inventory Management** - Bestandsführung, Lagerverwaltung - **Procurement** - Einkauf, Wareneingang, Lieferanten - **Sales** - Auftragserfassung, Rechnungsstellung, Kunden ### Supporting Domains (3) - **Labeling** - Etikettendruck mit HACCP-Daten - **Filiales** - Mehrfilialen-Verwaltung ### Generic Subdomains (3) - **User Management** - Authentifizierung, Autorisierung, Rollen - **Reporting** - Standard-Reports - **Notifications** - E-Mail/SMS-Benachrichtigungen ## Tech Stack - **Java 21** (Records, Sealed Interfaces, Pattern Matching) - **Spring Boot 3.2** (Spring Security 6, Spring Data JPA 3) - **PostgreSQL 15+** (Produktiv-DB) - **JWT** (Stateless Authentication) - **Flyway** (Schema Migrations) - **Maven** (Build Tool) ## Getting Started ### Prerequisites - Java 21+ - Maven 3.9+ - PostgreSQL 15+ - Docker (optional, für PostgreSQL) ### Database Setup ```bash # PostgreSQL mit Docker docker run --name effigenix-postgres \ -e POSTGRES_DB=effigenix \ -e POSTGRES_USER=effigenix \ -e POSTGRES_PASSWORD=effigenix \ -p 5432:5432 \ -d postgres:15 ``` ### Build & Run ```bash # Build mvn clean install # Run mvn spring-boot:run # Run with specific profile mvn spring-boot:run -Dspring-boot.run.profiles=dev ``` ### API Documentation Nach dem Start verfügbar unter: - Swagger UI: http://localhost:8080/swagger-ui.html - OpenAPI Spec: http://localhost:8080/api-docs ## Project Structure ``` src/main/java/com/effigenix/ ├── domain/ # Domain Layer (keine Framework-Dependencies!) │ └── usermanagement/ │ ├── User.java │ ├── Role.java │ ├── UserId.java │ └── UserRepository.java ├── application/ # Application Layer (Use Cases) │ └── usermanagement/ │ ├── CreateUser.java │ ├── AuthenticateUser.java │ └── dto/ ├── infrastructure/ # Infrastructure Layer │ ├── persistence/ │ ├── security/ │ ├── web/ │ └── audit/ └── shared/ # Shared Kernel ├── security/ # AuthorizationPort, Action └── common/ # Result, ApplicationError src/main/resources/ └── db/migration/ # Flyway Migrations ``` ## User Management (Generic Subdomain) ### Vordefinierte Rollen | Rolle | Permissions | Zielgruppe | |-------|-------------|------------| | **ADMIN** | Alle | Systemadministrator | | **PRODUCTION_MANAGER** | RECIPE_*, BATCH_*, PRODUCTION_ORDER_* | Leiter Produktion | | **PRODUCTION_WORKER** | RECIPE_READ, BATCH_* | Produktionsmitarbeiter | | **QUALITY_MANAGER** | HACCP_*, TEMPERATURE_LOG_* | Qualitätsbeauftragter | | **QUALITY_INSPECTOR** | TEMPERATURE_LOG_*, GOODS_INSPECTION_* | QM-Mitarbeiter | | **PROCUREMENT_MANAGER** | PURCHASE_ORDER_*, SUPPLIER_* | Einkaufsleiter | | **WAREHOUSE_WORKER** | STOCK_*, INVENTORY_COUNT_* | Lagermitarbeiter | | **SALES_MANAGER** | ORDER_*, INVOICE_*, CUSTOMER_* | Verkaufsleiter | | **SALES_STAFF** | ORDER_READ/WRITE, CUSTOMER_READ | Verkaufsmitarbeiter | ### AuthorizationPort (für andere BCs) ```java // Typsichere, fachliche Authorization - kein direkter Zugriff auf User/Roles! public interface AuthorizationPort { boolean can(Action action); void assertCan(Action action); boolean can(Action action, ResourceId resource); void assertCan(Action action, ResourceId resource); ActorId currentActor(); Optional currentBranch(); } // Beispiel: Production BC public class CreateRecipe { private final AuthorizationPort authPort; public Result execute(CreateRecipeCommand cmd) { authPort.assertCan(ProductionAction.RECIPE_WRITE); // Business logic... } } ``` ## Testing ```bash # Unit Tests mvn test # Integration Tests mvn verify # Test Coverage mvn clean verify jacoco:report ``` ## License Proprietary - Effigenix GmbH ## Contact - Project Lead: sebi@effigenix.com - Architecture: DDD + Clean Architecture - Documentation: /docs/mvp/