class PaymentController implements PaymentApi {

    @Override
    public ResponseEntity startPaymentInitiationCancellationAuthorisation(UUID xRequestID, String paymentService,
                                                                          String paymentProduct, String paymentId,
                                                                          Object body, String digest, String signature,
                                                                          byte[] tpPSignatureCertificate, String psuId,
                                                                          String psUIDType, String psUCorporateID,
                                                                          String psUCorporateIDType, Boolean tpPRedirectPreferred,
                                                                          String tpPRedirectURI, String tpPNokRedirectURI,
                                                                          String tpPNotificationURI, String tpPNotificationContentPreferred,
                                                                          String psUIPAddress, String psUIPPort, String psUAccept,
                                                                          String psUAcceptCharset, String psUAcceptEncoding,
                                                                          String psUAcceptLanguage, String psUUserAgent,
                                                                          String psUHttpMethod, UUID psUDeviceID,
                                                                          String psUGeoLocation) {
        PsuIdData psuData = new PsuIdData(psuId, psUIDType, psUCorporateID, psUCorporateIDType, psUIPAddress);
        Xs2aCreatePisAuthorisationRequest createRequest = authorisationMapper.mapToXs2aCreatePisAuthorisationRequest(psuData, paymentId, getPaymentType(paymentService), paymentProduct, (Map) body);

        ResponseObject<CancellationAuthorisationResponse> serviceResponse = paymentCancellationAuthorisationService.createPisCancellationAuthorisation(createRequest);

        if (serviceResponse.hasError()) {
            return responseErrorMapper.generateErrorResponse(serviceResponse.getError());
        }

        CancellationAuthorisationResponse serviceResponseBody = serviceResponse.getBody();
        ResponseHeaders responseHeaders = paymentCancellationHeadersBuilder.buildStartAuthorisationHeaders(serviceResponseBody.getAuthorisationId());

        return responseMapper.created(serviceResponse, authorisationModelMapper::mapToStartOrUpdateCancellationResponse, responseHeaders);
    }

}