L8 Notdienst: mobile Erfassung /m/emergency in drei Schritten

Kunde suchen oder vorläufig anlegen, Einsatzort mit Ansprechpartner,
Grund mit optionaler Sprachnotiz, Beginn und Team; Start über die Sync-Op.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-14 13:12:33 +02:00
co-authored by Claude Opus 5
parent f173563424
commit ef61754a0a
6 changed files with 1276 additions and 3 deletions
+23 -3
View File
@@ -1,5 +1,25 @@
import { ModulePlaceholder } from "@/components/module-placeholder";
import { getTranslations } from "next-intl/server";
import { moduleGuard } from "@/server/action-guard";
import { can, ctxFromGuard } from "@/server/services/context";
import { emergencyTeamOptions } from "@/server/services/emergency/lookup";
import { EmergencyWizard } from "@/components/emergency/emergency-wizard";
export default function Page() {
return <ModulePlaceholder moduleKey="emergency" />;
/** `/m/emergency` — Notdienst erfassen (spec §19.2, US-010): max. 3 steps, then straight into the call-out. */
export default async function EmergencyPage() {
const ctx = ctxFromGuard(await moduleGuard("emergency")());
const t = await getTranslations("emergency.capture");
if (!can(ctx, "emergency:create") || !can(ctx, "field:execute")) {
return <p className="p-4 text-[15px]">{t("noAccess")}</p>;
}
const teams = await emergencyTeamOptions(ctx);
return (
<main className="space-y-4 p-4">
<div>
<h1 className="text-[26px]">{t("title")}</h1>
<p className="text-[15px] text-muted-foreground">{t("sub")}</p>
</div>
<EmergencyWizard teams={teams} userId={ctx.userId} />
</main>
);
}