Packages

A CNAB file helper. This library aims to help your bank or cooperative read, decode, display, and perform various operations on a CNAB file. Supported operations: - Read CNAB240 file - Return some data - Get details type

Current section

Files

Jump to
ex_cnab app excnab cnab240 services calc_amout.ex
Raw

app/excnab/cnab240/services/calc_amout.ex

defmodule ExCnab.Cnab240.Services.CalcAmount do
@spec run(Map.t()) :: Integer.t()
def run(details) do
details
|> hd()
|> Map.get(:servico)
|> Map.get(:segmento)
|> calc_model(details)
end
defp calc_model("A", details) do
Enum.reduce(details, 0, fn detail, acc ->
case detail.servico.segmento == "A" do
true ->
acc + String.to_integer(detail.credito.valor_pagamento)
false ->
acc
end
end)
end
defp calc_model("J", details) do
Enum.reduce(details, 0, fn detail, acc ->
case detail.servico.segmento == "J" and !Map.has_key?(detail, :cod_reg) do
true ->
acc + String.to_integer(detail.pagamento.valor_pagamento)
false ->
acc
end
end)
end
defp calc_model("N", details) do
Enum.reduce(details, 0, fn detail, acc ->
case detail.servico.segmento == "J" do
true ->
acc + String.to_integer(detail.pagamento.valor_pagamento)
false ->
acc
end
end)
end
defp calc_model("O", details) do
Enum.reduce(details, 0, fn detail, acc ->
case detail.servico.segmento == "O" do
true ->
acc + String.to_integer(detail.pagamento.valor_pagamento)
false ->
acc
end
end)
end
end