diff --git a/backend/app/api/cases.py b/backend/app/api/cases.py index 14e1208..53bc153 100644 --- a/backend/app/api/cases.py +++ b/backend/app/api/cases.py @@ -340,6 +340,49 @@ def set_case_icd( return case +# --------------------------------------------------------------------------- +# KVNR update +# --------------------------------------------------------------------------- + + +@router.put("/{case_id}/kvnr", response_model=CaseResponse) +def set_case_kvnr( + case_id: int, + payload: dict, + request: Request, + db: Session = Depends(get_db), + user: User = Depends(get_current_user), +): + """Update the KVNR for a case. Accessible to both admin and dak_mitarbeiter.""" + case = db.query(Case).filter(Case.id == case_id).first() + if not case: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="Case not found", + ) + + old_kvnr = case.kvnr + new_kvnr = payload.get("kvnr") + case.kvnr = new_kvnr + case.updated_by = user.id + db.commit() + db.refresh(case) + + log_action( + db, + user_id=user.id, + action="kvnr_updated", + entity_type="case", + entity_id=case.id, + old_values={"kvnr": old_kvnr}, + new_values={"kvnr": new_kvnr}, + ip_address=request.client.host if request.client else None, + user_agent=request.headers.get("user-agent"), + ) + + return case + + # --------------------------------------------------------------------------- # Coding (Gutachten classification) # --------------------------------------------------------------------------- diff --git a/frontend/src/pages/CasesPage.tsx b/frontend/src/pages/CasesPage.tsx index 1a541a4..cc66288 100644 --- a/frontend/src/pages/CasesPage.tsx +++ b/frontend/src/pages/CasesPage.tsx @@ -311,16 +311,36 @@ function CaseDetail({ onIcdSaved: (updated: Case) => void }) { const [icdValue, setIcdValue] = useState(caseData.icd || '') + const [kvnrValue, setKvnrValue] = useState(caseData.kvnr || '') const [saving, setSaving] = useState(false) + const [savingKvnr, setSavingKvnr] = useState(false) const [error, setError] = useState('') const [success, setSuccess] = useState(false) + const [kvnrSuccess, setKvnrSuccess] = useState(false) // Reset on case change useEffect(() => { setIcdValue(caseData.icd || '') + setKvnrValue(caseData.kvnr || '') setError('') setSuccess(false) - }, [caseData.id, caseData.icd]) + setKvnrSuccess(false) + }, [caseData.id, caseData.icd, caseData.kvnr]) + + const saveKvnr = async () => { + setSavingKvnr(true) + setError('') + setKvnrSuccess(false) + try { + const res = await api.put(`/cases/${caseData.id}/kvnr`, { kvnr: kvnrValue.trim() || null }) + onIcdSaved(res.data) + setKvnrSuccess(true) + } catch { + setError('Fehler beim Speichern der KVNR.') + } finally { + setSavingKvnr(false) + } + } const saveIcd = async () => { if (!icdValue.trim()) return @@ -361,7 +381,29 @@ function CaseDetail({ - +
+ +
+ { setKvnrValue(e.target.value); setKvnrSuccess(false) }} + placeholder="z.B. A123456789" + className="flex-1 font-mono" + /> + +
+ {kvnrSuccess && ( +

KVNR gespeichert.

+ )} +