diff --git a/.deploy/dev-fss-teamforeldrepenger.yaml b/.deploy/dev-fss-teamforeldrepenger.yaml index 08cd4da42..6c507f2c1 100644 --- a/.deploy/dev-fss-teamforeldrepenger.yaml +++ b/.deploy/dev-fss-teamforeldrepenger.yaml @@ -106,3 +106,6 @@ spec: value: api://dev-fss.tbd.spokelse/.default - name: SPOKELSE_GRUNNLAG_URL value: http://spokelse.tbd/grunnlag + + - name: SKAL_INNENTE_YTELSE_ANVIST_ANDELER + value: true diff --git a/.deploy/prod-fss-teamforeldrepenger.yaml b/.deploy/prod-fss-teamforeldrepenger.yaml index 7ccba5503..2151a4ca2 100644 --- a/.deploy/prod-fss-teamforeldrepenger.yaml +++ b/.deploy/prod-fss-teamforeldrepenger.yaml @@ -105,3 +105,6 @@ spec: value: api://prod-fss.tbd.spokelse/.default - name: SPOKELSE_GRUNNLAG_URL value: http://spokelse.tbd/grunnlag + + - name: SKAL_INNENTE_YTELSE_ANVIST_ANDELER + value: false diff --git a/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/YtelseAnvist.java b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/YtelseAnvist.java index b4ea9c9b0..c0a3a05d7 100644 --- a/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/YtelseAnvist.java +++ b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/YtelseAnvist.java @@ -1,8 +1,10 @@ package no.nav.foreldrepenger.abakus.domene.iay; import java.time.LocalDate; +import java.util.LinkedHashSet; import java.util.Objects; import java.util.Optional; +import java.util.Set; import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverrides; @@ -14,6 +16,7 @@ import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Version; @@ -37,6 +40,10 @@ public class YtelseAnvist extends BaseEntitet implements IndexKey { @JoinColumn(name = "ytelse_id", nullable = false, updatable = false, unique = true) private Ytelse ytelse; + @OneToMany(mappedBy = "ytelseAnvist") + @ChangeTracked + private Set ytelseAnvistAndeler = new LinkedHashSet<>(); + @Embedded @ChangeTracked private IntervallEntitet anvistPeriode; @@ -117,6 +124,16 @@ public void setYtelse(Ytelse ytelse) { this.ytelse = ytelse; } + public Set getYtelseAnvistAndeler() { + return ytelseAnvistAndeler; + } + + void leggTilYtelseAnvistAndel(YtelseAnvistAndel ytelseAnvistAndel) { + ytelseAnvistAndel.setYtelseAnvist(this); + this.ytelseAnvistAndeler.add(ytelseAnvistAndel); + + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/YtelseAnvistAndel.java b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/YtelseAnvistAndel.java new file mode 100644 index 000000000..49d76020d --- /dev/null +++ b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/YtelseAnvistAndel.java @@ -0,0 +1,177 @@ +package no.nav.foreldrepenger.abakus.domene.iay; + +import java.util.Objects; +import java.util.Optional; + +import javax.persistence.AttributeOverride; +import javax.persistence.AttributeOverrides; +import javax.persistence.Column; +import javax.persistence.Convert; +import javax.persistence.Embedded; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.persistence.Version; + +import no.nav.abakus.iaygrunnlag.kodeverk.IndexKey; +import no.nav.abakus.iaygrunnlag.kodeverk.Inntektskategori; +import no.nav.foreldrepenger.abakus.felles.diff.ChangeTracked; +import no.nav.foreldrepenger.abakus.felles.diff.IndexKeyComposer; +import no.nav.foreldrepenger.abakus.felles.jpa.BaseEntitet; +import no.nav.foreldrepenger.abakus.typer.Beløp; +import no.nav.foreldrepenger.abakus.typer.InternArbeidsforholdRef; +import no.nav.foreldrepenger.abakus.typer.Stillingsprosent; +import no.nav.foreldrepenger.abakus.vedtak.domene.InntektskategoriKodeverdiConverter; + + +@Entity(name = "YtelseAnvistAndel") +@Table(name = "IAY_YTELSE_ANVIST_ANDEL") +public class YtelseAnvistAndel extends BaseEntitet implements IndexKey { + + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_IAY_YTELSE_ANVIST_ANDEL") + private Long id; + + @ManyToOne(optional = false) + @JoinColumn(name = "ytelse_anvist_id", nullable = false, updatable = false, unique = true) + private YtelseAnvist ytelseAnvist; + + @Embedded + @ChangeTracked + private Arbeidsgiver arbeidsgiver; + + @Embedded + private InternArbeidsforholdRef arbeidsforholdRef; + + @Embedded + @AttributeOverrides(@AttributeOverride(name = "verdi", column = @Column(name = "dagsats", nullable = false))) + @ChangeTracked + private Beløp dagsats; + + @Embedded + @AttributeOverrides(@AttributeOverride(name = "verdi", column = @Column(name = "utbetalingsgrad_prosent"))) + @ChangeTracked + private Stillingsprosent utbetalingsgradProsent; + + @Embedded + @AttributeOverrides(@AttributeOverride(name = "verdi", column = @Column(name = "refusjonsgrad_prosent"))) + @ChangeTracked + private Stillingsprosent refusjonsgradProsent; + + @Convert(converter = InntektskategoriKodeverdiConverter.class) + @Column(name = "inntektskategori", nullable = false, updatable = false) + private Inntektskategori inntektskategori = Inntektskategori.UDEFINERT; + + + @Version + @Column(name = "versjon", nullable = false) + private long versjon; + + public YtelseAnvistAndel() { + // hibernate + } + + public YtelseAnvistAndel(YtelseAnvistAndel ytelseAnvistAndel) { + ytelseAnvistAndel.getArbeidsgiver().ifPresent(this::setArbeidsgiver); + this.dagsats = ytelseAnvistAndel.getDagsats(); + this.inntektskategori = ytelseAnvistAndel.getInntektskategori(); + this.refusjonsgradProsent = ytelseAnvistAndel.getRefusjonsgradProsent(); + this.utbetalingsgradProsent = ytelseAnvistAndel.getUtbetalingsgradProsent(); + this.arbeidsforholdRef = ytelseAnvistAndel.getArbeidsforholdRef(); + } + + public Optional getArbeidsgiver() { + return Optional.ofNullable(arbeidsgiver); + } + + void setArbeidsgiver(Arbeidsgiver arbeidsgiver) { + this.arbeidsgiver = arbeidsgiver; + } + + + public InternArbeidsforholdRef getArbeidsforholdRef() { + return arbeidsforholdRef; + } + + void setArbeidsforholdRef(InternArbeidsforholdRef arbeidsforholdRef) { + this.arbeidsforholdRef = arbeidsforholdRef; + } + + public Beløp getDagsats() { + return dagsats; + } + + void setDagsats(Beløp dagsats) { + this.dagsats = dagsats; + } + + public Stillingsprosent getUtbetalingsgradProsent() { + return utbetalingsgradProsent; + } + + void setUtbetalingsgradProsent(Stillingsprosent utbetalingsgradProsent) { + this.utbetalingsgradProsent = utbetalingsgradProsent; + } + + public Stillingsprosent getRefusjonsgradProsent() { + return refusjonsgradProsent; + } + + void setRefusjonsgradProsent(Stillingsprosent refusjonsgradProsent) { + this.refusjonsgradProsent = refusjonsgradProsent; + } + + void setYtelseAnvist(YtelseAnvist ytelseAnvist) { + this.ytelseAnvist = ytelseAnvist; + } + + public Inntektskategori getInntektskategori() { + return inntektskategori; + } + + void setInntektskategori(Inntektskategori inntektskategori) { + this.inntektskategori = inntektskategori; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + YtelseAnvistAndel that = (YtelseAnvistAndel) o; + return ytelseAnvist.equals(that.ytelseAnvist) && Objects.equals(arbeidsgiver, that.arbeidsgiver) && + dagsats.equals(that.dagsats) && + inntektskategori == that.inntektskategori && + utbetalingsgradProsent.equals(that.utbetalingsgradProsent) && + refusjonsgradProsent.equals(that.refusjonsgradProsent); + } + + @Override + public int hashCode() { + return Objects.hash(ytelseAnvist, arbeidsgiver, dagsats, inntektskategori, utbetalingsgradProsent, refusjonsgradProsent); + } + + @Override + public String toString() { + return "YtelseAnvistAndel{" + + "id=" + id + + ", ytelseAnvist=" + ytelseAnvist + + ", arbeidsgiver=" + arbeidsgiver + + ", arbeidsforholdRef=" + arbeidsforholdRef + + ", dagsats=" + dagsats + + ", utbetalingsgradProsent=" + utbetalingsgradProsent + + ", refusjonsgradProsent=" + refusjonsgradProsent + + ", inntektskategori=" + inntektskategori + + ", versjon=" + versjon + + '}'; + } + + @Override + public String getIndexKey() { + Object[] keyParts = { arbeidsgiver, dagsats, inntektskategori, utbetalingsgradProsent, refusjonsgradProsent }; + return IndexKeyComposer.createKey(keyParts); + } +} diff --git a/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/YtelseAnvistAndelBuilder.java b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/YtelseAnvistAndelBuilder.java new file mode 100644 index 000000000..1bf664564 --- /dev/null +++ b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/YtelseAnvistAndelBuilder.java @@ -0,0 +1,66 @@ +package no.nav.foreldrepenger.abakus.domene.iay; + +import java.math.BigDecimal; + +import no.nav.abakus.iaygrunnlag.kodeverk.Inntektskategori; +import no.nav.foreldrepenger.abakus.typer.Beløp; +import no.nav.foreldrepenger.abakus.typer.InternArbeidsforholdRef; +import no.nav.foreldrepenger.abakus.typer.Stillingsprosent; + +public class YtelseAnvistAndelBuilder { + private final YtelseAnvistAndel ytelseAnvistAndel; + + YtelseAnvistAndelBuilder(YtelseAnvistAndel ytelseAnvistAndel) { + this.ytelseAnvistAndel = ytelseAnvistAndel; + } + + public static YtelseAnvistAndelBuilder ny() { + return new YtelseAnvistAndelBuilder(new YtelseAnvistAndel()); + } + + public YtelseAnvistAndelBuilder medDagsats(BigDecimal dagsats) { + if (dagsats != null) { + this.ytelseAnvistAndel.setDagsats(new Beløp(dagsats)); + } + return this; + } + + public YtelseAnvistAndelBuilder medUtbetalingsgrad(BigDecimal verdi) { + if (verdi != null) { + this.ytelseAnvistAndel.setUtbetalingsgradProsent(new Stillingsprosent(verdi)); + } + return this; + } + + public YtelseAnvistAndelBuilder medRefusjonsgrad(BigDecimal verdi) { + if (verdi != null) { + this.ytelseAnvistAndel.setRefusjonsgradProsent(new Stillingsprosent(verdi)); + } + return this; + } + + public YtelseAnvistAndelBuilder medArbeidsgiver(Arbeidsgiver arbeidsgiver) { + if (arbeidsgiver != null) { + this.ytelseAnvistAndel.setArbeidsgiver(arbeidsgiver); + } + return this; + } + + public YtelseAnvistAndelBuilder medArbeidsforholdRef(InternArbeidsforholdRef arbeidsforholdRef) { + this.ytelseAnvistAndel.setArbeidsforholdRef(arbeidsforholdRef); + return this; + } + + + public YtelseAnvistAndelBuilder medInntektskategori(Inntektskategori inntektskategori) { + if (inntektskategori != null) { + this.ytelseAnvistAndel.setInntektskategori(inntektskategori); + } + return this; + } + + public YtelseAnvistAndel build() { + return ytelseAnvistAndel; + } + +} diff --git a/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/YtelseAnvistBuilder.java b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/YtelseAnvistBuilder.java index bd306aad7..594f40f6c 100644 --- a/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/YtelseAnvistBuilder.java +++ b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/YtelseAnvistBuilder.java @@ -43,6 +43,12 @@ public YtelseAnvistBuilder medUtbetalingsgradProsent(BigDecimal utbetalingsgradP return this; } + public YtelseAnvistBuilder leggTilYtelseAnvistAndel(YtelseAnvistAndel ytelseAnvistAndel) { + this.ytelseAnvist.leggTilYtelseAnvistAndel(ytelseAnvistAndel); + return this; + } + + public YtelseAnvist build() { return ytelseAnvist; } diff --git a/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/DefaultIAYRegisterInnhentingTjenesteImpl.java b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/DefaultIAYRegisterInnhentingTjenesteImpl.java index 74e5df95b..f637a94a3 100644 --- a/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/DefaultIAYRegisterInnhentingTjenesteImpl.java +++ b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/DefaultIAYRegisterInnhentingTjenesteImpl.java @@ -31,12 +31,12 @@ public DefaultIAYRegisterInnhentingTjenesteImpl(InntektArbeidYtelseTjeneste innt VirksomhetTjeneste virksomhetTjeneste, InnhentingSamletTjeneste innhentingSamletTjeneste, AktørTjeneste aktørConsumer, - SigrunTjeneste sigrunTjeneste, VedtakYtelseRepository vedtakYtelseRepository) { + SigrunTjeneste sigrunTjeneste, VedtattYtelseInnhentingTjeneste vedtattYtelseInnhentingTjeneste) { super(inntektArbeidYtelseTjeneste, virksomhetTjeneste, innhentingSamletTjeneste, aktørConsumer, - sigrunTjeneste, vedtakYtelseRepository); + sigrunTjeneste, vedtattYtelseInnhentingTjeneste); } @Override diff --git a/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/IAYRegisterInnhentingFellesTjenesteImpl.java b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/IAYRegisterInnhentingFellesTjenesteImpl.java index 35c9e556b..eca240407 100644 --- a/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/IAYRegisterInnhentingFellesTjenesteImpl.java +++ b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/IAYRegisterInnhentingFellesTjenesteImpl.java @@ -78,13 +78,14 @@ protected IAYRegisterInnhentingFellesTjenesteImpl(InntektArbeidYtelseTjeneste in VirksomhetTjeneste virksomhetTjeneste, InnhentingSamletTjeneste innhentingSamletTjeneste, AktørTjeneste aktørConsumer, - SigrunTjeneste sigrunTjeneste, VedtakYtelseRepository vedtakYtelseRepository) { + SigrunTjeneste sigrunTjeneste, + VedtattYtelseInnhentingTjeneste vedtattYtelseInnhentingTjeneste) { this.inntektArbeidYtelseTjeneste = inntektArbeidYtelseTjeneste; this.virksomhetTjeneste = virksomhetTjeneste; this.innhentingSamletTjeneste = innhentingSamletTjeneste; this.aktørConsumer = aktørConsumer; this.sigrunTjeneste = sigrunTjeneste; - this.ytelseRegisterInnhenting = new YtelseRegisterInnhenting(innhentingSamletTjeneste, vedtakYtelseRepository); + this.ytelseRegisterInnhenting = new YtelseRegisterInnhenting(innhentingSamletTjeneste, vedtattYtelseInnhentingTjeneste); this.byggYrkesaktiviteterTjeneste = new ByggYrkesaktiviteterTjeneste(); } diff --git a/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/VedtattYtelseInnhentingTjeneste.java b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/VedtattYtelseInnhentingTjeneste.java new file mode 100644 index 000000000..4b271a351 --- /dev/null +++ b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/VedtattYtelseInnhentingTjeneste.java @@ -0,0 +1,124 @@ +package no.nav.foreldrepenger.abakus.registerdata; + +import java.time.LocalDate; +import java.util.List; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +import no.nav.foreldrepenger.abakus.domene.iay.Arbeidsgiver; +import no.nav.foreldrepenger.abakus.domene.iay.InntektArbeidYtelseAggregatBuilder; +import no.nav.foreldrepenger.abakus.domene.iay.InntektArbeidYtelseGrunnlagBuilder; +import no.nav.foreldrepenger.abakus.domene.iay.InntektArbeidYtelseRepository; +import no.nav.foreldrepenger.abakus.domene.iay.YtelseAnvistAndel; +import no.nav.foreldrepenger.abakus.domene.iay.YtelseAnvistAndelBuilder; +import no.nav.foreldrepenger.abakus.domene.iay.YtelseAnvistBuilder; +import no.nav.foreldrepenger.abakus.domene.iay.YtelseBuilder; +import no.nav.foreldrepenger.abakus.domene.iay.arbeidsforhold.ArbeidsforholdInformasjonBuilder; +import no.nav.foreldrepenger.abakus.felles.jpa.IntervallEntitet; +import no.nav.foreldrepenger.abakus.kobling.Kobling; +import no.nav.foreldrepenger.abakus.typer.AktørId; +import no.nav.foreldrepenger.abakus.typer.Beløp; +import no.nav.foreldrepenger.abakus.typer.EksternArbeidsforholdRef; +import no.nav.foreldrepenger.abakus.typer.InternArbeidsforholdRef; +import no.nav.foreldrepenger.abakus.typer.Stillingsprosent; +import no.nav.foreldrepenger.abakus.vedtak.domene.VedtakYtelse; +import no.nav.foreldrepenger.abakus.vedtak.domene.VedtakYtelseAndel; +import no.nav.foreldrepenger.abakus.vedtak.domene.VedtakYtelseRepository; +import no.nav.foreldrepenger.konfig.KonfigVerdi; + +@ApplicationScoped +public class VedtattYtelseInnhentingTjeneste { + + private VedtakYtelseRepository vedtakYtelseRepository; + private boolean skalInnhenteAnvisteAndeler; + private InntektArbeidYtelseRepository inntektArbeidYtelseRepository; + + protected VedtattYtelseInnhentingTjeneste() { + } + + @Inject + public VedtattYtelseInnhentingTjeneste(VedtakYtelseRepository vedtakYtelseRepository, + @KonfigVerdi(value = "SKAL_INNENTE_YTELSE_ANVIST_ANDELER", defaultVerdi = "false") boolean skalInnhenteAnvisteAndeler, + InntektArbeidYtelseRepository inntektArbeidYtelseRepository) { + this.vedtakYtelseRepository = vedtakYtelseRepository; + this.skalInnhenteAnvisteAndeler = skalInnhenteAnvisteAndeler; + this.inntektArbeidYtelseRepository = inntektArbeidYtelseRepository; + } + + void innhentFraYtelsesRegister(AktørId aktørId, Kobling kobling, InntektArbeidYtelseAggregatBuilder.AktørYtelseBuilder builder) { + IntervallEntitet opplysningsperiode = kobling.getOpplysningsperiode(); + List vedtatteYtelser = vedtakYtelseRepository.hentYtelserForIPeriode(aktørId, opplysningsperiode.getFomDato(), opplysningsperiode.getTomDato()); + + var arbeidsforholdInformasjon = inntektArbeidYtelseRepository.hentArbeidsforholdInformasjonForBehandling(kobling.getKoblingReferanse()); + var arbeidsforholdInformasjonBuilder = ArbeidsforholdInformasjonBuilder.builder(arbeidsforholdInformasjon); + for (var vedtattYtelse : vedtatteYtelser) { + YtelseBuilder ytelseBuilder = builder.getYtelselseBuilderForType(vedtattYtelse.getKilde(), vedtattYtelse.getYtelseType(), vedtattYtelse.getSaksnummer()); + ytelseBuilder.medPeriode(vedtattYtelse.getPeriode()) + .medStatus(vedtattYtelse.getStatus()) + .medVedtattTidspunkt(vedtattYtelse.getVedtattTidspunkt()); + + mapAnvisninger(vedtattYtelse, ytelseBuilder, arbeidsforholdInformasjonBuilder); + builder.leggTilYtelse(ytelseBuilder); + } + var inntektArbeidYtelseGrunnlag = inntektArbeidYtelseRepository.hentInntektArbeidYtelseGrunnlagForBehandling(kobling.getKoblingReferanse()); + var nyttGrunnlagBuilder = InntektArbeidYtelseGrunnlagBuilder.oppdatere(inntektArbeidYtelseGrunnlag); + nyttGrunnlagBuilder.medInformasjon(arbeidsforholdInformasjonBuilder.build()); + inntektArbeidYtelseRepository.lagre(kobling.getKoblingReferanse(), nyttGrunnlagBuilder); + } + + + private void mapAnvisninger(VedtakYtelse vedtattYtelse, YtelseBuilder ytelseBuilder, ArbeidsforholdInformasjonBuilder arbeidsforholdInformasjonBuilder) { + vedtattYtelse.getYtelseAnvist().forEach(anvisning -> { + YtelseAnvistBuilder anvistBuilder = ytelseBuilder.getAnvistBuilder(); + IntervallEntitet periode = utledPeriodeNårTomMuligFørFom(anvisning.getAnvistFom(), anvisning.getAnvistTom()); + anvistBuilder.medAnvistPeriode(periode) + .medBeløp(anvisning.getBeløp().map(Beløp::getVerdi).orElse(null)) + .medDagsats(anvisning.getDagsats().map(Beløp::getVerdi).orElse(null)) + .medUtbetalingsgradProsent(anvisning.getUtbetalingsgradProsent().map(Stillingsprosent::getVerdi).orElse(null)); + if (skalInnhenteAnvisteAndeler) { + if (anvisning.getAndeler() != null) { + anvisning.getAndeler() + .forEach(andel -> anvistBuilder.leggTilYtelseAnvistAndel(mapAndel(arbeidsforholdInformasjonBuilder, andel))); + } + } + ytelseBuilder.leggtilYtelseAnvist(anvistBuilder.build()); + }); + } + + private YtelseAnvistAndel mapAndel(ArbeidsforholdInformasjonBuilder arbeidsforholdInformasjonBuilder, VedtakYtelseAndel andel) { + var arbeidsgiver = mapArbeidsgiver(andel); + return YtelseAnvistAndelBuilder.ny() + .medArbeidsgiver(arbeidsgiver) + .medArbeidsforholdRef(mapInternArbeidsforholdRef(arbeidsforholdInformasjonBuilder, andel, arbeidsgiver)) + .medInntektskategori(andel.getInntektskategori()) + .medRefusjonsgrad(andel.getRefusjonsgradProsent().getVerdi()) + .medUtbetalingsgrad(andel.getUtbetalingsgradProsent().getVerdi()) + .medDagsats(andel.getDagsats().getVerdi()) + .build(); + } + + private InternArbeidsforholdRef mapInternArbeidsforholdRef(ArbeidsforholdInformasjonBuilder arbeidsforholdInformasjonBuilder, VedtakYtelseAndel andel, Arbeidsgiver arbeidsgiver) { + if (andel.getArbeidsforholdId() != null) { + return arbeidsforholdInformasjonBuilder.finnEllerOpprett(arbeidsgiver, EksternArbeidsforholdRef.ref(andel.getArbeidsforholdId())); + } + return null; + } + + private Arbeidsgiver mapArbeidsgiver(VedtakYtelseAndel andel) { + return andel.getArbeidsgiver().map(a -> a.getOrgnr() != null ? Arbeidsgiver.virksomhet(a.getOrgnr()) : Arbeidsgiver.person(a.getAktørId())).orElse(null); + } + + private IntervallEntitet utledPeriodeNårTomMuligFørFom(LocalDate fom, LocalDate tom) { + if (tom == null) { + return IntervallEntitet.fraOgMed(fom); + } + if (tom.isBefore(fom)) { + return IntervallEntitet.fraOgMedTilOgMed(fom, fom); + } + return IntervallEntitet.fraOgMedTilOgMed(fom, tom); + } + + + +} diff --git a/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/YtelseRegisterInnhenting.java b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/YtelseRegisterInnhenting.java index e92fa65a4..8f42498cd 100644 --- a/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/YtelseRegisterInnhenting.java +++ b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/YtelseRegisterInnhenting.java @@ -7,7 +7,6 @@ import no.nav.abakus.iaygrunnlag.kodeverk.Fagsystem; import no.nav.foreldrepenger.abakus.domene.iay.InntektArbeidYtelseAggregatBuilder; -import no.nav.foreldrepenger.abakus.domene.iay.YtelseAnvistBuilder; import no.nav.foreldrepenger.abakus.domene.iay.YtelseBuilder; import no.nav.foreldrepenger.abakus.domene.iay.YtelseGrunnlag; import no.nav.foreldrepenger.abakus.domene.iay.YtelseGrunnlagBuilder; @@ -19,22 +18,20 @@ import no.nav.foreldrepenger.abakus.registerdata.ytelse.infotrygd.dto.InfotrygdYtelseAnvist; import no.nav.foreldrepenger.abakus.registerdata.ytelse.infotrygd.dto.InfotrygdYtelseGrunnlag; import no.nav.foreldrepenger.abakus.typer.AktørId; -import no.nav.foreldrepenger.abakus.typer.Beløp; import no.nav.foreldrepenger.abakus.typer.OrgNummer; import no.nav.foreldrepenger.abakus.typer.OrganisasjonsNummerValidator; import no.nav.foreldrepenger.abakus.typer.PersonIdent; import no.nav.foreldrepenger.abakus.typer.Saksnummer; -import no.nav.foreldrepenger.abakus.typer.Stillingsprosent; -import no.nav.foreldrepenger.abakus.vedtak.domene.VedtakYtelse; import no.nav.foreldrepenger.abakus.vedtak.domene.VedtakYtelseRepository; public class YtelseRegisterInnhenting { private final InnhentingSamletTjeneste innhentingSamletTjeneste; - private final VedtakYtelseRepository vedtakYtelseRepository; + private final VedtattYtelseInnhentingTjeneste vedtattYtelseInnhentingTjeneste; - YtelseRegisterInnhenting(InnhentingSamletTjeneste innhentingSamletTjeneste, VedtakYtelseRepository vedtakYtelseRepository) { + YtelseRegisterInnhenting(InnhentingSamletTjeneste innhentingSamletTjeneste, + VedtattYtelseInnhentingTjeneste vedtattYtelseInnhentingTjeneste) { this.innhentingSamletTjeneste = innhentingSamletTjeneste; - this.vedtakYtelseRepository = vedtakYtelseRepository; + this.vedtattYtelseInnhentingTjeneste = vedtattYtelseInnhentingTjeneste; } void byggYtelser(Kobling behandling, AktørId aktørId, PersonIdent ident, IntervallEntitet opplysningsPeriode, @@ -43,7 +40,7 @@ void byggYtelser(Kobling behandling, AktørId aktørId, PersonIdent ident, Inter InntektArbeidYtelseAggregatBuilder.AktørYtelseBuilder aktørYtelseBuilder = inntektArbeidYtelseAggregatBuilder.getAktørYtelseBuilder(aktørId); aktørYtelseBuilder.tilbakestillYtelser(); - innhentFraYtelsesRegister(aktørId, behandling, aktørYtelseBuilder); + vedtattYtelseInnhentingTjeneste.innhentFraYtelsesRegister(aktørId, behandling, aktørYtelseBuilder); if (!medGrunnlag) { // Ikke lenger relevant å hente eksternt for 2part eller engangsstønad @@ -65,38 +62,12 @@ void byggYtelser(Kobling behandling, AktørId aktørId, PersonIdent ident, Inter inntektArbeidYtelseAggregatBuilder.leggTilAktørYtelse(aktørYtelseBuilder); } - void innhentFraYtelsesRegister(AktørId aktørId, Kobling kobling, InntektArbeidYtelseAggregatBuilder.AktørYtelseBuilder builder) { - IntervallEntitet opplysningsperiode = kobling.getOpplysningsperiode(); - List vedtatteYtelser = vedtakYtelseRepository.hentYtelserForIPeriode(aktørId, opplysningsperiode.getFomDato(), opplysningsperiode.getTomDato()); - - for (var vedtattYtelse : vedtatteYtelser) { - YtelseBuilder ytelseBuilder = builder.getYtelselseBuilderForType(vedtattYtelse.getKilde(), vedtattYtelse.getYtelseType(), vedtattYtelse.getSaksnummer()); - ytelseBuilder.medPeriode(vedtattYtelse.getPeriode()) - .medStatus(vedtattYtelse.getStatus()) - .medVedtattTidspunkt(vedtattYtelse.getVedtattTidspunkt()); - - mapAnvisninger(vedtattYtelse, ytelseBuilder); - builder.leggTilYtelse(ytelseBuilder); - } - } - - private void mapAnvisninger(VedtakYtelse vedtattYtelse, YtelseBuilder ytelseBuilder) { - vedtattYtelse.getYtelseAnvist().forEach(anvisning -> { - YtelseAnvistBuilder anvistBuilder = ytelseBuilder.getAnvistBuilder(); - IntervallEntitet periode = utledPeriodeNårTomMuligFørFom(anvisning.getAnvistFom(), anvisning.getAnvistTom()); - anvistBuilder.medAnvistPeriode(periode) - .medBeløp(anvisning.getBeløp().map(Beløp::getVerdi).orElse(null)) - .medDagsats(anvisning.getDagsats().map(Beløp::getVerdi).orElse(null)) - .medUtbetalingsgradProsent(anvisning.getUtbetalingsgradProsent().map(Stillingsprosent::getVerdi).orElse(null)); - ytelseBuilder.leggtilYtelseAnvist(anvistBuilder.build()); - }); - } private void oversettInfotrygdYtelseGrunnlagTilYtelse(InntektArbeidYtelseAggregatBuilder.AktørYtelseBuilder aktørYtelseBuilder, InfotrygdYtelseGrunnlag grunnlag) { IntervallEntitet periode = utledPeriodeNårTomMuligFørFom(grunnlag.getVedtaksPeriodeFom(), grunnlag.getVedtaksPeriodeTom()); var tidligsteAnvist = grunnlag.getUtbetaltePerioder().stream().map(InfotrygdYtelseAnvist::getUtbetaltFom).min(Comparator.naturalOrder()); YtelseBuilder ytelseBuilder = aktørYtelseBuilder.getYtelselseBuilderForType(Fagsystem.INFOTRYGD, grunnlag.getYtelseType(), - grunnlag.getTemaUnderkategori(), periode, tidligsteAnvist) + grunnlag.getTemaUnderkategori(), periode, tidligsteAnvist) .medBehandlingsTema(grunnlag.getTemaUnderkategori()) .medVedtattTidspunkt(grunnlag.getVedtattTidspunkt()) .medStatus(grunnlag.getYtelseStatus()); diff --git a/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/fagsakytelser/es/IAYRegisterInnhentingESTjenesteImpl.java b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/fagsakytelser/es/IAYRegisterInnhentingESTjenesteImpl.java index 22e02ff38..8dae13eb7 100644 --- a/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/fagsakytelser/es/IAYRegisterInnhentingESTjenesteImpl.java +++ b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/fagsakytelser/es/IAYRegisterInnhentingESTjenesteImpl.java @@ -9,6 +9,7 @@ import no.nav.foreldrepenger.abakus.kobling.kontroll.YtelseTypeRef; import no.nav.foreldrepenger.abakus.registerdata.IAYRegisterInnhentingFellesTjenesteImpl; import no.nav.foreldrepenger.abakus.registerdata.InnhentingSamletTjeneste; +import no.nav.foreldrepenger.abakus.registerdata.VedtattYtelseInnhentingTjeneste; import no.nav.foreldrepenger.abakus.registerdata.arbeidsgiver.virksomhet.VirksomhetTjeneste; import no.nav.foreldrepenger.abakus.registerdata.inntekt.sigrun.SigrunTjeneste; import no.nav.foreldrepenger.abakus.vedtak.domene.VedtakYtelseRepository; @@ -26,12 +27,12 @@ public IAYRegisterInnhentingESTjenesteImpl(InntektArbeidYtelseTjeneste inntektAr VirksomhetTjeneste virksomhetTjeneste, InnhentingSamletTjeneste innhentingSamletTjeneste, AktørTjeneste aktørConsumer, - SigrunTjeneste sigrunTjeneste, VedtakYtelseRepository vedtakYtelseRepository) { + SigrunTjeneste sigrunTjeneste, VedtattYtelseInnhentingTjeneste vedtattYtelseInnhentingTjeneste) { super(inntektArbeidYtelseTjeneste, virksomhetTjeneste, innhentingSamletTjeneste, aktørConsumer, - sigrunTjeneste, vedtakYtelseRepository); + sigrunTjeneste, vedtattYtelseInnhentingTjeneste); } @Override diff --git a/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/fagsakytelser/k9/IAYRegisterInnhentingK9TjenesteImpl.java b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/fagsakytelser/k9/IAYRegisterInnhentingK9TjenesteImpl.java index 2960fb62b..30914f608 100644 --- a/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/fagsakytelser/k9/IAYRegisterInnhentingK9TjenesteImpl.java +++ b/domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/fagsakytelser/k9/IAYRegisterInnhentingK9TjenesteImpl.java @@ -9,6 +9,7 @@ import no.nav.foreldrepenger.abakus.kobling.kontroll.YtelseTypeRef; import no.nav.foreldrepenger.abakus.registerdata.IAYRegisterInnhentingFellesTjenesteImpl; import no.nav.foreldrepenger.abakus.registerdata.InnhentingSamletTjeneste; +import no.nav.foreldrepenger.abakus.registerdata.VedtattYtelseInnhentingTjeneste; import no.nav.foreldrepenger.abakus.registerdata.arbeidsgiver.virksomhet.VirksomhetTjeneste; import no.nav.foreldrepenger.abakus.registerdata.inntekt.sigrun.SigrunTjeneste; import no.nav.foreldrepenger.abakus.vedtak.domene.VedtakYtelseRepository; @@ -27,12 +28,12 @@ public IAYRegisterInnhentingK9TjenesteImpl(InntektArbeidYtelseTjeneste inntektAr VirksomhetTjeneste virksomhetTjeneste, InnhentingSamletTjeneste innhentingSamletTjeneste, AktørTjeneste aktørConsumer, - SigrunTjeneste sigrunTjeneste, VedtakYtelseRepository vedtakYtelseRepository) { + SigrunTjeneste sigrunTjeneste, VedtattYtelseInnhentingTjeneste VedtattYtelseInnhentingTjeneste) { super(inntektArbeidYtelseTjeneste, virksomhetTjeneste, innhentingSamletTjeneste, aktørConsumer, - sigrunTjeneste, vedtakYtelseRepository); + sigrunTjeneste, VedtattYtelseInnhentingTjeneste); } // Skal alltid innhente næringsinntekter om det ligger i informasjonselementer, dette for å støtte 8-47. diff --git a/domenetjenester/iay/src/main/resources/META-INF/pu-default.inntektarbeidytelse.orm.xml b/domenetjenester/iay/src/main/resources/META-INF/pu-default.inntektarbeidytelse.orm.xml index 16450715c..a15f9e3b6 100644 --- a/domenetjenester/iay/src/main/resources/META-INF/pu-default.inntektarbeidytelse.orm.xml +++ b/domenetjenester/iay/src/main/resources/META-INF/pu-default.inntektarbeidytelse.orm.xml @@ -16,6 +16,7 @@ + @@ -53,6 +54,7 @@ + diff --git a/domenetjenester/iay/src/test/java/no/nav/foreldrepenger/abakus/registerdata/YtelseRegisterinnhentingTest.java b/domenetjenester/iay/src/test/java/no/nav/foreldrepenger/abakus/registerdata/VedtattYtelseInnhentingTjenesteTest.java similarity index 57% rename from domenetjenester/iay/src/test/java/no/nav/foreldrepenger/abakus/registerdata/YtelseRegisterinnhentingTest.java rename to domenetjenester/iay/src/test/java/no/nav/foreldrepenger/abakus/registerdata/VedtattYtelseInnhentingTjenesteTest.java index 5887bb35a..08e6f2793 100644 --- a/domenetjenester/iay/src/test/java/no/nav/foreldrepenger/abakus/registerdata/YtelseRegisterinnhentingTest.java +++ b/domenetjenester/iay/src/test/java/no/nav/foreldrepenger/abakus/registerdata/VedtattYtelseInnhentingTjenesteTest.java @@ -5,9 +5,9 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import java.math.BigDecimal; import java.time.LocalDate; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Optional; @@ -15,35 +15,40 @@ import org.junit.jupiter.api.Test; import no.nav.abakus.iaygrunnlag.kodeverk.Fagsystem; +import no.nav.abakus.iaygrunnlag.kodeverk.Inntektskategori; import no.nav.abakus.iaygrunnlag.kodeverk.TemaUnderkategori; import no.nav.abakus.iaygrunnlag.kodeverk.YtelseStatus; import no.nav.abakus.iaygrunnlag.kodeverk.YtelseType; import no.nav.foreldrepenger.abakus.domene.iay.InntektArbeidYtelseAggregatBuilder; +import no.nav.foreldrepenger.abakus.domene.iay.InntektArbeidYtelseRepository; import no.nav.foreldrepenger.abakus.domene.iay.Ytelse; +import no.nav.foreldrepenger.abakus.domene.iay.YtelseAnvist; import no.nav.foreldrepenger.abakus.felles.jpa.IntervallEntitet; import no.nav.foreldrepenger.abakus.kobling.Kobling; import no.nav.foreldrepenger.abakus.typer.AktørId; import no.nav.foreldrepenger.abakus.typer.Saksnummer; +import no.nav.foreldrepenger.abakus.vedtak.domene.Arbeidsgiver; import no.nav.foreldrepenger.abakus.vedtak.domene.VedtakYtelse; +import no.nav.foreldrepenger.abakus.vedtak.domene.VedtakYtelseAndelBuilder; import no.nav.foreldrepenger.abakus.vedtak.domene.VedtakYtelseBuilder; import no.nav.foreldrepenger.abakus.vedtak.domene.VedtakYtelseRepository; import no.nav.foreldrepenger.abakus.vedtak.domene.YtelseAnvistBuilder; -public class YtelseRegisterinnhentingTest { - - private InnhentingSamletTjeneste samletTjeneste = mock(InnhentingSamletTjeneste.class); +public class VedtattYtelseInnhentingTjenesteTest { private VedtakYtelseRepository vedtakYtelseRepository = mock(VedtakYtelseRepository.class); - private YtelseRegisterInnhenting ytelseRegisterInnhenting; + private VedtattYtelseInnhentingTjeneste vedtattYtelseInnhentingTjeneste; + + private InntektArbeidYtelseRepository inntektArbeidYtelseRepository = mock(InntektArbeidYtelseRepository.class); @BeforeEach public void before() { - ytelseRegisterInnhenting = new YtelseRegisterInnhenting(samletTjeneste, vedtakYtelseRepository); + vedtattYtelseInnhentingTjeneste = new VedtattYtelseInnhentingTjeneste(vedtakYtelseRepository, true, inntektArbeidYtelseRepository); } @Test - public void skal_gjenskape_feil() throws Exception { + public void skal_mappe_vedtatt_ytelse() throws Exception { // Arrange VedtakYtelse vy = VedtakYtelseBuilder.oppdatere(Optional.empty()) .medPeriode(IntervallEntitet.fraOgMedTilOgMed(LocalDate.now().minusMonths(4), LocalDate.now().minusMonths(2))) @@ -53,18 +58,33 @@ public void skal_gjenskape_feil() throws Exception { .medKilde(Fagsystem.FPSAK) .medYtelseType(YtelseType.ENGANGSTØNAD) .medBehandlingsTema(TemaUnderkategori.ENGANGSSTONAD_FODSEL) - .leggTil(YtelseAnvistBuilder.ny().medAnvistPeriode(IntervallEntitet.fraOgMedTilOgMed(LocalDate.now().minusMonths(4), LocalDate.now().minusMonths(2)))) + .leggTil(getYtelseAnvist()) .build(); Kobling k = new Kobling(); k.setOpplysningsperiode(IntervallEntitet.fraOgMed(LocalDate.now().minusMonths(17))); - when(samletTjeneste.hentDagpengerAAP(any(), any())).thenReturn(Collections.emptyList()); - when(samletTjeneste.innhentInfotrygdGrunnlag(any(), any())).thenReturn(Collections.emptyList()); when(vedtakYtelseRepository.hentYtelserForIPeriode(any(), any(), any())).thenReturn(List.of(vy)); + when(inntektArbeidYtelseRepository.hentInntektArbeidYtelseGrunnlagForBehandling(any())).thenReturn(Optional.empty()); InntektArbeidYtelseAggregatBuilder.AktørYtelseBuilder builder = InntektArbeidYtelseAggregatBuilder.AktørYtelseBuilder.oppdatere(Optional.empty()); // Act - ytelseRegisterInnhenting.innhentFraYtelsesRegister(AktørId.dummy(), k, builder); + vedtattYtelseInnhentingTjeneste.innhentFraYtelsesRegister(AktørId.dummy(), k, builder); assertThat(builder.build().getAlleYtelser()).isNotEmpty(); assertThat(builder.build().getAlleYtelser().stream().map(Ytelse::getYtelseAnvist).flatMap(Collection::stream).count()).isEqualTo(1); + assertThat(builder.build().getAlleYtelser().stream().map(Ytelse::getYtelseAnvist) + .flatMap(Collection::stream) + .map(YtelseAnvist::getYtelseAnvistAndeler).count()).isEqualTo(1); + } + private YtelseAnvistBuilder getYtelseAnvist() { + return YtelseAnvistBuilder.ny() + .medAnvistPeriode(IntervallEntitet.fraOgMedTilOgMed(LocalDate.now().minusMonths(4), LocalDate.now().minusMonths(2))) + .leggTilFordeling(VedtakYtelseAndelBuilder.ny().medArbeidsforholdId("aiowjd332423") + .medArbeidsgiver(Arbeidsgiver.virksomhet("910909088")) + .medDagsats(BigDecimal.TEN) + .medInntektskategori(Inntektskategori.ARBEIDSTAKER) + .medRefusjonsgrad(BigDecimal.ZERO) + .medUtbetalingsgrad(BigDecimal.TEN)); + } + + } diff --git a/domenetjenester/vedtak/src/main/java/no/nav/foreldrepenger/abakus/vedtak/domene/InntektskategoriKodeverdiConverter.java b/domenetjenester/vedtak/src/main/java/no/nav/foreldrepenger/abakus/vedtak/domene/InntektskategoriKodeverdiConverter.java index 961f34cf8..2bf3feee2 100644 --- a/domenetjenester/vedtak/src/main/java/no/nav/foreldrepenger/abakus/vedtak/domene/InntektskategoriKodeverdiConverter.java +++ b/domenetjenester/vedtak/src/main/java/no/nav/foreldrepenger/abakus/vedtak/domene/InntektskategoriKodeverdiConverter.java @@ -6,7 +6,7 @@ import no.nav.abakus.iaygrunnlag.kodeverk.Inntektskategori; @Converter(autoApply = true) -class InntektskategoriKodeverdiConverter implements AttributeConverter { +public class InntektskategoriKodeverdiConverter implements AttributeConverter { @Override public String convertToDatabaseColumn(Inntektskategori attribute) { return attribute == null ? null : attribute.getKode(); diff --git a/migreringer/src/main/resources/db/migration/defaultDS/2.0/V2.0_017__Ny_tabell_iay_ytelse_andel.sql b/migreringer/src/main/resources/db/migration/defaultDS/2.0/V2.0_017__Ny_tabell_iay_ytelse_andel.sql new file mode 100644 index 000000000..a5fc5c449 --- /dev/null +++ b/migreringer/src/main/resources/db/migration/defaultDS/2.0/V2.0_017__Ny_tabell_iay_ytelse_andel.sql @@ -0,0 +1,48 @@ +create sequence if not exists SEQ_YTELSE_ANVIST_ANDEL + increment by 50 + START WITH 1000000 NO CYCLE; + +create table if not exists IAY_YTELSE_ANVIST_ANDEL +( + ID bigint not null + constraint PK_IAY_YTELSE_ANVIST_ANDEL + primary key, + YTELSE_ANVIST_ID bigint not null + constraint FK_IAY_YTELSE_ANVIST_ANDEL_1 + references IAY_YTELSE_ANVIST, + DAGSATS NUMERIC(19, 2), + UTBETALINGSGRAD_PROSENT NUMERIC(5, 2), + REFUSJONSGRAD_PROSENT NUMERIC(5, 2), + ARBEIDSGIVER_AKTOR_ID VARCHAR(100), + ARBEIDSGIVER_ORGNR VARCHAR(100), + ARBEIDSFORHOLD_INTERN_ID VARCHAR(100), + INNTEKTSKATEGORI VARCHAR(100), + VERSJON bigint default 0 not null, + OPPRETTET_AV VARCHAR(20) default 'VL' not null, + OPPRETTET_TID TIMESTAMP(3) default localtimestamp not null, + ENDRET_AV VARCHAR(20), + ENDRET_TID TIMESTAMP(3) +); +comment +on table IAY_YTELSE_ANVIST_ANDEL is 'En tabell med informasjon om fordeling for en ytelseperiode'; +comment +on column IAY_YTELSE_ANVIST_ANDEL.ID is 'PK'; +comment +on column IAY_YTELSE_ANVIST_ANDEL.YTELSE_ANVIST_ID is 'FK:YTELSE_ANVIST Fremmednøkkel til ytelseperioden'; +comment +on column IAY_YTELSE_ANVIST_ANDEL.DAGSATS is 'Dagsats ifm utbetaling.'; +comment +on column IAY_YTELSE_ANVIST_ANDEL.UTBETALINGSGRAD_PROSENT is 'Utbetalingsgrad for dagsats.'; +comment +on column IAY_YTELSE_ANVIST_ANDEL.REFUSJONSGRAD_PROSENT is 'Andel av dagsats som betales til arbeidsgiver i refusjon'; +comment +on column IAY_YTELSE_ANVIST_ANDEL.ARBEIDSGIVER_AKTOR_ID is 'Arbeidsgiver aktør-id.'; +comment +on column IAY_YTELSE_ANVIST_ANDEL.ARBEIDSGIVER_ORGNR is 'Arbeidsgiver orgnr'; +comment +on column IAY_YTELSE_ANVIST_ANDEL.ARBEIDSFORHOLD_INTERN_ID is 'Arbeidsforhold intern id'; +comment +on column IAY_YTELSE_ANVIST_ANDEL.INNTEKTSKATEGORI is 'Inntektskategori for utbetalingen'; + +create index IDX_IAY_YTELSE_ANVIST_ANDEL_1 + on IAY_YTELSE_ANVIST_ANDEL (YTELSE_ANVIST_ID);