/** * Feste Wertelisten der Akte — Rollen der Beteiligten und Arten der * Verknüpfung. * * **Ohne Abhängigkeiten.** Diese Datei wird auch im Client geladen, und die * Dienstmodule daneben ziehen den Datenbankclient nach sich. Denselben Schnitt * hat `lib/templates/fields.ts` gegenüber `schema.ts`, aus demselben Grund: * das Bündelbudget aus docs/09-performance-und-ux.md. * * Die Übersetzungen stehen in `lib/i18n/de.ts`, nicht hier: diese Namen sind * Datenbankwerte. */ export const PARTICIPANT_ROLES = [ 'LEAD', 'INVESTIGATOR', 'OBSERVER', 'WITNESS', 'SUBJECT', 'SUSPECT', 'ACCOMPLICE', ] as const export type ParticipantRoleName = (typeof PARTICIPANT_ROLES)[number] export function isParticipantRole(value: string): value is ParticipantRoleName { return (PARTICIPANT_ROLES as readonly string[]).includes(value) } /** * Wer an der Akte **arbeitet** — und nur diese drei Rollen öffnen sie auch. * * Die Beteiligtenliste beantwortet zwei ganz verschiedene Fragen: *wer bearbeitet * diesen Fall* und *um wen geht es darin*. Sie standen bisher gleichberechtigt * nebeneinander, und weil ein Beteiligter die Akte lesen darf, hätte ein * Betroffener mit Discord-Konto die Ermittlung gegen sich selbst mitlesen * können. Mit „Täter" und „Mittäter" wäre das offensichtlich falsch geworden, * es war es vorher schon. * * Deshalb: **nur Arbeitsrollen öffnen die Akte.** Zeuge, Betroffener, Täter und * Mittäter sind Angaben über den Fall, keine Berechtigung an ihm. * Siehe docs/03-auth-und-rechte.md. */ export const WORKING_ROLES = ['LEAD', 'INVESTIGATOR', 'OBSERVER'] as const export type WorkingRoleName = (typeof WORKING_ROLES)[number] /** Ob diese Rolle Zugang zur Akte verschafft. */ export function grantsCaseAccess(role: string): boolean { return (WORKING_ROLES as readonly string[]).includes(role) } export const LINK_KINDS = ['RELATED', 'SUCCESSOR', 'MERGED_INTO'] as const export type LinkKindName = (typeof LINK_KINDS)[number] export function isLinkKind(value: string): value is LinkKindName { return (LINK_KINDS as readonly string[]).includes(value) }