Skip to content

Commit 0ba9f77

Browse files
ramrock93qtips
andauthored
Legger på nye felter i Behandling. (#415)
* Legger på opprettet og avsluttet datoer i Behandling. Dette vil medføre parsingfeil for allerede persistere behandlinger uten opprettetDato. Det kan løses enten via republisering av de dataene, eller ved å gjøre opprettetDato nullable. * nye felter: - aksjonspunkt.tidsfrist: når behandlingen går av vent - behandling.opprettetTidspunkt og avsluttetTidspunkt - behandling.behandlingResultat: resultat på behandling hvis avsluttet. Bruker eget enum fordi ønsker ikke å eksponere alle resultattypene bruker æøå i enum slik som i k9-sak endrer til å bruke tidspunkt på opprettet fordi vi har den. Bruker zonedatetime da vi allerede bruker det i søknad. * Opphør skal ikke brukes da den er depracted i k9-sak * støtte for saksbehandlingstid utland. Endrer konstantene til å bruke Period da det er ment for dager og større enheter. Duration er ment for timer. Endrer også til å bruke string slik som i k9-sak fordi det tydlig viser format på perioden. * Laget temp serializer nødvendig for å kunne serializere k9-sak kodeverdi objekter til string * venteårsaker for tidlig søknad og meldekort --------- Co-authored-by: Qadeer Ahmad Khan <[email protected]>
1 parent ce98922 commit 0ba9f77

File tree

8 files changed

+122
-31
lines changed

8 files changed

+122
-31
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package no.nav.k9.innsyn;
2+
3+
import java.io.IOException;
4+
5+
import com.fasterxml.jackson.core.JsonGenerator;
6+
import com.fasterxml.jackson.databind.ObjectMapper;
7+
import com.fasterxml.jackson.databind.SerializerProvider;
8+
import com.fasterxml.jackson.databind.module.SimpleModule;
9+
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
10+
11+
import no.nav.k9.kodeverk.api.Kodeverdi;
12+
import no.nav.k9.søknad.JsonUtils;
13+
14+
/**
15+
* nødvendig for å kunne serializere k9-sak kodeverdi objekter til string
16+
* kan fjernes når k9-sak har tatt i bruk @JsonValue på sine kodeobjekter
17+
*/
18+
public class TempObjectMapperKodeverdi {
19+
20+
public static ObjectMapper getObjectMapper() {
21+
var om = JsonUtils.getObjectMapper().copy();
22+
var m = new SimpleModule();
23+
m.addSerializer(Kodeverdi.class, new TempKodeverdiSerializer());
24+
om.registerModule(m);
25+
return om;
26+
}
27+
28+
private static class TempKodeverdiSerializer extends StdSerializer<Kodeverdi> {
29+
30+
public TempKodeverdiSerializer(){
31+
super(Kodeverdi.class);
32+
}
33+
34+
@Override
35+
public void serialize(Kodeverdi value, JsonGenerator gen, SerializerProvider provider) throws IOException {
36+
gen.writeString(value.getKode());
37+
}
38+
}
39+
40+
}
41+
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
package no.nav.k9.innsyn.sak;
22

3+
import java.time.ZonedDateTime;
4+
35
import com.fasterxml.jackson.annotation.JsonProperty;
6+
47
import jakarta.validation.Valid;
58
import jakarta.validation.constraints.NotNull;
69

710
public record Aksjonspunkt(
8-
@JsonProperty("venteårsak") @Valid @NotNull Venteårsak venteårsak
11+
@JsonProperty("venteårsak") @Valid @NotNull Venteårsak venteårsak,
12+
@JsonProperty("tidsfrist") ZonedDateTime tidsfrist
913
) {
1014

1115
public enum Venteårsak {
12-
INNTEKTSMELDING, MEDISINSK_DOKUMENTASJON
16+
INNTEKTSMELDING, MEDISINSK_DOKUMENTASJON, FOR_TIDLIG_SOKNAD, MELDEKORT
1317
}
1418
}

innsyn/src/main/java/no/nav/k9/innsyn/sak/Behandling.java

+28-10
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
package no.nav.k9.innsyn.sak;
22

3+
import java.time.Period;
4+
import java.time.ZonedDateTime;
5+
import java.util.Comparator;
6+
import java.util.Optional;
7+
import java.util.Set;
8+
import java.util.UUID;
9+
310
import com.fasterxml.jackson.annotation.JsonAutoDetect;
411
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
12+
import com.fasterxml.jackson.annotation.JsonInclude;
513
import com.fasterxml.jackson.annotation.JsonProperty;
614
import com.fasterxml.jackson.annotation.JsonTypeName;
15+
716
import jakarta.validation.Valid;
817
import jakarta.validation.constraints.NotNull;
918
import no.nav.k9.innsyn.InnsynHendelseData;
1019
import no.nav.k9.konstant.Konstant;
1120

12-
import java.time.Duration;
13-
import java.time.ZonedDateTime;
14-
import java.util.Comparator;
15-
import java.util.Optional;
16-
import java.util.Set;
17-
import java.util.UUID;
18-
1921
@JsonIgnoreProperties(ignoreUnknown = true)
2022
@JsonAutoDetect(getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, fieldVisibility = JsonAutoDetect.Visibility.ANY)
2123
@JsonTypeName(InnsynHendelseData.BEHANDLING_INNHOLD)
@@ -25,6 +27,18 @@ public record Behandling(
2527
@NotNull
2628
UUID behandlingsId,
2729

30+
@JsonProperty(value = "opprettetTidspunkt", required = true)
31+
@NotNull
32+
ZonedDateTime opprettetTidspunkt,
33+
34+
@JsonInclude(value = JsonInclude.Include.NON_NULL)
35+
@JsonProperty(value = "avsluttetTidspunkt")
36+
ZonedDateTime avsluttetTidspunkt,
37+
38+
@JsonInclude(value = JsonInclude.Include.NON_NULL)
39+
@JsonProperty(value = "resultat")
40+
BehandlingResultat resultat,
41+
2842
@JsonProperty(value = "status", required = true)
2943
@Valid
3044
@NotNull
@@ -47,8 +61,8 @@ public record Behandling(
4761
Fagsak fagsak
4862

4963
) implements InnsynHendelseData {
50-
public Optional<ZonedDateTime> utledSaksbehandlingsfrist(Duration overstyrSaksbehandlingstid) {
51-
if (erUtenlands) {
64+
public Optional<ZonedDateTime> utledSaksbehandlingsfrist(Period overstyrSaksbehandlingstid) {
65+
if (avsluttetTidspunkt != null) {
5266
return Optional.empty();
5367
}
5468

@@ -57,7 +71,11 @@ public Optional<ZonedDateTime> utledSaksbehandlingsfrist(Duration overstyrSaksbe
5771
.map(SøknadInfo::mottattTidspunkt);
5872

5973
return tidligsteMottattDato.map(it -> {
60-
Duration saksbehandlingstid = overstyrSaksbehandlingstid != null ? overstyrSaksbehandlingstid : Konstant.FORVENTET_SAKSBEHANDLINGSTID;
74+
if (overstyrSaksbehandlingstid != null) {
75+
return it.plus(overstyrSaksbehandlingstid);
76+
}
77+
78+
Period saksbehandlingstid = erUtenlands ? Konstant.UTLAND_FORVENTET_SAKSBEHANDLINGSTID : Konstant.FORVENTET_SAKSBEHANDLINGSTID;
6179
return it.plus(saksbehandlingstid);
6280
});
6381
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package no.nav.k9.innsyn.sak;
2+
3+
public enum BehandlingResultat {
4+
INNVILGET, DELVIS_INNVILGET, AVSLÅTT, HENLAGT
5+
}

innsyn/src/main/java/no/nav/k9/innsyn/sak/BehandlingStatus.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44
* @see <a href="https://github.com/navikt/k9-sak/blob/fcaffc46d11cb5cc10738ad5cc34d981b0fbcff1/kodeverk/src/main/java/no/nav/k9/kodeverk/behandling/BehandlingStatus.java">BehandlingStatus i k9-sak</a>
55
*/
66
public enum BehandlingStatus {
7-
OPPRETTET, UNDER_BEHANDLING, PAA_VENT, AVSLUTTET
7+
OPPRETTET, UNDER_BEHANDLING, PÅ_VENT, AVSLUTTET
88
}

innsyn/src/test/java/no/nav/k9/innsyn/sak/BehandlingTest.java

+27-9
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import static org.assertj.core.api.Assertions.assertThat;
44

5-
import java.time.Duration;
65
import java.time.LocalDate;
6+
import java.time.Period;
77
import java.time.ZoneId;
88
import java.time.ZonedDateTime;
99
import java.util.Arrays;
@@ -14,6 +14,7 @@
1414
import org.junit.jupiter.api.Test;
1515

1616
import no.nav.k9.innsyn.InnsynHendelse;
17+
import no.nav.k9.innsyn.TempObjectMapperKodeverdi;
1718
import no.nav.k9.kodeverk.behandling.FagsakYtelseType;
1819
import no.nav.k9.sak.typer.AktørId;
1920
import no.nav.k9.sak.typer.Saksnummer;
@@ -43,6 +44,7 @@ void deserialiserFraJsonString() {
4344
"data": {
4445
"type": "BEHANDLING_INNHOLD",
4546
"behandlingsId": "f1b3f3c3-0b1a-4e4a-9b1a-3c3f3b1a4e4a",
47+
"opprettetTidspunkt": "2024-02-13T12:00:00.000Z",
4648
"fagsak": {
4749
"saksnummer": "ABC123",
4850
"søkerAktørId": "11111111111",
@@ -51,6 +53,8 @@ void deserialiserFraJsonString() {
5153
},
5254
"status": "OPPRETTET",
5355
"erUtenlands": "false",
56+
"avsluttetTidspunkt": "2024-02-14T12:00:00.000Z",
57+
"behandlingResultat": "INNVILGET",
5458
"søknader": [
5559
{
5660
"status": "MOTTATT",
@@ -61,7 +65,8 @@ void deserialiserFraJsonString() {
6165
],
6266
"aksjonspunkter": [
6367
{
64-
"venteårsak": "INNTEKTSMELDING"
68+
"venteårsak": "INNTEKTSMELDING",
69+
"tidsfrist": "2024-02-15T12:00:00.000Z"
6570
}
6671
]
6772
}
@@ -79,8 +84,12 @@ void deserialiserFraJsonString() {
7984
// behandlinger
8085
assertThat(behandling.status()).isEqualTo(BehandlingStatus.OPPRETTET);
8186
assertThat(behandling.erUtenlands()).isFalse();
87+
assertThat(behandling.opprettetTidspunkt()).isEqualTo(ZonedDateTime.parse("2024-02-13T12:00:00.000Z"));
88+
assertThat(behandling.avsluttetTidspunkt()).isEqualTo(ZonedDateTime.parse("2024-02-14T12:00:00.000Z"));
89+
assertThat(behandling.erUtenlands()).isFalse();
8290
assertThat(behandling.behandlingsId()).isEqualTo(UUID.fromString("f1b3f3c3-0b1a-4e4a-9b1a-3c3f3b1a4e4a"));
8391

92+
8493
// Søknader
8594
Set<SøknadInfo> søknader = behandling.søknader();
8695
assertThat(søknader).hasSize(1);
@@ -96,6 +105,10 @@ void deserialiserFraJsonString() {
96105
assertThat(aksjonspunkter).hasSize(1);
97106
Aksjonspunkt aksjonspunkt = aksjonspunkter.stream().findFirst().get();
98107
assertThat(aksjonspunkt.venteårsak()).isEqualTo(Aksjonspunkt.Venteårsak.INNTEKTSMELDING);
108+
assertThat(aksjonspunkt.tidsfrist()).isEqualTo(ZonedDateTime.parse("2024-02-15T12:00:00.000Z"));
109+
110+
String json = JsonUtils.toString(hendelse, TempObjectMapperKodeverdi.getObjectMapper());
111+
assertThat(json).doesNotContain("kodeverk");
99112
}
100113

101114
@Test
@@ -106,20 +119,22 @@ void skalRegneUtSaksbehandlingsfrist() {
106119
assertThat(saksbehandlingsfrist).isEqualTo(tidligsteMottattTidspunkt.plusWeeks(6));
107120
}
108121

122+
123+
109124
@Test
110125
void skalOverstureOgRegneUtSaksbehandlingsfrist() {
111126
ZonedDateTime tidligsteMottattTidspunkt = LocalDate.of(2024, 1, 5).atStartOfDay(ZoneId.systemDefault());
112127
var behandling = lagBehandling(false, tidligsteMottattTidspunkt.plusDays(10), tidligsteMottattTidspunkt, tidligsteMottattTidspunkt.plusMonths(20));
113-
ZonedDateTime saksbehandlingsfrist = behandling.utledSaksbehandlingsfrist(Duration.ofDays(5)).get();
128+
ZonedDateTime saksbehandlingsfrist = behandling.utledSaksbehandlingsfrist(Period.ofDays(5)).get();
114129
assertThat(saksbehandlingsfrist).isEqualTo(tidligsteMottattTidspunkt.plusDays(5));
115130
}
116131

117132
@Test
118-
void skalIkkeRegneUtSaksbehandlingsfristForUtenlandsbehandling() {
119-
ZonedDateTime mottattidspunkt = LocalDate.of(2024, 1, 5).atStartOfDay(ZoneId.systemDefault());
120-
var behandling = lagBehandling(true, mottattidspunkt);
121-
var saksbehandlingsfrist = behandling.utledSaksbehandlingsfrist(null);
122-
assertThat(saksbehandlingsfrist).isEmpty();
133+
void skalRegneUtSaksbehandlingsfristUtland() {
134+
ZonedDateTime tidligsteMottattTidspunkt = LocalDate.of(2024, 1, 5).atStartOfDay(ZoneId.systemDefault());
135+
var behandling = lagBehandling(true, tidligsteMottattTidspunkt.plusDays(10), tidligsteMottattTidspunkt, tidligsteMottattTidspunkt.plusMonths(20));
136+
ZonedDateTime saksbehandlingsfrist = behandling.utledSaksbehandlingsfrist(null).get();
137+
assertThat(saksbehandlingsfrist).isEqualTo(tidligsteMottattTidspunkt.plusMonths(6));
123138
}
124139

125140
private static Behandling lagBehandling() {
@@ -131,7 +146,7 @@ private static Behandling lagBehandling(boolean erUtenlands, ZonedDateTime... s
131146
Set<SøknadInfo> søknader = Arrays.stream(søknadtidspunkter).map(it -> new SøknadInfo(SøknadStatus.MOTTATT, UUID.randomUUID().toString(), it, Kildesystem.SØKNADSDIALOG)).collect(Collectors.toSet());
132147

133148
Set<Aksjonspunkt> aksjonspunkter = Set.of(
134-
new Aksjonspunkt(Aksjonspunkt.Venteårsak.MEDISINSK_DOKUMENTASJON)
149+
new Aksjonspunkt(Aksjonspunkt.Venteårsak.MEDISINSK_DOKUMENTASJON, ZonedDateTime.now())
135150
);
136151

137152
String saksnummer = "ABC123";
@@ -147,6 +162,9 @@ private static Behandling lagBehandling(boolean erUtenlands, ZonedDateTime... s
147162

148163
Behandling behandling = new Behandling(
149164
UUID.randomUUID(),
165+
ZonedDateTime.now(),
166+
null,
167+
BehandlingResultat.INNVILGET,
150168
BehandlingStatus.OPPRETTET,
151169
søknader,
152170
aksjonspunkter,
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
package no.nav.k9.konstant;
22

3-
import java.time.Duration;
4-
import java.time.temporal.ChronoUnit;
3+
import java.time.Period;
54

65
public class Konstant {
7-
private static final Long SAKSBEHANDLINGSTID_UKER = 6L;
8-
private static final Long ANTALL_UKEDAGER = 7L;
9-
/*
10-
* ChronoUnit.WEEKS har ikke en fast varighet fordi lengden av en uke kan variere for eksempel, pga.sommertid).
11-
* Bruker derfor ChronoUnit.DAYS for å være sikker på at vi får riktig varighet.
12-
*/
13-
public static final Duration FORVENTET_SAKSBEHANDLINGSTID = Duration.of(SAKSBEHANDLINGSTID_UKER * ANTALL_UKEDAGER, ChronoUnit.DAYS);
6+
private static final String SAKSBEHANDLINGSTID = "P6W";
7+
private static final String UTLAND_SAKSBEHANDLINGSTID = "P6M";
8+
9+
public static final Period FORVENTET_SAKSBEHANDLINGSTID = Period.parse(SAKSBEHANDLINGSTID);
10+
public static final Period UTLAND_FORVENTET_SAKSBEHANDLINGSTID = Period.parse(UTLAND_SAKSBEHANDLINGSTID);
1411
}

soknad/src/main/java/no/nav/k9/søknad/JsonUtils.java

+8
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ private JsonUtils() {
2727
}
2828

2929
public static String toString(Object object) {
30+
return toString(object, objectMapper);
31+
}
32+
33+
/**
34+
* Tillater å override objectmapper. Nødvendig i en overgangsfase mens Kodeverdi objekter i k9sak
35+
* overføres til @JsonValue
36+
*/
37+
public static String toString(Object object, ObjectMapper objectMapper) {
3038
try {
3139
return objectMapper.writer(new PlatformIndependentPrettyPrinter()).writeValueAsString(object);
3240
} catch (JsonProcessingException e) {

0 commit comments

Comments
 (0)