Backend Sprint 2+3: Health-Modul, Multi-Dog Tagebuch, Pillow, Migrations
- database.py: diary_dogs + walk_participant_dogs Tabellen, idempotente Migration für Health-Felder (charge_nr, kosten, diagnose, …), Backfill - routes/health.py: vollständiges Health-Modul (war Stub), CRUD für Impfung/Entwurmung/Tierarzt/Medikament/Gewicht/Allergie/Dokument - routes/diary.py: Multi-Dog n:m via diary_dogs (dog_ids in allen Endpoints) - routes/dogs.py: Foto-Upload konvertiert HEIC/PNG/WebP → JPEG via Pillow - routes/poison.py: Resolve mit Grundauswahl + Soft-Delete (geloest_von/at/grund) - ki.py: health_summary() für KI-Gesundheitsbericht - main.py: /favicon.ico Route - requirements.txt: Pillow 11.2.1 + pillow-heif 0.22.0
This commit is contained in:
parent
96e7a97b52
commit
6f48ec581d
8 changed files with 570 additions and 52 deletions
|
|
@ -289,6 +289,71 @@ Bewerte als JSON:
|
|||
return {"plausibel": True, "typ": "unbekannt", "hinweis": description}
|
||||
|
||||
|
||||
async def health_summary(health_data: list, dog_info: dict,
|
||||
user_is_premium: bool = False) -> str:
|
||||
"""
|
||||
Tierärztliche Zusammenfassung aller Gesundheitsdaten — lokal für alle.
|
||||
Fasst Impfungen, Besuche, Medikamente etc. in einem lesbaren Bericht zusammen.
|
||||
"""
|
||||
system = (
|
||||
"Du bist ein erfahrener Veterinär-Assistent. "
|
||||
"Erstelle präzise, strukturierte Gesundheitsberichte für Hunde auf Deutsch. "
|
||||
"Weise auf fällige Impfungen und wichtige Termine hin."
|
||||
)
|
||||
|
||||
# Daten nach Typ gruppieren für den Prompt
|
||||
def _fmt(entries, typ):
|
||||
subset = [e for e in entries if e.get("typ") == typ]
|
||||
if not subset:
|
||||
return " (keine Einträge)"
|
||||
lines = []
|
||||
for e in subset[:10]: # maximal 10 pro Typ
|
||||
line = f" - {e.get('datum', '?')}: {e.get('bezeichnung', '?')}"
|
||||
if e.get("naechstes"):
|
||||
line += f" (nächste Fälligkeit: {e['naechstes']})"
|
||||
if e.get("notiz"):
|
||||
line += f" — {e['notiz']}"
|
||||
lines.append(line)
|
||||
return "\n".join(lines)
|
||||
|
||||
heute = __import__("datetime").date.today().isoformat()
|
||||
prompt = f"""
|
||||
Hund: {dog_info.get('name')}, {dog_info.get('rasse', 'unbekannt')},
|
||||
Geburtstag: {dog_info.get('geburtstag', 'unbekannt')}, Gewicht: {dog_info.get('gewicht_kg', '?')} kg
|
||||
|
||||
Heutiges Datum: {heute}
|
||||
|
||||
=== IMPFUNGEN ===
|
||||
{_fmt(health_data, 'impfung')}
|
||||
|
||||
=== ENTWURMUNG ===
|
||||
{_fmt(health_data, 'entwurmung')}
|
||||
|
||||
=== TIERARZTBESUCHE ===
|
||||
{_fmt(health_data, 'tierarzt')}
|
||||
|
||||
=== MEDIKAMENTE ===
|
||||
{_fmt(health_data, 'medikament')}
|
||||
|
||||
=== ALLERGIEN ===
|
||||
{_fmt(health_data, 'allergie')}
|
||||
|
||||
Erstelle einen strukturierten Gesundheitsbericht mit:
|
||||
1. Aktueller Status (2-3 Sätze)
|
||||
2. Fällige / überfällige Impfungen und Termine
|
||||
3. Wichtige Hinweise für den nächsten Tierarztbesuch
|
||||
4. Allgemeine Empfehlungen
|
||||
|
||||
Schreibe klar und verständlich für den Hundebesitzer.
|
||||
"""
|
||||
return await complete(
|
||||
prompt, system,
|
||||
max_tokens=700,
|
||||
requires_premium=False, # Kostenlos für alle
|
||||
user_is_premium=user_is_premium,
|
||||
)
|
||||
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Status-Endpoint (für Admin/Debug)
|
||||
# ------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue