Skip to content

Commit

Permalink
Update data types and add Skattekort validation utility #deploy-skatt…
Browse files Browse the repository at this point in the history
…ekort-service

Changed the datatype of 'inntektsar' from Integer to String in SokosRequest.java. A new Java class 'SkattekortValidator' was created to validate various aspects of a Skattekort, such as Arbeitstag, Arbeitgeber, and Trekktype. Furthermore, the skattekort validation method in SkattekortService.java was replaced with the newly created SkattekortValidator. In addition, isEmpty and isAmbiguous methods were added in SkattekortTilArbeidsgiverDTO.java for additional validation.
  • Loading branch information
krharum committed Jun 13, 2024
1 parent f1ffc79 commit bc3ae87
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.val;

@Data
@Builder
Expand All @@ -13,6 +12,6 @@
public class SokosRequest {

private String fnr;
private Integer inntektsar;
private String inntektsar;
private String skattekort;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,14 @@
import no.nav.skattekortservice.consumer.SokosSkattekortConsumer;
import no.nav.skattekortservice.dto.SkattekortRequest;
import no.nav.skattekortservice.dto.SokosRequest;
import no.nav.skattekortservice.utility.SkattekortValidator;
import no.nav.testnav.libs.dto.skattekortservice.v1.SkattekortTilArbeidsgiverDTO;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.web.server.ResponseStatusException;
import reactor.core.publisher.Mono;

import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.Collection;

@Slf4j
@Service
Expand All @@ -37,7 +35,8 @@ public SkattekortService(MapperFacade mapperFacade,
@SneakyThrows
public Mono<String> sendSkattekort(SkattekortTilArbeidsgiverDTO skattekort) {

validate(skattekort);
SkattekortValidator.validate(skattekort);

var arbeidstaker = skattekort.getArbeidsgiver().getFirst()
.getArbeidstaker().getFirst();

Expand All @@ -48,7 +47,7 @@ public Mono<String> sendSkattekort(SkattekortTilArbeidsgiverDTO skattekort) {
.doOnNext(encodedXml -> log.info("Base64 encoded request: {}", encodedXml))
.map(encodedXml -> SokosRequest.builder()
.fnr(arbeidstaker.getArbeidstakeridentifikator())
.inntektsar(arbeidstaker.getInntektsaar())
.inntektsar(arbeidstaker.getInntektsaar().toString())
.skattekort(encodedXml)
.build())
.flatMap(skattekortConsumer::sendSkattekort);
Expand All @@ -70,23 +69,4 @@ private String encodeRequest(String request) {
return Base64.getEncoder()
.encodeToString(request.getBytes(StandardCharsets.UTF_8));
}

private static void validate(SkattekortTilArbeidsgiverDTO skattekort) {

skattekort.getArbeidsgiver().stream()
.map(SkattekortTilArbeidsgiverDTO.Arbeidsgiver::getArbeidstaker)
.flatMap(Collection::stream)
.map(SkattekortTilArbeidsgiverDTO.Skattekortmelding::getSkattekort)
.map(SkattekortTilArbeidsgiverDTO.Skattekort::getTrekktype)
.flatMap(Collection::stream)
.forEach(trekktype -> {
if (trekktype.isAllEmpty()) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST,
"En av Forskuddstrekk, Frikort, Trekkprosent og Trekktabell må angis per trekktype");
} else if (trekktype.isAmbiguous()) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST,
"Kun én av Forskuddstrekk, Frikort, Trekkprosent og Trekktabell kan angis per trekktype");
}
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package no.nav.skattekortservice.utility;

import lombok.experimental.UtilityClass;
import no.nav.testnav.libs.dto.skattekortservice.v1.SkattekortTilArbeidsgiverDTO;
import org.springframework.http.HttpStatus;
import org.springframework.web.server.ResponseStatusException;

import java.util.Collection;

@UtilityClass
public class SkattekortValidator {

public static void validate(SkattekortTilArbeidsgiverDTO skattekort) {

validateArbeidsgiver(skattekort);

validateArbeidstager(skattekort);

validateSkattekort(skattekort);
}

private static void validateSkattekort(SkattekortTilArbeidsgiverDTO skattekort) {

skattekort.getArbeidsgiver().stream()
.map(SkattekortTilArbeidsgiverDTO.Arbeidsgiver::getArbeidstaker)
.flatMap(Collection::stream)
.map(SkattekortTilArbeidsgiverDTO.Skattekortmelding::getSkattekort)
.map(SkattekortTilArbeidsgiverDTO.Skattekort::getTrekktype)
.flatMap(Collection::stream)
.forEach(trekktype -> {
if (trekktype.isAllEmpty()) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST,
"En av Forskuddstrekk, Frikort, Trekkprosent og Trekktabell må angis per trekktype");
} else if (trekktype.isAmbiguous()) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST,
"Kun én av Forskuddstrekk, Frikort, Trekkprosent og Trekktabell kan angis per trekktype");
}
});
}

private static void validateArbeidstager(SkattekortTilArbeidsgiverDTO skattekort) {

skattekort.getArbeidsgiver().stream()
.map(SkattekortTilArbeidsgiverDTO.Arbeidsgiver::getArbeidstaker)
.flatMap(Collection::stream)
.forEach(arbeidstaker -> {
if (arbeidstaker.isEmptyArbeidstakeridentifikator()) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST,
"Arbeidstakeridentifikator må være satt");
} else if (arbeidstaker.isEmptyInntektsaar()) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST,
"Inntektsår må være satt");
}
});
}

private static void validateArbeidsgiver(SkattekortTilArbeidsgiverDTO skattekort) {

skattekort.getArbeidsgiver().stream()
.map(SkattekortTilArbeidsgiverDTO.Arbeidsgiver::getArbeidsgiveridentifikator)
.forEach(arbeidsgiver -> {
if (arbeidsgiver.isAllEmpty()) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST,
"arbeidsgiveridentifikator må inneholde enten " +
"organisasjonsnummer eller personidentifikator");

} else if (arbeidsgiver.isAmbiguous()) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST,
"arbeidsgiveridentifikator er uklar, " +
"både organisasjonsnummer og personidentifikator er angitt");
}
});
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package no.nav.testnav.libs.dto.skattekortservice.v1;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
Expand All @@ -10,6 +11,8 @@
import java.util.List;

import static java.util.Objects.isNull;
import static org.apache.commons.lang3.StringUtils.isBlank;
import static org.apache.commons.lang3.StringUtils.isNotBlank;

@Data
@Builder
Expand Down Expand Up @@ -64,6 +67,18 @@ public List<Tilleggsopplysning> getTilleggsopplysning() {
}
return tilleggsopplysning;
}

@JsonIgnore
public boolean isEmptyArbeidstakeridentifikator() {

return isBlank(arbeidstakeridentifikator);
}

@JsonIgnore
public boolean isEmptyInntektsaar() {

return isNull(inntektsaar);
}
}

@Data
Expand All @@ -74,6 +89,20 @@ public static class IdentifikatorForEnhetEllerPerson {

private String organisasjonsnummer;
private String personidentifikator;

@JsonIgnore
public boolean isAllEmpty() {

return isBlank(organisasjonsnummer) &&
isBlank(personidentifikator);
}

@JsonIgnore
public boolean isAmbiguous() {

return isNotBlank(organisasjonsnummer) &&
isNotBlank(personidentifikator);
}
}

@Data
Expand Down

0 comments on commit bc3ae87

Please sign in to comment.