/* Options:
Date: 2025-03-15 20:30:23
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: AddCompanyLookup.*
//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="/companylookups/create", Verbs="POST")
@DataContract
open class AddCompanyLookup : BaseRequest(), IReturn<AddCompanyLookupResponse>
{
    @DataMember
    var request:AddCompanyLookupRequest? = null
    companion object { private val responseType = AddCompanyLookupResponse::class.java }
    override fun getResponseType(): Any? = AddCompanyLookup.responseType
}

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

@DataContract
open class Authentication
{
    /**
    * 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 apiUserId:String? = null

    /**
    * 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 apiUserKey: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 AddCompanyLookupRequest
{
    /**
    * 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

    var companyLookupId:Int? = null
    var companyRegistrationNumber:String? = null
    var companyName:String? = null
    var companyAddress:String? = null
    var companyCountry:String? = null
    var performEnhancedSearch: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 AddCompanyLookupData : BaseResponse(), IBaseSearchResponse
{
    var linkedTo:ArrayOfLinkedTo? = null
    var searchRecord:CompanyLookupSearchRecord? = null
}

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

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

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 CompanyLookupSearchRecord
{
    var id:Int? = null
    var searchCriteria:SearchCriteria? = null
    var selectedLists:ArrayOfLists? = null
    var date:Date? = null
    var hasCompanyId:Boolean? = null
    var hasCompanyDetails:Boolean? = null
    var hasStartedSearches:Boolean? = null
    var hasCompletedSearches:Boolean? = null
    var companyDirectorsAndShareholders:ArrayList<CompanyDirectorOrShareholder> = ArrayList<CompanyDirectorOrShareholder>()
    var companySearchRecord:SearchListItem? = null
    var hasEnhancedInformation:Boolean? = null
    var enhancedInformation:CompanyLookupEnhanced? = 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 CompanyDirectorOrShareholder
{
    var id:Long? = null
    var searchType:String? = null
    var dateSearched:Date? = null
    var dateUpdated:Date? = null
    var numOfResults:Int? = null
    var clientInResults:Boolean? = null
    var clientNotInResults:Boolean? = null
    var affectedByUpdate:Boolean? = null
    var searchCriteria:SearchCriteria? = null
    var isDirector:Boolean? = null
    var isShareholder:Boolean? = null
}

open class SearchListItem
{
    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 searchSources:ArrayList<SearchSource> = ArrayList<SearchSource>()
}

open class CompanyLookupEnhanced
{
    var summary:CompanyLookupEnhancedSummary? = null
    var contactInformation:CompanyLookupEnhancedContactInfo? = null
    var sicCodes:ArrayList<CompanyLookupEnhancedSicCode> = ArrayList<CompanyLookupEnhancedSicCode>()
    var previousNames:ArrayList<CompanyLookupEnhancedPreviousName> = ArrayList<CompanyLookupEnhancedPreviousName>()
    var shareStructure:CompanyLookupEnhancedShareStructure? = null
    var directors:CompanyLookupEnhancedDirectors? = null
    var groupStructure:CompanyLookupEnhancedStructure? = null
    var countyCourtJudgements:CompanyLookupEnhancedCCJs? = null
    var eventHistory:ArrayList<CompanyLookupEnhancedEvent> = ArrayList<CompanyLookupEnhancedEvent>()
    var commentaries:ArrayList<CompanyLookupEnhancedCommentary> = ArrayList<CompanyLookupEnhancedCommentary>()
    var creditAccounts:CompanyLookupEnhancedCreditAccount? = null
    var financialStatements:ArrayList<CompanyLookupEnhancedFinancialStatement> = ArrayList<CompanyLookupEnhancedFinancialStatement>()
}

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

open class CompanyLookupEnhancedSummary
{
    var name:String? = null
    var country:String? = null
    var registrationNumber:String? = null
    var dateOfIncorporation:String? = null
    var typeOfIncorporation:String? = null
    var companyStatus:String? = null
    var address:String? = null
    var telephone:String? = null
    var sicCode:String? = null
    var sicDescription:String? = null
    var principleActivity:String? = null
    var latestAccounts:CompanyLookupEnhancedLatestAccounts? = null
}

open class CompanyLookupEnhancedContactInfo
{
    var registeredAddress:CompanyLookupEnhancedAddress? = null
    var tradingAddresses:ArrayList<CompanyLookupEnhancedAddress> = ArrayList<CompanyLookupEnhancedAddress>()
    var websites:ArrayList<CompanyLookupEnhancedWebsite> = ArrayList<CompanyLookupEnhancedWebsite>()
    var additionalContactInfo:CompanyLookupEnhancedAdditionalContact? = null
}

open class CompanyLookupEnhancedSicCode
{
    var sicCode2003:Int? = null
    var sicCode2003Description:String? = null
    var sicCode2007:Int? = null
    var sicCode2007Description:String? = null
    var status:String? = null
}

open class CompanyLookupEnhancedPreviousName
{
    var dateChanged:Date? = null
    var name:String? = null
}

open class CompanyLookupEnhancedShareStructure
{
    var issuedShareCapital:BigDecimal? = null
    var shareholders:ArrayList<CompanyLookupEnhancedShareholder> = ArrayList<CompanyLookupEnhancedShareholder>()
}

open class CompanyLookupEnhancedDirectors
{
    var currentDirectors:ArrayList<CompanyLookupEnhancedDirector> = ArrayList<CompanyLookupEnhancedDirector>()
    var previousDirectors:ArrayList<CompanyLookupEnhancedDirector> = ArrayList<CompanyLookupEnhancedDirector>()
}

open class CompanyLookupEnhancedStructure
{
    var parentCompanies:ArrayList<CompanyLookupEnhancedCompany> = ArrayList<CompanyLookupEnhancedCompany>()
    var subsidiaryCompanies:ArrayList<CompanyLookupEnhancedCompany> = ArrayList<CompanyLookupEnhancedCompany>()
}

open class CompanyLookupEnhancedCCJs
{
    var possibleCCJs:ArrayList<CompanyLookupEnhancedCCJ> = ArrayList<CompanyLookupEnhancedCCJ>()
    var exactCCJs:ArrayList<CompanyLookupEnhancedCCJ> = ArrayList<CompanyLookupEnhancedCCJ>()
}

open class CompanyLookupEnhancedEvent
{
    var date:Date? = null
    var description:String? = null
}

open class CompanyLookupEnhancedCommentary
{
    var text:String? = null
    var positiveOrNegative:String? = null
    var priority:Int? = null
}

open class CompanyLookupEnhancedCreditAccount
{
    var creditLimitHistory:ArrayList<CompanyLookupEnhancedCreditLimit> = ArrayList<CompanyLookupEnhancedCreditLimit>()
    var creditRatingHistory:ArrayList<CompanyLookupEnhancedCreditRating> = ArrayList<CompanyLookupEnhancedCreditRating>()
}

open class CompanyLookupEnhancedFinancialStatement
{
    var yearEndDateOrder:Int? = null
    var yearEndDate:Date? = null
    var summaryNumberOfWeeks:Int? = null
    var summaryCurrency:String? = null
    var summaryConsolidatedAccount:String? = null
    var profitAndLoss:CompanyLookupFinancialProfit? = null
    var balanceSheet:CompanyLookupFinancialBalance? = null
    var capitalAndReserves:CompanyLookupFinancialCapital? = null
    var other:CompanyLookupFinancialOther? = null
    var cash:CompanyLookupFinancialCash? = null
    var misc:CompanyLookupFinancialMisc? = null
    var ratios:CompanyLookupFinancialRatios? = null
}

open class CompanyLookupEnhancedLatestAccounts
{
    var currency:String? = null
    var turnover:BigDecimal? = null
    var shareholdersEquity:BigDecimal? = null
    var creditRating:Int? = null
    var creditLimit:Int? = null
    var creditRatingDescription:String? = null
    var accountRefDay:Int? = null
    var accountRefMonth:Int? = null
    var accountNextDueDate:Date? = null
    var accountLastMadeUpDate:Date? = null
    var accountCategory:String? = null
    var returnLastMadeUpDate:Date? = null
}

open class CompanyLookupEnhancedAddress
{
    var fullAddress:String? = null
    var address1:String? = null
    var address2:String? = null
    var address3:String? = null
    var address4:String? = null
    var postCode:String? = null
    var telephone:String? = null
}

open class CompanyLookupEnhancedWebsite
{
    var website:String? = null
}

open class CompanyLookupEnhancedAdditionalContact
{
    var telephone:String? = null
    var faxNumber:String? = null
    var emailAddress:String? = null
    var webAddress:String? = null
    var twitter:String? = null
    var facebook:String? = null
    var googlePlus:String? = null
    var linkedIn:String? = null
    var contactName:String? = null
    var businessClassification:String? = null
}

open class CompanyLookupEnhancedShareholder
{
    var title:String? = null
    var forename:String? = null
    var surname:String? = null
    var address1:String? = null
    var address2:String? = null
    var address3:String? = null
    var address4:String? = null
    var address5:String? = null
    var postCode:String? = null
    var shareType:String? = null
    var number:BigDecimal? = null
    var value:BigDecimal? = null
    var currency:String? = null
    var shareholderType:String? = null
    var shareClass:String? = null
}

open class CompanyLookupEnhancedDirector
{
    var name:String? = null
    var address:String? = null
    var gender:String? = null
    var appointmentDate:Date? = null
    var resignationDate:Date? = null
    var dateOfBirth:Date? = null
    var position:String? = null
    var idNumber:Int? = null
    var currentDirectorships:Int? = null
    var previousDirectorships:Int? = null
    var totalDirectorships:Int? = null
}

open class CompanyLookupEnhancedCompany
{
    var country:String? = null
    var companyName:String? = null
    var companyNumber:String? = null
}

open class CompanyLookupEnhancedCCJ
{
    var date:Date? = null
    var court:String? = null
    var amount:BigDecimal? = null
    var caseNumber:String? = null
    var status:String? = null
    var datePaid:String? = null
    var incomingRecordDetails:String? = null
}

open class CompanyLookupEnhancedCreditLimit
{
    var date:Date? = null
    var dateOrder:Int? = null
    var amount:Int? = null
}

open class CompanyLookupEnhancedCreditRating
{
    var date:Date? = null
    var dateOrder:Int? = null
    var amount:Int? = null
    var shortDescription:String? = null
    var description:String? = null
}

open class CompanyLookupFinancialProfit
{
    var turnover:BigDecimal? = null
    var export:BigDecimal? = null
    var costOfSales:BigDecimal? = null
    var grossProfit:BigDecimal? = null
    var wagesAndSalaries:BigDecimal? = null
    var directorEmolument:BigDecimal? = null
    var operatingProfit:BigDecimal? = null
    var depreciation:BigDecimal? = null
    var auditFees:BigDecimal? = null
    var interestPayments:BigDecimal? = null
    var pretaxProfit:BigDecimal? = null
    var taxation:BigDecimal? = null
    var profitAfterTax:BigDecimal? = null
    var dividendsPayable:BigDecimal? = null
    var retainedProfit:BigDecimal? = null
}

open class CompanyLookupFinancialBalance
{
    var tangibleAccounts:BigDecimal? = null
    var intangibleAssets:BigDecimal? = null
    var totalFixedAssets:BigDecimal? = null
    var stock:BigDecimal? = null
    var tradeDebtors:BigDecimal? = null
    var cash:BigDecimal? = null
    var otherDebtors:BigDecimal? = null
    var miscCurrentAssets:BigDecimal? = null
    var totalCurrentAssets:BigDecimal? = null
    var tradeCreditors:BigDecimal? = null
    var bankLoansAndOverdrafts:BigDecimal? = null
    var otherShortTermFinance:BigDecimal? = null
    var miscCurrentLiabilities:BigDecimal? = null
    var totalCurrentLiabilities:BigDecimal? = null
    var bankLoansAndOverdraftsAndLTL:BigDecimal? = null
    var otherLongTermFinance:BigDecimal? = null
    var totalLongTermFinance:BigDecimal? = null
}

open class CompanyLookupFinancialCapital
{
    var calledUpSharedCapital:BigDecimal? = null
    var profitAndLossAccountReserve:BigDecimal? = null
    var revaluationReserve:BigDecimal? = null
    var sundryReserves:BigDecimal? = null
    var shareholderFunds:BigDecimal? = null
}

open class CompanyLookupFinancialOther
{
    var netWorth:BigDecimal? = null
    var netAssets:BigDecimal? = null
    var workingCapital:BigDecimal? = null
    var totalAssets:BigDecimal? = null
    var totalLiabilities:BigDecimal? = null
}

open class CompanyLookupFinancialCash
{
    var netCashFlowFromOperations:BigDecimal? = null
    var netCashFlowBeforeFinancing:BigDecimal? = null
    var netCashFlowFromFinancing:BigDecimal? = null
    var increaseInCash:BigDecimal? = null
}

open class CompanyLookupFinancialMisc
{
    var contingentLiability:String? = null
    var capitalEmployed:BigDecimal? = null
    var numberOfEmployees:BigDecimal? = null
    var auditors:String? = null
    var auditorComments:String? = null
    var bankers:String? = null
    var bankBranchCode:String? = null
}

open class CompanyLookupFinancialRatios
{
    var preTaxProfitMargin:BigDecimal? = null
    var currentRatio:BigDecimal? = null
    var salesNetworkingCapital:BigDecimal? = null
    var gearing:BigDecimal? = null
    var equity:BigDecimal? = null
    var creditorDays:BigDecimal? = null
    var debtorDays:BigDecimal? = null
    var liquidityAcidTest:BigDecimal? = null
    var returnOnCapitalEmployed:BigDecimal? = null
    var returnOnNetAssetsEmployed:BigDecimal? = null
    var returnOnTotalAssetsEmployed:BigDecimal? = null
    var currentDebtRatio:BigDecimal? = null
    var totalDebtRatio:BigDecimal? = null
    var stockTurnoverRatio:BigDecimal? = null
}