public interface IBatchService
{
    Task<CreateBatchResult> CreateAsync(
        Stream fileStream,
        string contentType,
        BatchType batchType,
        BatchTrack track,
        Guid? patientId,
        Guid? supersedesBatchId,
        Guid actorUserId);

    Task<DigitizationBatch> GetByIdAsync(Guid id);

    Task<PagedResult<DigitizationBatch>> ListAsync(
        BatchStatus? status, BatchType? batchType,
        Guid? assignedTo, BatchTrack? track,
        int page, int pageSize,
        string sortBy = "createdAt", string sortDirection = "desc");

    Task<DigitizationBatch> AssignAsync(Guid batchId, Guid entryClerkUserId, Guid actorUserId);

    Task<DigitizationBatch> CancelAsync(Guid batchId, string reason, Guid actorUserId);

    BatchStatus[] GetAllowedTransitions(BatchStatus current);
}