# `ExVrp.Client`
[🔗](https://github.com/sephianl/ex_vrp/blob/v0.4.2/lib/ex_vrp/client.ex#L1)

Represents a client (customer) location in a VRP.

A client has coordinates, demand (delivery/pickup amounts), time windows,
service duration, and optional grouping constraints.

# `t`

```elixir
@type t() :: %ExVrp.Client{
  delivery: [non_neg_integer()],
  group: non_neg_integer() | nil,
  name: String.t(),
  pickup: [non_neg_integer()],
  prize: non_neg_integer(),
  release_time: non_neg_integer(),
  required: boolean(),
  service_duration: non_neg_integer(),
  tw_early: non_neg_integer(),
  tw_late: non_neg_integer(),
  x: number(),
  y: number()
}
```

# `new`

```elixir
@spec new(keyword()) :: t()
```

Creates a new client.

## Required Options

- `:x` - X coordinate
- `:y` - Y coordinate

## Optional Options

- `:delivery` - List of delivery amounts per dimension (default: `[0]`)
- `:pickup` - List of pickup amounts per dimension (default: `[0]`)
- `:service_duration` - Time to service this client (default: `0`)
- `:tw_early` - Earliest arrival time (default: `0`)
- `:tw_late` - Latest arrival time (default: `:infinity`)
- `:release_time` - Earliest time client becomes available (default: `0`)
- `:prize` - Prize for visiting optional client (default: `0`)
- `:required` - Whether client must be visited (default: `true`)
- `:group` - Client group index for mutual exclusivity (default: `nil`)
- `:name` - Client name for identification (default: `""`)

## Examples

    iex> ExVrp.Client.new(x: 1, y: 2, delivery: [10])
    %ExVrp.Client{x: 1, y: 2, delivery: [10], ...}

---

*Consult [api-reference.md](api-reference.md) for complete listing*
