Skip to content

it-agile/guv-reporting

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GuV Reporting System - Java Port

Dies ist eine vollständige Java-Portierung des ISHA7800 COBOL-Systems zur GuV-Berichterstellung (Gewinn- und Verlustrechnung).

Überblick

Das System konvertiert Finanzdaten und generiert entweder monats- oder mitarbeiterbasierte Berichte.

Original vs. Java-Port

Aspekt COBOL Java
Sprache Enterprise COBOL für z/OS Java 11+
Plattform Mainframe (z/OS) Beliebig (JVM)
Compilation Enterprise COBOL Maven
Tests ISUD7890 Custom Framework JUnit 4
Ausführung Batch-Job Kommandozeile / Docker

Projektstruktur

guv-reporting-java/
├── pom.xml                          # Maven Konfiguration
├── Dockerfile                       # Docker Build
├── docker-compose.yml              # Docker Compose für lokale Tests
├── README.md                        # Diese Datei
│
├── src/main/java/com/example/
│   ├── GuVReportApplication.java   # Main Entry Point (ISHA7800)
│   ├── model/                       # Datenstrukturen (ISS*)
│   │   ├── SteuerDaten.java        # ISS7805
│   │   ├── GuVData.java            # ISS7810
│   │   ├── ExportMonat.java        # ISS7820
│   │   └── ExportMitarbeiter.java  # ISS7821
│   └── processor/                   # Geschäftslogik (ISUD*)
│       ├── SteuerParser.java       # ISUD7805
│       ├── GuVImporter.java        # ISUD7810
│       ├── MonthlyCalculator.java  # ISUD7820
│       ├── EmployeeCalculator.java # ISUD7821
│       ├── MonthlyExporter.java    # ISUD7830
│       └── EmployeeExporter.java   # ISUD7831
│
├── src/test/java/com/example/processor/
│   ├── SteuerParserTest.java
│   ├── MonthlyCalculatorTest.java
│   └── EmployeeCalculatorTest.java
│
├── src/main/resources/
│   ├── example-EXPRTART.txt        # Beispiel Steuerungsdatei
│   └── example-ROHDATEN.txt        # Beispiel Rohdaten
│
└── data/                            # (wird vom Dockerfile erzeugt)

Quick Start

Voraussetzungen

  • Java 11+
  • Maven 3.6+
  • Docker (optional, für containerisierte Ausführung)

Installation und Ausführung

1. Mit Maven (lokal)

# Repository klonen / in Verzeichnis gehen
cd guv-reporting-java

# Bauen
mvn clean package

# Mit Beispiel-Daten ausführen
java -jar target/guv-reporting.jar src/main/resources/example-EXPRTART.txt src/main/resources/example-ROHDATEN.txt

# Mit Debug-Output
java -jar target/guv-reporting.jar src/main/resources/example-EXPRTART.txt src/main/resources/example-ROHDATEN.txt --debug

2. Mit Docker

# Image bauen
docker build -t guv-reporting .

# Container starten (interaktiv)
docker run -it guv-reporting src/main/resources/example-EXPRTART.txt src/main/resources/example-ROHDATEN.txt

# Mit Docker Compose
docker-compose up

3. Tests ausführen

# Alle Tests
mvn test

# Spezifischer Test
mvn test -Dtest=SteuerParserTest
mvn test -Dtest=MonthlyCalculatorTest
mvn test -Dtest=EmployeeCalculatorTest

Verwendung

Kommandozeile

java -jar guv-reporting.jar EXPRTART ROHDATEN [--debug]

Parameter:

  • EXPRTART: Pfad zur Steuerungsdatei
  • ROHDATEN: Pfad zur Rohdaten-Datei
  • --debug: (Optional) Ausführliches Logging

Eingabedateien

EXPRTART (Steuerungsdatei)

Enthält eine Zeile mit:

  • MONATLICH - für monatlichen Bericht
  • MITARBEITER - für Mitarbeiterbericht
MONATLICH

ROHDATEN (Dateneingabe)

Format (COBOL-Original, kann zu CSV vereinfacht werden):

JAHRMMMITAFORTRAG...
2023011000100234567
2023022002101234567

CSV-Alternative (einfacher zu generieren):

Monat,Mitarbeiter,Ertrag
01,M01,1234.56
02,M02,2345.67

Modul-Mapping: COBOL → Java

Datenstrukturen

COBOL (ISS*) Java Zweck
ISS7805 SteuerDaten Steuerungsdaten
ISS7810 GuVData Import-Tabelle
ISS7820 ExportMonat Monats-Export
ISS7821 ExportMitarbeiter Mitarbeiter-Export

Prozessoren

COBOL (ISUD*) Java Zweck
ISUD7805 SteuerParser Kontrolle parsen
ISUD7810 GuVImporter Daten importieren
ISUD7820 MonthlyCalculator Nach Monat aggregieren
ISUD7821 EmployeeCalculator Nach Mitarbeiter aggregieren
ISUD7830 MonthlyExporter Monatsbericht ausgeben
ISUD7831 EmployeeExporter Mitarbeiterbericht ausgeben

Orchestration

COBOL Java
ISHA7800 GuVReportApplication

Datenfluss

┌─────────────┐
│ EXPRTART    │
└──────┬──────┘
       │ SteuerParser
       ▼
┌──────────────────┐
│ SteuerDaten      │
│ (monatlich/emp)  │
└──────┬───────────┘
       │
┌──────────────┐
│ ROHDATEN     │
└──────┬───────┘
       │ GuVImporter
       ▼
┌──────────────────┐
│ GuVData          │
│ (9999 entries)   │
└──────┬───────────┘
       │
       ├─ MonthlyCalculator → ExportMonat → MonthlyExporter
       │
       └─ EmployeeCalculator → ExportMitarbeiter → EmployeeExporter

Performance-Hinweise

Komplexität

Klasse Komplexität Notes
SteuerParser O(1) -
GuVImporter O(n) n = Zeilen in ROHDATEN
MonthlyCalculator O(n) n = Einträge
EmployeeCalculator O(n*m) n = Einträge, m = Mitarbeiter (Bottleneck!)
Exporter O(n) -

Optimierungen

EmployeeCalculator

  • Normal: Linear Search → O(n*m)
  • Optimiert: Stream API mit Grouping → O(n log n)
// Verwendet optimierte Variante:
ExportMitarbeiter employee = employeeCalculator.calculateOptimized(guvData);

Technische Details

Dependencies

  • JUnit 4: Unit Testing
  • Apache Commons CSV: CSV-Parsing (optional)
  • SLF4J: Logging

Datentypen

  • BigDecimal: Für Geldbeträge (keine Float/Double!)
  • Integer: Für Monatswerte (1-12)
  • String: Für Mitarbeitername/Steuerung

Fehlerbehandlung

try {
    GuVReportApplication app = new GuVReportApplication();
    app.run("EXPRTART", "ROHDATEN");
} catch (IOException e) {
    System.err.println("ERROR: File I/O - " + e.getMessage());
} catch (IllegalArgumentException e) {
    System.err.println("ERROR: Invalid data - " + e.getMessage());
}

Tests

Test-Abdeckung

SteuerParser:           7 Tests
  ✓ Parse MONATLICH
  ✓ Parse MITARBEITER
  ✓ Ungültige Eingabe (Exception)
  ✓ Gleichheit

MonthlyCalculator:     10 Tests
  ✓ Einzelner Eintrag
  ✓ Mehrere Einträge gleicher Monat
  ✓ Mehrere Monate
  ✓ Gesamtsumme
  ✓ Ungültiger Monat (Exception)
  ✓ Leere Daten
  ✓ Alle Monate
  ✓ Dezimalgenauigkeit

EmployeeCalculator:    14 Tests
  ✓ Einzelner Mitarbeiter
  ✓ Mehrere Einträge
  ✓ Mehrere Mitarbeiter
  ✓ Komplexes Szenario
  ✓ Maximum (99 Mitarbeiter)
  ✓ Überschreitung (Exception)
  ✓ Case-Insensitiv
  ✓ Trimmen
  ✓ Dezimalgenauigkeit
  ✓ Optimiert vs. Normal

Tests ausführen

# Alle Tests
mvn test

# Mit verbose Output
mvn test -X

# Spezifische Test-Klasse
mvn test -Dtest=MonthlyCalculatorTest#testSingleEntry

# Einzelner Test
mvn test -Dtest=EmployeeCalculatorTest#testComplexScenario

Docker

Dockerfile

Multi-stage Build für optimale Größe:

  1. Builder Stage: Maven Build
  2. Runtime Stage: Nur JRE (Alpine)

Resultierende Image-Größe: ~300 MB

Docker Compose

Vereinfachte lokale Ausführung mit Volumes:

docker-compose up

Volumes:

  • ./data/app/data (Eingabe)
  • ./output/app/output (Ausgabe, optional)

Erweiterung und Wartung

Neue Export-Art hinzufügen

  1. Neues Model (z.B. ExportDepartment.java)
  2. Neuen Calculator (z.B. DepartmentCalculator.java)
  3. Neuen Exporter (z.B. DepartmentExporter.java)
  4. In GuVReportApplication integrieren

Performance-Verbesserungen

  • ISUD7821 Optimization: Verwende calculateOptimized() für große Datenmengen
  • Memory: Streaming für große ROHDATEN-Dateien
  • Parallelisierung: Potential für parallelisierte Berechnung

Migration von COBOL zu Java

Was hat sich geändert?

Besseres:

  • OOP-Struktur
  • Echte Exception-Handling
  • Moderne Testing (JUnit)
  • IDE-Support
  • Performance (JVM JIT)

⚠️ Vorsicht:

  • COBOL nutzt 1-basierte Array-Indizes
  • COBOL: Monatsindex 1-12, Java: 0-11 (konvertiert)
  • COBOL: Fixed-Size Arrays, Java: Dynamic Lists

Code-Mapping Beispiel

COBOL (ISUD7820):

PERFORM F1-SUM-MONAT VARYING ZW-I
  FROM 1 BY 1 UNTIL ZW-I > GUV-ANZAHL

F1-SUM-MONAT:
  MOVE GUV-MONAT(ZW-I) TO ZW-MONAT
  ADD GUV-ERTRAG(ZW-I) TO EXPORT-MONAT-ERTRAG(ZW-MONAT)

Java:

for (GuVData.GuVZeile zeile : guvData.getZeilen()) {
    int monat = zeile.monat;
    if (monat < 1 || monat > 12) {
        throw new IllegalArgumentException("Invalid month");
    }
    result.addMonatErtrag(monat, zeile.ertrag);
}

Troubleshooting

Problem: "EXPRTART not found"

Lösung: Vollständigen Pfad angeben

java -jar target/guv-reporting.jar ./EXPRTART ./ROHDATEN

Problem: "Ungültiger Monat"

Lösung: ROHDATEN-Format überprüfen

  • Monat muss 01-12 sein
  • Dezimaltrennzeichen überprüfen

Problem: "Maximum of 99 employees exceeded"

Lösung: EmployeeCalculator mit Optimierung nutzen

ExportMitarbeiter result = calculator.calculateOptimized(guvData);

Lizenz

Siehe Original-COBOL-Projekt

Weitere Ressourcen

  • Siehe ../isha7800/ für Original-COBOL-Code
  • Siehe ../isha7800/docs/ für detaillierte Dokumentation
  • ARCHITEKTUR.md: System-Design
  • MODULE.md: Detaillierte Modul-Beschreibungen
  • ENTWICKLER-LEITFADEN.md: Code-Standards

Kontakt

Bei Fragen zur Java-Portierung oder zum Original-System: Siehe ../isha7800/README.md


Java-Version erstellt: 2025 Basierend auf: ISHA7800 COBOL (Bohlmann/Botzet)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published