diff --git a/backend/app/schemas/case.py b/backend/app/schemas/case.py index b459c3f..cee79ce 100644 --- a/backend/app/schemas/case.py +++ b/backend/app/schemas/case.py @@ -57,6 +57,8 @@ class CaseResponse(BaseModel): import_source: Optional[str] = None imported_at: datetime updated_at: datetime + disclosure_granted: bool = False + disclosure_expires_at: Optional[datetime] = None model_config = {"from_attributes": True} @@ -124,3 +126,18 @@ class CodingUpdate(BaseModel): ta_diagnosekorrektur: bool = False ta_unterversorgung: bool = False ta_uebertherapie: bool = False + + +SENSITIVE_FIELDS = ("nachname", "vorname", "geburtsdatum", "anrede") + + +def mask_case_for_mitarbeiter(case_dict: dict, disclosure_granted: bool = False) -> dict: + """Remove sensitive personal data fields for dak_mitarbeiter users. + + If disclosure_granted is True, the fields remain visible. + """ + if not disclosure_granted: + for field in SENSITIVE_FIELDS: + case_dict[field] = None + case_dict["disclosure_granted"] = disclosure_granted + return case_dict diff --git a/backend/app/schemas/disclosure.py b/backend/app/schemas/disclosure.py new file mode 100644 index 0000000..35fde20 --- /dev/null +++ b/backend/app/schemas/disclosure.py @@ -0,0 +1,38 @@ +"""Pydantic schemas for disclosure request endpoints.""" + +from datetime import datetime +from typing import Optional + +from pydantic import BaseModel + + +class DisclosureRequestCreate(BaseModel): + """Payload for creating a disclosure request.""" + reason: str + + +class DisclosureRequestResponse(BaseModel): + """Response for a single disclosure request.""" + id: int + case_id: int + requester_id: int + requester_username: Optional[str] = None + fall_id: Optional[str] = None + reason: str + status: str + reviewed_by: Optional[int] = None + reviewed_at: Optional[datetime] = None + expires_at: Optional[datetime] = None + created_at: datetime + + model_config = {"from_attributes": True} + + +class DisclosureRequestUpdate(BaseModel): + """Payload for approving/rejecting a disclosure request.""" + status: str # "approved" or "rejected" + + +class DisclosureCountResponse(BaseModel): + """Count of pending disclosure requests.""" + pending_count: int