public Map<String, String> requestPuk(PukRequest request) throws PukRequestException, SoapValidationException {
        final PenRequestStatus result = repository.findFirstByBsnAndDocTypeAndSequenceNoOrderByRequestDatetimeDesc(request.getBsn(), request.getDocType(), request.getSequenceNo());
        checkExpirationDatePen(result);

        final Map<String, String> response = new HashMap<>();

        final OpvragenPUKCodeEIDRequest rdwRequest = new OpvragenPUKCodeEIDRequest();

        rdwRequest.setEIDSTATINFO(eidstatinfoBuilder(request.getBsn(), request.getSequenceNo()));

        final OpvragenPUKCodeEIDResponse rdwResponse = rdwClient.pukRequest(rdwRequest);
        final List<EIDSTATUSGEG> eidstatusgegs = rdwResponse.getEIDSTATINFO().getEIDSTATUSTAB().getEIDSTATUSGEG();
        if (eidstatusgegs.size() == 1 && eidstatusgegs.get(0).getEIDVOLGNR().equals(rdwRequest.getEIDSTATINFO().getEIDSTATAGEG().getEIDVOLGNRA()) && eidstatusgegs.get(0).getCRYPTRDEPUK() != null) {
            final String base64Puk = Base64.encodeBase64String(eidstatusgegs.get(0).getCRYPTRDEPUK());
            response.put("status", "OK");
            response.put("vpuk", base64Puk);
        } else {
            final String errormessage = "multiple EIDSTATUSGEG entries in rdw response or sequenceNo does not match";
            logger.error(errormessage);
            throw new PukRequestException("DWS8", errormessage);
        }

        return response;
    }
@Test
    public void pukRequestOnlyPossibleWHenPenRequestHasValidDate(){
        Exception exception = assertThrows(PukRequestException.class, () -> {
            service.requestPuk(request);
        });
        assertEquals("DWS7", exception.getMessage());
    }