Packages

HBCI/FinTS client library for Elixir.

Current section

Files

Jump to
fintex lib segment hitans.ex
Raw

lib/segment/hitans.ex

defmodule FinTex.Segment.HITANS do
@moduledoc false
alias FinTex.Model.TANScheme
def string_to_type(segment) when is_list(segment) do
[[_, _, v | _] | _] = segment
params_count = case v do
1 -> 11
2 -> 15
3 -> 18
4 -> 22
5 -> 22 # deviation from specification
end
[
segment |> Enum.at(0),
segment |> Enum.at(1),
segment |> Enum.at(2),
segment |> Enum.at(3),
[
segment |> Enum.at(4) |> Enum.at(0),
segment |> Enum.at(4) |> Enum.at(1),
segment |> Enum.at(4) |> Enum.at(2),
segment |> Enum.at(4) |> Enum.drop(3) |> Enum.chunk(params_count)
]
]
end
def to_tan_schemes(segment = [["HITANS", _, v = 1 | _] | _]) do
segment
|> Enum.at(4)
|> Enum.at(3)
|> Enum.map(fn method_params ->
%TANScheme{
sec_func: method_params |> Enum.at(0),
name: method_params |> Enum.at(4),
label: method_params |> Enum.at(6),
v: v
}
end)
end
def to_tan_schemes(segment = [["HITANS", _, v = 2 | _] | _]) do
segment
|> Enum.at(4)
|> Enum.at(3)
|> Enum.map(fn method_params ->
%TANScheme{
sec_func: method_params |> Enum.at(0),
name: method_params |> Enum.at(3),
label: method_params |> Enum.at(6),
v: v
}
end)
end
def to_tan_schemes(segment = [["HITANS", _, v = 3 | _] | _]) do
segment
|> Enum.at(4)
|> Enum.at(3)
|> Enum.map(fn method_params ->
%TANScheme{
sec_func: method_params |> Enum.at(0),
name: method_params |> Enum.at(3),
label: method_params |> Enum.at(6),
medium_name: case method_params |> Enum.at(16) do
"2" -> :required
_ -> nil
end,
v: v
}
end)
end
def to_tan_schemes(segment = [["HITANS", _, v = 4 | _] | _]) do
segment
|> Enum.at(4)
|> Enum.at(3)
|> Enum.map(fn method_params ->
%TANScheme{
sec_func: method_params |> Enum.at(0),
format: method_params |> Enum.at(3) |> to_format,
name: method_params |> Enum.at(5),
label: method_params |> Enum.at(8),
medium_name: case method_params |> Enum.at(20) do
"2" -> :required
_ -> nil
end,
v: v
}
end)
end
def to_tan_schemes(segment = [["HITANS", _, v = 5 | _] | _]) do
segment
|> Enum.at(4)
|> Enum.at(3)
|> Enum.map(fn method_params ->
%TANScheme{
sec_func: method_params |> Enum.at(0),
format: method_params |> Enum.at(3) |> to_format,
name: method_params |> Enum.at(5),
label: method_params |> Enum.at(8),
medium_name: case method_params |> Enum.at(19) do
"2" -> :required
_ -> nil
end,
v: v
}
end)
end
defp to_format("HHD"), do: :hhd
defp to_format("HHD-Belegung"), do: :hhd
defp to_format("HHD-Erweiterung"), do: :hhd
defp to_format(nil), do: :text
defp to_format(_), do: :text
end