Brasilex.IE (Brasilex v0.3.0)

Copy Markdown View Source

Struct and functions for State Registration (Inscrição Estadual) validation.

Fields

  • :state - The Brazilian state code as an atom (e.g., :sp, :mg)
  • :raw - The IE number with only digits (and P for SP rural)
  • :formatted - The IE number with state-specific formatting

Example

iex> {:ok, ies} = Brasilex.IE.parse("110.042.490.114")
iex> [ie] = ies
iex> ie.state
:sp
iex> ie.raw
"110042490114"
iex> ie.formatted
"110.042.490.114"

Summary

Functions

Creates a new IE struct.

Parses a State Registration (Inscrição Estadual - IE) number.

Same as parse/1 but raises Brasilex.ValidationError on error.

Validates a State Registration (Inscrição Estadual - IE) number.

Types

t()

@type t() :: %Brasilex.IE{formatted: String.t() | nil, raw: String.t(), state: atom()}

validation_error()

@type validation_error() ::
  :invalid_length | :invalid_format | :invalid_checksum | :unknown_type

Functions

new(state, raw, formatted \\ nil)

@spec new(atom(), String.t(), String.t() | nil) :: t()

Creates a new IE struct.

parse(input)

@spec parse(String.t()) :: {:ok, [t()]} | {:error, validation_error()}

Parses a State Registration (Inscrição Estadual - IE) number.

Returns all possible state matches, since some states share identical validation algorithms (e.g., AM, SC, SE all use Mod11 with weights 9-2).

Examples

# IE valid for multiple states
iex> {:ok, ies} = Brasilex.IE.parse("820000000")
iex> Enum.map(ies, & &1.state)
[:am, :sc, :se]

# IE valid for single state
iex> {:ok, [ie]} = Brasilex.IE.parse("110.042.490.114")
iex> ie.state
:sp
iex> ie.raw
"110042490114"
iex> ie.formatted
"110.042.490.114"

Parsed Fields

  • :state - The detected state as an atom (e.g., :sp, :mg)
  • :raw - The IE number with only digits
  • :formatted - The IE number with state-specific formatting

parse!(input)

@spec parse!(String.t()) :: [t()]

Same as parse/1 but raises Brasilex.ValidationError on error.

Examples

iex> Brasilex.IE.parse!("12345")
** (Brasilex.ValidationError) Invalid length: wrong number of digits

validate(input)

@spec validate(String.t()) :: :ok | {:error, validation_error()}

Validates a State Registration (Inscrição Estadual - IE) number.

The state is auto-detected based on the IE format, length, and prefix. Supports all 27 Brazilian states.

Returns :ok if valid for at least one state, or {:error, reason} if invalid.

Examples

iex> Brasilex.IE.validate("110.042.490.114")
:ok

iex> Brasilex.IE.validate("12345")
{:error, :invalid_length}

Error Reasons

  • :invalid_length - Wrong number of digits (expected 8-14)
  • :invalid_format - Contains invalid characters
  • :invalid_checksum - Check digit validation failed for all candidate states

validate!(input)

@spec validate!(String.t()) :: :ok

Same as validate/1 but raises Brasilex.ValidationError on error.

Examples

iex> Brasilex.IE.validate!("12345")
** (Brasilex.ValidationError) Invalid length: wrong number of digits