Skip to content

Commit 6e5005e

Browse files
authored
Tar i bruk refusjonTom og graderer dagsats basert på utbetalingsgrad … (#1832)
* Tar i bruk refusjonTom og graderer dagsats basert på utbetalingsgrad i periode * Mapper ikke inn selvstendig og frilans uten forsikring
1 parent f442d80 commit 6e5005e

File tree

6 files changed

+139
-30
lines changed

6 files changed

+139
-30
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ public class YtelseAnvistAndel extends BaseEntitet implements IndexKey {
4747
@Embedded
4848
private InternArbeidsforholdRef arbeidsforholdRef;
4949

50+
/**
51+
* Netto dagsats som tilsvarer grunnlagsdagsats * utbetalingsgrad
52+
*/
5053
@Embedded
5154
@AttributeOverrides(@AttributeOverride(name = "verdi", column = @Column(name = "dagsats", nullable = false)))
5255
@ChangeTracked

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

Lines changed: 88 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
import java.util.Set;
1313
import java.util.stream.Collectors;
1414

15+
import org.slf4j.Logger;
16+
import org.slf4j.LoggerFactory;
17+
1518
import no.nav.abakus.iaygrunnlag.kodeverk.Arbeidskategori;
1619
import no.nav.abakus.iaygrunnlag.kodeverk.Fagsystem;
1720
import no.nav.abakus.iaygrunnlag.kodeverk.Inntektskategori;
@@ -33,6 +36,8 @@
3336

3437
public class InfotrygdgrunnlagYtelseMapper {
3538

39+
private static final Logger LOGGER = LoggerFactory.getLogger(InfotrygdgrunnlagYtelseMapper.class);
40+
3641
private InfotrygdgrunnlagYtelseMapper() {
3742
}
3843

@@ -47,8 +52,12 @@ public static void oversettInfotrygdYtelseGrunnlagTilYtelse(InntektArbeidYtelseA
4752
grunnlag.getUtbetaltePerioder().forEach(vedtak -> {
4853
final IntervallEntitet intervall = utledPeriodeNårTomMuligFørFom(vedtak.getUtbetaltFom(), vedtak.getUtbetaltTom());
4954
var anvistBuilder = ytelseBuilder.getAnvistBuilder();
50-
if (skalMappeInfotrygdandeler()) {
51-
oversettYtelseArbeidTilAnvisteAndeler(grunnlag.getArbeidsforhold(), grunnlag.getKategori(), vedtak.getUtbetalingsgrad()).forEach(anvistBuilder::leggTilYtelseAnvistAndel);
55+
if (skalMappeInfotrygdandeler(grunnlag)) {
56+
oversettYtelseArbeidTilAnvisteAndeler(
57+
grunnlag.getArbeidsforhold(),
58+
grunnlag.getKategori(),
59+
intervall,
60+
vedtak.getUtbetalingsgrad()).forEach(anvistBuilder::leggTilYtelseAnvistAndel);
5261
}
5362
ytelseBuilder.leggtilYtelseAnvist(anvistBuilder
5463
.medAnvistPeriode(intervall)
@@ -59,16 +68,36 @@ public static void oversettInfotrygdYtelseGrunnlagTilYtelse(InntektArbeidYtelseA
5968
aktørYtelseBuilder.leggTilYtelse(ytelseBuilder);
6069
}
6170

62-
private static boolean skalMappeInfotrygdandeler() {
63-
return !Environment.current().isProd();
71+
72+
/**
73+
* Næring og frilans uten forsikring har spesielle regler som gir reduksjon i netto dagsats som ikke reflekteres i utbetalingsgraden (se f.t.l. §§ 8-36 og 8-39)
74+
* <p>
75+
* Vi klarer ikke å representere dagsats nøyaktig for disse andelene
76+
*
77+
* @param grunnlag Beregningsgrunnlag fra infotrygd
78+
* @return Verdi som sier som vi skal mappe inn andeler fra grunnlaget
79+
*/
80+
private static boolean skalMappeInfotrygdandeler(InfotrygdYtelseGrunnlag grunnlag) {
81+
var erToggletPå = !Environment.current().isProd();
82+
return erToggletPå && !grunnlag.isNæringEllerFrilansUtenForsikring();
6483
}
6584

66-
private static List<YtelseAnvistAndel> oversettYtelseArbeidTilAnvisteAndeler(List<InfotrygdYtelseArbeid> arbeidsforhold, Arbeidskategori kategori, BigDecimal utbetalingsgrad) {
85+
/** Mapper beregningsgrunnlagsandeler fra infotrygd til netto dagsats
86+
*
87+
* Netto dagsats = grunnlagsdasats * utbetalingsgrad
88+
*
89+
* @param arbeidsforhold Alle grunnlagsandeler fra infotrygd
90+
* @param kategori Arbeidskategori fra infotrygd
91+
* @param periode Periode for anvisning
92+
* @param utbetalingsgrad Utbetalingsgrad for periode
93+
* @return Liste med andeler
94+
*/
95+
private static List<YtelseAnvistAndel> oversettYtelseArbeidTilAnvisteAndeler(List<InfotrygdYtelseArbeid> arbeidsforhold, Arbeidskategori kategori, IntervallEntitet periode, BigDecimal utbetalingsgrad) {
6796
var inntektskategorier = splittArbeidskategoriTilInntektskategorier(kategori);
6897
if (inntektskategorier.isEmpty()) {
6998
return Collections.emptyList();
7099
}
71-
var andelBuildere = new ArrayList<>(finnArbeidstakerAndeler(arbeidsforhold, utbetalingsgrad));
100+
var andelBuildere = new ArrayList<>(finnArbeidstakerAndeler(arbeidsforhold, utbetalingsgrad, periode));
72101
finnIkkeArbeidstakerAndel(arbeidsforhold, utbetalingsgrad, inntektskategorier).ifPresent(andelBuildere::add);
73102
finnYtelseRapportertPåNødnummer(arbeidsforhold, utbetalingsgrad, inntektskategorier).ifPresent(andelBuildere::add);
74103
return andelBuildere;
@@ -81,19 +110,31 @@ private static Optional<YtelseAnvistAndel> finnIkkeArbeidstakerAndel(List<Infotr
81110
.medUtbetalingsgrad(utbetalingsgrad)
82111
.medInntektskategori(i)
83112
.medRefusjonsgrad(BigDecimal.ZERO)
84-
.medDagsats(finnDagsatsIkkeArbeidstaker(arbeidsforhold))
113+
.medDagsats(finnDagsatsIkkeArbeidstaker(arbeidsforhold, utbetalingsgrad))
85114
.build()
86115
);
87116
}
88117

118+
/**
119+
* Nødnummer brukes i infotrygd til å legge betalinger som skal gå direkte til bruker for et arbeidsforhold som det ikke er søkt refusjon for
120+
*
121+
*
122+
* Dette brukes i situasjoner der det er kombinasjon med andre statuser.
123+
*
124+
* @param arbeidsforhold Infotrygdandeler
125+
* @param utbetalingsgrad Utbetalingsgrad
126+
* @param inntektskategorier Inntektskategorier på grunnlaget
127+
* @return Ytelseandel fra nødnummer dersom den finnes
128+
*/
89129
private static Optional<YtelseAnvistAndel> finnYtelseRapportertPåNødnummer(List<InfotrygdYtelseArbeid> arbeidsforhold,
90130
BigDecimal utbetalingsgrad,
91131
Set<Inntektskategori> inntektskategorier) {
92132
var rapportertPåNødnummmer = arbeidsforhold.stream()
93133
.filter(arb -> arb.getOrgnr() != null && Arrays.stream(Nødnummer.values()).anyMatch(n -> n.getOrgnummer().equals(arb.getOrgnr())))
94134
.map(InfotrygdgrunnlagYtelseMapper::mapTilDagsats)
95135
.reduce(BigDecimal::add)
96-
.orElse(BigDecimal.ZERO);
136+
.orElse(BigDecimal.ZERO)
137+
.multiply(utbetalingsgrad).divide(BigDecimal.valueOf(100), 10, RoundingMode.HALF_UP);
97138

98139
if (rapportertPåNødnummmer.compareTo(BigDecimal.ZERO) > 0) {
99140
var nødnummerYtelse = YtelseAnvistAndelBuilder.ny()
@@ -111,35 +152,51 @@ private static Optional<YtelseAnvistAndel> finnIkkeArbeidstakerAndel(List<Infotr
111152
return Optional.empty();
112153
}
113154

114-
private static BigDecimal finnDagsatsIkkeArbeidstaker(List<InfotrygdYtelseArbeid> arbeidsforhold) {
155+
private static BigDecimal finnDagsatsIkkeArbeidstaker(List<InfotrygdYtelseArbeid> arbeidsforhold, BigDecimal utbetalingsgrad) {
115156
return arbeidsforhold.stream().filter(arb -> arb.getOrgnr() == null)
116157
.map(InfotrygdgrunnlagYtelseMapper::mapTilDagsats)
117158
.reduce(BigDecimal::add)
118-
.orElse(BigDecimal.ZERO);
159+
.orElse(BigDecimal.ZERO)
160+
.multiply(utbetalingsgrad).divide(BigDecimal.valueOf(100), 10, RoundingMode.HALF_UP);
119161
}
120162

121-
// TODO (Espen Velsvik) Ta inn refusjonTOM og periodiser ytelse anvist basert på tom-dato for refusjon
122-
private static List<YtelseAnvistAndel> finnArbeidstakerAndeler(List<InfotrygdYtelseArbeid> arbeidsforhold, BigDecimal utbetalingsgrad) {
163+
private static List<YtelseAnvistAndel> finnArbeidstakerAndeler(List<InfotrygdYtelseArbeid> arbeidsforhold, BigDecimal utbetalingsgrad, IntervallEntitet periode) {
123164
var gruppertPrOrg = arbeidsforhold.stream()
124165
.filter(a -> a.getOrgnr() != null)
125166
.filter(a -> OrganisasjonsNummerValidator.erGyldig(a.getOrgnr()))
126167
.collect(Collectors.groupingBy(InfotrygdYtelseArbeid::getOrgnr));
127168

128169
return gruppertPrOrg.entrySet().stream()
129170
.filter(e -> e.getValue().stream().map(InfotrygdYtelseArbeid::getInntekt).reduce(BigDecimal::add).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ZERO) > 0)
130-
.map(e -> {
131-
var refusjon = e.getValue().stream().filter(InfotrygdYtelseArbeid::getRefusjon).map(InfotrygdgrunnlagYtelseMapper::mapTilDagsats).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
132-
var direkteUtbetaling = e.getValue().stream().filter(a -> !a.getRefusjon()).map(InfotrygdgrunnlagYtelseMapper::mapTilDagsats).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
133-
var total = refusjon.add(direkteUtbetaling);
134-
var refusjonsgrad = refusjon.divide(total, 10, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
135-
return YtelseAnvistAndelBuilder.ny()
136-
.medDagsats(total)
137-
.medInntektskategori(Inntektskategori.ARBEIDSTAKER)
138-
.medArbeidsgiver(Arbeidsgiver.virksomhet(new OrgNummer(e.getKey())))
139-
.medRefusjonsgrad(refusjonsgrad)
140-
.medUtbetalingsgrad(utbetalingsgrad)
141-
.build();
142-
}).toList();
171+
.map(e -> mapGrunnlagsandelerTilAnvistandel(utbetalingsgrad, periode, new OrgNummer(e.getKey()), e.getValue())).toList();
172+
}
173+
174+
private static YtelseAnvistAndel mapGrunnlagsandelerTilAnvistandel(BigDecimal utbetalingsgrad,
175+
IntervallEntitet periode,
176+
OrgNummer orgnummer,
177+
List<InfotrygdYtelseArbeid> grunnlagsandeler) {
178+
var refusjonTom = grunnlagsandeler.stream().map(InfotrygdYtelseArbeid::getRefusjonTom).findFirst();
179+
refusjonTom.ifPresent(it -> validerRefusjonTom(periode, it));
180+
var refusjon = grunnlagsandeler.stream().filter(InfotrygdYtelseArbeid::getRefusjon)
181+
.map(InfotrygdgrunnlagYtelseMapper::mapTilDagsats).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
182+
var direkteUtbetaling = grunnlagsandeler.stream().filter(a -> !a.getRefusjon()).map(InfotrygdgrunnlagYtelseMapper::mapTilDagsats).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
183+
var total = refusjon.add(direkteUtbetaling);
184+
var refusjonsgrad = refusjon.divide(total, 10, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
185+
// Mapper til netto dagsats for å være konskvent på tvers av kilder (fp-sak, k9-sak, infotrygd)
186+
var nettoDagsats = total.multiply(utbetalingsgrad).divide(BigDecimal.valueOf(100), 10, RoundingMode.HALF_UP);
187+
return YtelseAnvistAndelBuilder.ny()
188+
.medDagsats(nettoDagsats)
189+
.medInntektskategori(Inntektskategori.ARBEIDSTAKER)
190+
.medArbeidsgiver(Arbeidsgiver.virksomhet(orgnummer))
191+
.medRefusjonsgrad(refusjonsgrad)
192+
.medUtbetalingsgrad(utbetalingsgrad)
193+
.build();
194+
}
195+
196+
private static void validerRefusjonTom(IntervallEntitet periode, LocalDate refusjonTom) {
197+
if (periode.inkluderer(refusjonTom) && !periode.getTomDato().equals(refusjonTom)) {
198+
LOGGER.warn(String.format("Fant periode i infotrygd der refusjonTom ikke ligger ved slutten av en utbetalingsperiode: periode: {%s}, refusjonTom: {%s}", periode, refusjonTom));
199+
}
143200
}
144201

145202
private static BigDecimal mapTilDagsats(InfotrygdYtelseArbeid arbeid) {
@@ -153,6 +210,12 @@ private static BigDecimal mapTilDagsats(InfotrygdYtelseArbeid arbeid) {
153210
};
154211
}
155212

213+
/**
214+
* Splitter kombinasjonsstatuser fra infotrygd og mapper til inntektskategori
215+
*
216+
* @param kategori Arbeidskategori fra infotrygd
217+
* @return Set av Inntektskategori
218+
*/
156219
private static Set<Inntektskategori> splittArbeidskategoriTilInntektskategorier(Arbeidskategori kategori) {
157220
return switch (kategori) {
158221
case FISKER -> Set.of(Inntektskategori.FISKER);

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/ytelse/infotrygd/InnhentingInfotrygdTjeneste.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ public class InnhentingInfotrygdTjeneste {
6969
Map.entry(no.nav.vedtak.felles.integrasjon.infotrygd.grunnlag.v1.respons.BehandlingstemaKode.PI, YtelseType.PLEIEPENGER_SYKT_BARN),
7070
Map.entry(no.nav.vedtak.felles.integrasjon.infotrygd.grunnlag.v1.respons.BehandlingstemaKode.PN, YtelseType.PLEIEPENGER_SYKT_BARN)
7171
);
72+
public static final String SELVSTENDIG = "02";
73+
public static final String ARBTAKER_SELVSTENDIG = "03";
74+
public static final String FL_OPPDRAGSTAKER_U_FORS = "24";
75+
public static final String ARB_FL_OPPDRAGSTAKER_U_FORS = "25";
7276

7377
private InfotrygdGrunnlagAggregator infotrygdGrunnlag;
7478
private Spøkelse spøkelse;
@@ -147,6 +151,7 @@ private InfotrygdYtelseGrunnlag restTilInfotrygdYtelseGrunnlag(Grunnlag grunnlag
147151
.medVedtaksPeriodeFom(brukPeriode.fom())
148152
.medVedtaksPeriodeTom(brukPeriode.tom())
149153
.medArbeidskategori(arbeidskategori)
154+
.medNæringEllerFrilansUtenForsikring(erNæringEllerFrilansUtenForsikring(grunnlag.getKategori()))
150155
.medDekningsgrad(dekningsgrad)
151156
.medGradering(grunnlag.getGradering())
152157
.medFødselsdatoBarn(grunnlag.getFødselsdatoBarn())
@@ -163,6 +168,13 @@ private InfotrygdYtelseGrunnlag restTilInfotrygdYtelseGrunnlag(Grunnlag grunnlag
163168
return grunnlagBuilder.build();
164169
}
165170

171+
private boolean erNæringEllerFrilansUtenForsikring(no.nav.vedtak.felles.integrasjon.infotrygd.grunnlag.v1.respons.Arbeidskategori kategori) {
172+
return kategori.kode().getKode().equals(SELVSTENDIG) ||
173+
kategori.kode().getKode().equals(ARBTAKER_SELVSTENDIG) ||
174+
kategori.kode().getKode().equals(FL_OPPDRAGSTAKER_U_FORS) ||
175+
kategori.kode().getKode().equals(ARB_FL_OPPDRAGSTAKER_U_FORS);
176+
}
177+
166178
private YtelseStatus mapYtelseStatus(Grunnlag grunnlag) {
167179
if (grunnlag.getStatus() == null) {
168180
if (grunnlag.getOpphørFom() != null)
@@ -179,7 +191,7 @@ private InfotrygdYtelseArbeid arbeidsforholdTilInfotrygdYtelseArbeid(Arbeidsforh
179191
InntektPeriodeReverse.reverseMap(arbeidsforhold.inntektsperiode().kode().name(), LOG);
180192
BigDecimal inntekt = arbeidsforhold.inntekt() != null ? new BigDecimal(arbeidsforhold.inntekt()) : null;
181193
return new InfotrygdYtelseArbeid(arbeidsforhold.orgnr().getOrgnr(),
182-
inntekt, inntektPeriode, arbeidsforhold.refusjon());
194+
inntekt, inntektPeriode, arbeidsforhold.refusjon(), arbeidsforhold.refusjonTom());
183195
}
184196

185197
private Periode utledPeriode(LocalDate iverksatt, LocalDate opphoerFomDato, LocalDate registrert) {

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/ytelse/infotrygd/dto/InfotrygdYtelseArbeid.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package no.nav.foreldrepenger.abakus.registerdata.ytelse.infotrygd.dto;
22

33
import java.math.BigDecimal;
4+
import java.time.LocalDate;
45
import java.util.Objects;
56

67
import no.nav.abakus.iaygrunnlag.kodeverk.InntektPeriodeType;
@@ -11,12 +12,14 @@ public class InfotrygdYtelseArbeid {
1112
private BigDecimal inntekt;
1213
private InntektPeriodeType inntektperiode;
1314
private Boolean refusjon;
15+
private LocalDate refusjonTom;
1416

15-
public InfotrygdYtelseArbeid(String orgnr, BigDecimal inntekt, InntektPeriodeType inntektperiode, Boolean refusjon) {
17+
public InfotrygdYtelseArbeid(String orgnr, BigDecimal inntekt, InntektPeriodeType inntektperiode, Boolean refusjon, LocalDate refusjonTom) {
1618
this.orgnr = orgnr;
1719
this.inntekt = inntekt;
1820
this.inntektperiode = inntektperiode;
1921
this.refusjon = refusjon;
22+
this.refusjonTom = refusjonTom;
2023
}
2124

2225
public InfotrygdYtelseArbeid(String orgnr, int inntekt, InntektPeriodeType inntektperiode, Boolean refusjon) {
@@ -42,6 +45,10 @@ public Boolean getRefusjon() {
4245
return refusjon;
4346
}
4447

48+
public LocalDate getRefusjonTom() {
49+
return refusjonTom;
50+
}
51+
4552
@Override
4653
public boolean equals(Object o) {
4754
if (this == o) return true;
@@ -50,12 +57,14 @@ public boolean equals(Object o) {
5057
return Objects.equals(orgnr, that.orgnr) &&
5158
Objects.equals(inntekt, that.inntekt) &&
5259
Objects.equals(inntektperiode, that.inntektperiode) &&
53-
Objects.equals(refusjon, that.refusjon);
60+
Objects.equals(refusjon, that.refusjon) &&
61+
Objects.equals(refusjonTom, that.refusjonTom);
62+
5463
}
5564

5665
@Override
5766
public int hashCode() {
58-
return Objects.hash(orgnr, inntekt, inntektperiode, refusjon);
67+
return Objects.hash(orgnr, inntekt, inntektperiode, refusjon, refusjonTom);
5968
}
6069

6170
@Override
@@ -65,6 +74,7 @@ public String toString() {
6574
", inntekt=" + inntekt +
6675
", inntektperiode=" + inntektperiode +
6776
", refusjon=" + refusjon +
77+
", refusjon=" + refusjonTom +
6878
'}';
6979
}
7080

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/ytelse/infotrygd/dto/InfotrygdYtelseGrunnlag.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@ public class InfotrygdYtelseGrunnlag {
2323
private LocalDate vedtaksPeriodeTom;
2424
private String vedtaksreferanse;
2525

26+
/**
27+
* Makrerer om grunnlaget gjelder for næring eller frilans uten forsikring
28+
*
29+
* Informasjonen brukes til å finne ut om vi kan mappe fra grunnlagsdagsats til utbetalingsgrad
30+
*
31+
* Næring og frilans uten forsikring har spesielle regler som gir reduksjon i netto dagsats som ikke reflekteres i utbetalingsgraden (se f.t.l. §§ 8-36 og 8-39)
32+
*/
33+
private boolean næringEllerFrilansUtenForsikring;
2634
private Arbeidskategori kategori;
2735
private List<InfotrygdYtelseArbeid> arbeidsforhold;
2836

@@ -31,6 +39,9 @@ public class InfotrygdYtelseGrunnlag {
3139
private LocalDate fødselsdatoBarn;
3240
private LocalDate opprinneligIdentdato;
3341

42+
public InfotrygdYtelseGrunnlag() {
43+
}
44+
3445
public LocalDateTime getVedtattTidspunkt() {
3546
return vedtattTidspunkt;
3647
}
@@ -87,6 +98,10 @@ public String getVedtaksreferanse() {
8798
return vedtaksreferanse;
8899
}
89100

101+
public boolean isNæringEllerFrilansUtenForsikring() {
102+
return næringEllerFrilansUtenForsikring;
103+
}
104+
90105
@Override
91106
public boolean equals(Object o) {
92107
if (this == o) return true;
@@ -204,11 +219,17 @@ public Builder medGradering(Integer gradering) {
204219
return this;
205220
}
206221

222+
207223
public Builder medGradering(BigDecimal gradering) {
208224
grunnlag.gradering = gradering;
209225
return this;
210226
}
211227

228+
public Builder medNæringEllerFrilansUtenForsikring(boolean næringEllerFrilansUtenForsikring) {
229+
grunnlag.næringEllerFrilansUtenForsikring = næringEllerFrilansUtenForsikring;
230+
return this;
231+
}
232+
212233
public Builder medFødselsdatoBarn(LocalDate fødselsdatoBarn) {
213234
grunnlag.fødselsdatoBarn = fødselsdatoBarn;
214235
return this;

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3232
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
3333

34-
<felles.version>4.1.18</felles.version>
34+
<felles.version>4.1.19</felles.version>
3535
<prosesstask.version>3.1.7</prosesstask.version>
3636

3737
<kontrakter.version>6.1.10</kontrakter.version>

0 commit comments

Comments
 (0)