package de.effigenix.domain.inventory;

/**
 * Rohe Eingabe zum Erzeugen einer StockMovement.
 * Wird vom Application Layer aus dem Command gebaut und an StockMovement.record() übergeben.
 * Das Aggregate ist verantwortlich für Validierung und VO-Konstruktion.
 *
 * @param stockId              Pflicht
 * @param articleId            Pflicht
 * @param stockBatchId         Pflicht
 * @param batchId              Pflicht – Chargen-Kennung
 * @param batchType            Pflicht – PRODUCED oder PURCHASED
 * @param movementType         Pflicht – einer der 8 MovementTypes
 * @param direction            Nur bei ADJUSTMENT Pflicht (IN/OUT), sonst ignoriert
 * @param quantityAmount       Pflicht – positiv
 * @param quantityUnit         Pflicht – UnitOfMeasure als String
 * @param reason               Pflicht bei WASTE und ADJUSTMENT, optional sonst
 * @param referenceDocumentId  Pflicht bei INTER_BRANCH_TRANSFER, optional sonst
 * @param performedBy          Pflicht – User-ID
 */
public record StockMovementDraft(
        String stockId,
        String articleId,
        String stockBatchId,
        String batchId,
        String batchType,
        String movementType,
        String direction,
        String quantityAmount,
        String quantityUnit,
        String reason,
        String referenceDocumentId,
        String performedBy
) {}
