# GCOutline – Spezifikation

## **Projektübersicht**

**GCOutline** ist ein webbasiertes Forderungsmanagement-Tool für ein Autohaus. Es basiert auf **Python** mit **FastAPI** als Backend, **jinja2** für Templates und **htmx** für dynamische Interaktionen. Die Datenhaltung erfolgt in einer **Microsoft SQL Server**-Datenbank. Als UI-Framework wird **CoreUI** verwendet. Die Authentifizierung und Benutzergruppensteuerung erfolgt über **LDAP**.

---

## **Technologie-Stack**

- **Backend:** Python 3.x, FastAPI
- **Frontend:** jinja2, htmx, CoreUI (HTML/CSS/JS)
- **Datenbank:** Microsoft SQL Server
- **Auth:** LDAP (Active Directory)
- **Deployment:** Docker (optional), Gunicorn/Uvicorn
- **API:** REST (JSON)

---

## **Hauptfunktionen**

### **1. Login & Berechtigungen**

- Authentifizierung über LDAP.
- Benutzergruppensteuerung (z. B. Standort, Rolle).
- Nach erfolgreichem Login: Weiterleitung zur Forderungsliste.

### **2. Forderungsliste (Offene Posten)**

- Anzeige einer Tabelle mit Forderungen:
  - Sortierung: **Standard nach Fälligkeit (aufsteigend)**.
  - Filter:
    - Standort
    - Verkäufer
    - Kunde
    - Fälligkeit (Datum)
  - Textsuche über:
    - Verkäufer
    - Kunde
    - Fahrzeug
    - Fahrgestellnummer
    - Rechnungsnummer
    - Bemerkung
- **Pagination / Infinite Scroll:**
  - Initial: 100 Einträge.
  - Beim Scrollen: dynamisches Nachladen weiterer Einträge via htmx.
- **Export-Funktion:**
  - CSV-Export.
  - Excel-Export (XLSX).

### **3. Detailansicht**

- **Eigene Seite** mit eindeutiger URI:
  - `/detail/{id}` oder `/detail/{rechnungsnummer}`
- Inhalte:
  - Rechnungsdetails (Forderung, Betrag, Fälligkeit).
  - Bereits geleistete Zahlungen.
  - Kaufhistorie des Kunden.
- Eingabefelder:
  - Bemerkung (Textfeld).
  - Wiedervorlage-Datum (Datepicker).
- Speicherung:
  - Bemerkung + Wiedervorlage in separater Tabelle mit:
    - Zeitstempel
    - Benutzer-Info (aus LDAP)
    - Verknüpfung zur Forderung.
- **Export-Funktionen auf Detailseite:**
  - Microsoft Word (DOCX) mit Template und Platzhaltern für Tabellenfelder.
  - E-Mail-Erstellung via `mailto:` mit Link zur Detailseite.
- **Navigation:**
  - Beim Verlassen der Detailseite (Speichern oder Zurück) wird die zuletzt verwendete Filterung und Sortierung wiederhergestellt.

---

## **UI/UX Anforderungen**

- **CoreUI** als Basis-Template.
- Responsive Design.
- Dropdown-Filter + Textsuche prominent.
- Infinite Scroll für Performance.
- Detailansicht als eigene Seite.
- Export-Buttons klar sichtbar.

---

## **Datenbank-Design (vereinfacht)**

### Tabellen

- **Forderungen**
  - ID (PK)
  - Kunde_ID
  - Verkäufer_ID
  - Fahrzeug
  - Fahrgestellnummer
  - Rechnungsnummer (Unique)
  - Betrag
  - Fälligkeit
  - Status
- **Kunden**
  - ID
  - Name
  - Historie
- **Zahlungen**
  - ID
  - Forderung_ID
  - Betrag
  - Datum
- **Bemerkungen**
  - ID
  - Forderung_ID
  - Benutzer
  - Bemerkung
  - Wiedervorlage_Datum
  - Zeitstempel

---

## **Sicherheitsanforderungen**

- LDAP-Authentifizierung.
- Rollenbasierte Zugriffskontrolle.
- HTTPS für alle Verbindungen.
- SQL-Injection-Schutz (ORM oder Prepared Statements).

---

## **Performance**

- Lazy Loading (htmx).
- Pagination für große Datenmengen.
- Indexierung der Filterfelder in SQL Server.

---

## **Offene Punkte**

- Word-Template: Soll ein Autohaus-Briefkopf und Platzhalter für Rechnungsdaten enthalten.
- E-Mail: Nur `mailto:`-Link mit Betreff und URL zur Detailseite.
- Logging & Monitoring: vorerst nicht erforderlich.
