Sanctions Search API: v2

<back to all web services

AddCompanyLookup

CompanyLookup
The following routes are available for this service:
POST/companylookups/createCreate a company lookup
<?php namespace dtos;

use DateTime;
use Exception;
use DateInterval;
use JsonSerializable;
use ServiceStack\{IReturn,IReturnVoid,IGet,IPost,IPut,IDelete,IPatch,IMeta,IHasSessionId,IHasBearerToken,IHasVersion};
use ServiceStack\{ICrud,ICreateDb,IUpdateDb,IPatchDb,IDeleteDb,ISaveDb,AuditBase,QueryDb,QueryDb2,QueryData,QueryData2,QueryResponse};
use ServiceStack\{ResponseStatus,ResponseError,EmptyResponse,IdResponse,ArrayList,KeyValuePair2,StringResponse,StringsResponse,Tuple2,Tuple3,ByteArray};
use ServiceStack\{JsonConverters,Returns,TypeContext};


// @DataContract
class Authentication implements JsonSerializable
{
    public function __construct(
        /** @description The API User ID provided by us when you signed up to use our API */
        // @DataMember
        // @ApiMember(Description="The API User ID provided by us when you signed up to use our API", IsRequired=true, ParameterType="header, body")
        /** @var string */
        public string $apiUserId='',

        /** @description The API User Key provided by us when you signed up to use our API */
        // @DataMember
        // @ApiMember(Description="The API User Key provided by us when you signed up to use our API", IsRequired=true, ParameterType="header, body")
        /** @var string */
        public string $apiUserKey=''
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['apiUserId'])) $this->apiUserId = $o['apiUserId'];
        if (isset($o['apiUserKey'])) $this->apiUserKey = $o['apiUserKey'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->apiUserId)) $o['apiUserId'] = $this->apiUserId;
        if (isset($this->apiUserKey)) $o['apiUserKey'] = $this->apiUserKey;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class BaseRequest implements IBaseRequest, JsonSerializable
{
    public function __construct(
        /** @description The authentication credentials */
        // @DataMember
        // @ApiMember(Description="The authentication credentials", IsRequired=true, ParameterType="header, body")
        /** @var Authentication|null */
        public ?Authentication $authentication=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['authentication'])) $this->authentication = JsonConverters::from('Authentication', $o['authentication']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->authentication)) $o['authentication'] = JsonConverters::to('Authentication', $this->authentication);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class ResponseError implements JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var string|null */
        public ?string $errorCode=null,

        // @DataMember(Order=2)
        /** @var string|null */
        public ?string $fieldName=null,

        // @DataMember(Order=3)
        /** @var string|null */
        public ?string $message=null,

        // @DataMember(Order=4)
        /** @var array<string,string>|null */
        public ?array $meta=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['errorCode'])) $this->errorCode = $o['errorCode'];
        if (isset($o['fieldName'])) $this->fieldName = $o['fieldName'];
        if (isset($o['message'])) $this->message = $o['message'];
        if (isset($o['meta'])) $this->meta = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','string']), $o['meta']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->errorCode)) $o['errorCode'] = $this->errorCode;
        if (isset($this->fieldName)) $o['fieldName'] = $this->fieldName;
        if (isset($this->message)) $o['message'] = $this->message;
        if (isset($this->meta)) $o['meta'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','string']), $this->meta);
        return empty($o) ? new class(){} : $o;
    }
}

/**
 * @template array of ResponseError
 */
class ArrayOfResponseError extends \ArrayObject implements JsonSerializable
{
    public function __construct(ResponseError ...$items) {
        parent::__construct($items, \ArrayObject::STD_PROP_LIST);
    }
    
    /** @throws \Exception */
    public function append($value): void {
        if ($value instanceof ResponseError)
            parent::append($value);
        else
            throw new \Exception("Can only append a ResponseError to " . __CLASS__);
    }
    
    /** @throws Exception */
    public function fromMap($o): void {
        foreach ($o as $item) {
            $el = new ResponseError();
            $el->fromMap($item);
            $this->append($el);
        }
    }
    
    /** @throws Exception */
    public function jsonSerialize(): array {
        return parent::getArrayCopy();
    }
}

// @DataContract
class ResponseStatus implements JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var string|null */
        public ?string $errorCode=null,

        // @DataMember(Order=2)
        /** @var string|null */
        public ?string $message=null,

        // @DataMember(Order=3)
        /** @var string|null */
        public ?string $stackTrace=null,

        // @DataMember(Order=4)
        /** @var ArrayOfResponseError|null */
        public ?ArrayOfResponseError $errors=null,

        // @DataMember(Order=5)
        /** @var array<string,string>|null */
        public ?array $meta=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['errorCode'])) $this->errorCode = $o['errorCode'];
        if (isset($o['message'])) $this->message = $o['message'];
        if (isset($o['stackTrace'])) $this->stackTrace = $o['stackTrace'];
        if (isset($o['errors'])) $this->errors = JsonConverters::from('ArrayOfResponseError', $o['errors']);
        if (isset($o['meta'])) $this->meta = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','string']), $o['meta']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->errorCode)) $o['errorCode'] = $this->errorCode;
        if (isset($this->message)) $o['message'] = $this->message;
        if (isset($this->stackTrace)) $o['stackTrace'] = $this->stackTrace;
        if (isset($this->errors)) $o['errors'] = JsonConverters::to('ArrayOfResponseError', $this->errors);
        if (isset($this->meta)) $o['meta'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','string']), $this->meta);
        return empty($o) ? new class(){} : $o;
    }
}

class BaseResponse implements IBaseDataResponse, IHasResponseStatus, JsonSerializable
{
    public function __construct(
        /** @description The status of the response */
        // @ApiMember(Description="The status of the response")
        /** @var ResponseStatus|null */
        public ?ResponseStatus $responseStatus=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['responseStatus'])) $this->responseStatus = JsonConverters::from('ResponseStatus', $o['responseStatus']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->responseStatus)) $o['responseStatus'] = JsonConverters::to('ResponseStatus', $this->responseStatus);
        return empty($o) ? new class(){} : $o;
    }
}

class LinkedTo implements JsonSerializable
{
    public function __construct(
        /** @var int|null */
        public ?int $clientId=null,
        /** @var int|null */
        public ?int $id=null,
        /** @var string|null */
        public ?string $type=null,
        /** @var string|null */
        public ?string $subtype=null,
        /** @var string|null */
        public ?string $status=null,
        /** @var string|null */
        public ?string $description=null,
        /** @var bool|null */
        public ?bool $isArchived=null,
        /** @var string|null */
        public ?string $name=null,
        /** @var DateTime|null */
        public ?DateTime $date=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['clientId'])) $this->clientId = $o['clientId'];
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['type'])) $this->type = $o['type'];
        if (isset($o['subtype'])) $this->subtype = $o['subtype'];
        if (isset($o['status'])) $this->status = $o['status'];
        if (isset($o['description'])) $this->description = $o['description'];
        if (isset($o['isArchived'])) $this->isArchived = $o['isArchived'];
        if (isset($o['name'])) $this->name = $o['name'];
        if (isset($o['date'])) $this->date = JsonConverters::from('DateTime', $o['date']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->clientId)) $o['clientId'] = $this->clientId;
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->type)) $o['type'] = $this->type;
        if (isset($this->subtype)) $o['subtype'] = $this->subtype;
        if (isset($this->status)) $o['status'] = $this->status;
        if (isset($this->description)) $o['description'] = $this->description;
        if (isset($this->isArchived)) $o['isArchived'] = $this->isArchived;
        if (isset($this->name)) $o['name'] = $this->name;
        if (isset($this->date)) $o['date'] = JsonConverters::to('DateTime', $this->date);
        return empty($o) ? new class(){} : $o;
    }
}

/**
 * @template array of LinkedTo
 */
class ArrayOfLinkedTo extends \ArrayObject implements JsonSerializable
{
    public function __construct(LinkedTo ...$items) {
        parent::__construct($items, \ArrayObject::STD_PROP_LIST);
    }
    
    /** @throws \Exception */
    public function append($value): void {
        if ($value instanceof LinkedTo)
            parent::append($value);
        else
            throw new \Exception("Can only append a LinkedTo to " . __CLASS__);
    }
    
    /** @throws Exception */
    public function fromMap($o): void {
        foreach ($o as $item) {
            $el = new LinkedTo();
            $el->fromMap($item);
            $this->append($el);
        }
    }
    
    /** @throws Exception */
    public function jsonSerialize(): array {
        return parent::getArrayCopy();
    }
}

class SearchCriteria implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $name=null,
        /** @var string|null */
        public ?string $address=null,
        /** @var string|null */
        public ?string $country=null,
        /** @var string|null */
        public ?string $dateOfBirth=null,
        /** @var string|null */
        public ?string $nationality=null,
        /** @var string|null */
        public ?string $reference=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['name'])) $this->name = $o['name'];
        if (isset($o['address'])) $this->address = $o['address'];
        if (isset($o['country'])) $this->country = $o['country'];
        if (isset($o['dateOfBirth'])) $this->dateOfBirth = $o['dateOfBirth'];
        if (isset($o['nationality'])) $this->nationality = $o['nationality'];
        if (isset($o['reference'])) $this->reference = $o['reference'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->name)) $o['name'] = $this->name;
        if (isset($this->address)) $o['address'] = $this->address;
        if (isset($this->country)) $o['country'] = $this->country;
        if (isset($this->dateOfBirth)) $o['dateOfBirth'] = $this->dateOfBirth;
        if (isset($this->nationality)) $o['nationality'] = $this->nationality;
        if (isset($this->reference)) $o['reference'] = $this->reference;
        return empty($o) ? new class(){} : $o;
    }
}

/**
 * @template array of String
 */
class ArrayOfLists extends \ArrayObject implements JsonSerializable
{
    public function __construct(String ...$items) {
        parent::__construct($items, \ArrayObject::STD_PROP_LIST);
    }
    
    /** @throws \Exception */
    public function append($value): void {
        if ($value instanceof String)
            parent::append($value);
        else
            throw new \Exception("Can only append a String to " . __CLASS__);
    }
    
    /** @throws Exception */
    public function fromMap($o): void {
        foreach ($o as $item) {
            $el = new String();
            $el->fromMap($item);
            $this->append($el);
        }
    }
    
    /** @throws Exception */
    public function jsonSerialize(): array {
        return parent::getArrayCopy();
    }
}

class CompanyDirectorOrShareholder implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $id=0,
        /** @var string|null */
        public ?string $searchType=null,
        /** @var DateTime */
        public DateTime $dateSearched=new DateTime(),
        /** @var DateTime */
        public DateTime $dateUpdated=new DateTime(),
        /** @var int */
        public int $numOfResults=0,
        /** @var bool|null */
        public ?bool $clientInResults=null,
        /** @var bool|null */
        public ?bool $clientNotInResults=null,
        /** @var bool|null */
        public ?bool $affectedByUpdate=null,
        /** @var SearchCriteria|null */
        public ?SearchCriteria $searchCriteria=null,
        /** @var bool|null */
        public ?bool $isDirector=null,
        /** @var bool|null */
        public ?bool $isShareholder=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['searchType'])) $this->searchType = $o['searchType'];
        if (isset($o['dateSearched'])) $this->dateSearched = JsonConverters::from('DateTime', $o['dateSearched']);
        if (isset($o['dateUpdated'])) $this->dateUpdated = JsonConverters::from('DateTime', $o['dateUpdated']);
        if (isset($o['numOfResults'])) $this->numOfResults = $o['numOfResults'];
        if (isset($o['clientInResults'])) $this->clientInResults = $o['clientInResults'];
        if (isset($o['clientNotInResults'])) $this->clientNotInResults = $o['clientNotInResults'];
        if (isset($o['affectedByUpdate'])) $this->affectedByUpdate = $o['affectedByUpdate'];
        if (isset($o['searchCriteria'])) $this->searchCriteria = JsonConverters::from('SearchCriteria', $o['searchCriteria']);
        if (isset($o['isDirector'])) $this->isDirector = $o['isDirector'];
        if (isset($o['isShareholder'])) $this->isShareholder = $o['isShareholder'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->searchType)) $o['searchType'] = $this->searchType;
        if (isset($this->dateSearched)) $o['dateSearched'] = JsonConverters::to('DateTime', $this->dateSearched);
        if (isset($this->dateUpdated)) $o['dateUpdated'] = JsonConverters::to('DateTime', $this->dateUpdated);
        if (isset($this->numOfResults)) $o['numOfResults'] = $this->numOfResults;
        if (isset($this->clientInResults)) $o['clientInResults'] = $this->clientInResults;
        if (isset($this->clientNotInResults)) $o['clientNotInResults'] = $this->clientNotInResults;
        if (isset($this->affectedByUpdate)) $o['affectedByUpdate'] = $this->affectedByUpdate;
        if (isset($this->searchCriteria)) $o['searchCriteria'] = JsonConverters::to('SearchCriteria', $this->searchCriteria);
        if (isset($this->isDirector)) $o['isDirector'] = $this->isDirector;
        if (isset($this->isShareholder)) $o['isShareholder'] = $this->isShareholder;
        return empty($o) ? new class(){} : $o;
    }
}

class SearchSource implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $listId=null,
        /** @var string|null */
        public ?string $listName=null,
        /** @var string|null */
        public ?string $listShortName=null,
        /** @var bool|null */
        public ?bool $isAffectedByListUpdate=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['listId'])) $this->listId = $o['listId'];
        if (isset($o['listName'])) $this->listName = $o['listName'];
        if (isset($o['listShortName'])) $this->listShortName = $o['listShortName'];
        if (isset($o['isAffectedByListUpdate'])) $this->isAffectedByListUpdate = $o['isAffectedByListUpdate'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->listId)) $o['listId'] = $this->listId;
        if (isset($this->listName)) $o['listName'] = $this->listName;
        if (isset($this->listShortName)) $o['listShortName'] = $this->listShortName;
        if (isset($this->isAffectedByListUpdate)) $o['isAffectedByListUpdate'] = $this->isAffectedByListUpdate;
        return empty($o) ? new class(){} : $o;
    }
}

class SearchListItem implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $id=0,
        /** @var string|null */
        public ?string $searchType=null,
        /** @var DateTime */
        public DateTime $dateSearched=new DateTime(),
        /** @var DateTime */
        public DateTime $dateUpdated=new DateTime(),
        /** @var DateTime|null */
        public ?DateTime $dateArchived=null,
        /** @var bool|null */
        public ?bool $isArchived=null,
        /** @var int */
        public int $numOfResults=0,
        /** @var bool|null */
        public ?bool $clientInResults=null,
        /** @var bool|null */
        public ?bool $clientNotInResults=null,
        /** @var bool|null */
        public ?bool $affectedByUpdate=null,
        /** @var SearchCriteria|null */
        public ?SearchCriteria $searchCriteria=null,
        /** @var array<SearchSource>|null */
        public ?array $searchSources=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['searchType'])) $this->searchType = $o['searchType'];
        if (isset($o['dateSearched'])) $this->dateSearched = JsonConverters::from('DateTime', $o['dateSearched']);
        if (isset($o['dateUpdated'])) $this->dateUpdated = JsonConverters::from('DateTime', $o['dateUpdated']);
        if (isset($o['dateArchived'])) $this->dateArchived = JsonConverters::from('DateTime', $o['dateArchived']);
        if (isset($o['isArchived'])) $this->isArchived = $o['isArchived'];
        if (isset($o['numOfResults'])) $this->numOfResults = $o['numOfResults'];
        if (isset($o['clientInResults'])) $this->clientInResults = $o['clientInResults'];
        if (isset($o['clientNotInResults'])) $this->clientNotInResults = $o['clientNotInResults'];
        if (isset($o['affectedByUpdate'])) $this->affectedByUpdate = $o['affectedByUpdate'];
        if (isset($o['searchCriteria'])) $this->searchCriteria = JsonConverters::from('SearchCriteria', $o['searchCriteria']);
        if (isset($o['searchSources'])) $this->searchSources = JsonConverters::fromArray('SearchSource', $o['searchSources']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->searchType)) $o['searchType'] = $this->searchType;
        if (isset($this->dateSearched)) $o['dateSearched'] = JsonConverters::to('DateTime', $this->dateSearched);
        if (isset($this->dateUpdated)) $o['dateUpdated'] = JsonConverters::to('DateTime', $this->dateUpdated);
        if (isset($this->dateArchived)) $o['dateArchived'] = JsonConverters::to('DateTime', $this->dateArchived);
        if (isset($this->isArchived)) $o['isArchived'] = $this->isArchived;
        if (isset($this->numOfResults)) $o['numOfResults'] = $this->numOfResults;
        if (isset($this->clientInResults)) $o['clientInResults'] = $this->clientInResults;
        if (isset($this->clientNotInResults)) $o['clientNotInResults'] = $this->clientNotInResults;
        if (isset($this->affectedByUpdate)) $o['affectedByUpdate'] = $this->affectedByUpdate;
        if (isset($this->searchCriteria)) $o['searchCriteria'] = JsonConverters::to('SearchCriteria', $this->searchCriteria);
        if (isset($this->searchSources)) $o['searchSources'] = JsonConverters::toArray('SearchSource', $this->searchSources);
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedLatestAccounts implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $currency=null,
        /** @var float|null */
        public ?float $turnover=null,
        /** @var float|null */
        public ?float $shareholdersEquity=null,
        /** @var int|null */
        public ?int $creditRating=null,
        /** @var int|null */
        public ?int $creditLimit=null,
        /** @var string|null */
        public ?string $creditRatingDescription=null,
        /** @var int|null */
        public ?int $accountRefDay=null,
        /** @var int|null */
        public ?int $accountRefMonth=null,
        /** @var DateTime|null */
        public ?DateTime $accountNextDueDate=null,
        /** @var DateTime|null */
        public ?DateTime $accountLastMadeUpDate=null,
        /** @var string|null */
        public ?string $accountCategory=null,
        /** @var DateTime|null */
        public ?DateTime $returnLastMadeUpDate=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['currency'])) $this->currency = $o['currency'];
        if (isset($o['turnover'])) $this->turnover = $o['turnover'];
        if (isset($o['shareholdersEquity'])) $this->shareholdersEquity = $o['shareholdersEquity'];
        if (isset($o['creditRating'])) $this->creditRating = $o['creditRating'];
        if (isset($o['creditLimit'])) $this->creditLimit = $o['creditLimit'];
        if (isset($o['creditRatingDescription'])) $this->creditRatingDescription = $o['creditRatingDescription'];
        if (isset($o['accountRefDay'])) $this->accountRefDay = $o['accountRefDay'];
        if (isset($o['accountRefMonth'])) $this->accountRefMonth = $o['accountRefMonth'];
        if (isset($o['accountNextDueDate'])) $this->accountNextDueDate = JsonConverters::from('DateTime', $o['accountNextDueDate']);
        if (isset($o['accountLastMadeUpDate'])) $this->accountLastMadeUpDate = JsonConverters::from('DateTime', $o['accountLastMadeUpDate']);
        if (isset($o['accountCategory'])) $this->accountCategory = $o['accountCategory'];
        if (isset($o['returnLastMadeUpDate'])) $this->returnLastMadeUpDate = JsonConverters::from('DateTime', $o['returnLastMadeUpDate']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->currency)) $o['currency'] = $this->currency;
        if (isset($this->turnover)) $o['turnover'] = $this->turnover;
        if (isset($this->shareholdersEquity)) $o['shareholdersEquity'] = $this->shareholdersEquity;
        if (isset($this->creditRating)) $o['creditRating'] = $this->creditRating;
        if (isset($this->creditLimit)) $o['creditLimit'] = $this->creditLimit;
        if (isset($this->creditRatingDescription)) $o['creditRatingDescription'] = $this->creditRatingDescription;
        if (isset($this->accountRefDay)) $o['accountRefDay'] = $this->accountRefDay;
        if (isset($this->accountRefMonth)) $o['accountRefMonth'] = $this->accountRefMonth;
        if (isset($this->accountNextDueDate)) $o['accountNextDueDate'] = JsonConverters::to('DateTime', $this->accountNextDueDate);
        if (isset($this->accountLastMadeUpDate)) $o['accountLastMadeUpDate'] = JsonConverters::to('DateTime', $this->accountLastMadeUpDate);
        if (isset($this->accountCategory)) $o['accountCategory'] = $this->accountCategory;
        if (isset($this->returnLastMadeUpDate)) $o['returnLastMadeUpDate'] = JsonConverters::to('DateTime', $this->returnLastMadeUpDate);
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedSummary implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $name=null,
        /** @var string|null */
        public ?string $country=null,
        /** @var string|null */
        public ?string $registrationNumber=null,
        /** @var string|null */
        public ?string $dateOfIncorporation=null,
        /** @var string|null */
        public ?string $typeOfIncorporation=null,
        /** @var string|null */
        public ?string $companyStatus=null,
        /** @var string|null */
        public ?string $address=null,
        /** @var string|null */
        public ?string $telephone=null,
        /** @var string|null */
        public ?string $sicCode=null,
        /** @var string|null */
        public ?string $sicDescription=null,
        /** @var string|null */
        public ?string $principleActivity=null,
        /** @var CompanyLookupEnhancedLatestAccounts|null */
        public ?CompanyLookupEnhancedLatestAccounts $latestAccounts=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['name'])) $this->name = $o['name'];
        if (isset($o['country'])) $this->country = $o['country'];
        if (isset($o['registrationNumber'])) $this->registrationNumber = $o['registrationNumber'];
        if (isset($o['dateOfIncorporation'])) $this->dateOfIncorporation = $o['dateOfIncorporation'];
        if (isset($o['typeOfIncorporation'])) $this->typeOfIncorporation = $o['typeOfIncorporation'];
        if (isset($o['companyStatus'])) $this->companyStatus = $o['companyStatus'];
        if (isset($o['address'])) $this->address = $o['address'];
        if (isset($o['telephone'])) $this->telephone = $o['telephone'];
        if (isset($o['sicCode'])) $this->sicCode = $o['sicCode'];
        if (isset($o['sicDescription'])) $this->sicDescription = $o['sicDescription'];
        if (isset($o['principleActivity'])) $this->principleActivity = $o['principleActivity'];
        if (isset($o['latestAccounts'])) $this->latestAccounts = JsonConverters::from('CompanyLookupEnhancedLatestAccounts', $o['latestAccounts']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->name)) $o['name'] = $this->name;
        if (isset($this->country)) $o['country'] = $this->country;
        if (isset($this->registrationNumber)) $o['registrationNumber'] = $this->registrationNumber;
        if (isset($this->dateOfIncorporation)) $o['dateOfIncorporation'] = $this->dateOfIncorporation;
        if (isset($this->typeOfIncorporation)) $o['typeOfIncorporation'] = $this->typeOfIncorporation;
        if (isset($this->companyStatus)) $o['companyStatus'] = $this->companyStatus;
        if (isset($this->address)) $o['address'] = $this->address;
        if (isset($this->telephone)) $o['telephone'] = $this->telephone;
        if (isset($this->sicCode)) $o['sicCode'] = $this->sicCode;
        if (isset($this->sicDescription)) $o['sicDescription'] = $this->sicDescription;
        if (isset($this->principleActivity)) $o['principleActivity'] = $this->principleActivity;
        if (isset($this->latestAccounts)) $o['latestAccounts'] = JsonConverters::to('CompanyLookupEnhancedLatestAccounts', $this->latestAccounts);
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedAddress implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $fullAddress=null,
        /** @var string|null */
        public ?string $address1=null,
        /** @var string|null */
        public ?string $address2=null,
        /** @var string|null */
        public ?string $address3=null,
        /** @var string|null */
        public ?string $address4=null,
        /** @var string|null */
        public ?string $postCode=null,
        /** @var string|null */
        public ?string $telephone=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['fullAddress'])) $this->fullAddress = $o['fullAddress'];
        if (isset($o['address1'])) $this->address1 = $o['address1'];
        if (isset($o['address2'])) $this->address2 = $o['address2'];
        if (isset($o['address3'])) $this->address3 = $o['address3'];
        if (isset($o['address4'])) $this->address4 = $o['address4'];
        if (isset($o['postCode'])) $this->postCode = $o['postCode'];
        if (isset($o['telephone'])) $this->telephone = $o['telephone'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->fullAddress)) $o['fullAddress'] = $this->fullAddress;
        if (isset($this->address1)) $o['address1'] = $this->address1;
        if (isset($this->address2)) $o['address2'] = $this->address2;
        if (isset($this->address3)) $o['address3'] = $this->address3;
        if (isset($this->address4)) $o['address4'] = $this->address4;
        if (isset($this->postCode)) $o['postCode'] = $this->postCode;
        if (isset($this->telephone)) $o['telephone'] = $this->telephone;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedWebsite implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $website=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['website'])) $this->website = $o['website'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->website)) $o['website'] = $this->website;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedAdditionalContact implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $telephone=null,
        /** @var string|null */
        public ?string $faxNumber=null,
        /** @var string|null */
        public ?string $emailAddress=null,
        /** @var string|null */
        public ?string $webAddress=null,
        /** @var string|null */
        public ?string $twitter=null,
        /** @var string|null */
        public ?string $facebook=null,
        /** @var string|null */
        public ?string $googlePlus=null,
        /** @var string|null */
        public ?string $linkedIn=null,
        /** @var string|null */
        public ?string $contactName=null,
        /** @var string|null */
        public ?string $businessClassification=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['telephone'])) $this->telephone = $o['telephone'];
        if (isset($o['faxNumber'])) $this->faxNumber = $o['faxNumber'];
        if (isset($o['emailAddress'])) $this->emailAddress = $o['emailAddress'];
        if (isset($o['webAddress'])) $this->webAddress = $o['webAddress'];
        if (isset($o['twitter'])) $this->twitter = $o['twitter'];
        if (isset($o['facebook'])) $this->facebook = $o['facebook'];
        if (isset($o['googlePlus'])) $this->googlePlus = $o['googlePlus'];
        if (isset($o['linkedIn'])) $this->linkedIn = $o['linkedIn'];
        if (isset($o['contactName'])) $this->contactName = $o['contactName'];
        if (isset($o['businessClassification'])) $this->businessClassification = $o['businessClassification'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->telephone)) $o['telephone'] = $this->telephone;
        if (isset($this->faxNumber)) $o['faxNumber'] = $this->faxNumber;
        if (isset($this->emailAddress)) $o['emailAddress'] = $this->emailAddress;
        if (isset($this->webAddress)) $o['webAddress'] = $this->webAddress;
        if (isset($this->twitter)) $o['twitter'] = $this->twitter;
        if (isset($this->facebook)) $o['facebook'] = $this->facebook;
        if (isset($this->googlePlus)) $o['googlePlus'] = $this->googlePlus;
        if (isset($this->linkedIn)) $o['linkedIn'] = $this->linkedIn;
        if (isset($this->contactName)) $o['contactName'] = $this->contactName;
        if (isset($this->businessClassification)) $o['businessClassification'] = $this->businessClassification;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedContactInfo implements JsonSerializable
{
    public function __construct(
        /** @var CompanyLookupEnhancedAddress|null */
        public ?CompanyLookupEnhancedAddress $registeredAddress=null,
        /** @var array<CompanyLookupEnhancedAddress>|null */
        public ?array $tradingAddresses=null,
        /** @var array<CompanyLookupEnhancedWebsite>|null */
        public ?array $websites=null,
        /** @var CompanyLookupEnhancedAdditionalContact|null */
        public ?CompanyLookupEnhancedAdditionalContact $additionalContactInfo=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['registeredAddress'])) $this->registeredAddress = JsonConverters::from('CompanyLookupEnhancedAddress', $o['registeredAddress']);
        if (isset($o['tradingAddresses'])) $this->tradingAddresses = JsonConverters::fromArray('CompanyLookupEnhancedAddress', $o['tradingAddresses']);
        if (isset($o['websites'])) $this->websites = JsonConverters::fromArray('CompanyLookupEnhancedWebsite', $o['websites']);
        if (isset($o['additionalContactInfo'])) $this->additionalContactInfo = JsonConverters::from('CompanyLookupEnhancedAdditionalContact', $o['additionalContactInfo']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->registeredAddress)) $o['registeredAddress'] = JsonConverters::to('CompanyLookupEnhancedAddress', $this->registeredAddress);
        if (isset($this->tradingAddresses)) $o['tradingAddresses'] = JsonConverters::toArray('CompanyLookupEnhancedAddress', $this->tradingAddresses);
        if (isset($this->websites)) $o['websites'] = JsonConverters::toArray('CompanyLookupEnhancedWebsite', $this->websites);
        if (isset($this->additionalContactInfo)) $o['additionalContactInfo'] = JsonConverters::to('CompanyLookupEnhancedAdditionalContact', $this->additionalContactInfo);
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedSicCode implements JsonSerializable
{
    public function __construct(
        /** @var int|null */
        public ?int $sicCode2003=null,
        /** @var string|null */
        public ?string $sicCode2003Description=null,
        /** @var int|null */
        public ?int $sicCode2007=null,
        /** @var string|null */
        public ?string $sicCode2007Description=null,
        /** @var string|null */
        public ?string $status=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['sicCode2003'])) $this->sicCode2003 = $o['sicCode2003'];
        if (isset($o['sicCode2003Description'])) $this->sicCode2003Description = $o['sicCode2003Description'];
        if (isset($o['sicCode2007'])) $this->sicCode2007 = $o['sicCode2007'];
        if (isset($o['sicCode2007Description'])) $this->sicCode2007Description = $o['sicCode2007Description'];
        if (isset($o['status'])) $this->status = $o['status'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->sicCode2003)) $o['sicCode2003'] = $this->sicCode2003;
        if (isset($this->sicCode2003Description)) $o['sicCode2003Description'] = $this->sicCode2003Description;
        if (isset($this->sicCode2007)) $o['sicCode2007'] = $this->sicCode2007;
        if (isset($this->sicCode2007Description)) $o['sicCode2007Description'] = $this->sicCode2007Description;
        if (isset($this->status)) $o['status'] = $this->status;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedPreviousName implements JsonSerializable
{
    public function __construct(
        /** @var DateTime|null */
        public ?DateTime $dateChanged=null,
        /** @var string|null */
        public ?string $name=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['dateChanged'])) $this->dateChanged = JsonConverters::from('DateTime', $o['dateChanged']);
        if (isset($o['name'])) $this->name = $o['name'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->dateChanged)) $o['dateChanged'] = JsonConverters::to('DateTime', $this->dateChanged);
        if (isset($this->name)) $o['name'] = $this->name;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedShareholder implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $title=null,
        /** @var string|null */
        public ?string $forename=null,
        /** @var string|null */
        public ?string $surname=null,
        /** @var string|null */
        public ?string $address1=null,
        /** @var string|null */
        public ?string $address2=null,
        /** @var string|null */
        public ?string $address3=null,
        /** @var string|null */
        public ?string $address4=null,
        /** @var string|null */
        public ?string $address5=null,
        /** @var string|null */
        public ?string $postCode=null,
        /** @var string|null */
        public ?string $shareType=null,
        /** @var float|null */
        public ?float $number=null,
        /** @var float|null */
        public ?float $value=null,
        /** @var string|null */
        public ?string $currency=null,
        /** @var string|null */
        public ?string $shareholderType=null,
        /** @var string|null */
        public ?string $shareClass=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['title'])) $this->title = $o['title'];
        if (isset($o['forename'])) $this->forename = $o['forename'];
        if (isset($o['surname'])) $this->surname = $o['surname'];
        if (isset($o['address1'])) $this->address1 = $o['address1'];
        if (isset($o['address2'])) $this->address2 = $o['address2'];
        if (isset($o['address3'])) $this->address3 = $o['address3'];
        if (isset($o['address4'])) $this->address4 = $o['address4'];
        if (isset($o['address5'])) $this->address5 = $o['address5'];
        if (isset($o['postCode'])) $this->postCode = $o['postCode'];
        if (isset($o['shareType'])) $this->shareType = $o['shareType'];
        if (isset($o['number'])) $this->number = $o['number'];
        if (isset($o['value'])) $this->value = $o['value'];
        if (isset($o['currency'])) $this->currency = $o['currency'];
        if (isset($o['shareholderType'])) $this->shareholderType = $o['shareholderType'];
        if (isset($o['shareClass'])) $this->shareClass = $o['shareClass'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->title)) $o['title'] = $this->title;
        if (isset($this->forename)) $o['forename'] = $this->forename;
        if (isset($this->surname)) $o['surname'] = $this->surname;
        if (isset($this->address1)) $o['address1'] = $this->address1;
        if (isset($this->address2)) $o['address2'] = $this->address2;
        if (isset($this->address3)) $o['address3'] = $this->address3;
        if (isset($this->address4)) $o['address4'] = $this->address4;
        if (isset($this->address5)) $o['address5'] = $this->address5;
        if (isset($this->postCode)) $o['postCode'] = $this->postCode;
        if (isset($this->shareType)) $o['shareType'] = $this->shareType;
        if (isset($this->number)) $o['number'] = $this->number;
        if (isset($this->value)) $o['value'] = $this->value;
        if (isset($this->currency)) $o['currency'] = $this->currency;
        if (isset($this->shareholderType)) $o['shareholderType'] = $this->shareholderType;
        if (isset($this->shareClass)) $o['shareClass'] = $this->shareClass;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedShareStructure implements JsonSerializable
{
    public function __construct(
        /** @var float|null */
        public ?float $issuedShareCapital=null,
        /** @var array<CompanyLookupEnhancedShareholder>|null */
        public ?array $shareholders=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['issuedShareCapital'])) $this->issuedShareCapital = $o['issuedShareCapital'];
        if (isset($o['shareholders'])) $this->shareholders = JsonConverters::fromArray('CompanyLookupEnhancedShareholder', $o['shareholders']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->issuedShareCapital)) $o['issuedShareCapital'] = $this->issuedShareCapital;
        if (isset($this->shareholders)) $o['shareholders'] = JsonConverters::toArray('CompanyLookupEnhancedShareholder', $this->shareholders);
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedDirector implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $name=null,
        /** @var string|null */
        public ?string $address=null,
        /** @var string|null */
        public ?string $gender=null,
        /** @var DateTime|null */
        public ?DateTime $appointmentDate=null,
        /** @var DateTime|null */
        public ?DateTime $resignationDate=null,
        /** @var DateTime|null */
        public ?DateTime $dateOfBirth=null,
        /** @var string|null */
        public ?string $position=null,
        /** @var int|null */
        public ?int $idNumber=null,
        /** @var int|null */
        public ?int $currentDirectorships=null,
        /** @var int|null */
        public ?int $previousDirectorships=null,
        /** @var int|null */
        public ?int $totalDirectorships=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['name'])) $this->name = $o['name'];
        if (isset($o['address'])) $this->address = $o['address'];
        if (isset($o['gender'])) $this->gender = $o['gender'];
        if (isset($o['appointmentDate'])) $this->appointmentDate = JsonConverters::from('DateTime', $o['appointmentDate']);
        if (isset($o['resignationDate'])) $this->resignationDate = JsonConverters::from('DateTime', $o['resignationDate']);
        if (isset($o['dateOfBirth'])) $this->dateOfBirth = JsonConverters::from('DateTime', $o['dateOfBirth']);
        if (isset($o['position'])) $this->position = $o['position'];
        if (isset($o['idNumber'])) $this->idNumber = $o['idNumber'];
        if (isset($o['currentDirectorships'])) $this->currentDirectorships = $o['currentDirectorships'];
        if (isset($o['previousDirectorships'])) $this->previousDirectorships = $o['previousDirectorships'];
        if (isset($o['totalDirectorships'])) $this->totalDirectorships = $o['totalDirectorships'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->name)) $o['name'] = $this->name;
        if (isset($this->address)) $o['address'] = $this->address;
        if (isset($this->gender)) $o['gender'] = $this->gender;
        if (isset($this->appointmentDate)) $o['appointmentDate'] = JsonConverters::to('DateTime', $this->appointmentDate);
        if (isset($this->resignationDate)) $o['resignationDate'] = JsonConverters::to('DateTime', $this->resignationDate);
        if (isset($this->dateOfBirth)) $o['dateOfBirth'] = JsonConverters::to('DateTime', $this->dateOfBirth);
        if (isset($this->position)) $o['position'] = $this->position;
        if (isset($this->idNumber)) $o['idNumber'] = $this->idNumber;
        if (isset($this->currentDirectorships)) $o['currentDirectorships'] = $this->currentDirectorships;
        if (isset($this->previousDirectorships)) $o['previousDirectorships'] = $this->previousDirectorships;
        if (isset($this->totalDirectorships)) $o['totalDirectorships'] = $this->totalDirectorships;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedDirectors implements JsonSerializable
{
    public function __construct(
        /** @var array<CompanyLookupEnhancedDirector>|null */
        public ?array $currentDirectors=null,
        /** @var array<CompanyLookupEnhancedDirector>|null */
        public ?array $previousDirectors=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['currentDirectors'])) $this->currentDirectors = JsonConverters::fromArray('CompanyLookupEnhancedDirector', $o['currentDirectors']);
        if (isset($o['previousDirectors'])) $this->previousDirectors = JsonConverters::fromArray('CompanyLookupEnhancedDirector', $o['previousDirectors']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->currentDirectors)) $o['currentDirectors'] = JsonConverters::toArray('CompanyLookupEnhancedDirector', $this->currentDirectors);
        if (isset($this->previousDirectors)) $o['previousDirectors'] = JsonConverters::toArray('CompanyLookupEnhancedDirector', $this->previousDirectors);
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedCompany implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $country=null,
        /** @var string|null */
        public ?string $companyName=null,
        /** @var string|null */
        public ?string $companyNumber=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['country'])) $this->country = $o['country'];
        if (isset($o['companyName'])) $this->companyName = $o['companyName'];
        if (isset($o['companyNumber'])) $this->companyNumber = $o['companyNumber'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->country)) $o['country'] = $this->country;
        if (isset($this->companyName)) $o['companyName'] = $this->companyName;
        if (isset($this->companyNumber)) $o['companyNumber'] = $this->companyNumber;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedStructure implements JsonSerializable
{
    public function __construct(
        /** @var array<CompanyLookupEnhancedCompany>|null */
        public ?array $parentCompanies=null,
        /** @var array<CompanyLookupEnhancedCompany>|null */
        public ?array $subsidiaryCompanies=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['parentCompanies'])) $this->parentCompanies = JsonConverters::fromArray('CompanyLookupEnhancedCompany', $o['parentCompanies']);
        if (isset($o['subsidiaryCompanies'])) $this->subsidiaryCompanies = JsonConverters::fromArray('CompanyLookupEnhancedCompany', $o['subsidiaryCompanies']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->parentCompanies)) $o['parentCompanies'] = JsonConverters::toArray('CompanyLookupEnhancedCompany', $this->parentCompanies);
        if (isset($this->subsidiaryCompanies)) $o['subsidiaryCompanies'] = JsonConverters::toArray('CompanyLookupEnhancedCompany', $this->subsidiaryCompanies);
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedCCJ implements JsonSerializable
{
    public function __construct(
        /** @var DateTime|null */
        public ?DateTime $date=null,
        /** @var string|null */
        public ?string $court=null,
        /** @var float|null */
        public ?float $amount=null,
        /** @var string|null */
        public ?string $caseNumber=null,
        /** @var string|null */
        public ?string $status=null,
        /** @var string|null */
        public ?string $datePaid=null,
        /** @var string|null */
        public ?string $incomingRecordDetails=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['date'])) $this->date = JsonConverters::from('DateTime', $o['date']);
        if (isset($o['court'])) $this->court = $o['court'];
        if (isset($o['amount'])) $this->amount = $o['amount'];
        if (isset($o['caseNumber'])) $this->caseNumber = $o['caseNumber'];
        if (isset($o['status'])) $this->status = $o['status'];
        if (isset($o['datePaid'])) $this->datePaid = $o['datePaid'];
        if (isset($o['incomingRecordDetails'])) $this->incomingRecordDetails = $o['incomingRecordDetails'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->date)) $o['date'] = JsonConverters::to('DateTime', $this->date);
        if (isset($this->court)) $o['court'] = $this->court;
        if (isset($this->amount)) $o['amount'] = $this->amount;
        if (isset($this->caseNumber)) $o['caseNumber'] = $this->caseNumber;
        if (isset($this->status)) $o['status'] = $this->status;
        if (isset($this->datePaid)) $o['datePaid'] = $this->datePaid;
        if (isset($this->incomingRecordDetails)) $o['incomingRecordDetails'] = $this->incomingRecordDetails;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedCCJs implements JsonSerializable
{
    public function __construct(
        /** @var array<CompanyLookupEnhancedCCJ>|null */
        public ?array $possibleCCJs=null,
        /** @var array<CompanyLookupEnhancedCCJ>|null */
        public ?array $exactCCJs=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['possibleCCJs'])) $this->possibleCCJs = JsonConverters::fromArray('CompanyLookupEnhancedCCJ', $o['possibleCCJs']);
        if (isset($o['exactCCJs'])) $this->exactCCJs = JsonConverters::fromArray('CompanyLookupEnhancedCCJ', $o['exactCCJs']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->possibleCCJs)) $o['possibleCCJs'] = JsonConverters::toArray('CompanyLookupEnhancedCCJ', $this->possibleCCJs);
        if (isset($this->exactCCJs)) $o['exactCCJs'] = JsonConverters::toArray('CompanyLookupEnhancedCCJ', $this->exactCCJs);
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedEvent implements JsonSerializable
{
    public function __construct(
        /** @var DateTime|null */
        public ?DateTime $date=null,
        /** @var string|null */
        public ?string $description=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['date'])) $this->date = JsonConverters::from('DateTime', $o['date']);
        if (isset($o['description'])) $this->description = $o['description'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->date)) $o['date'] = JsonConverters::to('DateTime', $this->date);
        if (isset($this->description)) $o['description'] = $this->description;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedCommentary implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $text=null,
        /** @var string|null */
        public ?string $positiveOrNegative=null,
        /** @var int|null */
        public ?int $priority=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['text'])) $this->text = $o['text'];
        if (isset($o['positiveOrNegative'])) $this->positiveOrNegative = $o['positiveOrNegative'];
        if (isset($o['priority'])) $this->priority = $o['priority'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->text)) $o['text'] = $this->text;
        if (isset($this->positiveOrNegative)) $o['positiveOrNegative'] = $this->positiveOrNegative;
        if (isset($this->priority)) $o['priority'] = $this->priority;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedCreditLimit implements JsonSerializable
{
    public function __construct(
        /** @var DateTime|null */
        public ?DateTime $date=null,
        /** @var int|null */
        public ?int $dateOrder=null,
        /** @var int|null */
        public ?int $amount=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['date'])) $this->date = JsonConverters::from('DateTime', $o['date']);
        if (isset($o['dateOrder'])) $this->dateOrder = $o['dateOrder'];
        if (isset($o['amount'])) $this->amount = $o['amount'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->date)) $o['date'] = JsonConverters::to('DateTime', $this->date);
        if (isset($this->dateOrder)) $o['dateOrder'] = $this->dateOrder;
        if (isset($this->amount)) $o['amount'] = $this->amount;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedCreditRating implements JsonSerializable
{
    public function __construct(
        /** @var DateTime|null */
        public ?DateTime $date=null,
        /** @var int|null */
        public ?int $dateOrder=null,
        /** @var int|null */
        public ?int $amount=null,
        /** @var string|null */
        public ?string $shortDescription=null,
        /** @var string|null */
        public ?string $description=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['date'])) $this->date = JsonConverters::from('DateTime', $o['date']);
        if (isset($o['dateOrder'])) $this->dateOrder = $o['dateOrder'];
        if (isset($o['amount'])) $this->amount = $o['amount'];
        if (isset($o['shortDescription'])) $this->shortDescription = $o['shortDescription'];
        if (isset($o['description'])) $this->description = $o['description'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->date)) $o['date'] = JsonConverters::to('DateTime', $this->date);
        if (isset($this->dateOrder)) $o['dateOrder'] = $this->dateOrder;
        if (isset($this->amount)) $o['amount'] = $this->amount;
        if (isset($this->shortDescription)) $o['shortDescription'] = $this->shortDescription;
        if (isset($this->description)) $o['description'] = $this->description;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedCreditAccount implements JsonSerializable
{
    public function __construct(
        /** @var array<CompanyLookupEnhancedCreditLimit>|null */
        public ?array $creditLimitHistory=null,
        /** @var array<CompanyLookupEnhancedCreditRating>|null */
        public ?array $creditRatingHistory=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['creditLimitHistory'])) $this->creditLimitHistory = JsonConverters::fromArray('CompanyLookupEnhancedCreditLimit', $o['creditLimitHistory']);
        if (isset($o['creditRatingHistory'])) $this->creditRatingHistory = JsonConverters::fromArray('CompanyLookupEnhancedCreditRating', $o['creditRatingHistory']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->creditLimitHistory)) $o['creditLimitHistory'] = JsonConverters::toArray('CompanyLookupEnhancedCreditLimit', $this->creditLimitHistory);
        if (isset($this->creditRatingHistory)) $o['creditRatingHistory'] = JsonConverters::toArray('CompanyLookupEnhancedCreditRating', $this->creditRatingHistory);
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupFinancialProfit implements JsonSerializable
{
    public function __construct(
        /** @var float|null */
        public ?float $turnover=null,
        /** @var float|null */
        public ?float $export=null,
        /** @var float|null */
        public ?float $costOfSales=null,
        /** @var float|null */
        public ?float $grossProfit=null,
        /** @var float|null */
        public ?float $wagesAndSalaries=null,
        /** @var float|null */
        public ?float $directorEmolument=null,
        /** @var float|null */
        public ?float $operatingProfit=null,
        /** @var float|null */
        public ?float $depreciation=null,
        /** @var float|null */
        public ?float $auditFees=null,
        /** @var float|null */
        public ?float $interestPayments=null,
        /** @var float|null */
        public ?float $pretaxProfit=null,
        /** @var float|null */
        public ?float $taxation=null,
        /** @var float|null */
        public ?float $profitAfterTax=null,
        /** @var float|null */
        public ?float $dividendsPayable=null,
        /** @var float|null */
        public ?float $retainedProfit=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['turnover'])) $this->turnover = $o['turnover'];
        if (isset($o['export'])) $this->export = $o['export'];
        if (isset($o['costOfSales'])) $this->costOfSales = $o['costOfSales'];
        if (isset($o['grossProfit'])) $this->grossProfit = $o['grossProfit'];
        if (isset($o['wagesAndSalaries'])) $this->wagesAndSalaries = $o['wagesAndSalaries'];
        if (isset($o['directorEmolument'])) $this->directorEmolument = $o['directorEmolument'];
        if (isset($o['operatingProfit'])) $this->operatingProfit = $o['operatingProfit'];
        if (isset($o['depreciation'])) $this->depreciation = $o['depreciation'];
        if (isset($o['auditFees'])) $this->auditFees = $o['auditFees'];
        if (isset($o['interestPayments'])) $this->interestPayments = $o['interestPayments'];
        if (isset($o['pretaxProfit'])) $this->pretaxProfit = $o['pretaxProfit'];
        if (isset($o['taxation'])) $this->taxation = $o['taxation'];
        if (isset($o['profitAfterTax'])) $this->profitAfterTax = $o['profitAfterTax'];
        if (isset($o['dividendsPayable'])) $this->dividendsPayable = $o['dividendsPayable'];
        if (isset($o['retainedProfit'])) $this->retainedProfit = $o['retainedProfit'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->turnover)) $o['turnover'] = $this->turnover;
        if (isset($this->export)) $o['export'] = $this->export;
        if (isset($this->costOfSales)) $o['costOfSales'] = $this->costOfSales;
        if (isset($this->grossProfit)) $o['grossProfit'] = $this->grossProfit;
        if (isset($this->wagesAndSalaries)) $o['wagesAndSalaries'] = $this->wagesAndSalaries;
        if (isset($this->directorEmolument)) $o['directorEmolument'] = $this->directorEmolument;
        if (isset($this->operatingProfit)) $o['operatingProfit'] = $this->operatingProfit;
        if (isset($this->depreciation)) $o['depreciation'] = $this->depreciation;
        if (isset($this->auditFees)) $o['auditFees'] = $this->auditFees;
        if (isset($this->interestPayments)) $o['interestPayments'] = $this->interestPayments;
        if (isset($this->pretaxProfit)) $o['pretaxProfit'] = $this->pretaxProfit;
        if (isset($this->taxation)) $o['taxation'] = $this->taxation;
        if (isset($this->profitAfterTax)) $o['profitAfterTax'] = $this->profitAfterTax;
        if (isset($this->dividendsPayable)) $o['dividendsPayable'] = $this->dividendsPayable;
        if (isset($this->retainedProfit)) $o['retainedProfit'] = $this->retainedProfit;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupFinancialBalance implements JsonSerializable
{
    public function __construct(
        /** @var float|null */
        public ?float $tangibleAccounts=null,
        /** @var float|null */
        public ?float $intangibleAssets=null,
        /** @var float|null */
        public ?float $totalFixedAssets=null,
        /** @var float|null */
        public ?float $stock=null,
        /** @var float|null */
        public ?float $tradeDebtors=null,
        /** @var float|null */
        public ?float $cash=null,
        /** @var float|null */
        public ?float $otherDebtors=null,
        /** @var float|null */
        public ?float $miscCurrentAssets=null,
        /** @var float|null */
        public ?float $totalCurrentAssets=null,
        /** @var float|null */
        public ?float $tradeCreditors=null,
        /** @var float|null */
        public ?float $bankLoansAndOverdrafts=null,
        /** @var float|null */
        public ?float $otherShortTermFinance=null,
        /** @var float|null */
        public ?float $miscCurrentLiabilities=null,
        /** @var float|null */
        public ?float $totalCurrentLiabilities=null,
        /** @var float|null */
        public ?float $bankLoansAndOverdraftsAndLTL=null,
        /** @var float|null */
        public ?float $otherLongTermFinance=null,
        /** @var float|null */
        public ?float $totalLongTermFinance=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['tangibleAccounts'])) $this->tangibleAccounts = $o['tangibleAccounts'];
        if (isset($o['intangibleAssets'])) $this->intangibleAssets = $o['intangibleAssets'];
        if (isset($o['totalFixedAssets'])) $this->totalFixedAssets = $o['totalFixedAssets'];
        if (isset($o['stock'])) $this->stock = $o['stock'];
        if (isset($o['tradeDebtors'])) $this->tradeDebtors = $o['tradeDebtors'];
        if (isset($o['cash'])) $this->cash = $o['cash'];
        if (isset($o['otherDebtors'])) $this->otherDebtors = $o['otherDebtors'];
        if (isset($o['miscCurrentAssets'])) $this->miscCurrentAssets = $o['miscCurrentAssets'];
        if (isset($o['totalCurrentAssets'])) $this->totalCurrentAssets = $o['totalCurrentAssets'];
        if (isset($o['tradeCreditors'])) $this->tradeCreditors = $o['tradeCreditors'];
        if (isset($o['bankLoansAndOverdrafts'])) $this->bankLoansAndOverdrafts = $o['bankLoansAndOverdrafts'];
        if (isset($o['otherShortTermFinance'])) $this->otherShortTermFinance = $o['otherShortTermFinance'];
        if (isset($o['miscCurrentLiabilities'])) $this->miscCurrentLiabilities = $o['miscCurrentLiabilities'];
        if (isset($o['totalCurrentLiabilities'])) $this->totalCurrentLiabilities = $o['totalCurrentLiabilities'];
        if (isset($o['bankLoansAndOverdraftsAndLTL'])) $this->bankLoansAndOverdraftsAndLTL = $o['bankLoansAndOverdraftsAndLTL'];
        if (isset($o['otherLongTermFinance'])) $this->otherLongTermFinance = $o['otherLongTermFinance'];
        if (isset($o['totalLongTermFinance'])) $this->totalLongTermFinance = $o['totalLongTermFinance'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->tangibleAccounts)) $o['tangibleAccounts'] = $this->tangibleAccounts;
        if (isset($this->intangibleAssets)) $o['intangibleAssets'] = $this->intangibleAssets;
        if (isset($this->totalFixedAssets)) $o['totalFixedAssets'] = $this->totalFixedAssets;
        if (isset($this->stock)) $o['stock'] = $this->stock;
        if (isset($this->tradeDebtors)) $o['tradeDebtors'] = $this->tradeDebtors;
        if (isset($this->cash)) $o['cash'] = $this->cash;
        if (isset($this->otherDebtors)) $o['otherDebtors'] = $this->otherDebtors;
        if (isset($this->miscCurrentAssets)) $o['miscCurrentAssets'] = $this->miscCurrentAssets;
        if (isset($this->totalCurrentAssets)) $o['totalCurrentAssets'] = $this->totalCurrentAssets;
        if (isset($this->tradeCreditors)) $o['tradeCreditors'] = $this->tradeCreditors;
        if (isset($this->bankLoansAndOverdrafts)) $o['bankLoansAndOverdrafts'] = $this->bankLoansAndOverdrafts;
        if (isset($this->otherShortTermFinance)) $o['otherShortTermFinance'] = $this->otherShortTermFinance;
        if (isset($this->miscCurrentLiabilities)) $o['miscCurrentLiabilities'] = $this->miscCurrentLiabilities;
        if (isset($this->totalCurrentLiabilities)) $o['totalCurrentLiabilities'] = $this->totalCurrentLiabilities;
        if (isset($this->bankLoansAndOverdraftsAndLTL)) $o['bankLoansAndOverdraftsAndLTL'] = $this->bankLoansAndOverdraftsAndLTL;
        if (isset($this->otherLongTermFinance)) $o['otherLongTermFinance'] = $this->otherLongTermFinance;
        if (isset($this->totalLongTermFinance)) $o['totalLongTermFinance'] = $this->totalLongTermFinance;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupFinancialCapital implements JsonSerializable
{
    public function __construct(
        /** @var float|null */
        public ?float $calledUpSharedCapital=null,
        /** @var float|null */
        public ?float $profitAndLossAccountReserve=null,
        /** @var float|null */
        public ?float $revaluationReserve=null,
        /** @var float|null */
        public ?float $sundryReserves=null,
        /** @var float|null */
        public ?float $shareholderFunds=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['calledUpSharedCapital'])) $this->calledUpSharedCapital = $o['calledUpSharedCapital'];
        if (isset($o['profitAndLossAccountReserve'])) $this->profitAndLossAccountReserve = $o['profitAndLossAccountReserve'];
        if (isset($o['revaluationReserve'])) $this->revaluationReserve = $o['revaluationReserve'];
        if (isset($o['sundryReserves'])) $this->sundryReserves = $o['sundryReserves'];
        if (isset($o['shareholderFunds'])) $this->shareholderFunds = $o['shareholderFunds'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->calledUpSharedCapital)) $o['calledUpSharedCapital'] = $this->calledUpSharedCapital;
        if (isset($this->profitAndLossAccountReserve)) $o['profitAndLossAccountReserve'] = $this->profitAndLossAccountReserve;
        if (isset($this->revaluationReserve)) $o['revaluationReserve'] = $this->revaluationReserve;
        if (isset($this->sundryReserves)) $o['sundryReserves'] = $this->sundryReserves;
        if (isset($this->shareholderFunds)) $o['shareholderFunds'] = $this->shareholderFunds;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupFinancialOther implements JsonSerializable
{
    public function __construct(
        /** @var float|null */
        public ?float $netWorth=null,
        /** @var float|null */
        public ?float $netAssets=null,
        /** @var float|null */
        public ?float $workingCapital=null,
        /** @var float|null */
        public ?float $totalAssets=null,
        /** @var float|null */
        public ?float $totalLiabilities=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['netWorth'])) $this->netWorth = $o['netWorth'];
        if (isset($o['netAssets'])) $this->netAssets = $o['netAssets'];
        if (isset($o['workingCapital'])) $this->workingCapital = $o['workingCapital'];
        if (isset($o['totalAssets'])) $this->totalAssets = $o['totalAssets'];
        if (isset($o['totalLiabilities'])) $this->totalLiabilities = $o['totalLiabilities'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->netWorth)) $o['netWorth'] = $this->netWorth;
        if (isset($this->netAssets)) $o['netAssets'] = $this->netAssets;
        if (isset($this->workingCapital)) $o['workingCapital'] = $this->workingCapital;
        if (isset($this->totalAssets)) $o['totalAssets'] = $this->totalAssets;
        if (isset($this->totalLiabilities)) $o['totalLiabilities'] = $this->totalLiabilities;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupFinancialCash implements JsonSerializable
{
    public function __construct(
        /** @var float|null */
        public ?float $netCashFlowFromOperations=null,
        /** @var float|null */
        public ?float $netCashFlowBeforeFinancing=null,
        /** @var float|null */
        public ?float $netCashFlowFromFinancing=null,
        /** @var float|null */
        public ?float $increaseInCash=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['netCashFlowFromOperations'])) $this->netCashFlowFromOperations = $o['netCashFlowFromOperations'];
        if (isset($o['netCashFlowBeforeFinancing'])) $this->netCashFlowBeforeFinancing = $o['netCashFlowBeforeFinancing'];
        if (isset($o['netCashFlowFromFinancing'])) $this->netCashFlowFromFinancing = $o['netCashFlowFromFinancing'];
        if (isset($o['increaseInCash'])) $this->increaseInCash = $o['increaseInCash'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->netCashFlowFromOperations)) $o['netCashFlowFromOperations'] = $this->netCashFlowFromOperations;
        if (isset($this->netCashFlowBeforeFinancing)) $o['netCashFlowBeforeFinancing'] = $this->netCashFlowBeforeFinancing;
        if (isset($this->netCashFlowFromFinancing)) $o['netCashFlowFromFinancing'] = $this->netCashFlowFromFinancing;
        if (isset($this->increaseInCash)) $o['increaseInCash'] = $this->increaseInCash;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupFinancialMisc implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $contingentLiability=null,
        /** @var float|null */
        public ?float $capitalEmployed=null,
        /** @var float|null */
        public ?float $numberOfEmployees=null,
        /** @var string|null */
        public ?string $auditors=null,
        /** @var string|null */
        public ?string $auditorComments=null,
        /** @var string|null */
        public ?string $bankers=null,
        /** @var string|null */
        public ?string $bankBranchCode=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['contingentLiability'])) $this->contingentLiability = $o['contingentLiability'];
        if (isset($o['capitalEmployed'])) $this->capitalEmployed = $o['capitalEmployed'];
        if (isset($o['numberOfEmployees'])) $this->numberOfEmployees = $o['numberOfEmployees'];
        if (isset($o['auditors'])) $this->auditors = $o['auditors'];
        if (isset($o['auditorComments'])) $this->auditorComments = $o['auditorComments'];
        if (isset($o['bankers'])) $this->bankers = $o['bankers'];
        if (isset($o['bankBranchCode'])) $this->bankBranchCode = $o['bankBranchCode'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->contingentLiability)) $o['contingentLiability'] = $this->contingentLiability;
        if (isset($this->capitalEmployed)) $o['capitalEmployed'] = $this->capitalEmployed;
        if (isset($this->numberOfEmployees)) $o['numberOfEmployees'] = $this->numberOfEmployees;
        if (isset($this->auditors)) $o['auditors'] = $this->auditors;
        if (isset($this->auditorComments)) $o['auditorComments'] = $this->auditorComments;
        if (isset($this->bankers)) $o['bankers'] = $this->bankers;
        if (isset($this->bankBranchCode)) $o['bankBranchCode'] = $this->bankBranchCode;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupFinancialRatios implements JsonSerializable
{
    public function __construct(
        /** @var float|null */
        public ?float $preTaxProfitMargin=null,
        /** @var float|null */
        public ?float $currentRatio=null,
        /** @var float|null */
        public ?float $salesNetworkingCapital=null,
        /** @var float|null */
        public ?float $gearing=null,
        /** @var float|null */
        public ?float $equity=null,
        /** @var float|null */
        public ?float $creditorDays=null,
        /** @var float|null */
        public ?float $debtorDays=null,
        /** @var float|null */
        public ?float $liquidityAcidTest=null,
        /** @var float|null */
        public ?float $returnOnCapitalEmployed=null,
        /** @var float|null */
        public ?float $returnOnNetAssetsEmployed=null,
        /** @var float|null */
        public ?float $returnOnTotalAssetsEmployed=null,
        /** @var float|null */
        public ?float $currentDebtRatio=null,
        /** @var float|null */
        public ?float $totalDebtRatio=null,
        /** @var float|null */
        public ?float $stockTurnoverRatio=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['preTaxProfitMargin'])) $this->preTaxProfitMargin = $o['preTaxProfitMargin'];
        if (isset($o['currentRatio'])) $this->currentRatio = $o['currentRatio'];
        if (isset($o['salesNetworkingCapital'])) $this->salesNetworkingCapital = $o['salesNetworkingCapital'];
        if (isset($o['gearing'])) $this->gearing = $o['gearing'];
        if (isset($o['equity'])) $this->equity = $o['equity'];
        if (isset($o['creditorDays'])) $this->creditorDays = $o['creditorDays'];
        if (isset($o['debtorDays'])) $this->debtorDays = $o['debtorDays'];
        if (isset($o['liquidityAcidTest'])) $this->liquidityAcidTest = $o['liquidityAcidTest'];
        if (isset($o['returnOnCapitalEmployed'])) $this->returnOnCapitalEmployed = $o['returnOnCapitalEmployed'];
        if (isset($o['returnOnNetAssetsEmployed'])) $this->returnOnNetAssetsEmployed = $o['returnOnNetAssetsEmployed'];
        if (isset($o['returnOnTotalAssetsEmployed'])) $this->returnOnTotalAssetsEmployed = $o['returnOnTotalAssetsEmployed'];
        if (isset($o['currentDebtRatio'])) $this->currentDebtRatio = $o['currentDebtRatio'];
        if (isset($o['totalDebtRatio'])) $this->totalDebtRatio = $o['totalDebtRatio'];
        if (isset($o['stockTurnoverRatio'])) $this->stockTurnoverRatio = $o['stockTurnoverRatio'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->preTaxProfitMargin)) $o['preTaxProfitMargin'] = $this->preTaxProfitMargin;
        if (isset($this->currentRatio)) $o['currentRatio'] = $this->currentRatio;
        if (isset($this->salesNetworkingCapital)) $o['salesNetworkingCapital'] = $this->salesNetworkingCapital;
        if (isset($this->gearing)) $o['gearing'] = $this->gearing;
        if (isset($this->equity)) $o['equity'] = $this->equity;
        if (isset($this->creditorDays)) $o['creditorDays'] = $this->creditorDays;
        if (isset($this->debtorDays)) $o['debtorDays'] = $this->debtorDays;
        if (isset($this->liquidityAcidTest)) $o['liquidityAcidTest'] = $this->liquidityAcidTest;
        if (isset($this->returnOnCapitalEmployed)) $o['returnOnCapitalEmployed'] = $this->returnOnCapitalEmployed;
        if (isset($this->returnOnNetAssetsEmployed)) $o['returnOnNetAssetsEmployed'] = $this->returnOnNetAssetsEmployed;
        if (isset($this->returnOnTotalAssetsEmployed)) $o['returnOnTotalAssetsEmployed'] = $this->returnOnTotalAssetsEmployed;
        if (isset($this->currentDebtRatio)) $o['currentDebtRatio'] = $this->currentDebtRatio;
        if (isset($this->totalDebtRatio)) $o['totalDebtRatio'] = $this->totalDebtRatio;
        if (isset($this->stockTurnoverRatio)) $o['stockTurnoverRatio'] = $this->stockTurnoverRatio;
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhancedFinancialStatement implements JsonSerializable
{
    public function __construct(
        /** @var int|null */
        public ?int $yearEndDateOrder=null,
        /** @var DateTime|null */
        public ?DateTime $yearEndDate=null,
        /** @var int|null */
        public ?int $summaryNumberOfWeeks=null,
        /** @var string|null */
        public ?string $summaryCurrency=null,
        /** @var string|null */
        public ?string $summaryConsolidatedAccount=null,
        /** @var CompanyLookupFinancialProfit|null */
        public ?CompanyLookupFinancialProfit $profitAndLoss=null,
        /** @var CompanyLookupFinancialBalance|null */
        public ?CompanyLookupFinancialBalance $balanceSheet=null,
        /** @var CompanyLookupFinancialCapital|null */
        public ?CompanyLookupFinancialCapital $capitalAndReserves=null,
        /** @var CompanyLookupFinancialOther|null */
        public ?CompanyLookupFinancialOther $other=null,
        /** @var CompanyLookupFinancialCash|null */
        public ?CompanyLookupFinancialCash $cash=null,
        /** @var CompanyLookupFinancialMisc|null */
        public ?CompanyLookupFinancialMisc $misc=null,
        /** @var CompanyLookupFinancialRatios|null */
        public ?CompanyLookupFinancialRatios $ratios=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['yearEndDateOrder'])) $this->yearEndDateOrder = $o['yearEndDateOrder'];
        if (isset($o['yearEndDate'])) $this->yearEndDate = JsonConverters::from('DateTime', $o['yearEndDate']);
        if (isset($o['summaryNumberOfWeeks'])) $this->summaryNumberOfWeeks = $o['summaryNumberOfWeeks'];
        if (isset($o['summaryCurrency'])) $this->summaryCurrency = $o['summaryCurrency'];
        if (isset($o['summaryConsolidatedAccount'])) $this->summaryConsolidatedAccount = $o['summaryConsolidatedAccount'];
        if (isset($o['profitAndLoss'])) $this->profitAndLoss = JsonConverters::from('CompanyLookupFinancialProfit', $o['profitAndLoss']);
        if (isset($o['balanceSheet'])) $this->balanceSheet = JsonConverters::from('CompanyLookupFinancialBalance', $o['balanceSheet']);
        if (isset($o['capitalAndReserves'])) $this->capitalAndReserves = JsonConverters::from('CompanyLookupFinancialCapital', $o['capitalAndReserves']);
        if (isset($o['other'])) $this->other = JsonConverters::from('CompanyLookupFinancialOther', $o['other']);
        if (isset($o['cash'])) $this->cash = JsonConverters::from('CompanyLookupFinancialCash', $o['cash']);
        if (isset($o['misc'])) $this->misc = JsonConverters::from('CompanyLookupFinancialMisc', $o['misc']);
        if (isset($o['ratios'])) $this->ratios = JsonConverters::from('CompanyLookupFinancialRatios', $o['ratios']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->yearEndDateOrder)) $o['yearEndDateOrder'] = $this->yearEndDateOrder;
        if (isset($this->yearEndDate)) $o['yearEndDate'] = JsonConverters::to('DateTime', $this->yearEndDate);
        if (isset($this->summaryNumberOfWeeks)) $o['summaryNumberOfWeeks'] = $this->summaryNumberOfWeeks;
        if (isset($this->summaryCurrency)) $o['summaryCurrency'] = $this->summaryCurrency;
        if (isset($this->summaryConsolidatedAccount)) $o['summaryConsolidatedAccount'] = $this->summaryConsolidatedAccount;
        if (isset($this->profitAndLoss)) $o['profitAndLoss'] = JsonConverters::to('CompanyLookupFinancialProfit', $this->profitAndLoss);
        if (isset($this->balanceSheet)) $o['balanceSheet'] = JsonConverters::to('CompanyLookupFinancialBalance', $this->balanceSheet);
        if (isset($this->capitalAndReserves)) $o['capitalAndReserves'] = JsonConverters::to('CompanyLookupFinancialCapital', $this->capitalAndReserves);
        if (isset($this->other)) $o['other'] = JsonConverters::to('CompanyLookupFinancialOther', $this->other);
        if (isset($this->cash)) $o['cash'] = JsonConverters::to('CompanyLookupFinancialCash', $this->cash);
        if (isset($this->misc)) $o['misc'] = JsonConverters::to('CompanyLookupFinancialMisc', $this->misc);
        if (isset($this->ratios)) $o['ratios'] = JsonConverters::to('CompanyLookupFinancialRatios', $this->ratios);
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupEnhanced implements JsonSerializable
{
    public function __construct(
        /** @var CompanyLookupEnhancedSummary|null */
        public ?CompanyLookupEnhancedSummary $summary=null,
        /** @var CompanyLookupEnhancedContactInfo|null */
        public ?CompanyLookupEnhancedContactInfo $contactInformation=null,
        /** @var array<CompanyLookupEnhancedSicCode>|null */
        public ?array $sicCodes=null,
        /** @var array<CompanyLookupEnhancedPreviousName>|null */
        public ?array $previousNames=null,
        /** @var CompanyLookupEnhancedShareStructure|null */
        public ?CompanyLookupEnhancedShareStructure $shareStructure=null,
        /** @var CompanyLookupEnhancedDirectors|null */
        public ?CompanyLookupEnhancedDirectors $directors=null,
        /** @var CompanyLookupEnhancedStructure|null */
        public ?CompanyLookupEnhancedStructure $groupStructure=null,
        /** @var CompanyLookupEnhancedCCJs|null */
        public ?CompanyLookupEnhancedCCJs $countyCourtJudgements=null,
        /** @var array<CompanyLookupEnhancedEvent>|null */
        public ?array $eventHistory=null,
        /** @var array<CompanyLookupEnhancedCommentary>|null */
        public ?array $commentaries=null,
        /** @var CompanyLookupEnhancedCreditAccount|null */
        public ?CompanyLookupEnhancedCreditAccount $creditAccounts=null,
        /** @var array<CompanyLookupEnhancedFinancialStatement>|null */
        public ?array $financialStatements=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['summary'])) $this->summary = JsonConverters::from('CompanyLookupEnhancedSummary', $o['summary']);
        if (isset($o['contactInformation'])) $this->contactInformation = JsonConverters::from('CompanyLookupEnhancedContactInfo', $o['contactInformation']);
        if (isset($o['sicCodes'])) $this->sicCodes = JsonConverters::fromArray('CompanyLookupEnhancedSicCode', $o['sicCodes']);
        if (isset($o['previousNames'])) $this->previousNames = JsonConverters::fromArray('CompanyLookupEnhancedPreviousName', $o['previousNames']);
        if (isset($o['shareStructure'])) $this->shareStructure = JsonConverters::from('CompanyLookupEnhancedShareStructure', $o['shareStructure']);
        if (isset($o['directors'])) $this->directors = JsonConverters::from('CompanyLookupEnhancedDirectors', $o['directors']);
        if (isset($o['groupStructure'])) $this->groupStructure = JsonConverters::from('CompanyLookupEnhancedStructure', $o['groupStructure']);
        if (isset($o['countyCourtJudgements'])) $this->countyCourtJudgements = JsonConverters::from('CompanyLookupEnhancedCCJs', $o['countyCourtJudgements']);
        if (isset($o['eventHistory'])) $this->eventHistory = JsonConverters::fromArray('CompanyLookupEnhancedEvent', $o['eventHistory']);
        if (isset($o['commentaries'])) $this->commentaries = JsonConverters::fromArray('CompanyLookupEnhancedCommentary', $o['commentaries']);
        if (isset($o['creditAccounts'])) $this->creditAccounts = JsonConverters::from('CompanyLookupEnhancedCreditAccount', $o['creditAccounts']);
        if (isset($o['financialStatements'])) $this->financialStatements = JsonConverters::fromArray('CompanyLookupEnhancedFinancialStatement', $o['financialStatements']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->summary)) $o['summary'] = JsonConverters::to('CompanyLookupEnhancedSummary', $this->summary);
        if (isset($this->contactInformation)) $o['contactInformation'] = JsonConverters::to('CompanyLookupEnhancedContactInfo', $this->contactInformation);
        if (isset($this->sicCodes)) $o['sicCodes'] = JsonConverters::toArray('CompanyLookupEnhancedSicCode', $this->sicCodes);
        if (isset($this->previousNames)) $o['previousNames'] = JsonConverters::toArray('CompanyLookupEnhancedPreviousName', $this->previousNames);
        if (isset($this->shareStructure)) $o['shareStructure'] = JsonConverters::to('CompanyLookupEnhancedShareStructure', $this->shareStructure);
        if (isset($this->directors)) $o['directors'] = JsonConverters::to('CompanyLookupEnhancedDirectors', $this->directors);
        if (isset($this->groupStructure)) $o['groupStructure'] = JsonConverters::to('CompanyLookupEnhancedStructure', $this->groupStructure);
        if (isset($this->countyCourtJudgements)) $o['countyCourtJudgements'] = JsonConverters::to('CompanyLookupEnhancedCCJs', $this->countyCourtJudgements);
        if (isset($this->eventHistory)) $o['eventHistory'] = JsonConverters::toArray('CompanyLookupEnhancedEvent', $this->eventHistory);
        if (isset($this->commentaries)) $o['commentaries'] = JsonConverters::toArray('CompanyLookupEnhancedCommentary', $this->commentaries);
        if (isset($this->creditAccounts)) $o['creditAccounts'] = JsonConverters::to('CompanyLookupEnhancedCreditAccount', $this->creditAccounts);
        if (isset($this->financialStatements)) $o['financialStatements'] = JsonConverters::toArray('CompanyLookupEnhancedFinancialStatement', $this->financialStatements);
        return empty($o) ? new class(){} : $o;
    }
}

class CompanyLookupSearchRecord implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $id=0,
        /** @var SearchCriteria|null */
        public ?SearchCriteria $searchCriteria=null,
        /** @var ArrayOfLists|null */
        public ?ArrayOfLists $selectedLists=null,
        /** @var DateTime */
        public DateTime $date=new DateTime(),
        /** @var bool|null */
        public ?bool $hasCompanyId=null,
        /** @var bool|null */
        public ?bool $hasCompanyDetails=null,
        /** @var bool|null */
        public ?bool $hasStartedSearches=null,
        /** @var bool|null */
        public ?bool $hasCompletedSearches=null,
        /** @var array<CompanyDirectorOrShareholder>|null */
        public ?array $companyDirectorsAndShareholders=null,
        /** @var SearchListItem|null */
        public ?SearchListItem $companySearchRecord=null,
        /** @var bool|null */
        public ?bool $hasEnhancedInformation=null,
        /** @var CompanyLookupEnhanced|null */
        public ?CompanyLookupEnhanced $enhancedInformation=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['searchCriteria'])) $this->searchCriteria = JsonConverters::from('SearchCriteria', $o['searchCriteria']);
        if (isset($o['selectedLists'])) $this->selectedLists = JsonConverters::from('ArrayOfLists', $o['selectedLists']);
        if (isset($o['date'])) $this->date = JsonConverters::from('DateTime', $o['date']);
        if (isset($o['hasCompanyId'])) $this->hasCompanyId = $o['hasCompanyId'];
        if (isset($o['hasCompanyDetails'])) $this->hasCompanyDetails = $o['hasCompanyDetails'];
        if (isset($o['hasStartedSearches'])) $this->hasStartedSearches = $o['hasStartedSearches'];
        if (isset($o['hasCompletedSearches'])) $this->hasCompletedSearches = $o['hasCompletedSearches'];
        if (isset($o['companyDirectorsAndShareholders'])) $this->companyDirectorsAndShareholders = JsonConverters::fromArray('CompanyDirectorOrShareholder', $o['companyDirectorsAndShareholders']);
        if (isset($o['companySearchRecord'])) $this->companySearchRecord = JsonConverters::from('SearchListItem', $o['companySearchRecord']);
        if (isset($o['hasEnhancedInformation'])) $this->hasEnhancedInformation = $o['hasEnhancedInformation'];
        if (isset($o['enhancedInformation'])) $this->enhancedInformation = JsonConverters::from('CompanyLookupEnhanced', $o['enhancedInformation']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->searchCriteria)) $o['searchCriteria'] = JsonConverters::to('SearchCriteria', $this->searchCriteria);
        if (isset($this->selectedLists)) $o['selectedLists'] = JsonConverters::to('ArrayOfLists', $this->selectedLists);
        if (isset($this->date)) $o['date'] = JsonConverters::to('DateTime', $this->date);
        if (isset($this->hasCompanyId)) $o['hasCompanyId'] = $this->hasCompanyId;
        if (isset($this->hasCompanyDetails)) $o['hasCompanyDetails'] = $this->hasCompanyDetails;
        if (isset($this->hasStartedSearches)) $o['hasStartedSearches'] = $this->hasStartedSearches;
        if (isset($this->hasCompletedSearches)) $o['hasCompletedSearches'] = $this->hasCompletedSearches;
        if (isset($this->companyDirectorsAndShareholders)) $o['companyDirectorsAndShareholders'] = JsonConverters::toArray('CompanyDirectorOrShareholder', $this->companyDirectorsAndShareholders);
        if (isset($this->companySearchRecord)) $o['companySearchRecord'] = JsonConverters::to('SearchListItem', $this->companySearchRecord);
        if (isset($this->hasEnhancedInformation)) $o['hasEnhancedInformation'] = $this->hasEnhancedInformation;
        if (isset($this->enhancedInformation)) $o['enhancedInformation'] = JsonConverters::to('CompanyLookupEnhanced', $this->enhancedInformation);
        return empty($o) ? new class(){} : $o;
    }
}

class AddCompanyLookupData extends BaseResponse implements IBaseSearchResponse, JsonSerializable
{
    /**
     * @param ResponseStatus|null $responseStatus
     */
    public function __construct(
        ?ResponseStatus $responseStatus=null,
        /** @var ArrayOfLinkedTo|null */
        public ?ArrayOfLinkedTo $linkedTo=null,
        /** @var CompanyLookupSearchRecord|null */
        public ?CompanyLookupSearchRecord $searchRecord=null
    ) {
        parent::__construct($responseStatus);
    }

    /** @throws Exception */
    public function fromMap($o): void {
        parent::fromMap($o);
        if (isset($o['linkedTo'])) $this->linkedTo = JsonConverters::from('ArrayOfLinkedTo', $o['linkedTo']);
        if (isset($o['searchRecord'])) $this->searchRecord = JsonConverters::from('CompanyLookupSearchRecord', $o['searchRecord']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        if (isset($this->linkedTo)) $o['linkedTo'] = JsonConverters::to('ArrayOfLinkedTo', $this->linkedTo);
        if (isset($this->searchRecord)) $o['searchRecord'] = JsonConverters::to('CompanyLookupSearchRecord', $this->searchRecord);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class AddCompanyLookupResponse implements JsonSerializable
{
    public function __construct(
        // @DataMember
        /** @var AddCompanyLookupData|null */
        public ?AddCompanyLookupData $data=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['data'])) $this->data = JsonConverters::from('AddCompanyLookupData', $o['data']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->data)) $o['data'] = JsonConverters::to('AddCompanyLookupData', $this->data);
        return empty($o) ? new class(){} : $o;
    }
}

class AddCompanyLookupRequest implements JsonSerializable
{
    public function __construct(
        /** @description If the search should be saved against a single Sub User account, specify their username here */
        // @ApiMember(Description="If the search should be saved against a single Sub User account, specify their username here")
        /** @var string|null */
        public ?string $subUserName=null,

        /** @var int|null */
        public ?int $companyLookupId=null,
        /** @var string|null */
        public ?string $companyRegistrationNumber=null,
        /** @var string|null */
        public ?string $companyName=null,
        /** @var string|null */
        public ?string $companyAddress=null,
        /** @var string|null */
        public ?string $companyCountry=null,
        /** @var bool|null */
        public ?bool $performEnhancedSearch=null,
        /** @var ArrayOfLists|null */
        public ?ArrayOfLists $selectedLists=null,
        /** @description If the search should be linked to other searches, specify the them here */
        // @ApiMember(Description="If the search should be linked to other searches, specify the them here")
        /** @var ArrayOfLinkedTo|null */
        public ?ArrayOfLinkedTo $linkedTo=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['subUserName'])) $this->subUserName = $o['subUserName'];
        if (isset($o['companyLookupId'])) $this->companyLookupId = $o['companyLookupId'];
        if (isset($o['companyRegistrationNumber'])) $this->companyRegistrationNumber = $o['companyRegistrationNumber'];
        if (isset($o['companyName'])) $this->companyName = $o['companyName'];
        if (isset($o['companyAddress'])) $this->companyAddress = $o['companyAddress'];
        if (isset($o['companyCountry'])) $this->companyCountry = $o['companyCountry'];
        if (isset($o['performEnhancedSearch'])) $this->performEnhancedSearch = $o['performEnhancedSearch'];
        if (isset($o['selectedLists'])) $this->selectedLists = JsonConverters::from('ArrayOfLists', $o['selectedLists']);
        if (isset($o['linkedTo'])) $this->linkedTo = JsonConverters::from('ArrayOfLinkedTo', $o['linkedTo']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->subUserName)) $o['subUserName'] = $this->subUserName;
        if (isset($this->companyLookupId)) $o['companyLookupId'] = $this->companyLookupId;
        if (isset($this->companyRegistrationNumber)) $o['companyRegistrationNumber'] = $this->companyRegistrationNumber;
        if (isset($this->companyName)) $o['companyName'] = $this->companyName;
        if (isset($this->companyAddress)) $o['companyAddress'] = $this->companyAddress;
        if (isset($this->companyCountry)) $o['companyCountry'] = $this->companyCountry;
        if (isset($this->performEnhancedSearch)) $o['performEnhancedSearch'] = $this->performEnhancedSearch;
        if (isset($this->selectedLists)) $o['selectedLists'] = JsonConverters::to('ArrayOfLists', $this->selectedLists);
        if (isset($this->linkedTo)) $o['linkedTo'] = JsonConverters::to('ArrayOfLinkedTo', $this->linkedTo);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class AddCompanyLookup extends BaseRequest implements JsonSerializable
{
    /**
     * @param Authentication|null $authentication
     */
    public function __construct(
        ?Authentication $authentication=null,
        // @DataMember
        /** @var AddCompanyLookupRequest|null */
        public ?AddCompanyLookupRequest $request=null
    ) {
        parent::__construct($authentication);
    }

    /** @throws Exception */
    public function fromMap($o): void {
        parent::fromMap($o);
        if (isset($o['request'])) $this->request = JsonConverters::from('AddCompanyLookupRequest', $o['request']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        if (isset($this->request)) $o['request'] = JsonConverters::to('AddCompanyLookupRequest', $this->request);
        return empty($o) ? new class(){} : $o;
    }
}

PHP AddCompanyLookup DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml

HTTP + XML

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /companylookups/create HTTP/1.1 
Host: api.sanctionssearch.com 
Accept: application/xml
Content-Type: application/xml
Content-Length: length

<AddCompanyLookup xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.servicestack.net/types">
  <Authentication>
    <ApiUserId>String</ApiUserId>
    <ApiUserKey>String</ApiUserKey>
  </Authentication>
  <Request>
    <CompanyAddress>String</CompanyAddress>
    <CompanyCountry>String</CompanyCountry>
    <CompanyLookupId>0</CompanyLookupId>
    <CompanyName>String</CompanyName>
    <CompanyRegistrationNumber>String</CompanyRegistrationNumber>
    <LinkedTo>
      <LinkedTo>
        <ClientId>0</ClientId>
        <Date>0001-01-01T00:00:00</Date>
        <Description>String</Description>
        <Id>0</Id>
        <IsArchived>false</IsArchived>
        <Name>String</Name>
        <Status>String</Status>
        <Subtype>String</Subtype>
        <Type>String</Type>
      </LinkedTo>
    </LinkedTo>
    <PerformEnhancedSearch>false</PerformEnhancedSearch>
    <SelectedLists>
      <ListId>String</ListId>
    </SelectedLists>
    <SubUserName>String</SubUserName>
  </Request>
</AddCompanyLookup>
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<AddCompanyLookupResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.servicestack.net/types">
  <Data>
    <ResponseStatus>
      <ErrorCode>String</ErrorCode>
      <Message>String</Message>
      <StackTrace>String</StackTrace>
      <Errors>
        <ResponseError>
          <ErrorCode>String</ErrorCode>
          <FieldName>String</FieldName>
          <Message>String</Message>
          <Meta xmlns:d6p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
            <d6p1:KeyValueOfstringstring>
              <d6p1:Key>String</d6p1:Key>
              <d6p1:Value>String</d6p1:Value>
            </d6p1:KeyValueOfstringstring>
          </Meta>
        </ResponseError>
      </Errors>
      <Meta xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <d4p1:KeyValueOfstringstring>
          <d4p1:Key>String</d4p1:Key>
          <d4p1:Value>String</d4p1:Value>
        </d4p1:KeyValueOfstringstring>
      </Meta>
    </ResponseStatus>
    <LinkedTo>
      <LinkedTo>
        <ClientId>0</ClientId>
        <Date>0001-01-01T00:00:00</Date>
        <Description>String</Description>
        <Id>0</Id>
        <IsArchived>false</IsArchived>
        <Name>String</Name>
        <Status>String</Status>
        <Subtype>String</Subtype>
        <Type>String</Type>
      </LinkedTo>
    </LinkedTo>
    <SearchRecord>
      <CompanyDirectorsAndShareholders>
        <CompanyDirectorOrShareholder>
          <AffectedByUpdate>false</AffectedByUpdate>
          <ClientInResults>false</ClientInResults>
          <ClientNotInResults>false</ClientNotInResults>
          <DateSearched>0001-01-01T00:00:00</DateSearched>
          <DateUpdated>0001-01-01T00:00:00</DateUpdated>
          <Id>0</Id>
          <IsDirector>false</IsDirector>
          <IsShareholder>false</IsShareholder>
          <NumOfResults>0</NumOfResults>
          <SearchCriteria>
            <Address>String</Address>
            <Country>String</Country>
            <DateOfBirth>String</DateOfBirth>
            <Name>String</Name>
            <Nationality>String</Nationality>
            <Reference>String</Reference>
          </SearchCriteria>
          <SearchType>String</SearchType>
        </CompanyDirectorOrShareholder>
      </CompanyDirectorsAndShareholders>
      <CompanySearchRecord>
        <AffectedByUpdate>false</AffectedByUpdate>
        <ClientInResults>false</ClientInResults>
        <ClientNotInResults>false</ClientNotInResults>
        <DateArchived>0001-01-01T00:00:00</DateArchived>
        <DateSearched>0001-01-01T00:00:00</DateSearched>
        <DateUpdated>0001-01-01T00:00:00</DateUpdated>
        <Id>0</Id>
        <IsArchived>false</IsArchived>
        <NumOfResults>0</NumOfResults>
        <SearchCriteria>
          <Address>String</Address>
          <Country>String</Country>
          <DateOfBirth>String</DateOfBirth>
          <Name>String</Name>
          <Nationality>String</Nationality>
          <Reference>String</Reference>
        </SearchCriteria>
        <SearchSources>
          <SearchSource>
            <IsAffectedByListUpdate>false</IsAffectedByListUpdate>
            <ListId>String</ListId>
            <ListName>String</ListName>
            <ListShortName>String</ListShortName>
          </SearchSource>
        </SearchSources>
        <SearchType>String</SearchType>
      </CompanySearchRecord>
      <Date>0001-01-01T00:00:00</Date>
      <EnhancedInformation>
        <Commentaries>
          <CompanyLookupEnhancedCommentary>
            <PositiveOrNegative>String</PositiveOrNegative>
            <Priority>0</Priority>
            <Text>String</Text>
          </CompanyLookupEnhancedCommentary>
        </Commentaries>
        <ContactInformation>
          <AdditionalContactInfo>
            <BusinessClassification>String</BusinessClassification>
            <ContactName>String</ContactName>
            <EmailAddress>String</EmailAddress>
            <Facebook>String</Facebook>
            <FaxNumber>String</FaxNumber>
            <GooglePlus>String</GooglePlus>
            <LinkedIn>String</LinkedIn>
            <Telephone>String</Telephone>
            <Twitter>String</Twitter>
            <WebAddress>String</WebAddress>
          </AdditionalContactInfo>
          <RegisteredAddress>
            <Address1>String</Address1>
            <Address2>String</Address2>
            <Address3>String</Address3>
            <Address4>String</Address4>
            <FullAddress>String</FullAddress>
            <PostCode>String</PostCode>
            <Telephone>String</Telephone>
          </RegisteredAddress>
          <TradingAddresses>
            <CompanyLookupEnhancedAddress>
              <Address1>String</Address1>
              <Address2>String</Address2>
              <Address3>String</Address3>
              <Address4>String</Address4>
              <FullAddress>String</FullAddress>
              <PostCode>String</PostCode>
              <Telephone>String</Telephone>
            </CompanyLookupEnhancedAddress>
          </TradingAddresses>
          <Websites>
            <CompanyLookupEnhancedWebsite>
              <Website>String</Website>
            </CompanyLookupEnhancedWebsite>
          </Websites>
        </ContactInformation>
        <CountyCourtJudgements>
          <ExactCCJs>
            <CompanyLookupEnhancedCCJ>
              <Amount>0</Amount>
              <CaseNumber>String</CaseNumber>
              <Court>String</Court>
              <Date>0001-01-01T00:00:00</Date>
              <DatePaid>String</DatePaid>
              <IncomingRecordDetails>String</IncomingRecordDetails>
              <Status>String</Status>
            </CompanyLookupEnhancedCCJ>
          </ExactCCJs>
          <PossibleCCJs>
            <CompanyLookupEnhancedCCJ>
              <Amount>0</Amount>
              <CaseNumber>String</CaseNumber>
              <Court>String</Court>
              <Date>0001-01-01T00:00:00</Date>
              <DatePaid>String</DatePaid>
              <IncomingRecordDetails>String</IncomingRecordDetails>
              <Status>String</Status>
            </CompanyLookupEnhancedCCJ>
          </PossibleCCJs>
        </CountyCourtJudgements>
        <CreditAccounts>
          <CreditLimitHistory>
            <CompanyLookupEnhancedCreditLimit>
              <Amount>0</Amount>
              <Date>0001-01-01T00:00:00</Date>
              <DateOrder>0</DateOrder>
            </CompanyLookupEnhancedCreditLimit>
          </CreditLimitHistory>
          <CreditRatingHistory>
            <CompanyLookupEnhancedCreditRating>
              <Amount>0</Amount>
              <Date>0001-01-01T00:00:00</Date>
              <DateOrder>0</DateOrder>
              <Description>String</Description>
              <ShortDescription>String</ShortDescription>
            </CompanyLookupEnhancedCreditRating>
          </CreditRatingHistory>
        </CreditAccounts>
        <Directors>
          <CurrentDirectors>
            <CompanyLookupEnhancedDirector>
              <Address>String</Address>
              <AppointmentDate>0001-01-01T00:00:00</AppointmentDate>
              <CurrentDirectorships>0</CurrentDirectorships>
              <DateOfBirth>0001-01-01T00:00:00</DateOfBirth>
              <Gender>String</Gender>
              <IdNumber>0</IdNumber>
              <Name>String</Name>
              <Position>String</Position>
              <PreviousDirectorships>0</PreviousDirectorships>
              <ResignationDate>0001-01-01T00:00:00</ResignationDate>
              <TotalDirectorships>0</TotalDirectorships>
            </CompanyLookupEnhancedDirector>
          </CurrentDirectors>
          <PreviousDirectors>
            <CompanyLookupEnhancedDirector>
              <Address>String</Address>
              <AppointmentDate>0001-01-01T00:00:00</AppointmentDate>
              <CurrentDirectorships>0</CurrentDirectorships>
              <DateOfBirth>0001-01-01T00:00:00</DateOfBirth>
              <Gender>String</Gender>
              <IdNumber>0</IdNumber>
              <Name>String</Name>
              <Position>String</Position>
              <PreviousDirectorships>0</PreviousDirectorships>
              <ResignationDate>0001-01-01T00:00:00</ResignationDate>
              <TotalDirectorships>0</TotalDirectorships>
            </CompanyLookupEnhancedDirector>
          </PreviousDirectors>
        </Directors>
        <EventHistory>
          <CompanyLookupEnhancedEvent>
            <Date>0001-01-01T00:00:00</Date>
            <Description>String</Description>
          </CompanyLookupEnhancedEvent>
        </EventHistory>
        <FinancialStatements>
          <CompanyLookupEnhancedFinancialStatement>
            <BalanceSheet>
              <BankLoansAndOverdrafts>0</BankLoansAndOverdrafts>
              <BankLoansAndOverdraftsAndLTL>0</BankLoansAndOverdraftsAndLTL>
              <Cash>0</Cash>
              <IntangibleAssets>0</IntangibleAssets>
              <MiscCurrentAssets>0</MiscCurrentAssets>
              <MiscCurrentLiabilities>0</MiscCurrentLiabilities>
              <OtherDebtors>0</OtherDebtors>
              <OtherLongTermFinance>0</OtherLongTermFinance>
              <OtherShortTermFinance>0</OtherShortTermFinance>
              <Stock>0</Stock>
              <TangibleAccounts>0</TangibleAccounts>
              <TotalCurrentAssets>0</TotalCurrentAssets>
              <TotalCurrentLiabilities>0</TotalCurrentLiabilities>
              <TotalFixedAssets>0</TotalFixedAssets>
              <TotalLongTermFinance>0</TotalLongTermFinance>
              <TradeCreditors>0</TradeCreditors>
              <TradeDebtors>0</TradeDebtors>
            </BalanceSheet>
            <CapitalAndReserves>
              <CalledUpSharedCapital>0</CalledUpSharedCapital>
              <ProfitAndLossAccountReserve>0</ProfitAndLossAccountReserve>
              <RevaluationReserve>0</RevaluationReserve>
              <ShareholderFunds>0</ShareholderFunds>
              <SundryReserves>0</SundryReserves>
            </CapitalAndReserves>
            <Cash>
              <IncreaseInCash>0</IncreaseInCash>
              <NetCashFlowBeforeFinancing>0</NetCashFlowBeforeFinancing>
              <NetCashFlowFromFinancing>0</NetCashFlowFromFinancing>
              <NetCashFlowFromOperations>0</NetCashFlowFromOperations>
            </Cash>
            <Misc>
              <AuditorComments>String</AuditorComments>
              <Auditors>String</Auditors>
              <BankBranchCode>String</BankBranchCode>
              <Bankers>String</Bankers>
              <CapitalEmployed>0</CapitalEmployed>
              <ContingentLiability>String</ContingentLiability>
              <NumberOfEmployees>0</NumberOfEmployees>
            </Misc>
            <Other>
              <NetAssets>0</NetAssets>
              <NetWorth>0</NetWorth>
              <TotalAssets>0</TotalAssets>
              <TotalLiabilities>0</TotalLiabilities>
              <WorkingCapital>0</WorkingCapital>
            </Other>
            <ProfitAndLoss>
              <AuditFees>0</AuditFees>
              <CostOfSales>0</CostOfSales>
              <Depreciation>0</Depreciation>
              <DirectorEmolument>0</DirectorEmolument>
              <DividendsPayable>0</DividendsPayable>
              <Export>0</Export>
              <GrossProfit>0</GrossProfit>
              <InterestPayments>0</InterestPayments>
              <OperatingProfit>0</OperatingProfit>
              <PretaxProfit>0</PretaxProfit>
              <ProfitAfterTax>0</ProfitAfterTax>
              <RetainedProfit>0</RetainedProfit>
              <Taxation>0</Taxation>
              <Turnover>0</Turnover>
              <WagesAndSalaries>0</WagesAndSalaries>
            </ProfitAndLoss>
            <Ratios>
              <CreditorDays>0</CreditorDays>
              <CurrentDebtRatio>0</CurrentDebtRatio>
              <CurrentRatio>0</CurrentRatio>
              <DebtorDays>0</DebtorDays>
              <Equity>0</Equity>
              <Gearing>0</Gearing>
              <LiquidityAcidTest>0</LiquidityAcidTest>
              <PreTaxProfitMargin>0</PreTaxProfitMargin>
              <ReturnOnCapitalEmployed>0</ReturnOnCapitalEmployed>
              <ReturnOnNetAssetsEmployed>0</ReturnOnNetAssetsEmployed>
              <ReturnOnTotalAssetsEmployed>0</ReturnOnTotalAssetsEmployed>
              <SalesNetworkingCapital>0</SalesNetworkingCapital>
              <StockTurnoverRatio>0</StockTurnoverRatio>
              <TotalDebtRatio>0</TotalDebtRatio>
            </Ratios>
            <SummaryConsolidatedAccount>String</SummaryConsolidatedAccount>
            <SummaryCurrency>String</SummaryCurrency>
            <SummaryNumberOfWeeks>0</SummaryNumberOfWeeks>
            <YearEndDate>0001-01-01T00:00:00</YearEndDate>
            <YearEndDateOrder>0</YearEndDateOrder>
          </CompanyLookupEnhancedFinancialStatement>
        </FinancialStatements>
        <GroupStructure>
          <ParentCompanies>
            <CompanyLookupEnhancedCompany>
              <CompanyName>String</CompanyName>
              <CompanyNumber>String</CompanyNumber>
              <Country>String</Country>
            </CompanyLookupEnhancedCompany>
          </ParentCompanies>
          <SubsidiaryCompanies>
            <CompanyLookupEnhancedCompany>
              <CompanyName>String</CompanyName>
              <CompanyNumber>String</CompanyNumber>
              <Country>String</Country>
            </CompanyLookupEnhancedCompany>
          </SubsidiaryCompanies>
        </GroupStructure>
        <PreviousNames>
          <CompanyLookupEnhancedPreviousName>
            <DateChanged>0001-01-01T00:00:00</DateChanged>
            <Name>String</Name>
          </CompanyLookupEnhancedPreviousName>
        </PreviousNames>
        <ShareStructure>
          <IssuedShareCapital>0</IssuedShareCapital>
          <Shareholders>
            <CompanyLookupEnhancedShareholder>
              <Address1>String</Address1>
              <Address2>String</Address2>
              <Address3>String</Address3>
              <Address4>String</Address4>
              <Address5>String</Address5>
              <Currency>String</Currency>
              <Forename>String</Forename>
              <Number>0</Number>
              <PostCode>String</PostCode>
              <ShareClass>String</ShareClass>
              <ShareType>String</ShareType>
              <ShareholderType>String</ShareholderType>
              <Surname>String</Surname>
              <Title>String</Title>
              <Value>0</Value>
            </CompanyLookupEnhancedShareholder>
          </Shareholders>
        </ShareStructure>
        <SicCodes>
          <CompanyLookupEnhancedSicCode>
            <SicCode2003>0</SicCode2003>
            <SicCode2003Description>String</SicCode2003Description>
            <SicCode2007>0</SicCode2007>
            <SicCode2007Description>String</SicCode2007Description>
            <Status>String</Status>
          </CompanyLookupEnhancedSicCode>
        </SicCodes>
        <Summary>
          <Address>String</Address>
          <CompanyStatus>String</CompanyStatus>
          <Country>String</Country>
          <DateOfIncorporation>String</DateOfIncorporation>
          <LatestAccounts>
            <AccountCategory>String</AccountCategory>
            <AccountLastMadeUpDate>0001-01-01T00:00:00</AccountLastMadeUpDate>
            <AccountNextDueDate>0001-01-01T00:00:00</AccountNextDueDate>
            <AccountRefDay>0</AccountRefDay>
            <AccountRefMonth>0</AccountRefMonth>
            <CreditLimit>0</CreditLimit>
            <CreditRating>0</CreditRating>
            <CreditRatingDescription>String</CreditRatingDescription>
            <Currency>String</Currency>
            <ReturnLastMadeUpDate>0001-01-01T00:00:00</ReturnLastMadeUpDate>
            <ShareholdersEquity>0</ShareholdersEquity>
            <Turnover>0</Turnover>
          </LatestAccounts>
          <Name>String</Name>
          <PrincipleActivity>String</PrincipleActivity>
          <RegistrationNumber>String</RegistrationNumber>
          <SicCode>String</SicCode>
          <SicDescription>String</SicDescription>
          <Telephone>String</Telephone>
          <TypeOfIncorporation>String</TypeOfIncorporation>
        </Summary>
      </EnhancedInformation>
      <HasCompanyDetails>false</HasCompanyDetails>
      <HasCompanyId>false</HasCompanyId>
      <HasCompletedSearches>false</HasCompletedSearches>
      <HasEnhancedInformation>false</HasEnhancedInformation>
      <HasStartedSearches>false</HasStartedSearches>
      <Id>0</Id>
      <SearchCriteria>
        <Address>String</Address>
        <Country>String</Country>
        <DateOfBirth>String</DateOfBirth>
        <Name>String</Name>
        <Nationality>String</Nationality>
        <Reference>String</Reference>
      </SearchCriteria>
      <SelectedLists>
        <ListId>String</ListId>
      </SelectedLists>
    </SearchRecord>
  </Data>
</AddCompanyLookupResponse>