Karte 10: Geräte-Code für Objektpositionen (Code128-Vorbereitung) + Code-Vorschlag
CI / backend-tests (push) Successful in 1m1s
CI / frontend-build (push) Successful in 18s

objektposition.code (nullable, unique) für Geräte-Etiketten, separat von
seriennummer. Lookup-Endpunkt für Geräte-Scan (GET /objektpositionen/code/{code})
sowie Auto-Vorschlag PRAEFIX-NNN für Objekt- und Objektposition-Codes
(GET /objekte/naechster-code, GET /objektpositionen/naechster-code).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
2026-09-04 17:35:25 +02:00
co-authored by Claude Sonnet 5
parent a2877f5672
commit 69e7d0c8d0
8 changed files with 424 additions and 1 deletions
@@ -0,0 +1,32 @@
"""objektposition.code: Code128-Etikett für Geräte-Exemplare
Revision ID: 0005_add_objektposition_code
Revises: 0004_add_fach
Create Date: 2026-09-04
Konzept-Ergänzung zu Karte 10 / Prompt 09: objekt.code und material.code
identifizieren Objekt bzw. Materialart, aber bei materialtyp='geraet_sn'
identifiziert der Code das konkrete Exemplar an der Objektposition, nicht
den Materialstamm. Eigenes nullable/unique Feld, kein Umbau bestehender
Spalten (seriennummer bleibt separates Attribut).
"""
from typing import Sequence, Union
from alembic import op
revision: str = "0005_add_objektposition_code"
down_revision: Union[str, None] = "0004_add_fach"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
op.execute(
"""
ALTER TABLE objektposition ADD COLUMN code TEXT UNIQUE;
"""
)
def downgrade() -> None:
op.execute("ALTER TABLE objektposition DROP COLUMN code;")