Files
kbcrm/mistral-context.md
gg 16eaab8b64 Projektvorgaben und Strukturdokumentation aktualisiert
AGENTS.md neu angelegt: Vorgaben für TypeScript/Mithril-Entwicklung
(responsives Design via w3-auto, Formatierung längerer Attributlisten,
ClosureComponent-Muster, Datenmodelle in Client/models, REST-API-Gerüst).
ai-context/AI-operative_Vorgaben.md und mistral-context.md an die
aktuelle Projektstruktur (App_Server, Client, NGINX_Server) angepasst.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-31 18:26:47 +02:00

147 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Projekt
**kbcrm** ist eine Flask-basierte Webanwendung zur Unterstützung der Kundenakquise. Sie verwaltet Kunden, Kontakte, Projekte, Kontaktadressen (Anrufziele) und Gesprächsnotizen. Authentifizierung wird vollständig an Zitadel (OIDC-IdP) delegiert; Benutzer- und Rollendaten werden lokal in SQLite gehalten.
## Befehle
```bash
# Lokale Entwicklung
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # Zitadel-Credentials eintragen
flask db-init # Datenbankschema anlegen
flask seed-db # Testdaten mit Zitadel-User-IDs einspielen
flask run # http://localhost:5000
# Sphinx-Dokumentation
sphinx-apidoc -o docs/source/ app/
cd docs/ && make html # Ergebnis: docs/_build/html/index.html
```
## Architektur
Das Projekt besteht aus 2 Teilen:
- Die GUI, die im Browser läuft und mit Typescript und mithril.js erstellt wird
- Das Backend, welches im wesentlichen mit Python, flask und sqlalchemy entwickelt wird
Daraus ergibt sich die folgende Struktur:
```
.
├── ai-context/ # Anweisungen und Information für Mistral AI
├── App_Server/ # Enthält Alles, was auf den Server (Backend) gehört
│   ├── data/ # enthält die SQLite-Datenbanken
│   ├── Dockerfile
│   ├── root/ # Enthält alle Python-Programme
│   │   ├── approot.py
│   │   ├── auth # Enthält Programme zu Benutzerverwaltung
│   │   │   ├── model/ # Enthält die Datenmodelle der Benutzerverwaltung
│   │   │   └── routes.py
│   │   ├── config.ini
│   │   ├── db.py
│   │   ├── requirements.txt
│   │   ├── routes/ # Enthält die Route-Definitionen für Flask
│   │   ├── runserver.py
│   │   ├── settings.py
│   │   └── templates/ # enthält die Vorlagen für Jinja2
│   └── scripts/ # enthält Scripts, die im Dockjer-Container ausgeführt werden
├── Client/ # Enthält alles, was für die Browser-basierte GUI erforderlich ist
│   ├── Components/ # enthält die mit mithril.js entwickelten GUI-Komponenten
│   │   ├── auth/ # enthält die GUI-Komponenten für die Benutzer-Verwaltung
│   │   │   └── models/ # enthält die Datenmodelle für die Benutzerverwaltung
│   │   └── widgets # enthält einzelne GUI-Elemente wie Eingabefelder u.ä.,
│ │ # die dann in den Komponenten verwendet werden
│   ├── index.ts
│   ├── inireader.mjs
│   ├── node_modules/
├── docker-compose.base.yaml
├── docker-compose.dev.yaml
├── docker-compose.prod.yaml
├── docker-compose.save.yaml
├── Dokumentationen/ # enthält Dokumente, die für die Entwicklung wichtig sind
├── mistral-context.md
├── NGINX_Server/ # enthält die Konfiguration für den im Docker-Container laufenden NGINX-Server
│   ├── certs/ # enthält die Zertifikatsdateien für die SSL-Verschlüsselung
│   ├── configtemplates
│   ├── Dockerfile
│   └── html/
│   └── static/ # enthält die statischen Elemente der GUI, wie css-Dateien und Javascript-Dateien
└── README.md
```
## Datenmodell
| Tabelle | Zweck |
|---|---|
| `Benutzer` | Anwendungsnutzer; Primärschlüssel ist der Zitadel-`sub` |
| `Kunden` | Kundenstamm (Firmen oder Privatpersonen) |
| `Kontakte` | Ansprechpartner bei einem Kunden (ForeignKey → Kunden) |
| `Projekte` | Akquise-Projekte, einem Kunden zugeordnet (ForeignKey → Kunden) |
| `Benutzer_Projekt` | n:m-Zuordnung Benutzer ↔ Projekte (Zugriffskontrolle) |
| `Kontaktadressen` | Anrufziele innerhalb eines Projekts; importierbar via CSV/Excel (ForeignKey → Projekte) |
| `Gesprächsnotizen` | Anrufdokumentation mit Metadaten, Freitext und Tags (ForeignKey → Projekte, Kontaktadressen) |
| `Tags` | Benutzerdefinierte hierarchische Kategorien für Gesprächsnotizen |
| `Gesprächsnotizen_Tags` | n:m-Verknüpfung Gesprächsnotizen ↔ Tags |
## Authentifizierung & Autorisierung
- Authlib übernimmt den OIDC Authorization-Code-Flow gegen `https://id.vmlx.de`.
- Die drei Rollen (`Admin`, `Mitarbeiter`, `Kunde`) werden in Zitadel definiert und landen als Claims im Token.
- `auth.py` liest den `sub`-Wert und die Rollen aus dem Token; beim ersten Login wird der Benutzer lokal angelegt.
- Projektzugriff: Normale Benutzer sehen nur ihre zugewiesenen Projekte; Admins haben vollen Zugriff.
- Zitadel-Einrichtung (Projekt, Rollen, Testnutzer, Client-Credentials) ist in `ai-context/AI-auth-vorgaben.md` Schritt für Schritt beschrieben.
## Pflicht-Dateiheader
Jede neue Quelldatei beginnt mit einem standardisierten Header.
**Python (`.py`)** — wird von Sphinx ausgewertet:
```python
"""
<Einzeiliger Modultitel>
<Optionale längere Beschreibung.>
:author: Vorname Nachname <email@beispiel.de>
:date: YYYY-MM-DD
:version: 1.0
"""
```
**Jinja2/HTML (`.html`)**:
```html
{#
Datei: templates/beispiel.html
Autor: Vorname Nachname <email@beispiel.de>
Datum: YYYY-MM-DD
Zweck: Kurze Beschreibung der Seite und erwarteter Jinja2-Variablen
#}
```
Vorlagen liegen unter `_templates/_template.py` und `_templates/_template.html`.
## Konfiguration
Alle Laufzeitvariablen kommen aus `.env` (nie in Git einchecken):
```env
ZITADEL_CLIENT_ID=...
ZITADEL_CLIENT_SECRET=...
ZITADEL_DISCOVERY_URL=https://id.vmlx.de/.well-known/openid-configuration
SECRET_KEY=...
```
## Weitere Vorgabedokumente
Alle Dateien, die sich im Verzeichnis ai-context befinden, enthalten für das Projekt wichtige Information.
Die wichtigsten sind dabei die folgenden:
| Datei | Inhalt |
|---|---|
| `ai-context/AI-operative_Vorgaben.md` | Tech-Stack, Verzeichnisstruktur, Docker-Setup |
| `ai-context/strukturelle-vorgaben.md` | Dateiheader-Konventionen, Sphinx-Setup |
| `ai-context/AI-auth-vorgaben.md` | Zitadel-Einrichtung Schritt für Schritt |
| `ai-context/grob-kozept-vom-interview.md` | Vollständige fachliche Anforderungen und UX-Workflows |