diff --git a/Modultestplan_GruppeA.md b/Modultestplan_GruppeA.md
new file mode 100644
index 0000000..dc22bc2
--- /dev/null
+++ b/Modultestplan_GruppeA.md
@@ -0,0 +1,137 @@
+---
+title: "Modultestplan"
+subtitle: "Desktop-Fakturierungsanwendung — Gruppe A: Prozess / Dokumentenzyklus"
+author:
+ - Team 1 – Gruppe A
+version: "1.0"
+lang: de-DE
+toc: true
+toc-depth: 3
+numbersections: false
+papersize: a4
+geometry: "margin=3cm"
+fontsize: 12pt
+linestretch: 1.5
+mainfont: "Times New Roman"
+sansfont: "Arial"
+monofont: "DejaVu Sans Mono"
+header-includes: |
+ \usepackage{fancyhdr}
+ \usepackage{lastpage}
+ \pagestyle{fancy}
+ \fancyhf{}
+ \fancyhead[L]{Team 1 – Gruppe A}
+ \fancyhead[C]{Modultestplan}
+ \fancyhead[R]{Version 1.0}
+ \fancyfoot[C]{\thepage\ /\ \pageref{LastPage}}
+ \renewcommand{\headrulewidth}{0.4pt}
+ \renewcommand{\footrulewidth}{0pt}
+---
+
+\newpage
+
++-------------------------+-------------------------+-------------------------+
+| Autor | Prüfer | Freigebender |
++=========================+=========================+=========================+
+| Strubel, Lucas | Prof. Dr. Marmitt, Gerd | Prof. Dr. Marmitt, Gerd |
++-------------------------+-------------------------+-------------------------+
+| Gruppe A (Prozess) | Modulverantwortlicher | Modulverantwortlicher |
++-------------------------+-------------------------+-------------------------+
+| 15.06.2026 | 15.06.2026 | 15.06.2026 |
++-------------------------+-------------------------+-------------------------+
+
+**Freigabevermerk:** Dieses Dokument ist nach Prüfung und Freigabe durch den
+Modulverantwortlichen verbindliche Grundlage für den Modultest der Komponente
+*Prozess / Dokumentenzyklus*.
+
+## Dokumentenhistorie
+
+| Version | Datum | Autor | Grund der Änderung |
+|---------|------------|-----------------------------|---------------------|
+| 1.0 | 15.06.2026 | Lucas Strubel | Initiale Erstellung (ausgegliedert aus Pflichtenheft Gruppe A v1.2) |
+
+\newpage
+
+## 1. Einleitung
+
+### 1.1 Zweck des Dokuments
+Dieser Modultestplan spezifiziert die Modul-/Komponententests der Komponente
+*Prozess / Dokumentenzyklus* (Gruppe A). Er leitet sich direkt aus dem Pflichtenheft
+Gruppe A (ab Version 1.2) ab — insbesondere aus den funktionalen Anforderungen (Kapitel 4),
+den Daten und Schnittstellen (Kapitel 6) sowie den testbaren Abnahmekriterien (Kapitel 8) —
+und überführt diese in deterministische, mit JUnit umsetzbare Testfälle.
+
+### 1.2 Rahmenbedingungen
+Die folgenden Testfälle sind deterministisch (feste Ein-/Ausgaben) und mit JUnit 5
+umsetzbar. Geldbeträge werden als `BigDecimal` mit Scale 2 erwartet
+(`assertEquals(new BigDecimal("119.00"), …)` bzw. `compareTo`). Die Schnittstellen der
+Gruppen B (Produkte) und C (Kunden) sowie der PDF-Export werden in den Tests durch Stubs
+ersetzt.
+
+## 2. Testfälle
+
++-------+--------------------+-----------------------------+---------------------------+-----------------------------+
+| TC | Abgedeckte PH-Anf. | Vorbedingung | Eingabe | Erwartetes Ergebnis |
++=======+====================+=============================+===========================+=============================+
+| TC-01 | F-23, F-03 | Position mit Netto 100.00 | `berechne()` | Steuer = 19.00, Brutto = |
+| | | €, Steuersatz 0.19 | | 119.00 (Scale 2) |
++-------+--------------------+-----------------------------+---------------------------+-----------------------------+
+| TC-02 | F-23 | Einzelpreis 50.00 €, | Positionssumme | positionssummeNetto = |
+| | | Menge 3 | berechnen | 150.00 |
++-------+--------------------+-----------------------------+---------------------------+-----------------------------+
+| TC-03 | F-03, F-13 | Beleg mit 2 Positionen | Summen berechnen | summeNetto = 200.00, |
+| | | (150.00 € @ 0.19; | | summeSteuer = 32.00, |
+| | | 50.00 € @ 0.07) | | summeBrutto = 232.00 |
++-------+--------------------+-----------------------------+---------------------------+-----------------------------+
+| TC-04 | F-12, GR-01 | Letzte Rechnungsnummer | `naechsteNummer` | liefert `R-2026-000124` |
+| | | `R-2026-000123` | `(RECHNUNG, 2026)` | (lückenlos) |
++-------+--------------------+-----------------------------+---------------------------+-----------------------------+
+| TC-05 | F-12 (Format) | Zähler = 7, Jahr 2026 | `naechsteNummer` | liefert `R-2026-000007` |
+| | | | `(RECHNUNG, 2026)` | (führende Nullen, `String`) |
++-------+--------------------+-----------------------------+---------------------------+-----------------------------+
+| TC-06 | F-14, GR-06 | Rechnungsdatum 2026-06-09, | Rechnung erstellen | zahlungsziel = |
+| | | kein Zahlungsziel | | 2026-06-23 (+14 Tage) |
++-------+--------------------+-----------------------------+---------------------------+-----------------------------+
+| TC-07 | F-14 | Rechnungsdatum 2026-06-09, | Rechnung erstellen | zahlungsziel = 2026-07-31 |
+| | | Zahlungsziel 2026-07-31 | | (übernommen) |
++-------+--------------------+-----------------------------+---------------------------+-----------------------------+
+| TC-08 | F-24, NF-INT-01 | Rechnung im Status | `setzePosition(...)` / | wirft |
+| | | `VERSENDET` | Änderung | `IllegalStateException` |
++-------+--------------------+-----------------------------+---------------------------+-----------------------------+
+| TC-09 | F-19, F-20 | Rechnung im Status `OFFEN` | `storniere()` | Status = `STORNIERT`; |
+| | | | | nicht in |
+| | | | | `offeneRechnungen()`; |
+| | | | | `storniertAm` gesetzt |
++-------+--------------------+-----------------------------+---------------------------+-----------------------------+
+| TC-10 | F-22, GR-05 | Angebot `AN-2026-000001` | `ausAngebot(angebot)` | AB übernimmt Kunde/ |
+| | | mit Kunde + 2 Positionen | (AB erzeugen) | Positionen/Mengen; |
+| | | | | `vorgaengerNr` = |
+| | | | | `"AN-2026-000001"` |
++-------+--------------------+-----------------------------+---------------------------+-----------------------------+
+| TC-11 | F-23, F-24 | Rechnung mit Produkt @ | erste Rechnung erneut | einzelpreisNetto bleibt |
+| | | 50.00 €; danach | lesen | 50.00 (Snapshot |
+| | | Produktpreis → 80.00 € | | unverändert) |
++-------+--------------------+-----------------------------+---------------------------+-----------------------------+
+| TC-12 | F-18, NF-USE-02 | Rechnung ohne Kunde | `speichere()` | Speichern abgelehnt; |
+| | | **oder** ohne Position | | Validierungsfehler benennt |
+| | | | | fehlendes Pflichtfeld |
++-------+--------------------+-----------------------------+---------------------------+-----------------------------+
+| TC-13 | F-11, F-12, F-13 | Kunde + 1 Position | vollständige Rechnung | Rechnung gespeichert, |
+| | | vorhanden | erstellen | Nummer vergeben, alle |
+| | | | | § 14 UStG-Pflichtangaben |
+| | | | | gesetzt |
++-------+--------------------+-----------------------------+---------------------------+-----------------------------+
+
+Damit sind 13 Testfälle (> 10) spezifiziert, die alle funktionalen Kernregeln (F-12, F-14,
+F-18, F-22, F-23, F-24) sowie die zentralen Geschäftsregeln (GR-01, GR-02, GR-03, GR-05,
+GR-06) abdecken.
+
+## 3. Abkürzungen
+| Abkürzung | Bedeutung |
+|-----------|-----------|
+| TC | Testfall (Test Case) |
+| F | Funktionale Anforderung (Pflichtenheft) |
+| NF | Nicht-funktionale Anforderung (Pflichtenheft) |
+| GR | Geschäftsregel (Lastenheft) |
+| Q | Qualitätsanforderung (Lastenheft) |
+| PH | Pflichtenheft |
diff --git a/Modultestplan_GruppeA.pdf b/Modultestplan_GruppeA.pdf
new file mode 100644
index 0000000..e071a66
Binary files /dev/null and b/Modultestplan_GruppeA.pdf differ
diff --git a/Pflichtenheft_GruppeA.md b/Pflichtenheft_GruppeA.md
index f097431..c9f7f90 100644
--- a/Pflichtenheft_GruppeA.md
+++ b/Pflichtenheft_GruppeA.md
@@ -3,7 +3,7 @@ title: "Pflichtenheft"
subtitle: "Desktop-Fakturierungsanwendung — Gruppe A: Prozess / Dokumentenzyklus"
author:
- Team 1 – Gruppe A
-version: "1.1"
+version: "1.2"
lang: de-DE
toc: true
toc-depth: 3
@@ -22,7 +22,7 @@ header-includes: |
\fancyhf{}
\fancyhead[L]{Team 1 – Gruppe A}
\fancyhead[C]{Pflichtenheft}
- \fancyhead[R]{Version 1.1}
+ \fancyhead[R]{Version 1.2}
\fancyfoot[C]{\thepage\ /\ \pageref{LastPage}}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0pt}
@@ -50,6 +50,7 @@ und den Modultest der Komponente *Prozess / Dokumentenzyklus*.
|---------|------------|-----------------------------|---------------------|
| 1.0 | 09.06.2026 | Lucas Strubel | Initiale Erstellung |
| 1.1 | 13.06.2026 | Lucas Strubel | Einfügen der UML-Diagramme (Klassen- und Sequenzdiagramm) |
+| 1.2 | 15.06.2026 | Lucas Strubel | Modultestplan in eigenständiges Dokument (Modultestplan_GruppeA.md) ausgegliedert |
\newpage
@@ -61,7 +62,7 @@ Auftragnehmers, **wie** die Komponente *Prozess / Dokumentenzyklus* der
Desktop-Fakturierungsanwendung die Anforderungen des Lastenhefts (v1.3) erfüllt. Es
konkretisiert die fachlichen Anforderungen in testbare Systemanforderungen und dient als
direkte Grundlage für Design, Implementierung sowie den Komponenten- bzw. Modultestplan
-(Kapitel 10).
+(eigenständiges Dokument *Modultestplan_GruppeA.md*).
### 1.2 Ziel
Ziel dieses Pflichtenhefts ist die vollständige und testbare Spezifikation der Erzeugung,
@@ -285,7 +286,7 @@ erfolgt (Nachweis durch Netzwerk-Monitoring während eines repräsentativen Nutz
## 6. Daten und Schnittstellen
-Dieses Kapitel ist direkter Input für den Modultestplan (Kapitel 10). Datentypen werden
+Dieses Kapitel ist direkter Input für den Modultestplan (eigenständiges Dokument *Modultestplan_GruppeA.md*). Datentypen werden
bereits als Java-Typen angegeben.
### 6.1 Datenobjekte und Datentypen
@@ -368,7 +369,7 @@ exportieren (Q-08).
**Interne Schnittstellen:** Die Schnittstellen werden hier **fachlich** beschrieben
(Zweck, ausgetauschte Daten, Richtung); konkrete Methodensignaturen
-und Datentypen sind dem Komponentenentwurf bzw. dem Modultestplan (Kapitel 10) vorbehalten.
+und Datentypen sind dem Komponentenentwurf bzw. dem Modultestplan (eigenständiges Dokument *Modultestplan_GruppeA.md*) vorbehalten.
*Genutzte Schnittstellen (Komponente A ruft auf):*
@@ -529,85 +530,22 @@ Pflichtenheft-Anforderung zugeordnet.
> Beide werden von Komponente A nicht spezifiziert; der Gesamtnachweis erfolgt im team-weiten
> Anforderungsabgleich.
-## 10. Modultestplan
+## 10. Anhänge
-Die folgenden Testfälle sind deterministisch (feste Ein-/Ausgaben) und mit JUnit 5
-umsetzbar. Geldbeträge werden als `BigDecimal` mit Scale 2 erwartet
-(`assertEquals(new BigDecimal("119.00"), …)` bzw. `compareTo`).
-
-+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
-| TC | Abgedeckte PH-Anf. | Vorbedingung | Eingabe | Erwartetes Ergebnis |
-+=======+====================+=============================+===========================+=============================+
-| TC-01 | F-23, F-03 | Position mit Netto 100.00 | `berechne()` | Steuer = 19.00, Brutto = |
-| | | €, Steuersatz 0.19 | | 119.00 (Scale 2) |
-+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
-| TC-02 | F-23 | Einzelpreis 50.00 €, | Positionssumme | positionssummeNetto = |
-| | | Menge 3 | berechnen | 150.00 |
-+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
-| TC-03 | F-03, F-13 | Beleg mit 2 Positionen | Summen berechnen | summeNetto = 200.00, |
-| | | (150.00 € @ 0.19; | | summeSteuer = 32.00, |
-| | | 50.00 € @ 0.07) | | summeBrutto = 232.00 |
-+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
-| TC-04 | F-12, GR-01 | Letzte Rechnungsnummer | `naechsteNummer` | liefert `R-2026-000124` |
-| | | `R-2026-000123` | `(RECHNUNG, 2026)` | (lückenlos) |
-+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
-| TC-05 | F-12 (Format) | Zähler = 7, Jahr 2026 | `naechsteNummer` | liefert `R-2026-000007` |
-| | | | `(RECHNUNG, 2026)` | (führende Nullen, `String`) |
-+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
-| TC-06 | F-14, GR-06 | Rechnungsdatum 2026-06-09, | Rechnung erstellen | zahlungsziel = |
-| | | kein Zahlungsziel | | 2026-06-23 (+14 Tage) |
-+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
-| TC-07 | F-14 | Rechnungsdatum 2026-06-09, | Rechnung erstellen | zahlungsziel = 2026-07-31 |
-| | | Zahlungsziel 2026-07-31 | | (übernommen) |
-+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
-| TC-08 | F-24, NF-INT-01 | Rechnung im Status | `setzePosition(...)` / | wirft |
-| | | `VERSENDET` | Änderung | `IllegalStateException` |
-+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
-| TC-09 | F-19, F-20 | Rechnung im Status `OFFEN` | `storniere()` | Status = `STORNIERT`; |
-| | | | | nicht in |
-| | | | | `offeneRechnungen()`; |
-| | | | | `storniertAm` gesetzt |
-+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
-| TC-10 | F-22, GR-05 | Angebot `AN-2026-000001` | `ausAngebot(angebot)` | AB übernimmt Kunde/ |
-| | | mit Kunde + 2 Positionen | (AB erzeugen) | Positionen/Mengen; |
-| | | | | `vorgaengerNr` = |
-| | | | | `"AN-2026-000001"` |
-+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
-| TC-11 | F-23, F-24 | Rechnung mit Produkt @ | erste Rechnung erneut | einzelpreisNetto bleibt |
-| | | 50.00 €; danach | lesen | 50.00 (Snapshot |
-| | | Produktpreis → 80.00 € | | unverändert) |
-+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
-| TC-12 | F-18, NF-USE-02 | Rechnung ohne Kunde | `speichere()` | Speichern abgelehnt; |
-| | | **oder** ohne Position | | Validierungsfehler benennt |
-| | | | | fehlendes Pflichtfeld |
-+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
-| TC-13 | F-11, F-12, F-13 | Kunde + 1 Position | vollständige Rechnung | Rechnung gespeichert, |
-| | | vorhanden | erstellen | Nummer vergeben, alle |
-| | | | | § 14 UStG-Pflichtangaben |
-| | | | | gesetzt |
-+-------+--------------------+-----------------------------+---------------------------+-----------------------------+
-
-Damit sind 13 Testfälle (> 10) spezifiziert, die alle funktionalen Kernregeln (F-12, F-14,
-F-18, F-22, F-23, F-24) sowie die zentralen Geschäftsregeln (GR-01, GR-02, GR-03, GR-05,
-GR-06) abdecken.
-
-## 11. Anhänge
-
-### 11.1 Abkürzungen
+### 10.1 Abkürzungen
| Abkürzung | Bedeutung |
|-----------|-----------|
| F | Funktionale Anforderung (Pflichtenheft) |
| NF | Nicht-funktionale Anforderung (Pflichtenheft) |
| IF | Schnittstelle (Interface) |
| AC | Abnahmekriterium |
-| TC | Testfall (Test Case) |
| BA | Benutzeranforderung (Lastenheft) |
| GR | Geschäftsregel (Lastenheft) |
| Q | Qualitätsanforderung (Lastenheft) |
| SRS | System Requirements Specification (Pflichtenheft) |
-### 11.2 Glossar
+### 10.2 Glossar
Es gilt das Glossar des Lastenhefts (§ 8.1) unverändert.
-### 11.3 Referenzen
+### 10.3 Referenzen
Siehe Kapitel 1.5.
diff --git a/Pflichtenheft_GruppeA.pdf b/Pflichtenheft_GruppeA.pdf
index f5a92e4..16316ac 100644
Binary files a/Pflichtenheft_GruppeA.pdf and b/Pflichtenheft_GruppeA.pdf differ
diff --git a/pom.xml b/pom.xml
index ceefd1a..1f9c053 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,7 +51,7 @@
3.6
-
+
org.junit.jupiter
junit-jupiter
diff --git a/src/test/java/de/team1/faktura/dokumente/DokumentzyklusTest.java b/src/test/java/de/team1/faktura/dokumente/DokumentzyklusTest.java
index 5daafaa..ca78f31 100644
--- a/src/test/java/de/team1/faktura/dokumente/DokumentzyklusTest.java
+++ b/src/test/java/de/team1/faktura/dokumente/DokumentzyklusTest.java
@@ -24,7 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
- * Modultestplan Gruppe A (Pflichtenheft A, Kapitel 10): TC-01 bis TC-13.
+ * Modultestplan Gruppe A (separates Dokument Modultestplan_GruppeA.md): TC-01 bis TC-13.
* Die Schnittstellen der Gruppen B und C werden durch Stubs ersetzt,
* der PDF-Export durch einen No-Op-Stub.
*/