/* Options:
Date: 2025-07-26 14:30:20
Version: 8.30
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://api.sanctionssearch.com/v2

//Package: 
//AddServiceStackTypes: True
//AddResponseStatus: False
//AddImplicitVersion: 
//AddDescriptionAsComments: True
IncludeTypes: AddPepSearch.*
//ExcludeTypes: 
//InitializeCollections: True
//TreatTypesAsStrings: 
//DefaultImports: java.math.*,java.util.*,net.servicestack.client.*,com.google.gson.annotations.*,com.google.gson.reflect.*
*/

import java.math.*
import java.util.*
import net.servicestack.client.*
import com.google.gson.annotations.*
import com.google.gson.reflect.*


@Route(Path="/peps/add", Verbs="POST")
@DataContract
open class AddPepSearch : BaseRequest(), IReturn<AddPepSearchResponse>
{
    @DataMember
    var request:AddPepSearchRequest? = null
    companion object { private val responseType = AddPepSearchResponse::class.java }
    override fun getResponseType(): Any? = AddPepSearch.responseType
}

@DataContract
open class AddPepSearchResponse
{
    @DataMember
    @SerializedName("data") var Data:AddPepSearchData? = null
}

@DataContract
open class Authentication
{
    /**
    * The API User ID provided by us when you signed up to use our API. Can be provided in the request body, or as a header parameter (X-Api-User)
    */
    @DataMember
    @ApiMember(Description="The API User ID provided by us when you signed up to use our API. Can be provided in the request body, or as a header parameter (X-Api-User)", IsRequired=true, ParameterType="header, body")
    var apiUserId:String? = null

    /**
    * The API User Key provided by us when you signed up to use our API. Can be provided in the request body, or as a header parameter (X-Api-Key)
    */
    @DataMember
    @ApiMember(Description="The API User Key provided by us when you signed up to use our API. Can be provided in the request body, or as a header parameter (X-Api-Key)", IsRequired=true, ParameterType="header, body")
    var apiUserKey:String? = null

    /**
    * The User ID of the user making the request (e.g. a sub user). This is optional but can be used to associate API requests with a specific user, thereby allowing user permissions to be enforced. Can be provided in the body, or as a header parameter (X-User-Id).
    */
    @DataMember
    @ApiMember(Description="The User ID of the user making the request (e.g. a sub user). This is optional but can be used to associate API requests with a specific user, thereby allowing user permissions to be enforced. Can be provided in the body, or as a header parameter (X-User-Id).", ParameterType="header, body")
    var userId:String? = null
}

@DataContract
open class BaseRequest : IBaseRequest
{
    /**
    * The authentication credentials
    */
    @DataMember
    @ApiMember(Description="The authentication credentials", IsRequired=true, ParameterType="header, body")
    var authentication:Authentication? = null
}

open interface IBaseRequest
{
    var authentication:Authentication?
}

open class AddPepSearchRequest : IAddSearchRequest
{
    /**
    * 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 subUserName:String? = null

    @SerializedName("type") var Type:String? = null
    var name:String? = null
    var country:String? = null
    var address:String? = null
    var dateOfBirth:String? = null
    var nationality:String? = null
    var reference:String? = null
    var excludeResults:Boolean? = null
    var performSanctionsSearch:Boolean? = null
    var dayOneSearch:Boolean? = null
    var selectedLists:ArrayOfLists? = null
    /**
    * 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 linkedTo:ArrayOfLinkedTo? = null
}

open class AddPepSearchData : BaseResponse(), IBaseSearchResponse
{
    var linkedTo:ArrayOfLinkedTo? = null
    var searchRecord:PepSearchRecord? = null
    var includesSanctionsSearchRecord:Boolean? = null
    var sanctionsSearchRecord:SearchRecord? = null
}

open class ArrayOfLinkedTo : ArrayList<LinkedTo>()
{
}

open class ArrayOfLists : ArrayList<String>()
{
}

open interface IAddSearchRequest
{
    var address:String?
    var country:String?
    var dateOfBirth:String?
    var name:String?
    var nationality:String?
    var reference:String?
    var selectedLists:ArrayOfLists?
    var subUserName:String?
    @SerializedName("type") var Type:String?
    var linkedTo:ArrayOfLinkedTo?
}

open class BaseResponse : IBaseDataResponse, IHasResponseStatus
{
    /**
    * The status of the response
    */
    @ApiMember(Description="The status of the response")
    var responseStatus:ResponseStatus? = null
}

open interface IBaseDataResponse
{
    var responseStatus:ResponseStatus?
}

open interface IHasResponseStatus
{
    var responseStatus:ResponseStatus?
}

open interface IBaseSearchResponse : IBaseDataResponse
{
    var linkedTo:ArrayOfLinkedTo?
}

open class PepSearchRecord
{
    var id:Long? = null
    var searchType:String? = null
    var dateSearched:Date? = null
    var dateUpdated:Date? = null
    var dateRenewal:Date? = null
    var dateArchived:Date? = null
    var isArchived:Boolean? = null
    var numOfResults:Int? = null
    var clientInResults:Boolean? = null
    var clientNotInResults:Boolean? = null
    var affectedByUpdate:Boolean? = null
    var isDayOneSearch:Boolean? = null
    var searchCriteria:SearchCriteria? = null
    var searchResults:PepSearchResults? = null
}

open class SearchRecord
{
    var id:Long? = null
    var searchType:String? = null
    var dateSearched:Date? = null
    var dateUpdated:Date? = null
    var dateArchived:Date? = null
    var isArchived:Boolean? = null
    var numOfResults:Int? = null
    var clientInResults:Boolean? = null
    var clientNotInResults:Boolean? = null
    var affectedByUpdate:Boolean? = null
    var searchCriteria:SearchCriteria? = null
    var searchResults:SearchResults? = null
    var searchSources:ArrayList<SearchSource> = ArrayList<SearchSource>()
    var listSearchResults:ArrayOfSearchResultEntries? = null
}

open class LinkedTo
{
    var clientId:Int? = null
    var id:Long? = null
    @SerializedName("type") var Type:String? = null
    var subtype:String? = null
    var status:String? = null
    var description:String? = null
    var isArchived:Boolean? = null
    var name:String? = null
    var date:Date? = null
}

open class ArrayOfResponseError : ArrayList<ResponseError>()
{
}

open class SearchCriteria
{
    var name:String? = null
    var address:String? = null
    var country:String? = null
    var dateOfBirth:String? = null
    var nationality:String? = null
    var reference:String? = null
}

open class PepSearchResults
{
    var results:ArrayList<PepSearchResult> = ArrayList<PepSearchResult>()
}

open class SearchResults
{
    var euResults:ArrayList<SearchResultEu> = ArrayList<SearchResultEu>()
    var hmtResults:ArrayList<SearchResultHmTreasury> = ArrayList<SearchResultHmTreasury>()
    var hmtUkraineResults:ArrayList<SearchResultHmTreasury> = ArrayList<SearchResultHmTreasury>()
    var ofacResults:ArrayList<SearchResultOfac> = ArrayList<SearchResultOfac>()
    var ofacConsolidatedResults:ArrayList<SearchResultOfac> = ArrayList<SearchResultOfac>()
    var dfatResults:ArrayList<SearchResultDfat> = ArrayList<SearchResultDfat>()
    var osfiResults:ArrayList<SearchResultOsfi> = ArrayList<SearchResultOsfi>()
    var canadianJusticeResults:ArrayList<SearchResultCanadianJustice> = ArrayList<SearchResultCanadianJustice>()
    var canadianSemaResults:ArrayList<SearchResultCanadianSema> = ArrayList<SearchResultCanadianSema>()
    var swissSecoResults:ArrayList<SearchResultEntry> = ArrayList<SearchResultEntry>()
}

open class SearchSource
{
    var listId:String? = null
    var listName:String? = null
    var listShortName:String? = null
    var isAffectedByListUpdate:Boolean? = null
}

open class ArrayOfSearchResultEntries : ArrayList<SearchResultEntry>()
{
}

open class PepSearchResult
{
    var resultSimilarity:BigDecimal? = null
    var resultResolved:Boolean? = null
    var dateLastUpdated:Date? = null
    var resultIsClient:Boolean? = null
    var id:Long? = null
    @SerializedName("type") var Type:String? = null
    var title:String? = null
    var forename:String? = null
    var middlename:String? = null
    var surname:String? = null
    var softDelete:Boolean? = null
    var dateOfSoftDelete:Date? = null
    var dateOfCapture:Date? = null
    var dateOfBirth:Date? = null
    var dateOfDeath:Date? = null
    var yearOfBirth:Int? = null
    var yearOfDeath:Int? = null
    var gender:String? = null
    var homeTelephone:String? = null
    var businessTelephone:String? = null
    var mobileTelephone:String? = null
    var fax:String? = null
    var email:String? = null
    var nationality:String? = null
    var source:String? = null
    var category:String? = null
    var picture:String? = null
    var alternateTitle:String? = null
    var businessName:String? = null
    var description:String? = null
    var telephone:String? = null
    var website:String? = null
    var pepTier:Int? = null
    var addresses:ArrayList<PepSearchResultAddress> = ArrayList<PepSearchResultAddress>()
    var aliases:ArrayList<PepSearchResultAlias> = ArrayList<PepSearchResultAlias>()
    var articles:ArrayList<PepSearchResultArticle> = ArrayList<PepSearchResultArticle>()
    var associations:ArrayList<PepSearchResultIndividualAssociation> = ArrayList<PepSearchResultIndividualAssociation>()
    var businessAssociations:ArrayList<PepSearchResultBusinessAssociation> = ArrayList<PepSearchResultBusinessAssociation>()
    var notes:ArrayList<PepSearchResultNote> = ArrayList<PepSearchResultNote>()
    var politicalPositions:ArrayList<PepSearchResultPoliticalPosition> = ArrayList<PepSearchResultPoliticalPosition>()
}

open class SearchResultEu
{
    var resultStrength:Int? = null
    var resultSimilarity:BigDecimal? = null
    var resultResolved:Boolean? = null
    var resultType:String? = null
    var dateUpdated:Date? = null
    var addresses:ArrayList<SearchResultEuAddress> = ArrayList<SearchResultEuAddress>()
    var births:ArrayList<SearchResultEuBirth> = ArrayList<SearchResultEuBirth>()
    var citizenships:ArrayList<SearchResultOfacEuCitizenship> = ArrayList<SearchResultOfacEuCitizenship>()
    var names:ArrayList<SearchResultEuName> = ArrayList<SearchResultEuName>()
    var passports:ArrayList<SearchResultEuPassport> = ArrayList<SearchResultEuPassport>()
}

open class SearchResultHmTreasury
{
    var resultStrength:Int? = null
    var resultSimilarity:BigDecimal? = null
    var resultResolved:Boolean? = null
    var resultType:String? = null
    var dateListed:Date? = null
    var dateUpdated:Date? = null
    var name1:String? = null
    var name2:String? = null
    var name3:String? = null
    var name4:String? = null
    var name5:String? = null
    var name6:String? = null
    var dateOfBirth:String? = null
    var countryOfBirth:String? = null
    var nationality:String? = null
    var address1:String? = null
    var address2:String? = null
    var address3:String? = null
    var address4:String? = null
    var address5:String? = null
    var address6:String? = null
    var postCode:String? = null
    var country:String? = null
}

open class SearchResultOfac
{
    var resultStrength:Int? = null
    var resultSimilarity:BigDecimal? = null
    var resultResolved:Boolean? = null
    var resultType:String? = null
    var dateUpdated:Date? = null
    var firstName:String? = null
    var lastName:String? = null
    var addresses:ArrayList<SearchResultOfacAddress> = ArrayList<SearchResultOfacAddress>()
    var akas:ArrayList<SearchResultOfacAka> = ArrayList<SearchResultOfacAka>()
    var dateOfBirths:ArrayList<SearchResultOfacDateOfBirth> = ArrayList<SearchResultOfacDateOfBirth>()
    var nationalities:ArrayList<SearchResultOfacNationality> = ArrayList<SearchResultOfacNationality>()
    var placeOfBirths:ArrayList<SearchResultOfacPlaceOfBirth> = ArrayList<SearchResultOfacPlaceOfBirth>()
}

open class SearchResultDfat
{
    var resultStrength:Int? = null
    var resultSimilarity:BigDecimal? = null
    var resultResolved:Boolean? = null
    var resultType:String? = null
    var dateUpdated:Date? = null
    var fullName:String? = null
    var address:String? = null
    var dateOfBirth:String? = null
    var placeOfBirth:String? = null
    var nationality:String? = null
}

open class SearchResultOsfi
{
    var resultStrength:Int? = null
    var resultSimilarity:BigDecimal? = null
    var resultResolved:Boolean? = null
    var resultType:String? = null
    var dateUpdated:Date? = null
    var fullName:String? = null
    var address:String? = null
    var dateOfBirth:String? = null
    var placeOfBirth:String? = null
    var nationality:String? = null
}

open class SearchResultCanadianJustice
{
    var resultStrength:Int? = null
    var resultSimilarity:BigDecimal? = null
    var resultResolved:Boolean? = null
    var resultType:String? = null
    var dateUpdated:Date? = null
    var name:String? = null
    var dateOfBirth:String? = null
    var country:String? = null
    var refId:Int? = null
}

open class SearchResultCanadianSema
{
    var resultStrength:Int? = null
    var resultSimilarity:BigDecimal? = null
    var resultResolved:Boolean? = null
    var resultType:String? = null
    var dateUpdated:Date? = null
    var name:String? = null
    var dateOfBirth:String? = null
    var country:String? = null
    var schedule:String? = null
    var item:String? = null
}

open class SearchResultEntry
{
    var searchResultId:Long? = null
    var resultStrength:Int? = null
    var resultSimilarity:BigDecimal? = null
    var resultResolved:Boolean? = null
    var resultType:String? = null
    var dateUpdated:Date? = null
    var sanctionsListId:String? = null
    var sanctionsListName:String? = null
    var addresses:ArrayList<SearchResultAddress> = ArrayList<SearchResultAddress>()
    var datesOfBirth:ArrayList<SearchResultDateOfBirth> = ArrayList<SearchResultDateOfBirth>()
    var names:ArrayList<SearchResultName> = ArrayList<SearchResultName>()
    var nationalities:ArrayList<SearchResultNationality> = ArrayList<SearchResultNationality>()
    var placesOfBirth:ArrayList<SearchResultPlaceOfBirth> = ArrayList<SearchResultPlaceOfBirth>()
    var remarks:ArrayList<SearchResultRemark> = ArrayList<SearchResultRemark>()
}

open class PepSearchResultAddress
{
    var addressLine1:String? = null
    var addressLine2:String? = null
    var addressLine3:String? = null
    var addressLine4:String? = null
    var town:String? = null
    var county:String? = null
    var postCode:String? = null
    var country:String? = null
    var isoCountry:String? = null
    var softDelete:Boolean? = null
    var dateLastUpdated:Date? = null
}

open class PepSearchResultAlias
{
    var forename:String? = null
    var middleName:String? = null
    var surname:String? = null
    var softDelete:Boolean? = null
    var dateOfSoftDelete:Date? = null
    var dateLastUpdated:Date? = null
    var title:String? = null
    var alternateTitle:String? = null
    var businessName:String? = null
}

open class PepSearchResultArticle
{
    var url:String? = null
    var originalUrl:String? = null
    var source:String? = null
    var dateOfCapture:Date? = null
    var dateLastUpdated:Date? = null
    var snippets:ArrayList<PepSearchResultArticleSnippet> = ArrayList<PepSearchResultArticleSnippet>()
}

open class PepSearchResultIndividualAssociation
{
    var linkDescription:String? = null
    var softDelete:Boolean? = null
    var dateLastUpdated:Date? = null
    var fullName:String? = null
}

open class PepSearchResultBusinessAssociation
{
    var linkDescription:String? = null
    var softDelete:Boolean? = null
    var dateLastUpdated:Date? = null
    var businessName:String? = null
}

open class PepSearchResultNote
{
    var source:String? = null
    var notes:String? = null
    var softDelete:Boolean? = null
    var dateLastUpdated:Date? = null
}

open class PepSearchResultPoliticalPosition
{
    var description:String? = null
    var from:String? = null
    var to:String? = null
    var country:String? = null
    var softDelete:Boolean? = null
    var dateLastUpdated:Date? = null
}

open class SearchResultEuAddress
{
    var street:String? = null
    var city:String? = null
    var country:String? = null
    var postCode:String? = null
    var other:String? = null
}

open class SearchResultEuBirth
{
    var date:String? = null
    var place:String? = null
    var country:String? = null
}

open class SearchResultOfacEuCitizenship
{
    var country:String? = null
}

open class SearchResultEuName
{
    var fullName:String? = null
    var gender:String? = null
}

open class SearchResultEuPassport
{
    var number:String? = null
    var country:String? = null
}

open class SearchResultOfacAddress
{
    var address1:String? = null
    var address2:String? = null
    var address3:String? = null
    var city:String? = null
    var state:String? = null
    var postCode:String? = null
    var country:String? = null
}

open class SearchResultOfacAka
{
    var firstName:String? = null
    var lastName:String? = null
    @SerializedName("type") var Type:String? = null
    var strength:String? = null
}

open class SearchResultOfacDateOfBirth
{
    var dateOfBirth:String? = null
}

open class SearchResultOfacNationality
{
    var country:String? = null
}

open class SearchResultOfacPlaceOfBirth
{
    var placeOfBirth:String? = null
}

open class SearchResultAddress
{
    var searchResultAddressId:Long? = null
    @SerializedName("type") var Type:String? = null
    var address1:String? = null
    var address2:String? = null
    var address3:String? = null
    var city:String? = null
    var county:String? = null
    var postCode:String? = null
    var country:String? = null
}

open class SearchResultDateOfBirth
{
    var searchResultDateOfBirthId:Long? = null
    var dateOfBirth:String? = null
    var year:Short? = null
    var month:Short? = null
    var day:Short? = null
    @SerializedName("type") var Type:String? = null
}

open class SearchResultName
{
    var searchResultNameId:Long? = null
    @SerializedName("type") var Type:String? = null
    var title:String? = null
    var fullName:String? = null
    var resultSimilarity:BigDecimal? = null
}

open class SearchResultNationality
{
    var searchResultNationalityId:Long? = null
    var nationality:String? = null
}

open class SearchResultPlaceOfBirth
{
    var searchResultPlaceOfBirthId:Long? = null
    var placeOfBirth:String? = null
    var countryOfBirth:String? = null
}

open class SearchResultRemark
{
    var searchResultRemarkId:Long? = null
    var name:String? = null
    var description:String? = null
}

open class PepSearchResultArticleSnippet
{
    var title:String? = null
    var text:String? = null
    var adverseTerms:String? = null
}