Six4Win.WebApi

<back to all web services

GetDrawDignostics

The following routes are available for this service:
All Verbs/qry/rounds/draw/diagnostics
<?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};


class Initialization implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $dataLoadDuration=0,
        /** @var int */
        public int $betsCollectionsCreationDuration=0,
        /** @var int */
        public int $combinationsOccuranceLookupInitializationDuration=0
    ) {
    }

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

class SequenceGeneration implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $nrOfThreads=0,
        /** @var int */
        public int $nrOfResultsProbed=0,
        /** @var int */
        public int $duration=0,
        /** @var int */
        public int $avgSinglePassDuration=0
    ) {
    }

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

enum SortingOrder : int
{
    case None = 0;
    case Ascending = 1;
    case Descending = 2;
}

class BestFitFinder implements JsonSerializable
{
    public function __construct(
        /** @var float */
        public float $targetAmount=0.0,
        /** @var float */
        public float $awardedAmount=0.0,
        /** @var float */
        public float $deviation=0.0,
        /** @var float */
        public float $deviationPct=0.0,
        /** @var string|null */
        public ?string $sequenceResultType=null,
        /** @var bool|null */
        public ?bool $isJackPot5Drawn=null,
        /** @var int */
        public int $filteringPeriod=0,
        /** @var SortingOrder|null */
        public ?SortingOrder $winCountOrder=null,
        /** @var float */
        public float $minAmount=0.0,
        /** @var float */
        public float $maxAmount=0.0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['targetAmount'])) $this->targetAmount = $o['targetAmount'];
        if (isset($o['awardedAmount'])) $this->awardedAmount = $o['awardedAmount'];
        if (isset($o['deviation'])) $this->deviation = $o['deviation'];
        if (isset($o['deviationPct'])) $this->deviationPct = $o['deviationPct'];
        if (isset($o['sequenceResultType'])) $this->sequenceResultType = $o['sequenceResultType'];
        if (isset($o['isJackPot5Drawn'])) $this->isJackPot5Drawn = $o['isJackPot5Drawn'];
        if (isset($o['filteringPeriod'])) $this->filteringPeriod = $o['filteringPeriod'];
        if (isset($o['winCountOrder'])) $this->winCountOrder = JsonConverters::from('SortingOrder', $o['winCountOrder']);
        if (isset($o['minAmount'])) $this->minAmount = $o['minAmount'];
        if (isset($o['maxAmount'])) $this->maxAmount = $o['maxAmount'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->targetAmount)) $o['targetAmount'] = $this->targetAmount;
        if (isset($this->awardedAmount)) $o['awardedAmount'] = $this->awardedAmount;
        if (isset($this->deviation)) $o['deviation'] = $this->deviation;
        if (isset($this->deviationPct)) $o['deviationPct'] = $this->deviationPct;
        if (isset($this->sequenceResultType)) $o['sequenceResultType'] = $this->sequenceResultType;
        if (isset($this->isJackPot5Drawn)) $o['isJackPot5Drawn'] = $this->isJackPot5Drawn;
        if (isset($this->filteringPeriod)) $o['filteringPeriod'] = $this->filteringPeriod;
        if (isset($this->winCountOrder)) $o['winCountOrder'] = JsonConverters::to('SortingOrder', $this->winCountOrder);
        if (isset($this->minAmount)) $o['minAmount'] = $this->minAmount;
        if (isset($this->maxAmount)) $o['maxAmount'] = $this->maxAmount;
        return empty($o) ? new class(){} : $o;
    }
}

class Bet implements JsonSerializable
{
    public function __construct(
        /** @var bool|null */
        public ?bool $isFound=null,
        /** @var string|null */
        public ?string $betId=null,
        /** @var string|null */
        public ?string $slipId=null,
        /** @var Object|null */
        public ?Object $combStake=null
    ) {
    }

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

class QualifiedPool implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $id=0,
        /** @var string|null */
        public ?string $name=null,
        /** @var float */
        public float $coefficient=0.0,
        /** @var float */
        public float $availableAmount=0.0,
        /** @var float */
        public float $awardedAmount=0.0,
        /** @var Bet|null */
        public ?Bet $targetBet=null
    ) {
    }

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

class Purger implements JsonSerializable
{
    public function __construct(
        /** @var float */
        public float $prevalentStake=0.0,
        /** @var string|null */
        public ?string $poolPurger=null,
        /** @var array<QualifiedPool>|null */
        public ?array $qualifiedPools=null
    ) {
    }

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

enum ResponseStatus : int
{
    case Failure = 0;
    case Success = 1;
}

class StimulationResponse implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $stimulationId=null,
        /** @var ResponseStatus|null */
        public ?ResponseStatus $status=null,
        /** @var string|null */
        public ?string $failureReason=null,
        /** @var string|null */
        public ?string $slipId=null,
        /** @var string|null */
        public ?string $betId=null,
        /** @var float */
        public float $amountAwarded=0.0
    ) {
    }

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

class CurrentRoundInfo implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $roundId=null,
        /** @var float */
        public float $amount=0.0,
        /** @var string|null */
        public ?string $inertCode=null
    ) {
    }

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

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

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

class Ref implements JsonSerializable
{
    public function __construct(
        /** @var string */
        public string $id='',
        /** @var string */
        public string $val=''
    ) {
    }

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

class RefEx extends Ref implements JsonSerializable
{
    /**
     * @param string $id
     * @param string $val
     */
    public function __construct(
        string $id='',
        string $val='',
        /** @var RecordDictionary2<string, string>|null */
        public ?RecordDictionary2 $data=null
    ) {
        parent::__construct($id,$val);
    }

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

class Origin implements JsonSerializable
{
    public function __construct(
        /** @var BettingApp|null */
        public ?BettingApp $application=null,
        /** @var string|null */
        public ?string $ip=null,
        /** @var RefEx|null */
        public ?RefEx $organization=null,
        /** @var Ref|null */
        public ?Ref $region=null,
        /** @var Ref|null */
        public ?Ref $locationGroup=null,
        /** @var RefEx|null */
        public ?RefEx $location=null,
        /** @var RefEx|null */
        public ?RefEx $device=null,
        /** @var Ref|null */
        public ?Ref $clerk=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['application'])) $this->application = JsonConverters::from('BettingApp', $o['application']);
        if (isset($o['ip'])) $this->ip = $o['ip'];
        if (isset($o['organization'])) $this->organization = JsonConverters::from('RefEx', $o['organization']);
        if (isset($o['region'])) $this->region = JsonConverters::from('Ref', $o['region']);
        if (isset($o['locationGroup'])) $this->locationGroup = JsonConverters::from('Ref', $o['locationGroup']);
        if (isset($o['location'])) $this->location = JsonConverters::from('RefEx', $o['location']);
        if (isset($o['device'])) $this->device = JsonConverters::from('RefEx', $o['device']);
        if (isset($o['clerk'])) $this->clerk = JsonConverters::from('Ref', $o['clerk']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->application)) $o['application'] = JsonConverters::to('BettingApp', $this->application);
        if (isset($this->ip)) $o['ip'] = $this->ip;
        if (isset($this->organization)) $o['organization'] = JsonConverters::to('RefEx', $this->organization);
        if (isset($this->region)) $o['region'] = JsonConverters::to('Ref', $this->region);
        if (isset($this->locationGroup)) $o['locationGroup'] = JsonConverters::to('Ref', $this->locationGroup);
        if (isset($this->location)) $o['location'] = JsonConverters::to('RefEx', $this->location);
        if (isset($this->device)) $o['device'] = JsonConverters::to('RefEx', $this->device);
        if (isset($this->clerk)) $o['clerk'] = JsonConverters::to('Ref', $this->clerk);
        return empty($o) ? new class(){} : $o;
    }
}

class WinnerByCode implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $roundId=null,
        /** @var DateTime */
        public DateTime $drawnAtUtc=new DateTime(),
        /** @var string|null */
        public ?string $slipId=null,
        /** @var string|null */
        public ?string $betId=null,
        /** @var string|null */
        public ?string $code=null,
        /** @var float */
        public float $amount=0.0,
        /** @var Origin|null */
        public ?Origin $origin=null,
        /** @var Ref|null */
        public ?Ref $bettor=null,
        /** @var string|null */
        public ?string $locationAddressOrBettorInfo=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['roundId'])) $this->roundId = $o['roundId'];
        if (isset($o['drawnAtUtc'])) $this->drawnAtUtc = JsonConverters::from('DateTime', $o['drawnAtUtc']);
        if (isset($o['slipId'])) $this->slipId = $o['slipId'];
        if (isset($o['betId'])) $this->betId = $o['betId'];
        if (isset($o['code'])) $this->code = $o['code'];
        if (isset($o['amount'])) $this->amount = $o['amount'];
        if (isset($o['origin'])) $this->origin = JsonConverters::from('Origin', $o['origin']);
        if (isset($o['bettor'])) $this->bettor = JsonConverters::from('Ref', $o['bettor']);
        if (isset($o['locationAddressOrBettorInfo'])) $this->locationAddressOrBettorInfo = $o['locationAddressOrBettorInfo'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->roundId)) $o['roundId'] = $this->roundId;
        if (isset($this->drawnAtUtc)) $o['drawnAtUtc'] = JsonConverters::to('DateTime', $this->drawnAtUtc);
        if (isset($this->slipId)) $o['slipId'] = $this->slipId;
        if (isset($this->betId)) $o['betId'] = $this->betId;
        if (isset($this->code)) $o['code'] = $this->code;
        if (isset($this->amount)) $o['amount'] = $this->amount;
        if (isset($this->origin)) $o['origin'] = JsonConverters::to('Origin', $this->origin);
        if (isset($this->bettor)) $o['bettor'] = JsonConverters::to('Ref', $this->bettor);
        if (isset($this->locationAddressOrBettorInfo)) $o['locationAddressOrBettorInfo'] = $this->locationAddressOrBettorInfo;
        return empty($o) ? new class(){} : $o;
    }
}

class LocalCodePotInfo implements JsonSerializable
{
    public function __construct(
        /** @var bool|null */
        public ?bool $isActive=null,
        /** @var CurrentRoundInfo|null */
        public ?CurrentRoundInfo $current=null,
        /** @var array<WinnerByCode>|null */
        public ?array $winners=null
    ) {
    }

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

class SuperWinInfo implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $durationInMs=0
    ) {
    }

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

class HappyHourInfo implements JsonSerializable
{
    public function __construct(
        /** @var bool|null */
        public ?bool $isHappyHour=null,
        /** @var float */
        public float $oddsModifier=0.0,
        /** @var float */
        public float $roundPoolBonusPct=0.0
    ) {
    }

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

class AccumulatorConfiguration extends AccumulatorConfiguration implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $id=null,
        /** @var DateTime */
        public DateTime $updatedAt=new DateTime()
    ) {
    }

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

enum SyphonType : int
{
    case Location = 0;
    case Bettor = 1;
}

class Syphon implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $id=null,
        /** @var string|null */
        public ?string $name=null,
        /** @var SyphonType|null */
        public ?SyphonType $type=null,
        /** @var int */
        public int $nrOfCombinations=0
    ) {
    }

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

class SyphonInfo implements JsonSerializable
{
    public function __construct(
        /** @var array<string,Syphon>|null */
        public ?array $bettors=null,
        /** @var array<string,Syphon>|null */
        public ?array $locations=null,
        /** @var bool|null */
        public ?bool $hasSyphons=null,
        /** @var int */
        public int $totalSyphonsInRound=0
    ) {
    }

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

class DrawDiagnostics implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $id=null,
        /** @var Initialization|null */
        public ?Initialization $initializationInfo=null,
        /** @var SequenceGeneration|null */
        public ?SequenceGeneration $sequenceGenerationInfo=null,
        /** @var BestFitFinder|null */
        public ?BestFitFinder $bestFitFinderInfo=null,
        /** @var Purger|null */
        public ?Purger $purgerInfo=null,
        /** @var int */
        public int $duration=0,
        /** @var array<StimulationResponse>|null */
        public ?array $stimulationResponses=null,
        /** @var LocalCodePotInfo|null */
        public ?LocalCodePotInfo $localCodePot=null,
        /** @var SuperWinInfo|null */
        public ?SuperWinInfo $superWin=null,
        /** @var HappyHourInfo|null */
        public ?HappyHourInfo $happyHour=null,
        /** @var string|null */
        public ?string $reasoning=null,
        /** @var AccumulatorConfiguration|null */
        public ?AccumulatorConfiguration $configuration=null,
        /** @var SyphonInfo|null */
        public ?SyphonInfo $syphonInfo=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['initializationInfo'])) $this->initializationInfo = JsonConverters::from('Initialization', $o['initializationInfo']);
        if (isset($o['sequenceGenerationInfo'])) $this->sequenceGenerationInfo = JsonConverters::from('SequenceGeneration', $o['sequenceGenerationInfo']);
        if (isset($o['bestFitFinderInfo'])) $this->bestFitFinderInfo = JsonConverters::from('BestFitFinder', $o['bestFitFinderInfo']);
        if (isset($o['purgerInfo'])) $this->purgerInfo = JsonConverters::from('Purger', $o['purgerInfo']);
        if (isset($o['duration'])) $this->duration = $o['duration'];
        if (isset($o['stimulationResponses'])) $this->stimulationResponses = JsonConverters::fromArray('StimulationResponse', $o['stimulationResponses']);
        if (isset($o['localCodePot'])) $this->localCodePot = JsonConverters::from('LocalCodePotInfo', $o['localCodePot']);
        if (isset($o['superWin'])) $this->superWin = JsonConverters::from('SuperWinInfo', $o['superWin']);
        if (isset($o['happyHour'])) $this->happyHour = JsonConverters::from('HappyHourInfo', $o['happyHour']);
        if (isset($o['reasoning'])) $this->reasoning = $o['reasoning'];
        if (isset($o['configuration'])) $this->configuration = JsonConverters::from('AccumulatorConfiguration', $o['configuration']);
        if (isset($o['syphonInfo'])) $this->syphonInfo = JsonConverters::from('SyphonInfo', $o['syphonInfo']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->initializationInfo)) $o['initializationInfo'] = JsonConverters::to('Initialization', $this->initializationInfo);
        if (isset($this->sequenceGenerationInfo)) $o['sequenceGenerationInfo'] = JsonConverters::to('SequenceGeneration', $this->sequenceGenerationInfo);
        if (isset($this->bestFitFinderInfo)) $o['bestFitFinderInfo'] = JsonConverters::to('BestFitFinder', $this->bestFitFinderInfo);
        if (isset($this->purgerInfo)) $o['purgerInfo'] = JsonConverters::to('Purger', $this->purgerInfo);
        if (isset($this->duration)) $o['duration'] = $this->duration;
        if (isset($this->stimulationResponses)) $o['stimulationResponses'] = JsonConverters::toArray('StimulationResponse', $this->stimulationResponses);
        if (isset($this->localCodePot)) $o['localCodePot'] = JsonConverters::to('LocalCodePotInfo', $this->localCodePot);
        if (isset($this->superWin)) $o['superWin'] = JsonConverters::to('SuperWinInfo', $this->superWin);
        if (isset($this->happyHour)) $o['happyHour'] = JsonConverters::to('HappyHourInfo', $this->happyHour);
        if (isset($this->reasoning)) $o['reasoning'] = $this->reasoning;
        if (isset($this->configuration)) $o['configuration'] = JsonConverters::to('AccumulatorConfiguration', $this->configuration);
        if (isset($this->syphonInfo)) $o['syphonInfo'] = JsonConverters::to('SyphonInfo', $this->syphonInfo);
        return empty($o) ? new class(){} : $o;
    }
}

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

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

/**
 * @template TKey
 * @template TVal
 * @template array of TKey
 * @template array1 of TVal
 */
class RecordDictionary2 extends array implements JsonSerializable
{
    public array $genericArgs = [];
    public static function create(array $genericArgs=[]): RecordDictionary2 {
        $to = new RecordDictionary2();
        $to->genericArgs = $genericArgs;
        return $to;
    }

    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        return empty($o) ? new class(){} : $o;
    }
}

PHP GetDrawDignostics 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 /qry/rounds/draw/diagnostics HTTP/1.1 
Host: s4w2.api.bettor.cc 
Accept: application/xml
Content-Type: application/xml
Content-Length: length

<GetDrawDignostics xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Six4Win.WebApi.ServiceModel">
  <Id>String</Id>
</GetDrawDignostics>
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<DrawDiagnostics xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Six4Win.ReadModel">
  <BestFitFinderInfo>
    <AwardedAmount>0</AwardedAmount>
    <Deviation>0</Deviation>
    <DeviationPct>0</DeviationPct>
    <FilteringPeriod>0</FilteringPeriod>
    <IsJackPot5Drawn>false</IsJackPot5Drawn>
    <MaxAmount>0</MaxAmount>
    <MinAmount>0</MinAmount>
    <SequenceResultType>String</SequenceResultType>
    <TargetAmount>0</TargetAmount>
    <WinCountOrder>None</WinCountOrder>
  </BestFitFinderInfo>
  <Configuration xmlns:d2p1="http://schemas.datacontract.org/2004/07/Six4Win">
    <d2p1:AntiSyphonProtectionOverride>false</d2p1:AntiSyphonProtectionOverride>
    <d2p1:DebugConfig>
      <d2p1:LogBettorSats>false</d2p1:LogBettorSats>
      <d2p1:LogLocationStats>false</d2p1:LogLocationStats>
    </d2p1:DebugConfig>
    <d2p1:DeviationCategorySpanInPct>0</d2p1:DeviationCategorySpanInPct>
    <d2p1:DeviationCategoryThresholdAmount>0</d2p1:DeviationCategoryThresholdAmount>
    <d2p1:FraudDetectionConfig>
      <d2p1:AntiSyphon>
        <d2p1:CombinationCountPerRoundThresholdPct>0</d2p1:CombinationCountPerRoundThresholdPct>
        <d2p1:ExcludedLocations xmlns:d5p1="http://schemas.datacontract.org/2004/07/Starnet.Common">
          <d5p1:Ref>
            <d5p1:Id>String</d5p1:Id>
            <d5p1:Val>String</d5p1:Val>
          </d5p1:Ref>
        </d2p1:ExcludedLocations>
        <d2p1:IncludeRoundPctAsBettorSyphonCriteria>false</d2p1:IncludeRoundPctAsBettorSyphonCriteria>
        <d2p1:IsActive>false</d2p1:IsActive>
      </d2p1:AntiSyphon>
    </d2p1:FraudDetectionConfig>
    <d2p1:HighRollerSettings>
      <d2p1:CategoryThresholds>
        <d2p1:HighRollerSettings.CategoryThreshold>
          <d2p1:Category>Pickerel</d2p1:Category>
          <d2p1:Threshold>0</d2p1:Threshold>
        </d2p1:HighRollerSettings.CategoryThreshold>
      </d2p1:CategoryThresholds>
      <d2p1:Pools>
        <d2p1:HighRollerSettings.PoolSettings>
          <d2p1:Caps>
            <d2p1:MaxAmountInPrevalentStakes>0</d2p1:MaxAmountInPrevalentStakes>
            <d2p1:MinusCoef>0</d2p1:MinusCoef>
            <d2p1:PlusCoef>0</d2p1:PlusCoef>
          </d2p1:Caps>
          <d2p1:ContributionToRoundPoolPct>0</d2p1:ContributionToRoundPoolPct>
          <d2p1:Id>0</d2p1:Id>
          <d2p1:IsActive>false</d2p1:IsActive>
          <d2p1:Name>String</d2p1:Name>
        </d2p1:HighRollerSettings.PoolSettings>
      </d2p1:Pools>
    </d2p1:HighRollerSettings>
    <d2p1:JackPot5ThresholdInterval>
      <d2p1:End>0</d2p1:End>
      <d2p1:Start>0</d2p1:Start>
    </d2p1:JackPot5ThresholdInterval>
    <d2p1:LocationOptimizationLevel>None</d2p1:LocationOptimizationLevel>
    <d2p1:LowWinCountAffinityInPct>0</d2p1:LowWinCountAffinityInPct>
    <d2p1:OverflowCoefficientPoolsToRound>false</d2p1:OverflowCoefficientPoolsToRound>
    <d2p1:Pools>
      <d2p1:AccumulatorConfiguration.Pool>
        <d2p1:Id>0</d2p1:Id>
        <d2p1:Name>String</d2p1:Name>
        <d2p1:RTP>0</d2p1:RTP>
        <d2p1:ReserveRTP>0</d2p1:ReserveRTP>
      </d2p1:AccumulatorConfiguration.Pool>
    </d2p1:Pools>
    <d2p1:PrevalentStake>0</d2p1:PrevalentStake>
    <d2p1:PurgeThresholdModifier>0</d2p1:PurgeThresholdModifier>
    <d2p1:RoundPoolCircuitBreakerThreshold>0</d2p1:RoundPoolCircuitBreakerThreshold>
    <d2p1:WinCountOrderAffinity>
      <d2p1:WinCountOrderProbability>
        <d2p1:Order>None</d2p1:Order>
        <d2p1:Probability>0</d2p1:Probability>
      </d2p1:WinCountOrderProbability>
    </d2p1:WinCountOrderAffinity>
  </Configuration>
  <Duration>0</Duration>
  <HappyHour>
    <IsHappyHour>false</IsHappyHour>
    <OddsModifier>0</OddsModifier>
    <RoundPoolBonusPct>0</RoundPoolBonusPct>
  </HappyHour>
  <Id>String</Id>
  <InitializationInfo>
    <BetsCollectionsCreationDuration>0</BetsCollectionsCreationDuration>
    <CombinationsOccuranceLookupInitializationDuration>0</CombinationsOccuranceLookupInitializationDuration>
    <DataLoadDuration>0</DataLoadDuration>
  </InitializationInfo>
  <LocalCodePot>
    <DurationInMs>0</DurationInMs>
  </LocalCodePot>
  <PurgerInfo>
    <PoolPurger>String</PoolPurger>
    <PrevalentStake>0</PrevalentStake>
    <QualifiedPools>
      <DrawDiagnostics.QualifiedPool>
        <AvailableAmount>0</AvailableAmount>
        <AwardedAmount>0</AwardedAmount>
        <Coefficient>0</Coefficient>
        <Id>0</Id>
        <Name>String</Name>
        <TargetBet>
          <BetId>String</BetId>
          <CombStake />
          <IsFound>false</IsFound>
          <SlipId>String</SlipId>
        </TargetBet>
      </DrawDiagnostics.QualifiedPool>
    </QualifiedPools>
  </PurgerInfo>
  <Reasoning>String</Reasoning>
  <SequenceGenerationInfo>
    <AvgSinglePassDuration>0</AvgSinglePassDuration>
    <Duration>0</Duration>
    <NrOfResultsProbed>0</NrOfResultsProbed>
    <NrOfThreads>0</NrOfThreads>
  </SequenceGenerationInfo>
  <StimulationResponses>
    <DrawDiagnostics.StimulationResponse>
      <AmountAwarded>0</AmountAwarded>
      <BetId>String</BetId>
      <FailureReason>String</FailureReason>
      <SlipId>String</SlipId>
      <Status>Failure</Status>
      <StimulationId>String</StimulationId>
    </DrawDiagnostics.StimulationResponse>
  </StimulationResponses>
  <SuperWin>
    <DurationInMs>0</DurationInMs>
  </SuperWin>
  <SyphonInfo xmlns:d2p1="http://schemas.datacontract.org/2004/07/Six4Win.Common">
    <d2p1:Bettors xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
      <d3p1:KeyValueOfstringSyphonFQuwRXs4>
        <d3p1:Key>String</d3p1:Key>
        <d3p1:Value>
          <d2p1:Id>String</d2p1:Id>
          <d2p1:Name>String</d2p1:Name>
          <d2p1:NrOfCombinations>0</d2p1:NrOfCombinations>
          <d2p1:Type>Location</d2p1:Type>
        </d3p1:Value>
      </d3p1:KeyValueOfstringSyphonFQuwRXs4>
    </d2p1:Bettors>
    <d2p1:Locations xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
      <d3p1:KeyValueOfstringSyphonFQuwRXs4>
        <d3p1:Key>String</d3p1:Key>
        <d3p1:Value>
          <d2p1:Id>String</d2p1:Id>
          <d2p1:Name>String</d2p1:Name>
          <d2p1:NrOfCombinations>0</d2p1:NrOfCombinations>
          <d2p1:Type>Location</d2p1:Type>
        </d3p1:Value>
      </d3p1:KeyValueOfstringSyphonFQuwRXs4>
    </d2p1:Locations>
  </SyphonInfo>
</DrawDiagnostics>