import uuid from datetime import datetime from decimal import Decimal from sqlalchemy import ForeignKey, Numeric from sqlalchemy.dialects.postgresql import TIMESTAMP, UUID from sqlalchemy.orm import Mapped, mapped_column from app.db.base import Base class Nachfuellung(Base): """Vier-Kernbegriffe (Prompt 02.9): einzige Aktion, die Objektposition.istmenge tatsächlich ändert. fehlbestand_id nullable: Schema erlaubt Nachfüllung ohne Fehlbestand-Bezug, V1 nutzt sie aber ausschließlich fehlbestand-gebunden (Prompt 21 Abschnitt 7).""" __tablename__ = "nachfuellung" id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) fehlbestand_id: Mapped[uuid.UUID | None] = mapped_column(UUID(as_uuid=True), ForeignKey("fehlbestand.id")) objekt_id: Mapped[int] = mapped_column(ForeignKey("objekt.id"), nullable=False) material_id: Mapped[int] = mapped_column(ForeignKey("material.id"), nullable=False) menge: Mapped[Decimal] = mapped_column(Numeric, nullable=False) benutzer_id: Mapped[int] = mapped_column(ForeignKey("benutzer.id"), nullable=False) zeitpunkt: Mapped[datetime] = mapped_column(TIMESTAMP(timezone=True), nullable=False)