Skip to content

Commit

Permalink
Merge branch 'master' into feature/rev-bg
Browse files Browse the repository at this point in the history
  • Loading branch information
pekern authored Nov 1, 2024
2 parents b25d9dd + 5c85a94 commit 36da7d0
Show file tree
Hide file tree
Showing 4 changed files with 121 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,18 @@
import no.nav.foreldrepenger.behandling.BehandlingReferanse;
import no.nav.foreldrepenger.behandling.Skjæringstidspunkt;
import no.nav.foreldrepenger.behandlingslager.behandling.Behandling;
import no.nav.foreldrepenger.behandlingslager.behandling.aksjonspunkt.AksjonspunktDefinisjon;
import no.nav.foreldrepenger.behandlingslager.behandling.historikk.HistorikkAktør;
import no.nav.foreldrepenger.behandlingslager.behandling.historikk.HistorikkRepository;
import no.nav.foreldrepenger.behandlingslager.behandling.historikk.Historikkinnslag;
import no.nav.foreldrepenger.behandlingslager.behandling.historikk.HistorikkinnslagType;
import no.nav.foreldrepenger.behandlingslager.fagsak.FagsakYtelseType;
import no.nav.foreldrepenger.behandlingslager.virksomhet.Arbeidsgiver;
import no.nav.foreldrepenger.behandlingslager.virksomhet.OrgNummer;
import no.nav.foreldrepenger.behandlingslager.virksomhet.OrganisasjonsNummerValidator;
import no.nav.foreldrepenger.domene.arbeidInntektsmelding.ArbeidsforholdInntektsmeldingMangelTjeneste;
import no.nav.foreldrepenger.domene.arbeidInntektsmelding.ArbeidsforholdInntektsmeldingStatus;
import no.nav.foreldrepenger.domene.arbeidsforhold.impl.InntektsmeldingRegisterTjeneste;
import no.nav.foreldrepenger.domene.arbeidsgiver.ArbeidsgiverTjeneste;
import no.nav.foreldrepenger.domene.iay.modell.Inntektsmelding;
import no.nav.foreldrepenger.domene.iay.modell.NaturalYtelse;
Expand All @@ -46,6 +51,8 @@ public class FpInntektsmeldingTjeneste {
private SkjæringstidspunktTjeneste skjæringstidspunktTjeneste;
private HistorikkRepository historikkRepo;
private ArbeidsgiverTjeneste arbeidsgiverTjeneste;
private InntektsmeldingRegisterTjeneste inntektsmeldingRegisterTjeneste;
private ArbeidsforholdInntektsmeldingMangelTjeneste inntektsmeldingMangelTjeneste;

private static final Logger LOG = LoggerFactory.getLogger(FpInntektsmeldingTjeneste.class);

Expand All @@ -58,12 +65,16 @@ public FpInntektsmeldingTjeneste(FpinntektsmeldingKlient klient,
ProsessTaskTjeneste prosessTaskTjeneste,
SkjæringstidspunktTjeneste skjæringstidspunktTjeneste,
HistorikkRepository historikkRepo,
ArbeidsgiverTjeneste arbeidsgiverTjeneste) {
ArbeidsgiverTjeneste arbeidsgiverTjeneste,
InntektsmeldingRegisterTjeneste inntektsmeldingRegisterTjeneste,
ArbeidsforholdInntektsmeldingMangelTjeneste inntektsmeldingMangelTjeneste) {
this.klient = klient;
this.prosessTaskTjeneste = prosessTaskTjeneste;
this.skjæringstidspunktTjeneste = skjæringstidspunktTjeneste;
this.historikkRepo = historikkRepo;
this.arbeidsgiverTjeneste = arbeidsgiverTjeneste;
this.inntektsmeldingRegisterTjeneste = inntektsmeldingRegisterTjeneste;
this.inntektsmeldingMangelTjeneste = inntektsmeldingMangelTjeneste;
}

public void lagForespørselTask(String ag, BehandlingReferanse ref) {
Expand Down Expand Up @@ -206,4 +217,32 @@ private List<OverstyrInntektsmeldingRequest.RefusjonendringRequestDto> mapRefusj
klient.settForespørselTilUtgått(request);
}

public void sjekkOmIMManglerOgOpprettForesporselTask(Behandling behandling) {
var ref = BehandlingReferanse.fra(behandling);
var stp = skjæringstidspunktTjeneste.getSkjæringstidspunkter(behandling.getId());

if(behandling.harAksjonspunktMedType(AksjonspunktDefinisjon.AUTO_VENTER_PÅ_KOMPLETT_SØKNAD)) {
//har ikke innhentet registerdata enda?
inntektsmeldingRegisterTjeneste.utledManglendeInntektsmeldingerFraAAreg(ref, stp)
.keySet()
.stream()
.filter(Arbeidsgiver::getErVirksomhet)
.forEach(a -> lagForespørselTask(a.getIdentifikator(), ref));
} else if (behandling.harAksjonspunktMedType(AksjonspunktDefinisjon.AUTO_VENT_ETTERLYST_INNTEKTSMELDING)) {
inntektsmeldingRegisterTjeneste.utledManglendeInntektsmeldingerFraGrunnlag(ref, stp)
.keySet()
.stream()
.filter(Arbeidsgiver::getErVirksomhet)
.forEach(a -> lagForespørselTask(a.getIdentifikator(), ref));
} else if (behandling.harAksjonspunktMedType(AksjonspunktDefinisjon.VURDER_ARBEIDSFORHOLD_INNTEKTSMELDING)) {
//må sjekke saksbehandler-valg for å finne ut hvilke inntektmeldinger som mangler
inntektsmeldingMangelTjeneste.finnStatusForInntektsmeldingArbeidsforhold(ref, stp)
.stream()
.filter(arbforholdImStatus -> arbforholdImStatus.inntektsmeldingStatus().equals(ArbeidsforholdInntektsmeldingStatus.InntektsmeldingStatus.IKKE_MOTTAT))
.filter(arbforholdImStatus -> arbforholdImStatus.arbeidsgiver().getErVirksomhet())
.forEach(ikkeMottattIm -> lagForespørselTask(ikkeMottattIm.arbeidsgiver().getOrgnr(), ref));
} else {
throw new IllegalArgumentException("Behandling har ikke aksjonspunkt 7003, 7030 eller 5085 og er ugyldig for denne operasjonen");
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package no.nav.foreldrepenger.domene.fpinntektsmelding;

import static no.nav.foreldrepenger.behandlingslager.virksomhet.OrgNummer.tilMaskertNummer;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;

Expand Down Expand Up @@ -40,10 +42,10 @@ public FpinntektsmeldingTask(BehandlingRepository behandlingRepository,

@Override
protected void prosesser(ProsessTaskData prosessTaskData, Long fagsakId, Long behandlingId) {
LOG.info("Starter task for oversending til fpinntektsmelding for behandling " + behandlingId);
var behandling = behandlingRepository.hentBehandling(behandlingId);
var arbeidsgiverIdent = prosessTaskData.getPropertyValue(ARBEIDSGIVER_KEY);
var stp = skjæringstidspunktTjeneste.getSkjæringstidspunkter(behandlingId);
LOG.info("Starter task for å opprette forespørsel i fpinntektsmelding for behandlingId {} med orgnummer {} og skjæringstidspunkt {}", behandlingId, tilMaskertNummer(arbeidsgiverIdent), stp);
var ref = BehandlingReferanse.fra(behandling);
fpInntektsmeldingTjeneste.lagForespørsel(arbeidsgiverIdent, ref, stp);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
import java.util.List;
import java.util.UUID;

import no.nav.foreldrepenger.behandlingslager.virksomhet.Virksomhet;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
Expand All @@ -27,6 +25,9 @@
import no.nav.foreldrepenger.behandlingslager.behandling.personopplysning.RelasjonsRolleType;
import no.nav.foreldrepenger.behandlingslager.fagsak.FagsakYtelseType;
import no.nav.foreldrepenger.behandlingslager.virksomhet.Arbeidsgiver;
import no.nav.foreldrepenger.behandlingslager.virksomhet.Virksomhet;
import no.nav.foreldrepenger.domene.arbeidInntektsmelding.ArbeidsforholdInntektsmeldingMangelTjeneste;
import no.nav.foreldrepenger.domene.arbeidsforhold.impl.InntektsmeldingRegisterTjeneste;
import no.nav.foreldrepenger.domene.arbeidsgiver.ArbeidsgiverTjeneste;
import no.nav.foreldrepenger.domene.iay.modell.InntektsmeldingBuilder;
import no.nav.foreldrepenger.domene.iay.modell.Refusjon;
Expand All @@ -49,12 +50,16 @@ class FpInntektsmeldingTjenesteTest {
private HistorikkRepository historikkRepository;
@Mock
private ArbeidsgiverTjeneste arbeidsgiverTjeneste;
@Mock
private InntektsmeldingRegisterTjeneste inntektsmeldingRegisterTjeneste;
@Mock
private ArbeidsforholdInntektsmeldingMangelTjeneste inntektsmeldingMangelTjeneste;

private FpInntektsmeldingTjeneste fpInntektsmeldingTjeneste;

@BeforeEach
void setup() {
fpInntektsmeldingTjeneste = new FpInntektsmeldingTjeneste(klient, taskTjeneste, skjæringstidspunktTjeneste, historikkRepository, arbeidsgiverTjeneste);
fpInntektsmeldingTjeneste = new FpInntektsmeldingTjeneste(klient, taskTjeneste, skjæringstidspunktTjeneste, historikkRepository, arbeidsgiverTjeneste, inntektsmeldingRegisterTjeneste, inntektsmeldingMangelTjeneste);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.ArraySchema;
Expand All @@ -31,12 +34,15 @@
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import no.nav.foreldrepenger.behandlingslager.behandling.BehandlingStatus;
import no.nav.foreldrepenger.behandlingslager.behandling.BehandlingStegType;
import no.nav.foreldrepenger.behandlingslager.behandling.aksjonspunkt.AksjonspunktDefinisjon;
import no.nav.foreldrepenger.behandlingslager.behandling.aksjonspunkt.AksjonspunktStatus;
import no.nav.foreldrepenger.behandlingslager.behandling.aksjonspunkt.Venteårsak;
import no.nav.foreldrepenger.behandlingslager.behandling.repository.BehandlingRepository;
import no.nav.foreldrepenger.behandlingslager.behandling.vedtak.OverlappVedtak;
import no.nav.foreldrepenger.behandlingslager.behandling.vedtak.OverlappVedtakRepository;
import no.nav.foreldrepenger.behandlingslager.fagsak.FagsakRepository;
import no.nav.foreldrepenger.behandlingslager.fagsak.FagsakStatus;
import no.nav.foreldrepenger.domene.fpinntektsmelding.FpInntektsmeldingTjeneste;
import no.nav.foreldrepenger.domene.typer.Saksnummer;
import no.nav.foreldrepenger.mottak.vedtak.avstemming.VedtakAvstemPeriodeTask;
import no.nav.foreldrepenger.mottak.vedtak.avstemming.VedtakOverlappAvstemSakTask;
Expand All @@ -47,6 +53,7 @@
import no.nav.foreldrepenger.web.app.tjenester.fagsak.dto.SaksnummerDto;
import no.nav.foreldrepenger.web.app.tjenester.forvaltning.dto.AksjonspunktKodeDto;
import no.nav.foreldrepenger.web.app.tjenester.forvaltning.dto.AvstemmingPeriodeDto;
import no.nav.foreldrepenger.web.app.tjenester.forvaltning.dto.ForvaltningBehandlingIdDto;
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData;
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskDataBuilder;
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskGruppe;
Expand All @@ -61,12 +68,13 @@
@ApplicationScoped
@Transactional
public class ForvaltningUttrekkRestTjeneste {

private static final Logger LOG = LoggerFactory.getLogger(ForvaltningUttrekkRestTjeneste.class);
private EntityManager entityManager;
private BehandlingRepository behandlingRepository;
private FagsakRepository fagsakRepository;
private ProsessTaskTjeneste taskTjeneste;
private OverlappVedtakRepository overlappRepository;
private FpInntektsmeldingTjeneste fpInntektsmeldingTjeneste;
private InfotrygdFPRestanse foreldrepengerSak;
private InfotrygdSvpRestanse svangerskapspengerSak;

Expand All @@ -80,13 +88,15 @@ public ForvaltningUttrekkRestTjeneste(EntityManager entityManager,
BehandlingRepository behandlingRepository,
ProsessTaskTjeneste taskTjeneste,
OverlappVedtakRepository overlappRepository,
FpInntektsmeldingTjeneste fpInntektsmeldingTjeneste,
InfotrygdFPRestanse foreldrepengerSak,
InfotrygdSvpRestanse svangerskapspengerSak) {
this.entityManager = entityManager;
this.fagsakRepository = fagsakRepository;
this.behandlingRepository = behandlingRepository;
this.taskTjeneste = taskTjeneste;
this.overlappRepository = overlappRepository;
this.fpInntektsmeldingTjeneste = fpInntektsmeldingTjeneste;
this.foreldrepengerSak = foreldrepengerSak;
this.svangerskapspengerSak = svangerskapspengerSak;
}
Expand Down Expand Up @@ -229,6 +239,65 @@ public Response avstemOverlappForPeriode(@Parameter(description = "Periode") @Be
return Response.ok().build();
}

@POST
@Path("/opprettIMForesporselForBehandling")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
@Operation(description = "Oppretter im forespørsel task for behandlinger som mangler IM og har aksjonspunkt 7003, 7030 eller 5085. Velg enten en behandlingUuid eller aksjonspunkt", tags = "FORVALTNING-uttrekk")
@BeskyttetRessurs(actionType = ActionType.READ, resourceType = ResourceType.DRIFT)
public Response opprettImTaskForBehMedAksjonspunkt(@Valid AksjonspunktKodeDto dto, @Valid ForvaltningBehandlingIdDto behandlingIdDto) {
if(dto.getAksjonspunktDefinisjon() == null && behandlingIdDto == null) {
return Response.status(Response.Status.BAD_REQUEST).build();
}

if (behandlingIdDto != null) {
var behandlingUuid = behandlingIdDto.getBehandlingUuid();
LOG.info("Sjekker om det skal opprettes im forespørsel for behandling med uuid {}", behandlingUuid);
var behandling = behandlingRepository.hentBehandling(behandlingUuid);
if (behandling == null) {
return Response.noContent().build();
}
fpInntektsmeldingTjeneste.sjekkOmIMManglerOgOpprettForesporselTask(behandling);
} else {
var aksjonspunktkode = dto.getAksjonspunktKode();
var aksjonspunktdefinisjon = dto.getAksjonspunktDefinisjon();
if (!(AksjonspunktDefinisjon.AUTO_VENT_ETTERLYST_INNTEKTSMELDING.equals(aksjonspunktdefinisjon) || AksjonspunktDefinisjon.AUTO_VENTER_PÅ_KOMPLETT_SØKNAD.equals(
aksjonspunktdefinisjon) || AksjonspunktDefinisjon.VURDER_ARBEIDSFORHOLD_INNTEKTSMELDING.equals(aksjonspunktdefinisjon))) {
return Response.status(Response.Status.FORBIDDEN).build();
}

var behandlingIder = finnBehandlingerMedAksjonspunkt(aksjonspunktkode);
var sanitizedAksjonspunktkode = aksjonspunktkode.replace("\n", "").replace("\r", "");
LOG.info("OppretteIMForespørsler: Antall behandlinger med aksjonspunkt {}: {}", sanitizedAksjonspunktkode, behandlingIder);

if (behandlingIder.isEmpty()) {
return Response.noContent().build();
}

behandlingIder.forEach(id -> {
var behandling = behandlingRepository.hentBehandling(id);
fpInntektsmeldingTjeneste.sjekkOmIMManglerOgOpprettForesporselTask(behandling);
});
}
return Response.ok().build();
}

private List<Long> finnBehandlingerMedAksjonspunkt(String aksjonspunktkode) {
var query = entityManager.createQuery("""
select b.id
from behandling bh
join aksjonspunkt ap on ap.behandling_id = bh.id
where ap.aksjonspunkt_def = :appKode
and bh.behandling_status = :behStatus
and ap.aksjonspunkt_status = :status
and ap.vent_aarsak = :ventAarsak""", Long.class);
query.setParameter("appKode", aksjonspunktkode);
query.setParameter("behStatus", BehandlingStatus.UTREDES);
query.setParameter("ventAarsak", Venteårsak.VENT_OPDT_INNTEKTSMELDING);
query.setParameter("status", AksjonspunktStatus.OPPRETTET.getKode());
return query.getResultList();
}

@POST
@Path("/slettTidligereAvstemmingOverlapp")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
Expand Down

0 comments on commit 36da7d0

Please sign in to comment.