EDRPOU parser fixes
This commit is contained in:
parent
f9a45fb29d
commit
0edc3c3139
|
@ -36,16 +36,39 @@ defmodule UkraineTaxidEx.Edrpou.CheckSum do
|
||||||
|
|
||||||
defguardp is_base_weights(value) when value < 30_000_000 or value > 60_000_000
|
defguardp is_base_weights(value) when value < 30_000_000 or value > 60_000_000
|
||||||
|
|
||||||
@spec weights(type :: weights_type, double_added? :: boolean()) :: C.digits()
|
@doc """
|
||||||
defp weights(type \\ :base, double_added \\ false)
|
Returns a list of weights used for EDRPOU check sum calculation.
|
||||||
defp weights(:base, false), do: Enum.to_list(1..7)
|
When double_added is true, adds 2 to each weight in the list.
|
||||||
|
|
||||||
defp weights(:alternative, false) do
|
## Parameters
|
||||||
|
- type: `:base` or `:alternative` weights pattern
|
||||||
|
- double_added: when true, adds 2 to each weight
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
```elixir
|
||||||
|
iex> weights(:base)
|
||||||
|
[1, 2, 3, 4, 5, 6, 7]
|
||||||
|
|
||||||
|
iex> weights(:alternative)
|
||||||
|
[7, 1, 2, 3, 4, 5, 6]
|
||||||
|
|
||||||
|
iex> weights(:base, true)
|
||||||
|
[3, 4, 5, 6, 7, 8, 9]
|
||||||
|
|
||||||
|
iex> weights(:alternative, true)
|
||||||
|
[9, 3, 4, 5, 6, 7, 8]
|
||||||
|
```
|
||||||
|
"""
|
||||||
|
@spec weights(type :: weights_type, double_added? :: boolean()) :: C.digits()
|
||||||
|
def weights(type \\ :base, double_added \\ false)
|
||||||
|
def weights(:base, false), do: Enum.to_list(1..7)
|
||||||
|
|
||||||
|
def weights(:alternative, false) do
|
||||||
base = weights()
|
base = weights()
|
||||||
[List.last(base) | Enum.take(base, length(base) - 1)]
|
[List.last(base) | Enum.take(base, length(base) - 1)]
|
||||||
end
|
end
|
||||||
|
|
||||||
defp weights(type, true) do
|
def weights(type, true) do
|
||||||
type
|
type
|
||||||
|> weights(false)
|
|> weights(false)
|
||||||
|> Enum.map(&(&1 + 2))
|
|> Enum.map(&(&1 + 2))
|
||||||
|
|
|
@ -21,13 +21,12 @@ defmodule UkraineTaxidEx.Edrpou.Parser do
|
||||||
| {:error,
|
| {:error,
|
||||||
:length_too_short
|
:length_too_short
|
||||||
| :length_too_long
|
| :length_too_long
|
||||||
| :invalid_length
|
|
||||||
| :invalid_checksum}
|
| :invalid_checksum}
|
||||||
|
|
||||||
@impl BaseParser
|
@impl BaseParser
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Parses an EDRPOU code string into a structured format.
|
Parses an EDRPOU code string into a structured format (clean and normalize, validate and decompose).
|
||||||
Options:
|
Options:
|
||||||
- normalize?: When true, pads string to full EDRPOU length. Defaults to false.
|
- normalize?: When true, pads string to full EDRPOU length. Defaults to false.
|
||||||
- clean?: When true, removes non-digit characters before processing. Defaults to false.
|
- clean?: When true, removes non-digit characters before processing. Defaults to false.
|
||||||
|
|
|
@ -1,6 +1,29 @@
|
||||||
defmodule UkraineTaxidEx.Edrpou.CheckSumTest do
|
defmodule UkraineTaxidEx.Edrpou.CheckSumTest do
|
||||||
use ExUnit.Case
|
use ExUnit.Case
|
||||||
alias UkraineTaxidEx.Edrpou.CheckSum
|
alias UkraineTaxidEx.Edrpou.CheckSum
|
||||||
|
doctest UkraineTaxidEx.Edrpou.Parser
|
||||||
|
|
||||||
|
describe "weights/2" do
|
||||||
|
test "returns base weights by default" do
|
||||||
|
assert CheckSum.weights() == [1, 2, 3, 4, 5, 6, 7]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "returns base weights when not added 2" do
|
||||||
|
assert CheckSum.weights(:base, false) == [1, 2, 3, 4, 5, 6, 7]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "returns alternative weights when added 2" do
|
||||||
|
assert CheckSum.weights(:alternative, false) == [7, 1, 2, 3, 4, 5, 6]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "returns base weights + 2" do
|
||||||
|
assert CheckSum.weights(:base, true) == [3, 4, 5, 6, 7, 8, 9]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "returns alternative weights + 2 " do
|
||||||
|
assert CheckSum.weights(:alternative, true) == [9, 3, 4, 5, 6, 7, 8]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "check_sum/1" do
|
describe "check_sum/1" do
|
||||||
test "calculates correct checksum for EDRPOU with base weights (< 30M) short EDRPOU with leading zeros" do
|
test "calculates correct checksum for EDRPOU with base weights (< 30M) short EDRPOU with leading zeros" do
|
||||||
|
|
|
@ -1,26 +1,3 @@
|
||||||
defmodule UkraineTaxidEx.EdrpouTest do
|
defmodule UkraineTaxidEx.EdrpouTest do
|
||||||
use ExUnit.Case
|
use ExUnit.Case
|
||||||
# alias UkraineTaxidEx.Edrpou
|
|
||||||
|
|
||||||
# describe "weights/2" do
|
|
||||||
# test "returns base weights by default" do
|
|
||||||
# assert Edrpou.weights() == [1, 2, 3, 4, 5, 6, 7]
|
|
||||||
# end
|
|
||||||
|
|
||||||
# test "returns base weights when not doubled" do
|
|
||||||
# assert Edrpou.weights(:base, false) == [1, 2, 3, 4, 5, 6, 7]
|
|
||||||
# end
|
|
||||||
|
|
||||||
# test "returns alternative weights when not doubled" do
|
|
||||||
# assert Edrpou.weights(:alternative, false) == [7, 1, 2, 3, 4, 5, 6]
|
|
||||||
# end
|
|
||||||
|
|
||||||
# test "returns doubled base weights" do
|
|
||||||
# assert Edrpou.weights(:base, true) == [2, 4, 6, 8, 10, 12, 14]
|
|
||||||
# end
|
|
||||||
|
|
||||||
# test "returns doubled alternative weights" do
|
|
||||||
# assert Edrpou.weights(:alternative, true) == [14, 2, 4, 6, 8, 10, 12]
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue