Add logging to enhance debugging in taxation services.

This commit is contained in:
Jan 2025-12-13 17:00:55 +01:00
parent 5d804543d7
commit 94692e12ce
2 changed files with 48 additions and 15 deletions

View file

@ -53,12 +53,16 @@ public class EUTaxationApiService {
request.setReferenceDate(getCurrentDate());
request.setTradeMovement(TradeMovementCode.fromValue(tradeMovement));
logger.info("Lookup Measure for {} and {}", goodsCode, countryCode);
JAXBElement<GoodsMeasForWs> requestElement = objectFactory.createGoodsMeasForWs(request);
@SuppressWarnings("unchecked")
JAXBElement<GoodsMeasForWsResponse> responseElement =
(JAXBElement<GoodsMeasForWsResponse>) webServiceTemplate.marshalSendAndReceive(requestElement);
logger.info("Lookup Measure for {} and {} success: {} Measures received.", goodsCode, countryCode, responseElement.getValue().getReturn().getResult().getMeasures().getMeasure().size());
return CompletableFuture.completedFuture(responseElement.getValue());
}

View file

@ -17,6 +17,8 @@ import de.avatic.lcc.util.exception.base.InternalErrorException;
import eu.europa.ec.taxation.taric.client.GoodsMeasForWsResponse;
import eu.europa.ec.taxation.taric.client.GoodsMeasuresForWsResponse;
import jakarta.annotation.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.*;
@ -34,6 +36,9 @@ public class TaxationResolverService {
private final NomenclatureService nomenclatureService;
private final CountryPropertyRepository countryPropertyRepository;
private final Logger logger = LoggerFactory.getLogger(TaxationResolverService.class);
public TaxationResolverService(CountryRepository countryRepository, EUTaxationApiService eUTaxationApiService, PropertyRepository propertyRepository, ZolltarifnummernApiService zolltarifnummernApiService, NomenclatureService nomenclatureService, CountryPropertyRepository countryPropertyRepository) {
this.countryRepository = countryRepository;
this.eUTaxationApiService = eUTaxationApiService;
@ -92,7 +97,11 @@ public class TaxationResolverService {
}
private List<TaxationResolverSingleRequest> resolveIncompleteHsCodesIntern(List<TaxationResolverRequest> request) {
return request.stream().flatMap(r -> nomenclatureService.getNomenclature(r.material().getHsCode()).stream().map(hsCode -> new TaxationResolverSingleRequest(hsCode, r.countryId(), r))).toList();
var singleRequests = request.stream().flatMap(r -> nomenclatureService.getNomenclature(r.material().getHsCode()).stream().map(hsCode -> new TaxationResolverSingleRequest(hsCode, r.countryId(), r))).toList();
logger.info("Resolved {} incomplete hs codes to {} hs code leaves ", request.size(), singleRequests.size());
return singleRequests;
}
private List<TaxationResolverSingleRequest> resolveIncompleteHsCodes(List<TaxationResolverRequest> request) {
@ -244,6 +253,9 @@ public class TaxationResolverService {
}
public List<TaxationResolverResponse> getTariffRates(List<TaxationResolverRequest> requests) {
logger.info("Do taxation resolution for {} requests", requests.size());
var goodMeasures = doRequests(requests);
return goodMeasures.keySet().stream().map(r -> mapToResponse(r, goodMeasures.get(r))).toList();
}
@ -257,6 +269,9 @@ public class TaxationResolverService {
List<GoodsMeasForWsResponse> measForWsResponse = apiResponse.apiResponse();
logger.info("============================");
logger.info("Resolved measures for: {}, {}", request.material(), request.countryId());
try {
String selectedHsCode = null;
Double selectedDuty = null;
@ -277,11 +292,21 @@ public class TaxationResolverService {
var measureType = MeasureType.fromMeasureCode(measure.getMeasureType().getMeasureType());
boolean maybeRelevant = measureType.map(MeasureType::containsRelevantDuty).orElse(false);
logger.info("Measure ({}{}, {}): is_relevant: {}", measureType.map(MeasureType::getSeries).orElse("UNKNOWN"), measureType.map(MeasureType::getMeasureCode).orElse(""), measureType.map(MeasureType::name).orElse("UNKNOWN"), maybeRelevant);
if (maybeRelevant) {
var duty = extractDuty(measure);
if (duty.isPresent()) {
logger.info("Measure ({}{}, {}): duty: {}, hs code: {}",
measureType.map(MeasureType::getSeries).orElse("UNKNOWN"),
measureType.map(MeasureType::getMeasureCode).orElse(""),
measureType.map(MeasureType::name).orElse("UNKNOWN"),
measureType.map(MeasureType::getMeasureCode).orElse(null),
entry.getKey().getReturn().getResult().getRequest().getGoodsCode());
maxDuty = Math.max(maxDuty, duty.get());
minDuty = Math.min(minDuty, duty.get());
@ -296,6 +321,10 @@ public class TaxationResolverService {
}
}
logger.info("============================");
logger.info("Selected: measure: {}, duty: {}, max_duty: {}, min_duty: {}", selectedMeasure, selectedDuty, maxDuty, minDuty);
logger.info("============================");
if (selectedDuty != null && (maxDuty - minDuty <= 0.02)) {
return new TaxationResolverResponse(selectedDuty, selectedMeasure, selectedHsCode, request.material(), request.countryId());
}