diff --git a/fp-topics/hendelser-behandling/pom.xml b/fp-topics/hendelser-behandling/pom.xml
new file mode 100644
index 00000000..7ffb519a
--- /dev/null
+++ b/fp-topics/hendelser-behandling/pom.xml
@@ -0,0 +1,58 @@
+
+
+
+ no.nav.foreldrepenger.kontrakter.topics
+ fp-topics
+ ${revision}
+
+ 4.0.0
+
+ FP-TOPICS :: Behandlingshendelser
+ Kontrakt for behandlingsendringer
+ hendelser-behandling
+
+ jar
+
+
+
+ jakarta.validation
+ jakarta.validation-api
+ provided
+
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+ provided
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jdk8
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+
+
+
+
+ org.hibernate.validator
+ hibernate-validator
+ test
+
+
+ org.glassfish
+ jakarta.el
+ test
+
+
+
+
\ No newline at end of file
diff --git a/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Aksjonspunktstatus.java b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Aksjonspunktstatus.java
new file mode 100644
index 00000000..21dec459
--- /dev/null
+++ b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Aksjonspunktstatus.java
@@ -0,0 +1,7 @@
+package no.nav.vedtak.hendelser.behandling;
+
+public enum Aksjonspunktstatus {
+ AVBRUTT,
+ OPPRETTET,
+ UTFØRT,
+}
diff --git "a/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Akt\303\270rId.java" "b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Akt\303\270rId.java"
new file mode 100644
index 00000000..33114ad8
--- /dev/null
+++ "b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Akt\303\270rId.java"
@@ -0,0 +1,31 @@
+package no.nav.vedtak.hendelser.behandling;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+public class AktørId {
+
+ @NotNull
+ @JsonValue
+ @Pattern(regexp = "^\\d{13}$")
+ private String aktørId;
+
+ public AktørId() {
+ }
+
+ public AktørId(String aktørId) {
+ this.aktørId = aktørId;
+ }
+
+
+ public String getAktørId() {
+ return aktørId;
+ }
+
+ public void setAktørId(@JsonProperty("aktørId") String aktørId) {
+ this.aktørId = aktørId;
+ }
+}
diff --git a/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/BehandlingHendelse.java b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/BehandlingHendelse.java
new file mode 100644
index 00000000..0c64677e
--- /dev/null
+++ b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/BehandlingHendelse.java
@@ -0,0 +1,26 @@
+package no.nav.vedtak.hendelser.behandling;
+
+import java.util.UUID;
+
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+
+import no.nav.vedtak.hendelser.behandling.v1.BehandlingHendelseV1;
+
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ property = "version")
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = BehandlingHendelseV1.class, name = "1.0"),
+})
+public abstract class BehandlingHendelse {
+
+ public abstract UUID getHendelseUuid();
+
+ public abstract UUID getBehandlingUuid();
+
+ public abstract Kildesystem getKildesystem();
+
+ public abstract Hendelse getHendelse();
+
+}
diff --git a/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Behandlingsstatus.java b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Behandlingsstatus.java
new file mode 100644
index 00000000..9e9648a1
--- /dev/null
+++ b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Behandlingsstatus.java
@@ -0,0 +1,9 @@
+package no.nav.vedtak.hendelser.behandling;
+
+public enum Behandlingsstatus {
+ OPPRETTET,
+ UTREDES,
+ FATTER_VEDTAK,
+ IVERKSETTER_VEDTAK,
+ AVSLUTTET,
+}
diff --git a/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Behandlingstype.java b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Behandlingstype.java
new file mode 100644
index 00000000..323571af
--- /dev/null
+++ b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Behandlingstype.java
@@ -0,0 +1,14 @@
+package no.nav.vedtak.hendelser.behandling;
+
+public enum Behandlingstype {
+
+ FØRSTEGANGS,
+ REVURDERING,
+
+ TILBAKEBETALING,
+ TILBAKEBETALING_REVURDERING,
+
+ KLAGE,
+ ANKE,
+ INNSYN,
+}
diff --git "a/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Behandlings\303\245rsak.java" "b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Behandlings\303\245rsak.java"
new file mode 100644
index 00000000..d021ec0b
--- /dev/null
+++ "b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Behandlings\303\245rsak.java"
@@ -0,0 +1,8 @@
+package no.nav.vedtak.hendelser.behandling;
+
+public enum Behandlingsårsak {
+ SØKNAD,
+ PLEIEPENGER,
+ BERØRT,
+ ANNET
+}
diff --git a/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Hendelse.java b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Hendelse.java
new file mode 100644
index 00000000..f1c6598f
--- /dev/null
+++ b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Hendelse.java
@@ -0,0 +1,12 @@
+package no.nav.vedtak.hendelser.behandling;
+
+public enum Hendelse {
+ OPPRETTET,
+ AVSLUTTET,
+ MANGLERSØKNAD,
+ PAPIRSØKNAD,
+ AKSJONSPUNKT,
+ VENTETILSTAND,
+ BRUKEROPPGAVE,
+ ENHET
+}
diff --git a/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Kildesystem.java b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Kildesystem.java
new file mode 100644
index 00000000..4a153345
--- /dev/null
+++ b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Kildesystem.java
@@ -0,0 +1,6 @@
+package no.nav.vedtak.hendelser.behandling;
+
+public enum Kildesystem {
+ FPSAK,
+ FPTILBAKE
+}
diff --git a/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Ytelse.java b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Ytelse.java
new file mode 100644
index 00000000..b0fa7e41
--- /dev/null
+++ b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/Ytelse.java
@@ -0,0 +1,9 @@
+package no.nav.vedtak.hendelser.behandling;
+
+public enum Ytelse {
+
+ ENGANGSTØNAD,
+ FORELDREPENGER,
+ SVANGERSKAPSPENGER
+
+}
diff --git a/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/los/LosBehandlingDto.java b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/los/LosBehandlingDto.java
new file mode 100644
index 00000000..82fca895
--- /dev/null
+++ b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/los/LosBehandlingDto.java
@@ -0,0 +1,45 @@
+package no.nav.vedtak.hendelser.behandling.los;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.UUID;
+
+import javax.validation.constraints.NotNull;
+
+import no.nav.vedtak.hendelser.behandling.Aksjonspunktstatus;
+import no.nav.vedtak.hendelser.behandling.AktørId;
+import no.nav.vedtak.hendelser.behandling.Behandlingsstatus;
+import no.nav.vedtak.hendelser.behandling.Behandlingstype;
+import no.nav.vedtak.hendelser.behandling.Behandlingsårsak;
+import no.nav.vedtak.hendelser.behandling.Kildesystem;
+import no.nav.vedtak.hendelser.behandling.Ytelse;
+
+public record LosBehandlingDto(@NotNull UUID behandlingUuid,
+ @NotNull Kildesystem kildesystem,
+ @NotNull String saksnummer,
+ @NotNull Ytelse ytelse,
+ @NotNull AktørId aktørId,
+ @NotNull Behandlingstype behandlingstype,
+ @NotNull Behandlingsstatus behandlingsstatus,
+ @NotNull LocalDateTime opprettetTidspunkt,
+ String behandlendeEnhetId,
+ LocalDate behandlingsfrist,
+ String ansvarligSaksbehandlerIdent,
+ List aksjonspunkt,
+ List behandlingsårsaker,
+ boolean faresignaler,
+ BigDecimal feilutbetaltBeløp,
+ LocalDate førsteFeilutbetalingDato,
+ boolean refusjonskrav,
+ LosForeldrepengerDto foreldrepengerDto) {
+
+
+ public record LosAksjonspunktDto(String definisjon, Aksjonspunktstatus status, String begrunnelse, LocalDateTime fristTid) {
+ }
+
+ public record LosForeldrepengerDto(boolean annenForelderRettEØS, boolean sykdomsvurdering, boolean gradering) {
+ }
+
+}
\ No newline at end of file
diff --git a/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/v1/BehandlingHendelseV1.java b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/v1/BehandlingHendelseV1.java
new file mode 100644
index 00000000..69a70157
--- /dev/null
+++ b/fp-topics/hendelser-behandling/src/main/java/no/nav/vedtak/hendelser/behandling/v1/BehandlingHendelseV1.java
@@ -0,0 +1,163 @@
+package no.nav.vedtak.hendelser.behandling.v1;
+
+import java.util.UUID;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import no.nav.vedtak.hendelser.behandling.AktørId;
+import no.nav.vedtak.hendelser.behandling.BehandlingHendelse;
+import no.nav.vedtak.hendelser.behandling.Behandlingstype;
+import no.nav.vedtak.hendelser.behandling.Hendelse;
+import no.nav.vedtak.hendelser.behandling.Kildesystem;
+import no.nav.vedtak.hendelser.behandling.Ytelse;
+
+public class BehandlingHendelseV1 extends BehandlingHendelse {
+
+ /**
+ * Behandling som er endret
+ */
+ @NotNull
+ @Valid
+ @JsonProperty("hendelseUuid")
+ private UUID hendelseUuid;
+
+ /**
+ * Behandling som er endret
+ */
+ @NotNull
+ @Valid
+ @JsonProperty("behandlingUuid")
+ private UUID behandlingUuid;
+
+ /**
+ * Kilde for hendelse
+ */
+ @NotNull
+ @Valid
+ @JsonProperty("kildesystem")
+ private Kildesystem kildesystem;
+
+ /**
+ * Hendelse / endringstype
+ */
+ @NotNull
+ @Valid
+ @JsonProperty("hendelse")
+ private Hendelse hendelse;
+
+ /**
+ * Behandlingen gjelder bruker
+ */
+ @Valid
+ @JsonProperty("aktørId")
+ private AktørId aktørId;
+
+ /**
+ * Behandlingen gjelder saksnummer
+ */
+ @JsonProperty("saksnummer")
+ private String saksnummer;
+
+ /**
+ * Saken gjelder ytelse
+ */
+ @JsonProperty("ytelse")
+ private Ytelse ytelse;
+
+ /**
+ * Behandling av type
+ */
+ @JsonProperty("behandlingstype")
+ private Behandlingstype behandlingstype;
+
+ @Override
+ public UUID getHendelseUuid() {
+ return hendelseUuid;
+ }
+
+ @Override
+ public UUID getBehandlingUuid() {
+ return behandlingUuid;
+ }
+
+ @Override
+ public Kildesystem getKildesystem() {
+ return kildesystem;
+ }
+
+ @Override
+ public Hendelse getHendelse() {
+ return hendelse;
+ }
+
+ public AktørId getAktørId() {
+ return aktørId;
+ }
+
+ public String getSaksnummer() {
+ return saksnummer;
+ }
+
+ public Ytelse getYtelse() {
+ return ytelse;
+ }
+
+ public Behandlingstype getBehandlingstype() {
+ return behandlingstype;
+ }
+
+ public static class Builder {
+ private BehandlingHendelseV1 behandlingHendelse;
+
+ public Builder() {
+ behandlingHendelse = new BehandlingHendelseV1();
+ }
+
+ public Builder medHendelseUuid(UUID hendelseUuid) {
+ behandlingHendelse.hendelseUuid = hendelseUuid;
+ return this;
+ }
+
+ public Builder medBehandlingUuid(UUID behandlingUuid) {
+ behandlingHendelse.behandlingUuid = behandlingUuid;
+ return this;
+ }
+
+ public Builder medKildesystem(Kildesystem kildesystem) {
+ behandlingHendelse.kildesystem = kildesystem;
+ return this;
+ }
+
+ public Builder medHendelse(Hendelse hendelse) {
+ behandlingHendelse.hendelse = hendelse;
+ return this;
+ }
+
+ public Builder medAktørId(String aktørId) {
+ behandlingHendelse.aktørId = new AktørId(aktørId);
+ return this;
+ }
+
+ public Builder medSaksnummer(String saksnummer) {
+ behandlingHendelse.saksnummer = saksnummer;
+ return this;
+ }
+
+ public Builder medYtelse(Ytelse ytelse) {
+ behandlingHendelse.ytelse = ytelse;
+ return this;
+ }
+
+ public Builder medBehandlingstype(Behandlingstype behandlingstype) {
+ behandlingHendelse.behandlingstype = behandlingstype;
+ return this;
+ }
+
+ public BehandlingHendelseV1 build() {
+ return behandlingHendelse;
+ }
+ }
+}
diff --git a/fp-topics/hendelser-behandling/src/test/java/no/nav/vedtak/hendelser/behandling/BehandlingHendelseV1Test.java b/fp-topics/hendelser-behandling/src/test/java/no/nav/vedtak/hendelser/behandling/BehandlingHendelseV1Test.java
new file mode 100644
index 00000000..61e02918
--- /dev/null
+++ b/fp-topics/hendelser-behandling/src/test/java/no/nav/vedtak/hendelser/behandling/BehandlingHendelseV1Test.java
@@ -0,0 +1,84 @@
+package no.nav.vedtak.hendelser.behandling;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.UUID;
+
+import javax.validation.Validation;
+
+import org.junit.jupiter.api.Test;
+
+import com.fasterxml.jackson.databind.ObjectReader;
+import com.fasterxml.jackson.databind.ObjectWriter;
+
+import no.nav.vedtak.hendelser.behandling.v1.BehandlingHendelseV1;
+
+public class BehandlingHendelseV1Test {
+
+ private static final ObjectWriter WRITER = TestJsonMapper.getMapper().writerWithDefaultPrettyPrinter();
+ private static final ObjectReader READER = TestJsonMapper.getMapper().reader();
+
+ @Test
+ public void test_minimal_fp() throws Exception {
+ var uuid = UUID.randomUUID();
+ var inntektsmelding = new BehandlingHendelseV1.Builder()
+ .medHendelseUuid(UUID.randomUUID())
+ .medBehandlingUuid(uuid)
+ .medHendelse(Hendelse.AKSJONSPUNKT)
+ .medKildesystem(Kildesystem.FPSAK)
+ .build();
+
+ String json = WRITER.writeValueAsString(inntektsmelding);
+ System.out.println(json);
+
+ BehandlingHendelseV1 roundTripped = READER.forType(BehandlingHendelseV1.class).readValue(json);
+
+ assertThat(roundTripped).isNotNull();
+ assertThat(roundTripped.getBehandlingUuid()).isEqualTo(uuid);
+ assertThat(roundTripped.getHendelse()).isEqualTo(Hendelse.AKSJONSPUNKT);
+ assertThat(roundTripped.getKildesystem()).isEqualTo(Kildesystem.FPSAK);
+ validateResult(roundTripped);
+ }
+
+ @Test
+ public void test_maksimal_fp() throws Exception {
+ var uuid = UUID.randomUUID();
+ LocalDate startDato = LocalDate.now().plusWeeks(3);
+ LocalDateTime innsending = LocalDateTime.now().minusMinutes(3);
+ var inntektsmelding = new BehandlingHendelseV1.Builder()
+ .medHendelseUuid(UUID.randomUUID())
+ .medAktørId("1234567891234")
+ .medBehandlingUuid(uuid)
+ .medHendelse(Hendelse.OPPRETTET)
+ .medKildesystem(Kildesystem.FPSAK)
+ .medYtelse(Ytelse.FORELDREPENGER)
+ .medBehandlingstype(Behandlingstype.FØRSTEGANGS)
+ .medSaksnummer("123456789")
+ .build();
+
+ String json = WRITER.writeValueAsString(inntektsmelding);
+ System.out.println(json);
+
+ BehandlingHendelseV1 roundTripped = READER.forType(BehandlingHendelseV1.class).readValue(json);
+
+ assertThat(roundTripped).isNotNull();
+ assertThat(roundTripped.getBehandlingUuid()).isEqualTo(uuid);
+ assertThat(roundTripped.getHendelse()).isEqualTo(Hendelse.OPPRETTET);
+ assertThat(roundTripped.getKildesystem()).isEqualTo(Kildesystem.FPSAK);
+ assertThat(roundTripped.getSaksnummer()).isEqualTo("123456789");
+ validateResult(roundTripped);
+ }
+
+
+
+ private void validateResult(Object roundTripped) {
+ assertThat(roundTripped).isNotNull();
+ try (var factory = Validation.buildDefaultValidatorFactory()) {
+ var validator = factory.getValidator();
+ var violations = validator.validate(roundTripped);
+ assertThat(violations).isEmpty();
+ }
+ }
+}
\ No newline at end of file
diff --git a/fp-topics/hendelser-behandling/src/test/java/no/nav/vedtak/hendelser/behandling/TestJsonMapper.java b/fp-topics/hendelser-behandling/src/test/java/no/nav/vedtak/hendelser/behandling/TestJsonMapper.java
new file mode 100644
index 00000000..9f04729c
--- /dev/null
+++ b/fp-topics/hendelser-behandling/src/test/java/no/nav/vedtak/hendelser/behandling/TestJsonMapper.java
@@ -0,0 +1,37 @@
+package no.nav.vedtak.hendelser.behandling;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.InjectableValues.Std;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+
+public class TestJsonMapper {
+
+ private static final ObjectMapper OM;
+
+ static {
+ ObjectMapper objectMapper = new ObjectMapper();
+ objectMapper.registerModule(new Jdk8Module());
+ objectMapper.registerModule(new JavaTimeModule());
+ objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ objectMapper.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE);
+ objectMapper.setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE);
+ objectMapper.setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE);
+ objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
+ objectMapper.setVisibility(PropertyAccessor.CREATOR, JsonAutoDetect.Visibility.ANY);
+
+ Std std = new Std();
+ objectMapper.setInjectableValues(std);
+ OM = objectMapper;
+ }
+
+ public static ObjectMapper getMapper() {
+ return OM;
+ }
+
+}
diff --git a/fp-topics/manifest/src/main/java/no/nav/familie/topic/TopicManifest.java b/fp-topics/manifest/src/main/java/no/nav/familie/topic/TopicManifest.java
index 2dd1abaa..a6a7a330 100644
--- a/fp-topics/manifest/src/main/java/no/nav/familie/topic/TopicManifest.java
+++ b/fp-topics/manifest/src/main/java/no/nav/familie/topic/TopicManifest.java
@@ -6,10 +6,6 @@
* Manifest over topics for familieområdet
*/
public final class TopicManifest {
- /**
- * Publiseres vedtak og deres anvisninger som lagres så i et ytelselager.
- */
- public static final Topic FATTET_VEDTAK = new Topic("privat-familie-vedtakFattet-v1", Serdes.String(), Serdes.String());
/**
* Publiserer hendelser ved endringer i aksjonspunkt. Benyttes for oppgavestyring
*/
diff --git a/fp-topics/pom.xml b/fp-topics/pom.xml
index 762c4d88..296cf874 100644
--- a/fp-topics/pom.xml
+++ b/fp-topics/pom.xml
@@ -20,6 +20,7 @@
hendelser-behandlingsprosess
manifest
hendelser-inntektsmelding
+ hendelser-behandling