# `OCSF.Classification`
[🔗](https://github.com/docjerem/ocsf/blob/v0.1.0/lib/ocsf/classification.ex#L1)

Data class taxonomy for PII classification.

Every field in an OCSF nested object struct is tagged with a **data class**
via `__ocsf_fields__/0`. Sink **policies** use these classes to decide
which fields to allow, deny, or transform during **redaction**.

## Data classes

| Class          | PII? | Default policy |
|----------------|------|----------------|
| `:identifier`  | No   | `:allow`       |
| `:tenant`      | No   | `:allow`       |
| `:taxonomic`   | No   | `:allow`       |
| `:temporal`    | No   | `:allow`       |
| `:contact`     | Yes  | `:deny`        |
| `:identity`    | Yes  | `:deny`        |
| `:network`     | No   | `:deny`        |
| `:geolocation` | No   | `:deny`        |
| `:credential`  | Yes  | `:deny`        |

See `OCSF.User`, `OCSF.Organization`, and other struct modules for
per-field classification via `__ocsf_fields__/0`.

# `data_class`

```elixir
@type data_class() ::
  :identifier
  | :tenant
  | :taxonomic
  | :temporal
  | :contact
  | :identity
  | :network
  | :geolocation
  | :credential
```

# `data_classes`

```elixir
@spec data_classes() :: [data_class()]
```

Return all valid data classes.

## Examples

    iex> OCSF.Classification.data_classes()
    [:identifier, :tenant, :taxonomic, :temporal, :contact, :identity, :network, :geolocation, :credential]

# `default_policy`

```elixir
@spec default_policy(data_class()) :: :allow | :deny
```

Return the default **sink** **policy** for a data class.

Non-sensitive classes default to `:allow`; sensitive classes default
to `:deny`.

## Examples

    iex> OCSF.Classification.default_policy(:identifier)
    :allow

    iex> OCSF.Classification.default_policy(:contact)
    :deny

# `pii?`

```elixir
@spec pii?(data_class()) :: boolean()
```

Return true if the class is classified as PII by default.

The PII classes are `:contact`, `:identity`, and `:credential`.

## Examples

    iex> OCSF.Classification.pii?(:contact)
    true

    iex> OCSF.Classification.pii?(:identity)
    true

    iex> OCSF.Classification.pii?(:identifier)
    false

---

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