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.
Same as validate/1 but raises Brasilex.ValidationError on error.
Types
Functions
Creates a new IE struct.
@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
Same as parse/1 but raises Brasilex.ValidationError on error.
Examples
iex> Brasilex.IE.parse!("12345")
** (Brasilex.ValidationError) Invalid length: wrong number of digits
@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
@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