/* Options:
Date: 2025-07-20 11:10:13
Version: 8.30
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://api.sanctionssearch.com/v1

//GlobalNamespace: 
//MakePartial: True
//MakeVirtual: True
//MakeInternal: False
//MakeDataContractsExtensible: False
//AddNullableAnnotations: False
//AddReturnMarker: True
//AddDescriptionAsComments: True
//AddDataContractAttributes: False
//AddIndexesToDataMembers: False
//AddGeneratedCodeAttributes: False
//AddResponseStatus: False
//AddImplicitVersion: 
//InitializeCollections: True
//ExportValueTypes: False
IncludeTypes: AddIndividualSearch.*
//ExcludeTypes: 
//AddNamespaces: 
//AddDefaultXmlNamespace: http://schemas.servicestack.net/types
*/

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
using ServiceStack;
using ServiceStack.DataAnnotations;
using Nugo.SanctionsSearch.Api.ServiceModel.Types;
using Nugo.SanctionsSearch.Api.ServiceModel.Operations.Base;
using Nugo.SanctionsSearch.Api.ServiceModel.Operations;
using Nugo.SanctionsSearch.Models.Api;

namespace Nugo.SanctionsSearch.Api.ServiceModel.Operations
{
    ///<summary>
    ///Create a new sanctions search for a person. SanctionsListId: valid values: HMTSL and OFACL
    ///</summary>
    [Route("/sanctions/individual/create", "POST")]
    [Api(Description="Create a new sanctions search for a person. SanctionsListId: valid values: HMTSL and OFACL")]
    [ApiResponse(Description="Your request is successful if the \"<em>Data.ResponseStatus.Message</em>\" field is \"<b>Success</b>\".", StatusCode=200)]
    [DataContract]
    public partial class AddIndividualSearch
        : IReturn<AddIndividualSearchResponse>, IBaseRequest
    {
        [DataMember]
        public virtual Authentication Authentication { get; set; }

        [DataMember]
        public virtual SearchIndividualRequest Request { get; set; }
    }

    [DataContract]
    public partial class AddIndividualSearchData
        : IBaseDataResponse, IHasResponseStatus
    {
        [DataMember]
        public virtual ResponseStatus ResponseStatus { get; set; }

        [DataMember]
        public virtual SearchRecord SearchRecord { get; set; }
    }

    [DataContract]
    public partial class AddIndividualSearchResponse
    {
        [DataMember]
        public virtual AddIndividualSearchData Data { get; set; }
    }

}

namespace Nugo.SanctionsSearch.Api.ServiceModel.Operations.Base
{
    public partial class ArrayOfResponseError
        : List<ResponseError>
    {
    }

    public partial interface IBaseDataResponse
    {
        ResponseStatus ResponseStatus { get; set; }
    }

    public partial interface IBaseRequest
    {
        Authentication Authentication { get; set; }
    }

    public partial interface IHasResponseStatus
    {
        ResponseStatus ResponseStatus { get; set; }
    }

    [DataContract]
    public partial class ResponseError
    {
        [DataMember(Order=1)]
        public virtual string ErrorCode { get; set; }

        [DataMember(Order=2)]
        public virtual string FieldName { get; set; }

        [DataMember(Order=3)]
        public virtual string Message { get; set; }
    }

    [DataContract]
    public partial class ResponseStatus
    {
        [DataMember(Order=1)]
        public virtual string ErrorCode { get; set; }

        [DataMember(Order=2)]
        public virtual string Message { get; set; }

        [DataMember(Order=3)]
        public virtual string StackTrace { get; set; }

        [DataMember(Order=4)]
        public virtual ArrayOfResponseError Errors { get; set; }
    }

}

namespace Nugo.SanctionsSearch.Api.ServiceModel.Types
{
    public partial class ArrayOfSanctionsLists
        : List<string>
    {
    }

    [DataContract]
    public partial class Authentication
        : IAuthentication
    {
        ///<summary>
        ///The API User ID that will authenticate your request
        ///</summary>
        [DataMember]
        [ApiMember(DataType="string", Description="The API User ID that will authenticate your request", IsRequired=true)]
        public virtual string ApiUserId { get; set; }

        ///<summary>
        ///The API User Key that will authenticate your request
        ///</summary>
        [DataMember]
        [ApiMember(DataType="string", Description="The API User Key that will authenticate your request", IsRequired=true)]
        public virtual string ApiUserKey { get; set; }
    }

    public partial class SearchCriteria
    {
        public virtual string Name { get; set; }
        public virtual string DateOfBirth { get; set; }
        public virtual string CountryOfBirth { get; set; }
        public virtual string Nationality { get; set; }
        public virtual string Address { get; set; }
    }

    public partial class SearchIndividualRequest
    {
        public virtual string Name1 { get; set; }
        public virtual string Name2 { get; set; }
        public virtual string Name3 { get; set; }
        public virtual string Name4 { get; set; }
        public virtual string Name5 { get; set; }
        public virtual string Name6 { get; set; }
        public virtual string DateOfBirth { get; set; }
        public virtual string CountryOfBirth { get; set; }
        public virtual string Nationality { get; set; }
        public virtual string Address { get; set; }
        public virtual ArrayOfSanctionsLists SelectedSanctionsLists { get; set; }
    }

    public partial class SearchRecord
    {
        public virtual long Id { get; set; }
        public virtual string SearchType { get; set; }
        public virtual DateTime DateSearched { get; set; }
        public virtual DateTime DateUpdated { get; set; }
        public virtual int NumOfResults { get; set; }
        public virtual bool ClientInResults { get; set; }
        public virtual bool ClientNotInResults { get; set; }
        public virtual bool AffectedByUpdate { get; set; }
        public virtual SearchCriteria SearchCriteria { get; set; }
        public virtual SearchResults SearchResults { get; set; }
    }

    public partial class SearchResultHmTreasury
    {
        public virtual int ResultStrength { get; set; }
        public virtual decimal ResultSimilarity { get; set; }
        public virtual bool ResultResolved { get; set; }
        public virtual string ResultType { get; set; }
        public virtual DateTime DateListed { get; set; }
        public virtual DateTime DateUpdated { get; set; }
        public virtual string Name1 { get; set; }
        public virtual string Name2 { get; set; }
        public virtual string Name3 { get; set; }
        public virtual string Name4 { get; set; }
        public virtual string Name5 { get; set; }
        public virtual string Name6 { get; set; }
        public virtual string DateOfBirth { get; set; }
        public virtual string CountryOfBirth { get; set; }
        public virtual string Nationality { get; set; }
        public virtual string Address1 { get; set; }
        public virtual string Address2 { get; set; }
        public virtual string Address3 { get; set; }
        public virtual string Address4 { get; set; }
        public virtual string Address5 { get; set; }
        public virtual string Address6 { get; set; }
        public virtual string PostCode { get; set; }
        public virtual string Country { get; set; }
    }

    public partial class SearchResultOfac
    {
        public SearchResultOfac()
        {
            Addresses = new List<SearchResultOfacAddress>{};
            Akas = new List<SearchResultOfacAka>{};
            DateOfBirths = new List<SearchResultOfacDateOfBirth>{};
            Nationalities = new List<SearchResultOfacNationality>{};
            PlaceOfBirths = new List<SearchResultOfacPlaceOfBirth>{};
        }

        public virtual int ResultStrength { get; set; }
        public virtual decimal ResultSimilarity { get; set; }
        public virtual bool ResultResolved { get; set; }
        public virtual string ResultType { get; set; }
        public virtual DateTime DateUpdated { get; set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
        public virtual List<SearchResultOfacAddress> Addresses { get; set; }
        public virtual List<SearchResultOfacAka> Akas { get; set; }
        public virtual List<SearchResultOfacDateOfBirth> DateOfBirths { get; set; }
        public virtual List<SearchResultOfacNationality> Nationalities { get; set; }
        public virtual List<SearchResultOfacPlaceOfBirth> PlaceOfBirths { get; set; }
    }

    public partial class SearchResultOfacAddress
    {
        public virtual string Address1 { get; set; }
        public virtual string Address2 { get; set; }
        public virtual string Address3 { get; set; }
        public virtual string City { get; set; }
        public virtual string State { get; set; }
        public virtual string PostCode { get; set; }
        public virtual string Country { get; set; }
    }

    public partial class SearchResultOfacAka
    {
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
        public virtual string Type { get; set; }
        public virtual string Strength { get; set; }
    }

    public partial class SearchResultOfacDateOfBirth
    {
        public virtual string DateOfBirth { get; set; }
    }

    public partial class SearchResultOfacNationality
    {
        public virtual string Country { get; set; }
    }

    public partial class SearchResultOfacPlaceOfBirth
    {
        public virtual string PlaceOfBirth { get; set; }
    }

    public partial class SearchResults
    {
        public SearchResults()
        {
            HMTResults = new List<SearchResultHmTreasury>{};
            OfacResults = new List<SearchResultOfac>{};
        }

        public virtual List<SearchResultHmTreasury> HMTResults { get; set; }
        public virtual List<SearchResultOfac> OfacResults { get; set; }
    }

}

namespace Nugo.SanctionsSearch.Models.Api
{
    public partial interface IAuthentication
    {
        string ApiUserId { get; set; }
        string ApiUserKey { get; set; }
        string UserId { get; set; }
    }

}