# ListSerialNumbers

## Overview

ListSerialNumbers lists serial numbers filtered by item, storage location, or status. It supports recall execution, warehouse counting, and serial-tracked inventory browsing. At least one filter must be provided.

## Business Rules

- Accepts optional filters (at least one required):
  - `itemId` — filter by specific item
  - `storageLocationId` — filter by specific storage location
  - `status` — filter by serial number status (AVAILABLE, ISSUED, RETURNED, SCRAPPED)
- Returns a list of SerialNumber records, each with current status and storage location
- Supports pagination via `limit` and `offset` parameters; returns `hasNextPage` to indicate more results
- Returns an empty list if no matching records exist

## Process Flow

```mermaid
flowchart TD
    A[Receive filter criteria] --> B{At least one filter provided?}
    B -->|No| C[Return error: NO_FILTER_PROVIDED]
    B -->|Yes| D[Build query with provided filters]
    D --> E[SELECT from SerialNumber where filters match]
    E --> F{Records found?}
    F -->|Yes| G[Return list of SerialNumber records]
    F -->|No| H[Return empty list]
```

## External Dependencies

- None

## Error Scenarios

- **NO_FILTER_PROVIDED**: At least one filter must be specified
- Returns empty list if no matching records exist

## Test Cases

- lists serial numbers by item
- lists serial numbers by storage location
- lists serial numbers by status
- combines multiple filters
- returns empty list when no matches
- returns error when no filter is provided
