Files
policy-service/lib/policy_service/aggregates/life_policy_application.ex
HaimKortovich b5686f890a
Some checks failed
Build and Publish / build-release (push) Failing after 38s
add life policy aggregate
2026-04-29 16:56:51 -05:00

38 lines
1.4 KiB
Elixir

defmodule PolicyService.Aggregates.LifePolicyApplication do
use PolicyService.Aggregates.PolicyApplication,
policy_type: "life",
commands: PolicyService.Commands.LifePolicy
@valid_coverage_types ~w(banking protection)
def validate_details(%{
"coverage_type" => coverage_type,
"coverage_amount" => coverage_amount,
"coverage_years" => coverage_years,
"smoker" => smoker,
"medications" => medications,
"surgeries" => surgeries,
"weight" => weight,
"height" => height
})
when is_binary(coverage_type) and byte_size(coverage_type) > 0 and
is_number(coverage_amount) and coverage_amount > 0 and
is_integer(coverage_years) and coverage_years > 0 and
is_boolean(smoker) and
is_list(medications) and
is_list(surgeries) and
is_number(weight) and weight > 0 and
is_number(height) and height > 0 do
cond do
coverage_type not in @valid_coverage_types -> {:error, :invalid_coverage_type}
coverage_years > 100 -> {:error, :invalid_coverage_years}
true -> :ok
end
end
def validate_details(_), do: {:error, :invalid_life_details}
def validate_insured(%{"type" => "corporate"}), do: {:error, :life_insurance_requires_individual}
def validate_insured(insured), do: super(insured)
end