Added main module to analize format of tax_id and define EDRPOU or ITIN

Bumped to 0.1.3
This commit is contained in:
2024-12-28 20:10:01 -05:00
parent 2fa1c94a22
commit 48672584c7
5 changed files with 114 additions and 3 deletions

View File

@@ -1,5 +1,56 @@
defmodule UkraineTaxidEx do
@itin_length UkraineTaxidEx.Itin.length()
@edrpou_length UkraineTaxidEx.Edrpou.length()
@moduledoc """
Documentation for `UkraineTaxidEx`.
"""
@doc """
`determine/1`: Takes a tax ID string and identifies its type based on length
- Returns `{:ok, UkraineTaxidEx.Itin}` for ITIN numbers
- Returns `{:ok, UkraineTaxidEx.Edrpou}` for EDRPOU numbers
- Returns an error if the length is invalid
"""
def determine(tax_id) when is_binary(tax_id) do
case String.length(tax_id) do
@itin_length -> {:ok, UkraineTaxidEx.Itin}
@edrpou_length -> {:ok, UkraineTaxidEx.Edrpou}
_ -> {:error, "Invalid tax ID length"}
end
end
@doc """
`parse/1`: Determines the tax ID type and parses it using the appropriate parser
- Uses `Module.concat` to dynamically find the correct parser module
- Returns a tuple with status, result, and type information
"""
def parse(tax_id) do
case determine(tax_id) do
{:ok, type} ->
parser = Module.concat(type, "Parser")
{status, result} = parser.parse(tax_id)
{status, result, type}
{:error, error} ->
{:error, error}
end
end
@doc """
`validate/1`: Validates a tax ID by attempting to parse it
- Returns `:ok` if valid
- Returns error tuples with details if invalid
"""
def validate(tax_id) do
case parse(tax_id) do
{:ok, _, _} -> :ok
{:error, error, type} -> {:error, error, type}
{:error, error} -> {:error, error}
end
end
end

View File

@@ -24,7 +24,7 @@ defmodule UkraineTaxidEx.BaseParser do
@impl BaseParser
@spec parse(data :: string_or_ok, options :: BaseParser.options()) :: struct_or_error()
def parse(data, options \\ [normalize?: false, clean?: false])
def parse(data, options \\ [normalize?: false, clean?: true])
def parse({:ok, string}, options), do: parse(string, options)
def parse({:error, error}, _options), do: {:error, error}