Skip to content

Commit 55458e7

Browse files
authored
feat(TFP-5818): avslutt kobling og fjern inaktive grunnlag task. (#2636)
* TFP-5818: Legger inn en task som skal avslutte en kobling og så rydde opp i innaktive grunnlag. * fix: fikser manglende ytelse type på kobling. Returner 204 hvis kobling mangler. * review: erstattet task med direkt tjeneste kall. * Test * sonar + ny namespace for azure-token-generator
1 parent 7eb8174 commit 55458e7

File tree

15 files changed

+507
-162
lines changed

15 files changed

+507
-162
lines changed

.deploy/dev-fss-teamforeldrepenger.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
},
6060
{
6161
"app": "azure-token-generator",
62-
"namespace": "aura",
62+
"namespace": "nais",
6363
"cluster": "dev-gcp",
6464
"roles": [
6565
"ekstern"

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/InntektArbeidYtelseRepository.java

+25-14
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import java.util.stream.Collectors;
1616

1717
import org.hibernate.jpa.HibernateHints;
18+
import org.slf4j.Logger;
19+
import org.slf4j.LoggerFactory;
1820

1921
import jakarta.enterprise.context.ApplicationScoped;
2022
import jakarta.inject.Inject;
@@ -43,6 +45,8 @@
4345
@ApplicationScoped
4446
public class InntektArbeidYtelseRepository {
4547

48+
private static final Logger LOG = LoggerFactory.getLogger(InntektArbeidYtelseRepository.class);
49+
4650
private EntityManager entityManager;
4751
private KoblingRepository koblingRepository;
4852

@@ -421,6 +425,18 @@ private void lagreOgFlush(KoblingReferanse koblingReferanse, InntektArbeidYtelse
421425
entityManager.flush();
422426
}
423427

428+
private void validerKoblingErAktiv(KoblingReferanse koblingReferanse) {
429+
koblingRepository.hentForKoblingReferanse(koblingReferanse).ifPresent(InntektArbeidYtelseRepository::validerIkkeAvsluttet);
430+
}
431+
432+
private static void validerIkkeAvsluttet(Kobling kobling) {
433+
if (!kobling.erAktiv()) {
434+
throw new TekniskException("FT-49000", String.format(
435+
"Ikke tillatt å gjøre endringer på en avsluttet kobling. Gjelder kobling med referanse %s",
436+
kobling.getKoblingReferanse()));
437+
}
438+
}
439+
424440
/**
425441
* Kaster exception hvis grunnlaget er i en ugyldig tilstand
426442
*
@@ -436,7 +452,6 @@ private void sjekkKonsistens(InntektArbeidYtelseGrunnlag grunnlag) {
436452
.ifPresent(
437453
aggregat -> aggregat.getAktørArbeid().stream().map(AktørArbeid::hentAlleYrkesaktiviteter).flatMap(Collection::stream).forEach(it -> {
438454
if (it.getArbeidsforholdRef().gjelderForSpesifiktArbeidsforhold()) {
439-
var arRef = aggregat.getEksternReferanse();
440455
arbeidsforholdInformasjon.finnEkstern(grRef, it.getArbeidsgiver(),
441456
it.getArbeidsforholdRef()); // Validerer om det finnes ekstern for intern ref
442457
// (kaster exception hvis ikke)
@@ -455,7 +470,6 @@ private void sjekkKonsistens(InntektArbeidYtelseGrunnlag grunnlag) {
455470
.ifPresent(
456471
aggregat -> aggregat.getAktørArbeid().stream().map(AktørArbeid::hentAlleYrkesaktiviteter).flatMap(Collection::stream).forEach(it -> {
457472
if (it.getArbeidsforholdRef().gjelderForSpesifiktArbeidsforhold()) {
458-
var arRef = aggregat.getEksternReferanse();
459473
arbeidsforholdInformasjon.finnEkstern(grRef, it.getArbeidsgiver(),
460474
it.getArbeidsforholdRef()); // Validerer om det finnes ekstern for intern ref
461475
// (kaster exception hvis ikke)
@@ -638,18 +652,15 @@ private Optional<InntektArbeidYtelseGrunnlag> getAktivtInntektArbeidGrunnlag(Kob
638652
throw new IllegalStateException("Finner flere aktive grunnlag på koblingReferanse=" + koblingReferanse);
639653
}
640654

641-
private Optional<Kobling> validerKoblingErAktiv(KoblingReferanse koblingReferanse) {
642-
var kobling = koblingRepository.hentForKoblingReferanse(koblingReferanse);
643-
kobling.ifPresent(InntektArbeidYtelseRepository::validerIkkeAvsluttet);
644-
return kobling;
645-
}
646-
647-
private static void validerIkkeAvsluttet(Kobling kobling) {
648-
if (!kobling.erAktiv()) {
649-
throw new TekniskException("FT-49000", String.format(
650-
"Ikke tillatt å gjøre endringer på en avsluttet kobling. Gjelder kobling med referanse %s",
651-
kobling.getKoblingReferanse()));
652-
}
655+
public void slettAlleInaktiveGrunnlagFor(KoblingReferanse koblingReferanse) {
656+
final var query = entityManager.createQuery("""
657+
DELETE FROM InntektArbeidGrunnlag gr
658+
WHERE gr.aktiv = false
659+
AND gr.koblingId = (SELECT k.id FROM Kobling k where k.koblingReferanse = :ref)
660+
""");
661+
query.setParameter("ref", koblingReferanse);
662+
var countDelete = query.executeUpdate();
663+
LOG.info("Slettet {} inaktive grunnlag for kobling {}", countDelete, koblingReferanse);
653664
}
654665

655666
private Optional<ArbeidsforholdInformasjon> hentArbeidsforholdInformasjon(Optional<InntektArbeidYtelseGrunnlag> grunnlag) {

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/iay/InntektArbeidYtelseTjeneste.java

+10
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,16 @@ public Optional<InntektArbeidYtelseGrunnlag> hentGrunnlagFor(KoblingReferanse ko
7171
return repository.hentInntektArbeidYtelseGrunnlagForBehandling(koblingReferanse);
7272
}
7373

74+
/**
75+
* Fjerner alle inaktive grunnlag for en kobling og bør brukes når koblingen deaktiveres.
76+
* Operasjonen sletter kun de underliggende `gr_arbeid_inntekt`-entitetene og ikke de tilhørende aggregatene,
77+
* siden disse kan gjenbrukes av andre koblinger ettersom grunnlaget kopieres til nye behandlinger av saken.
78+
*
79+
* @param koblingReferanse
80+
*/
81+
public void slettInaktiveGrunnlagFor(KoblingReferanse koblingReferanse) {
82+
repository.slettAlleInaktiveGrunnlagFor(koblingReferanse);
83+
}
7484

7585
public Set<Inntektsmelding> hentAlleInntektsmeldingerFor(AktørId aktørId, Saksnummer saksnummer, YtelseType ytelseType) {
7686
return repository.hentAlleInntektsmeldingerFor(aktørId, saksnummer, ytelseType);

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/RegisterdataInnhentingTask.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ public RegisterdataInnhentingTask(LåsRepository låsRepository,
4949

5050
@Override
5151
protected void prosesser(ProsessTaskData prosessTaskData) {
52-
String nyKoblingId = prosessTaskData.getPropertyValue(TaskConstants.KOBLING_ID);
53-
Long koblingId = nyKoblingId != null ? Long.valueOf(nyKoblingId) : prosessTaskData.getBehandlingIdAsLong();
52+
Long koblingId = Long.valueOf(prosessTaskData.getPropertyValue(TaskConstants.KOBLING_ID));
5453
Kobling kobling = koblingTjeneste.hent(koblingId);
5554
LOG.info("Starter registerinnhenting for sak=[{}, {}] med behandling='{}'", kobling.getSaksnummer(), kobling.getYtelseType(),
5655
kobling.getKoblingReferanse());

domenetjenester/iay/src/test/java/no/nav/foreldrepenger/abakus/domene/iay/InntektArbeidYtelseRepositoryTest.java

+5-8
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import java.util.Optional;
1212
import java.util.Set;
1313
import java.util.UUID;
14-
import java.util.stream.Collectors;
1514

1615
import org.junit.jupiter.api.BeforeEach;
1716
import org.junit.jupiter.api.Test;
@@ -52,7 +51,7 @@ class InntektArbeidYtelseRepositoryTest {
5251
private KoblingRepository koblingRepository;
5352

5453
@BeforeEach
55-
public void setup() {
54+
void setup() {
5655
repository = new InntektArbeidYtelseRepository(jpaExtension.getEntityManager());
5756
koblingRepository = new KoblingRepository(jpaExtension.getEntityManager());
5857
}
@@ -395,7 +394,7 @@ void skal_kunne_lagre_overstyring_av_oppgitt_opptjening_flere_ganger() {
395394
.map(Optional::get)
396395
.map(InntektsmeldingAggregat::getInntektsmeldinger)
397396
.flatMap(Collection::stream)
398-
.collect(Collectors.toList());
397+
.toList();
399398
assertThat(inntektsmeldings).hasSize(4);
400399

401400
var aktivtGrunnlag = repository.hentInntektArbeidYtelseForBehandling(koblingReferanse);
@@ -475,7 +474,7 @@ void skal_kun_hente_aktivt_grunnlag() {
475474
.map(Optional::get)
476475
.map(InntektsmeldingAggregat::getInntektsmeldinger)
477476
.flatMap(Collection::stream)
478-
.collect(Collectors.toList());
477+
.toList();
479478
assertThat(inntektsmeldings).hasSize(1);
480479

481480
var aktivtGrunnlag = repository.hentInntektArbeidYtelseForBehandling(koblingReferanse);
@@ -552,7 +551,7 @@ void skal_kun_hente_aktivt_grunnlag() {
552551
.map(Optional::get)
553552
.map(InntektsmeldingAggregat::getInntektsmeldinger)
554553
.flatMap(Collection::stream)
555-
.collect(Collectors.toList());
554+
.toList();
556555
assertThat(inntektsmeldings).hasSize(4);
557556

558557
var aktivtGrunnlag = repository.hentInntektArbeidYtelseForBehandling(koblingReferanse);
@@ -608,8 +607,6 @@ void skal_kun_hente_aktivt_grunnlag() {
608607
.medRefusjon(BigDecimal.ONE)
609608
.build();
610609

611-
var b = "AR122".compareTo("AR124") > 0;
612-
613610
repository.lagre(ko.getKoblingReferanse(), ArbeidsforholdInformasjonBuilder.oppdatere(new ArbeidsforholdInformasjon()),
614611
List.of(inntektsmelding1, inntektsmelding2, inntektsmelding3));
615612

@@ -623,7 +620,7 @@ void skal_kun_hente_aktivt_grunnlag() {
623620
.map(Optional::get)
624621
.map(InntektsmeldingAggregat::getInntektsmeldinger)
625622
.flatMap(Collection::stream)
626-
.collect(Collectors.toList());
623+
.toList();
627624
assertThat(inntektsmeldings).hasSize(2);
628625

629626
var aktivtGrunnlag = repository.hentInntektArbeidYtelseForBehandling(koblingReferanse);

domenetjenester/kobling/pom.xml

-1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,5 @@
4343
<groupId>no.nav.foreldrepenger.abakus</groupId>
4444
<artifactId>felles</artifactId>
4545
</dependency>
46-
4746
</dependencies>
4847
</project>

domenetjenester/kobling/src/main/java/no/nav/foreldrepenger/abakus/kobling/KoblingRestTjeneste.java

-126
This file was deleted.

domenetjenester/kobling/src/main/java/no/nav/foreldrepenger/abakus/kobling/KoblingTask.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ protected KoblingTask(LåsRepository låsRepository) {
2121

2222
@Override
2323
public void doTask(ProsessTaskData prosessTaskData) {
24-
var nyKoblingId = prosessTaskData.getPropertyValue(TaskConstants.KOBLING_ID);
25-
var koblingId = nyKoblingId != null ? Long.valueOf(nyKoblingId) : prosessTaskData.getBehandlingIdAsLong();
24+
var koblingId = Long.valueOf(prosessTaskData.getPropertyValue(TaskConstants.KOBLING_ID));
2625
LOG_CONTEXT.add("koblingId", koblingId);
2726

2827
var koblingLås = låsRepository.taLås(koblingId);

domenetjenester/kobling/src/main/java/no/nav/foreldrepenger/abakus/kobling/repository/KoblingRepository.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public void lagre(Kobling nyKobling) {
7575
var diff = getDiff(eksisterendeKobling.orElse(null), nyKobling);
7676
// Diffen blir aldri forskjellig om nyKobling er allerede persistert i databasen. Men endringen blir skrevet til databasen likevel da hele transaksjonen commites.
7777
if (!diff.isEmpty()) {
78-
if (nyKobling.getId() != null) {
78+
if (nyKobling.getId() == null) {
7979
LOG.info("KOBLING: Lagrer en helt ny kobling med id={}, endringer={}", nyKobling.getId(), diff.getLeafDifferences());
8080
} else {
8181
LOG.info("KOBLING: Lagrer endringer på kobling med id={}, endringer={}", nyKobling.getId(), diff.getLeafDifferences());

kodeverk/src/main/java/no/nav/abakus/iaygrunnlag/kodeverk/YtelseType.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,7 @@ public static Map<String, YtelseType> kodeMap() {
8888
}
8989

9090
public static List<YtelseType> abakusYtelser() {
91-
return List.of(YtelseType.FORELDREPENGER, YtelseType.SVANGERSKAPSPENGER, YtelseType.OMSORGSPENGER, YtelseType.PLEIEPENGER_SYKT_BARN,
92-
YtelseType.PLEIEPENGER_NÆRSTÅENDE, YtelseType.OPPLÆRINGSPENGER, YtelseType.FRISINN);
91+
return List.of(YtelseType.FORELDREPENGER, YtelseType.SVANGERSKAPSPENGER);
9392
}
9493

9594
@Override

kontrakt/src/main/java/no/nav/abakus/iaygrunnlag/request/AvsluttGrunnlagRequest.java kontrakt/src/main/java/no/nav/abakus/iaygrunnlag/request/AvsluttKoblingRequest.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
@JsonIgnoreProperties(ignoreUnknown = true)
1616
@JsonInclude(value = Include.NON_ABSENT, content = Include.NON_EMPTY)
1717
@JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE, creatorVisibility = Visibility.NONE)
18-
public class AvsluttGrunnlagRequest {
18+
public class AvsluttKoblingRequest {
1919

2020
/**
2121
* Saksnummer alle grunnlag og koblinger er linket til.
@@ -41,10 +41,10 @@ public class AvsluttGrunnlagRequest {
4141
private PersonIdent aktør;
4242

4343
@JsonCreator
44-
public AvsluttGrunnlagRequest(@JsonProperty(value = "saksnummer", required = true) @Valid @NotNull String saksnummer,
45-
@JsonProperty(value = "referanse", required = true) @Valid @NotNull UUID referanse,
46-
@JsonProperty(value = "ytelseType", required = true) @NotNull YtelseType ytelseType,
47-
@JsonProperty(value = "aktør", required = true) @NotNull @Valid PersonIdent aktør) {
44+
public AvsluttKoblingRequest(@JsonProperty(value = "saksnummer", required = true) @Valid @NotNull String saksnummer,
45+
@JsonProperty(value = "referanse", required = true) @Valid @NotNull UUID referanse,
46+
@JsonProperty(value = "ytelseType", required = true) @NotNull YtelseType ytelseType,
47+
@JsonProperty(value = "aktør", required = true) @NotNull @Valid PersonIdent aktør) {
4848
this.saksnummer = saksnummer;
4949
this.referanse = referanse;
5050
this.ytelseType = ytelseType;

0 commit comments

Comments
 (0)