Ablauf/Charge/SN gehören zur Kontroll-Erfassung, nicht nur zur Admin-Pflege
CI / backend-tests (push) Successful in 54s
CI / frontend-build (push) Successful in 18s

Nutzer-Vorgabe: "Ablauf/Charge/SN gehört mit zu den Kontrollen wie auch die
Menge". PUT .../positionen/{material_id} akzeptiert jetzt optional
ablaufdatum/chargennummer/seriennummer und schreibt sie auf die
Objektposition (Vier-Kernbegriffe bleiben unberührt: nur diese drei Felder,
niemals istmenge - das bleibt exklusiv Nachfüllung vorbehalten). Offline-
Queue und PositionCard erweitert: Felder erscheinen nur passend zum
Materialtyp (ablauf_charge -> Datum+Charge, geraet_sn -> SN). Admin-Panel
(ObjektPositionenPanel) bleibt zusätzlich für nachträgliche Korrekturen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
This commit is contained in:
2026-09-04 01:11:17 +02:00
co-authored by Claude Sonnet 5
parent a6e68b0a94
commit 0988f8d026
8 changed files with 138 additions and 18 deletions
+23 -3
View File
@@ -11,7 +11,13 @@ const store = createStore("mabea-offline-queue", "kontrollpositionen");
export type QueueStatus = "wartet" | "wird_uebertragen" | "fehler";
export interface QueueItem {
export interface ZusatzErfassung {
ablaufdatum?: string | null;
chargennummer?: string | null;
seriennummer?: string | null;
}
export interface QueueItem extends ZusatzErfassung {
key: string; // `${kontrolleId}:${materialId}`
kontrolleId: string;
materialId: number;
@@ -25,13 +31,19 @@ function keyFor(kontrolleId: string, materialId: number): string {
return `${kontrolleId}:${materialId}`;
}
export async function enqueue(kontrolleId: string, materialId: number, istmenge: string): Promise<void> {
export async function enqueue(
kontrolleId: string,
materialId: number,
istmenge: string,
zusatz: ZusatzErfassung = {}
): Promise<void> {
const key = keyFor(kontrolleId, materialId);
const item: QueueItem = {
key,
kontrolleId,
materialId,
istmenge,
...zusatz,
status: "wartet",
fehlerText: null,
fehlbestandId: null,
@@ -63,7 +75,15 @@ async function sendeEintrag(item: QueueItem): Promise<void> {
try {
const ergebnis = await apiRequest<Kontrollposition>(
`/kontrollen/${item.kontrolleId}/positionen/${item.materialId}`,
{ method: "PUT", body: { istmenge: item.istmenge } }
{
method: "PUT",
body: {
istmenge: item.istmenge,
ablaufdatum: item.ablaufdatum ?? null,
chargennummer: item.chargennummer ?? null,
seriennummer: item.seriennummer ?? null,
},
}
);
// Erfolgreich übertragen (idempotent - ein erneutes Senden desselben Werts
// durch die Queue vor einem Absturz führt zu keinem doppelten Fehlbestand,