Anvil.PII.Redactor (Anvil v0.1.1)
View SourceRedaction strategies for PII fields during export.
This module applies various redaction policies to field values to protect sensitive information while preserving analytical value.
Redaction Strategies
:preserve- Keep field unchanged (explicit opt-in):strip- Remove field entirely (returns nil):truncate- Truncate to first N characters:hash- Hash value (preserves uniqueness for grouping):regex_redact- Apply regex-based redaction patterns
Examples
iex> Anvil.PII.Redactor.redact("sensitive text", :strip)
nil
iex> Anvil.PII.Redactor.redact("long text here", :truncate, max_length: 10)
"long text "
iex> Anvil.PII.Redactor.redact("test@example.com", :hash)
"a7b2c3..." # SHA256 hash
Summary
Functions
Returns the default PII detection patterns.
Detects potential PII in a string value using regex patterns.
Applies a redaction policy to a field value.
Redacts a map of field values based on field metadata.
Types
@type redaction_opts() :: keyword()
@type redaction_policy() :: :preserve | :strip | :truncate | :hash | :regex_redact
Functions
Returns the default PII detection patterns.
Each pattern is a tuple of {regex, replacement_text}.
Detects potential PII in a string value using regex patterns.
Returns a list of detected PII types.
Examples
iex> Anvil.PII.Redactor.detect_pii("Contact me at test@example.com")
[:email]
iex> Anvil.PII.Redactor.detect_pii("Call 555-123-4567")
[:phone]
iex> Anvil.PII.Redactor.detect_pii("No PII here")
[]
@spec redact(any(), redaction_policy(), redaction_opts()) :: any()
Applies a redaction policy to a field value.
Options
:max_length- Maximum length for:truncatepolicy (default: 100):patterns- List of {regex, replacement} tuples for:regex_redact(default: common PII patterns):salt- Salt for hashing (default: nil)
Examples
iex> Anvil.PII.Redactor.redact("value", :preserve)
"value"
iex> Anvil.PII.Redactor.redact("value", :strip)
nil
iex> Anvil.PII.Redactor.redact("long text", :truncate, max_length: 4)
"long"
iex> Anvil.PII.Redactor.redact("test", :hash)
"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
Redacts a map of field values based on field metadata.
Parameters
payload- Map of field names to valuesfield_metadata_map- Map of field names to metadata mapsredaction_mode- Redaction mode (:none,:automatic,:aggressive)opts- Additional options passed to redaction functions
Examples
iex> payload = %{"name" => "John", "age" => 30}
iex> metadata = %{
...> "name" => %{pii: :definite, redaction_policy: :strip},
...> "age" => %{pii: :none}
...> }
iex> Anvil.PII.Redactor.redact_payload(payload, metadata, :automatic)
%{"age" => 30}