diff --git "a/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/Ytelse.java" "b/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/Ytelse.java" index 7931f44a..770e2169 100644 --- "a/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/Ytelse.java" +++ "b/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/Ytelse.java" @@ -19,6 +19,7 @@ import no.nav.k9.søknad.ytelse.olp.v1.Opplæringspenger; import no.nav.k9.søknad.ytelse.pls.v1.PleipengerLivetsSluttfase; import no.nav.k9.søknad.ytelse.psb.v1.PleiepengerSyktBarn; +import no.nav.k9.søknad.ytelse.ung.v1.Ungdomsytelse; @Valid @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") @@ -30,6 +31,7 @@ @JsonSubTypes.Type(name = Ytelse.PLEIEPENGER_SYKT_BARN, value = PleiepengerSyktBarn.class), @JsonSubTypes.Type(name = Ytelse.OPPLÆRINGSPENGER, value = Opplæringspenger.class), @JsonSubTypes.Type(name = Ytelse.PLEIEPENGER_LIVETS_SLUTTFASE, value = PleipengerLivetsSluttfase.class), + @JsonSubTypes.Type(name = Ytelse.UNGDOMSYTELSE, value = Ungdomsytelse.class), }) @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) public interface Ytelse { @@ -41,6 +43,7 @@ public interface Ytelse { String OPPLÆRINGSPENGER = "OPPLÆRINGSPENGER"; String PLEIEPENGER_SYKT_BARN = "PLEIEPENGER_SYKT_BARN"; String PLEIEPENGER_LIVETS_SLUTTFASE = "PLEIEPENGER_LIVETS_SLUTTFASE"; + String UNGDOMSYTELSE = "UNGDOMSYTELSE"; Ytelse.Type getType(); @@ -79,6 +82,8 @@ enum Type { OMSORGSPENGER_UTVIDETRETT_KRONISK_SYKT_BARN(Ytelse.OMSORGSPENGER_UTVIDETRETT_KRONISK_SYKT), OMSORGSPENGER_UTVIDETRETT_MIDLERTIDIG_ALENE(Ytelse.OMSORGSPENGER_UTVIDETRETT_MIDLERTIDIG_ALENE), OMSORGSPENGER_UTVIDETRETT_ALENE_OMSORG(Ytelse.OMSORGSPENGER_UTVIDETRETT_ALENE_OMSORG), + UNGDOMSYTELSE(Ytelse.UNGDOMSYTELSE), + ; @JsonValue diff --git "a/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/ung/v1/Ungdomsytelse.java" "b/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/ung/v1/Ungdomsytelse.java" new file mode 100644 index 00000000..a7979fc4 --- /dev/null +++ "b/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/ung/v1/Ungdomsytelse.java" @@ -0,0 +1,97 @@ +package no.nav.k9.søknad.ytelse.ung.v1; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import no.nav.k9.søknad.felles.Feil; +import no.nav.k9.søknad.felles.Versjon; +import no.nav.k9.søknad.felles.type.Periode; +import no.nav.k9.søknad.felles.type.Person; +import no.nav.k9.søknad.felles.validering.periode.LukketPeriode; +import no.nav.k9.søknad.ytelse.DataBruktTilUtledning; +import no.nav.k9.søknad.ytelse.Ytelse; +import no.nav.k9.søknad.ytelse.YtelseValidator; + +public class Ungdomsytelse implements Ytelse { + + @Valid + @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) + @JsonProperty(value = "søknadsperiode", required = true) + @NotNull + private List<@NotNull @LukketPeriode Periode> søknadsperiode = new ArrayList<>(); + + @Override + public Type getType() { + return Type.UNGDOMSYTELSE; + } + + @Override + public YtelseValidator getValidator(Versjon versjon) { + return new YtelseValidator() { + @Override + public List valider(Ytelse søknad) { + return List.of(); + } + }; + } + + @Override + public DataBruktTilUtledning getDataBruktTilUtledning() { + return new DataBruktTilUtledning(); + } + + @Override + public Ytelse medDataBruktTilUtledning(DataBruktTilUtledning dataBruktTilUtledning) { + return this; + } + + @Override + public List getBerørtePersoner() { + return List.of(); + } + + @Override + public Person getPleietrengende() { + return null; + } + + @Override + public Person getAnnenPart() { + return null; + } + + @Override + public Periode getSøknadsperiode() { + final List perioder = new ArrayList<>(søknadsperiode); + + final var fom = perioder + .stream() + .map(Periode::getFraOgMed) + .min(LocalDate::compareTo) + .orElseThrow(); + final var tom = perioder + .stream() + .map(Periode::getTilOgMed) + .max(LocalDate::compareTo) + .orElseThrow(); + return new Periode(fom, tom); + } + + public Ungdomsytelse medSøknadsperiode(List søknadsperiodeList) { + this.søknadsperiode.addAll(Objects.requireNonNull(søknadsperiodeList, "søknadsperiodeList")); + return this; + } + + public Ungdomsytelse medSøknadsperiode(Periode søknadsperiode) { + this.søknadsperiode.add(Objects.requireNonNull(søknadsperiode, "søknadsperiode")); + return this; + } + +} diff --git "a/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/ung/v1/UngdomsytelseS\303\270knadValidator.java" "b/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/ung/v1/UngdomsytelseS\303\270knadValidator.java" new file mode 100644 index 00000000..aec2e7a2 --- /dev/null +++ "b/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/ung/v1/UngdomsytelseS\303\270knadValidator.java" @@ -0,0 +1,38 @@ +package no.nav.k9.søknad.ytelse.ung.v1; + +import java.util.List; +import java.util.stream.Collectors; + +import jakarta.validation.Validation; +import jakarta.validation.ValidatorFactory; +import no.nav.k9.søknad.Søknad; +import no.nav.k9.søknad.SøknadValidator; +import no.nav.k9.søknad.felles.Feil; +import no.nav.k9.søknad.felles.type.Periode; +import no.nav.k9.søknad.felles.validering.AvbrytendeValideringsfeil; + +public class UngdomsytelseSøknadValidator extends SøknadValidator { + + private static final ValidatorFactory VALIDATOR_FACTORY = Validation.buildDefaultValidatorFactory(); + + @Override + public List valider(Søknad søknad) { + return List.of(); + } + + public List valider(Søknad søknad, List gyldigeEndringsperioder) { + var validate = VALIDATOR_FACTORY.getValidator().validate(søknad); + + List feil = validate.stream() + .map(Feil::toFeil) + .collect(Collectors.toList()); + + if (AvbrytendeValideringsfeil.harAvbrytendeValideringsfeil(validate)) { + return feil; + } + + validerFelterPåSøknad(søknad, feil); + return feil; + } + +}