# `Accrue.Entitlements.Source`
[🔗](https://github.com/szTheory/accrue/blob/accrue-v1.5.1/lib/accrue/entitlements/source.ex#L1)

Closed, inspection-only entitlement-source contract.

This boundary describes which rail owns an entitlement operation. It never
delegates to `Accrue.Processor` and it does not perform billing mutations.

# `capability`

```elixir
@type capability() ::
  :observation | :control | :restore | :reconciliation | :management | :offline
```

# `source`

```elixir
@type source() :: :stripe | :apple | :host_fake
```

# `state`

```elixir
@type state() ::
  :supported
  | :externally_managed
  | :host_owned
  | :deferred
  | :unavailable
  | :feasibility_blocked
```

# `outcome`

```elixir
@callback outcome(capability()) ::
  {:ok, Accrue.Entitlements.Source.Outcome.t()} | {:error, Exception.t()}
```

# `capabilities`

```elixir
@spec capabilities() :: [capability()]
```

# `states`

```elixir
@spec states() :: [state()]
```

---

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