All Downloads are FREE. Search and download functionalities are using the official Maven repository.

no.nav.sbl.soknadsosialhjelp.json.VedleggsforventningMaster Maven / Gradle / Ivy

Go to download

Definisjon av filformater som skal brukes i forbindelse med søknad for økonomisk sosialhjelp

There is a newer version: 1.2024.07.05-15.40-e5d4649f35ad
Show newest version
package no.nav.sbl.soknadsosialhjelp.json;

import no.nav.sbl.soknadsosialhjelp.soknad.JsonData;
import no.nav.sbl.soknadsosialhjelp.soknad.JsonInternalSoknad;
import no.nav.sbl.soknadsosialhjelp.soknad.JsonSoknad;
import no.nav.sbl.soknadsosialhjelp.soknad.arbeid.JsonArbeid;
import no.nav.sbl.soknadsosialhjelp.soknad.arbeid.JsonArbeidsforhold;
import no.nav.sbl.soknadsosialhjelp.soknad.bosituasjon.JsonBosituasjon;
import no.nav.sbl.soknadsosialhjelp.soknad.familie.JsonAnsvar;
import no.nav.sbl.soknadsosialhjelp.soknad.familie.JsonBarnebidrag;
import no.nav.sbl.soknadsosialhjelp.soknad.familie.JsonFamilie;
import no.nav.sbl.soknadsosialhjelp.soknad.okonomi.JsonOkonomi;
import no.nav.sbl.soknadsosialhjelp.soknad.okonomi.JsonOkonomiopplysninger;
import no.nav.sbl.soknadsosialhjelp.soknad.okonomi.JsonOkonomioversikt;
import no.nav.sbl.soknadsosialhjelp.soknad.okonomi.opplysning.JsonOkonomiOpplysningUtbetaling;
import no.nav.sbl.soknadsosialhjelp.soknad.okonomi.opplysning.JsonOkonomiOpplysningUtgift;
import no.nav.sbl.soknadsosialhjelp.soknad.okonomi.opplysning.JsonOkonomibekreftelse;
import no.nav.sbl.soknadsosialhjelp.soknad.okonomi.oversikt.JsonOkonomioversiktFormue;
import no.nav.sbl.soknadsosialhjelp.soknad.okonomi.oversikt.JsonOkonomioversiktInntekt;
import no.nav.sbl.soknadsosialhjelp.soknad.okonomi.oversikt.JsonOkonomioversiktUtgift;
import no.nav.sbl.soknadsosialhjelp.soknad.personalia.JsonPersonalia;
import no.nav.sbl.soknadsosialhjelp.vedlegg.JsonVedlegg;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import static java.time.LocalDate.now;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.BOSTOTTE_SAMTYKKE;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.FORMUE_ANNET;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.FORMUE_BRUKSKONTO;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.FORMUE_BSU;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.FORMUE_LIVSFORSIKRING;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.FORMUE_SPAREKONTO;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.FORMUE_VERDIPAPIRER;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.STUDIELAN;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTBETALING_ANNET;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTBETALING_FORSIKRING;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTBETALING_HUSBANKEN;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTBETALING_SALG;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTBETALING_SKATTEETATEN_SAMTYKKE;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTBETALING_UTBYTTE;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTGIFTER_ANDRE_UTGIFTER;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTGIFTER_ANNET_BARN;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTGIFTER_ANNET_BO;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTGIFTER_BARNEHAGE;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTGIFTER_BARN_FRITIDSAKTIVITETER;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTGIFTER_BARN_TANNREGULERING;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTGIFTER_BOLIGLAN_AVDRAG;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTGIFTER_HUSLEIE;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTGIFTER_KOMMUNAL_AVGIFT;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTGIFTER_OPPVARMING;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTGIFTER_SFO;
import static no.nav.sbl.soknadsosialhjelp.json.SoknadJsonTyper.UTGIFTER_STROM;

@SuppressWarnings("WeakerAccess")
public class VedleggsforventningMaster {

    public static List finnPaakrevdeVedlegg(JsonInternalSoknad internalSoknad) {
        final List paakrevdeVedlegg = new ArrayList<>();
        if (internalSoknad == null || internalSoknad.getSoknad() == null || internalSoknad.getSoknad().getData() == null) {
            return null;
        }
        final JsonData data = internalSoknad.getSoknad().getData();

        paakrevdeVedlegg.addAll(finnPaakrevdeVedleggForPersonalia(data.getPersonalia()));
        paakrevdeVedlegg.addAll(finnPaakrevdeVedleggForArbeid(internalSoknad));
        paakrevdeVedlegg.addAll(finnPaakrevdeVedleggForFamilie(data.getFamilie()));
        paakrevdeVedlegg.addAll(finnPaakrevdeVedleggForBosituasjon(data.getBosituasjon()));
        paakrevdeVedlegg.addAll(finnPaakrevdeVedleggForOkonomi(internalSoknad.getSoknad()));

        paakrevdeVedlegg.add(new JsonVedlegg().withType("skattemelding").withTilleggsinfo("skattemelding"));
        paakrevdeVedlegg.add(new JsonVedlegg().withType("annet").withTilleggsinfo("annet"));

        return paakrevdeVedlegg;
    }

    static List finnPaakrevdeVedleggForPersonalia(JsonPersonalia personalia) {
        List paakrevdeVedlegg = new ArrayList<>();
        if (personalia != null) {
            if (personalia.getNordiskBorger() == null || Boolean.FALSE.equals(personalia.getNordiskBorger().getVerdi())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("oppholdstillatel").withTilleggsinfo("oppholdstillatel"));
            }
        }
        return paakrevdeVedlegg;
    }

    public static List finnPaakrevdeVedleggForArbeid(JsonInternalSoknad jsonInternalSoknad) {
        List paakrevdeVedlegg = new ArrayList<>();
        JsonArbeid arbeid = jsonInternalSoknad.getSoknad().getData().getArbeid();
        boolean utbetalingerFeiletFraSkatt = jsonInternalSoknad.getSoknad().getDriftsinformasjon().getInntektFraSkatteetatenFeilet();
        boolean manglerSamtykke = !sjekkOmViHarSamtykke(jsonInternalSoknad.getSoknad().getData().getOkonomi(), UTBETALING_SKATTEETATEN_SAMTYKKE);
        if ((utbetalingerFeiletFraSkatt || manglerSamtykke) && arbeid != null && arbeid.getForhold() != null && !arbeid.getForhold().isEmpty()) {
            List alleArbeidsforhold = arbeid.getForhold();
            for (JsonArbeidsforhold arbeidsforhold : alleArbeidsforhold) {
                String tom = arbeidsforhold.getTom();
                if (tom == null || !isWithinOneMonthAheadInTime(tom)) {
                    paakrevdeVedlegg.add(new JsonVedlegg().withType("lonnslipp").withTilleggsinfo("arbeid"));
                } else if (isWithinOneMonthAheadInTime(tom)) {
                    paakrevdeVedlegg.add(new JsonVedlegg().withType("sluttoppgjor").withTilleggsinfo("arbeid"));
                }
            }
        }
        return paakrevdeVedlegg.stream()
                .distinct()
                .collect(Collectors.toList());
    }

    private static boolean sjekkOmViHarSamtykke(JsonOkonomi okonomi, String key) {
        return okonomi.getOpplysninger().getBekreftelse().stream()
                .filter(bekreftelse -> bekreftelse.getType().equals(key))
                .anyMatch(JsonOkonomibekreftelse::getVerdi);

    }

    static List finnPaakrevdeVedleggForFamilie(JsonFamilie familie) {
        List paakrevdeVedlegg = new ArrayList<>();
        if (familie != null && familie.getForsorgerplikt() != null) {
            final JsonBarnebidrag barnebidrag = familie.getForsorgerplikt().getBarnebidrag();
            if (barnebidrag != null && (JsonBarnebidrag.Verdi.BETALER.equals(barnebidrag.getVerdi())
                    || JsonBarnebidrag.Verdi.BEGGE.equals(barnebidrag.getVerdi()))) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("barnebidrag").withTilleggsinfo("betaler"));
            }
            if (barnebidrag != null && (JsonBarnebidrag.Verdi.MOTTAR.equals(barnebidrag.getVerdi())
                    || JsonBarnebidrag.Verdi.BEGGE.equals(barnebidrag.getVerdi()))) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("barnebidrag").withTilleggsinfo("mottar"));
            }
            final List forsorgerAnsvar = familie.getForsorgerplikt().getAnsvar();
            for (JsonAnsvar ansvar : forsorgerAnsvar) {
                if (ansvar.getErFolkeregistrertSammen() != null && !ansvar.getErFolkeregistrertSammen().getVerdi()) {
                    if (ansvar.getSamvarsgrad() != null && ansvar.getSamvarsgrad().getVerdi() <= 50 &&
                            ansvar.getSamvarsgrad().getVerdi() != 0) {
                        paakrevdeVedlegg.add(new JsonVedlegg().withType("samvarsavtale").withTilleggsinfo("barn"));
                        break;
                    }
                }
            }
        }
        return paakrevdeVedlegg;
    }

    static List finnPaakrevdeVedleggForBosituasjon(JsonBosituasjon bosituasjon) {
        List paakrevdeVedlegg = new ArrayList<>();
        if (bosituasjon != null && bosituasjon.getBotype() != null) {
            if (JsonBosituasjon.Botype.LEIER.equals(bosituasjon.getBotype())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("husleiekontrakt").withTilleggsinfo("husleiekontrakt"));
            } else if (JsonBosituasjon.Botype.KOMMUNAL.equals(bosituasjon.getBotype())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("husleiekontrakt").withTilleggsinfo("kommunal"));
            }
        }
        return paakrevdeVedlegg;
    }

    static List finnPaakrevdeVedleggForOkonomi(JsonSoknad soknad) {
        List paakrevdeVedlegg = new ArrayList<>();
        JsonOkonomi okonomi = soknad.getData().getOkonomi();
        if (okonomi != null) {
            final JsonOkonomiopplysninger opplysninger = okonomi.getOpplysninger();
            if (opplysninger != null) {
                if (opplysninger.getUtbetaling() != null && !opplysninger.getUtbetaling().isEmpty()) {
                    paakrevdeVedlegg.addAll(finnPaakrevdeVedleggForOkonomiOpplysningerUtbetaling(soknad));
                }
                if (opplysninger.getUtgift() != null && !opplysninger.getUtgift().isEmpty()) {
                    paakrevdeVedlegg.addAll(finnPaakrevdeVedleggForOkonomiOpplysningerUtgift(opplysninger.getUtgift()));
                }
            }

            final JsonOkonomioversikt oversikt = okonomi.getOversikt();
            if (oversikt != null) {
                if (oversikt.getInntekt() != null && !oversikt.getInntekt().isEmpty()) {
                    paakrevdeVedlegg.addAll(finnPaakrevdeVedleggForOkonomiOversiktInntekt(soknad));
                }
                if (oversikt.getUtgift() != null && !oversikt.getUtgift().isEmpty()) {
                    paakrevdeVedlegg.addAll(finnPaakrevdeVedleggForOkonomiOversiktUtgift(oversikt.getUtgift()));
                }
                if (oversikt.getFormue() != null && !oversikt.getFormue().isEmpty()) {
                    paakrevdeVedlegg.addAll(finnPaakrevdeVedleggForOkonomiOversiktFormue(oversikt.getFormue()));
                }
            }
        }
        return paakrevdeVedlegg;
    }

    static List finnPaakrevdeVedleggForOkonomiOpplysningerUtbetaling(JsonSoknad soknad) {
        List utbetalinger = soknad.getData().getOkonomi().getOpplysninger().getUtbetaling();
        List paakrevdeVedlegg = new ArrayList<>();
        for (JsonOkonomiOpplysningUtbetaling utbetaling : utbetalinger) {
            if (utbetaling == null) {
                continue;
            }
            if (UTBETALING_UTBYTTE.equals(utbetaling.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("dokumentasjon").withTilleggsinfo("utbytte"));
            } else if (UTBETALING_SALG.equals(utbetaling.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("salgsoppgjor").withTilleggsinfo("eiendom"));
            } else if (UTBETALING_FORSIKRING.equals(utbetaling.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("dokumentasjon").withTilleggsinfo("forsikringsutbetaling"));
            } else if (UTBETALING_ANNET.equals(utbetaling.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("dokumentasjon").withTilleggsinfo("annetinntekter"));
            } else if (UTBETALING_HUSBANKEN.equals(utbetaling.getType())) {
                boolean harBostotteSamtykke = sjekkOmViHarSamtykke(soknad.getData().getOkonomi(), BOSTOTTE_SAMTYKKE);
                Boolean harBostotteFeilet = soknad.getDriftsinformasjon().getStotteFraHusbankenFeilet();
                if (!harBostotteSamtykke || harBostotteFeilet) {
                    paakrevdeVedlegg.add(new JsonVedlegg().withType(UTBETALING_HUSBANKEN).withTilleggsinfo("vedtak"));
                }
            }
        }
        return paakrevdeVedlegg.stream()
                .distinct()
                .collect(Collectors.toList());
    }

    static List finnPaakrevdeVedleggForOkonomiOpplysningerUtgift(List okonomiOpplysningUtgifter) {
        List paakrevdeVedlegg = new ArrayList<>();
        for (JsonOkonomiOpplysningUtgift utgift : okonomiOpplysningUtgifter) {
            if (utgift == null) {
                continue;
            }
            if (UTGIFTER_STROM.equals(utgift.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("faktura").withTilleggsinfo("strom"));
            } else if (UTGIFTER_KOMMUNAL_AVGIFT.equals(utgift.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("faktura").withTilleggsinfo("kommunaleavgifter"));
            } else if (UTGIFTER_OPPVARMING.equals(utgift.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("faktura").withTilleggsinfo("oppvarming"));
            } else if (UTGIFTER_ANNET_BO.equals(utgift.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("dokumentasjon").withTilleggsinfo("annetboutgift"));
            } else if (UTGIFTER_BARN_FRITIDSAKTIVITETER.equals(utgift.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("faktura").withTilleggsinfo("fritidsaktivitet"));
            } else if (UTGIFTER_BARN_TANNREGULERING.equals(utgift.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("faktura").withTilleggsinfo("tannbehandling"));
            } else if (UTGIFTER_ANNET_BARN.equals(utgift.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("faktura").withTilleggsinfo("annetbarnutgift"));
            } else if (UTGIFTER_ANDRE_UTGIFTER.equals(utgift.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("annet").withTilleggsinfo("annet"));
            }
        }
        return paakrevdeVedlegg.stream()
                .distinct()
                .collect(Collectors.toList());
    }

    static List finnPaakrevdeVedleggForOkonomiOversiktInntekt(JsonSoknad soknad) {
        List paakrevdeVedlegg = new ArrayList<>();
        List okonomioversiktInntekter = soknad.getData().getOkonomi().getOversikt().getInntekt();
        for (JsonOkonomioversiktInntekt inntekt : okonomioversiktInntekter) {
            if (inntekt == null) {
                continue;
            }
            if (STUDIELAN.equals(inntekt.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("student").withTilleggsinfo("vedtak"));
            }
        }
        return paakrevdeVedlegg.stream()
                .distinct()
                .collect(Collectors.toList());
    }

    static List finnPaakrevdeVedleggForOkonomiOversiktUtgift(List okonomioversiktUtgifter) {
        List paakrevdeVedlegg = new ArrayList<>();
        for (JsonOkonomioversiktUtgift utgift : okonomioversiktUtgifter) {
            if (utgift == null) {
                continue;
            }
            if (UTGIFTER_HUSLEIE.equals(utgift.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("faktura").withTilleggsinfo("husleie"));
            } else if (UTGIFTER_BOLIGLAN_AVDRAG.equals(utgift.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("nedbetalingsplan").withTilleggsinfo("avdraglaan"));
            } else if (UTGIFTER_BARNEHAGE.equals(utgift.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("faktura").withTilleggsinfo("barnehage"));
            } else if (UTGIFTER_SFO.equals(utgift.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("faktura").withTilleggsinfo("sfo"));
            }
        }
        return paakrevdeVedlegg.stream()
                .distinct()
                .collect(Collectors.toList());
    }

    static List finnPaakrevdeVedleggForOkonomiOversiktFormue(List okonomioversiktFormuer) {
        List paakrevdeVedlegg = new ArrayList<>();
        for (JsonOkonomioversiktFormue formue : okonomioversiktFormuer) {
            if (formue == null) {
                continue;
            }
            if (FORMUE_BRUKSKONTO.equals(formue.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("kontooversikt").withTilleggsinfo("brukskonto"));
            } else if (FORMUE_BSU.equals(formue.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("kontooversikt").withTilleggsinfo("bsu"));
            } else if (FORMUE_SPAREKONTO.equals(formue.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("kontooversikt").withTilleggsinfo("sparekonto"));
            } else if (FORMUE_LIVSFORSIKRING.equals(formue.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("kontooversikt").withTilleggsinfo("livsforsikring"));
            } else if (FORMUE_VERDIPAPIRER.equals(formue.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("kontooversikt").withTilleggsinfo("aksjer"));
            } else if (FORMUE_ANNET.equals(formue.getType())) {
                paakrevdeVedlegg.add(new JsonVedlegg().withType("kontooversikt").withTilleggsinfo("annet"));
            }
        }
        return paakrevdeVedlegg.stream()
                .distinct()
                .collect(Collectors.toList());
    }

    private static boolean isWithinOneMonthAheadInTime(String datoSomTekst) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate date = LocalDate.parse(datoSomTekst, formatter);
        return date.isBefore(now().plusMonths(1).plusDays(1));
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy