Spezialisierung je Thema: begrenzt den Umfang auf einen Ausschnitt

Drittes Feld neben Thema und Hinweisen. Hinweise fügen hinzu, die
Spezialisierung nimmt weg: Recherche, Gliederung, Kapitel und Prüfung
bekommen sie als verbindliche Grenze; nur Stoff, der dafür gebraucht
wird, Grundlagen nur soweit nötig.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
team3
2026-10-12 15:20:10 +02:00
parent efd3bc8598
commit 7538812cfd
13 changed files with 49 additions and 32 deletions

View File

@@ -29,6 +29,7 @@ app.add_middleware(GZipMiddleware, minimum_size=1000) # Buchdaten sind 1–2 MB
class ThemaNeu(BaseModel):
name: str
hinweise: str = ""
spezialisierung: str = ""
class Position(BaseModel):
@@ -67,7 +68,7 @@ def _thema_info(t: dict) -> dict | None:
if not vs:
return None
neueste = vs[-1]
return {"slug": t["slug"], "name": t["name"], "titel": t["titel"], "hinweise": t.get("hinweise", ""),
return {"slug": t["slug"], "name": t["name"], "titel": t["titel"], "hinweise": t.get("hinweise", ""), "spezialisierung": t.get("spezialisierung", ""),
"angelegt": t.get("angelegt", ""), "status": neueste["status"], "laeuft": neueste["laeuft"],
"stufe": neueste["stufe"], "versionen": vs}
@@ -83,7 +84,7 @@ async def thema_anlegen(body: ThemaNeu):
if not state.name_ok(name):
raise HTTPException(400, "Ungültiger Name")
try:
return _thema_info(state.anlegen(name, body.hinweise))
return _thema_info(state.anlegen(name, body.hinweise, body.spezialisierung))
except ValueError as e:
raise HTTPException(409, str(e))
@@ -114,7 +115,7 @@ async def zustand(slug: str, n: int):
key = _key(slug, n)
t = _thema(slug)
st = state.zustand(key)
return {"slug": slug, "name": t["name"], "version": n, "titel": t["titel"], "hinweise": t.get("hinweise", ""), **st,
return {"slug": slug, "name": t["name"], "version": n, "titel": t["titel"], "hinweise": t.get("hinweise", ""), "spezialisierung": t.get("spezialisierung", ""), **st,
"deutung": st.get("deutung") or state.deutung(key), "ereignisse": st["ereignisse"][-100:]}