# `DpExchange.Core.Types.Filing`
[🔗](https://github.com/DistortionPoint/dp-exchange-core/blob/v0.3.120/lib/dp_exchange/core/types/filing.ex#L1)

A regulatory filing the venue points at.

## This interface points; it does not fetch

`:url` is where the document lives. **This package never follows it.** A filing is a large
document on a third party's server, and fetching it is a decision with its own timeouts,
rate limits and failure modes that belongs to whoever wants the contents — not to a venue
interface relaying an index.

## `:form_type` is the regulator's word, not a normalised one

`"10-K"`, `"8-K"`, `"6-K"`, `"20-F"` mean specific things and do not map onto a small set
of atoms without losing which one it was. The string is carried as the venue sent it.

# `t`

```elixir
@type t() :: %DpExchange.Core.Types.Filing{
  filed_at: DateTime.t() | nil,
  form_type: String.t() | nil,
  id: String.t() | nil,
  period_end: Date.t() | nil,
  provider: atom(),
  symbol: String.t(),
  title: String.t() | nil,
  url: String.t() | nil
}
```

# `new`

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

Builds a `t:t/0`, failing closed if a required field is absent or `nil`.

`@enforce_keys` guards presence, not `nil` — see `DpExchange.Core.Types.Validate`.

Also raises on a `:period_end` that is not a `Date` (it is the day the period ends, with no
instant).

---

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