Power.Dev Optimization Services

<back to all web services

CommonOptimizerRequest

The following routes are available for this service:
POST/optimizer/ftm
POST/optimizer/common
<?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 CommonOptimizerPortalRequestBase implements JsonSerializable
{
    public function __construct(
        /** @var string */
        public string $projectId='',
        /** @var bool|null */
        public ?bool $isBatchSimulation=null,
        /** @var bool|null */
        public ?bool $force=null,
        /** @var bool|null */
        public ?bool $disableEBSSpot=null,
        /** @var bool|null */
        public ?bool $isServerless=null,
        /** @var string */
        public string $apiActionId='',
        /** @var int */
        public int $nodeId=0,
        /** @var int */
        public int $parallelProject=0,
        /** @var int */
        public int $parallelYears=0,
        /** @var int */
        public int $ensureExlusive=0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['projectId'])) $this->projectId = $o['projectId'];
        if (isset($o['isBatchSimulation'])) $this->isBatchSimulation = $o['isBatchSimulation'];
        if (isset($o['force'])) $this->force = $o['force'];
        if (isset($o['disableEBSSpot'])) $this->disableEBSSpot = $o['disableEBSSpot'];
        if (isset($o['isServerless'])) $this->isServerless = $o['isServerless'];
        if (isset($o['apiActionId'])) $this->apiActionId = $o['apiActionId'];
        if (isset($o['nodeId'])) $this->nodeId = $o['nodeId'];
        if (isset($o['parallelProject'])) $this->parallelProject = $o['parallelProject'];
        if (isset($o['parallelYears'])) $this->parallelYears = $o['parallelYears'];
        if (isset($o['ensureExlusive'])) $this->ensureExlusive = $o['ensureExlusive'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->projectId)) $o['projectId'] = $this->projectId;
        if (isset($this->isBatchSimulation)) $o['isBatchSimulation'] = $this->isBatchSimulation;
        if (isset($this->force)) $o['force'] = $this->force;
        if (isset($this->disableEBSSpot)) $o['disableEBSSpot'] = $this->disableEBSSpot;
        if (isset($this->isServerless)) $o['isServerless'] = $this->isServerless;
        if (isset($this->apiActionId)) $o['apiActionId'] = $this->apiActionId;
        if (isset($this->nodeId)) $o['nodeId'] = $this->nodeId;
        if (isset($this->parallelProject)) $o['parallelProject'] = $this->parallelProject;
        if (isset($this->parallelYears)) $o['parallelYears'] = $this->parallelYears;
        if (isset($this->ensureExlusive)) $o['ensureExlusive'] = $this->ensureExlusive;
        return empty($o) ? new class(){} : $o;
    }
}

class CommonOptimizerRequest extends CommonOptimizerPortalRequestBase implements JsonSerializable
{
    /**
     * @param string $projectId
     * @param bool|null $isBatchSimulation
     * @param bool|null $force
     * @param bool|null $disableEBSSpot
     * @param bool|null $isServerless
     * @param string $apiActionId
     * @param int $nodeId
     * @param int $parallelProject
     * @param int $parallelYears
     * @param int $ensureExlusive
     */
    public function __construct(
        string $projectId='',
        ?bool $isBatchSimulation=null,
        ?bool $force=null,
        ?bool $disableEBSSpot=null,
        ?bool $isServerless=null,
        string $apiActionId='',
        int $nodeId=0,
        int $parallelProject=0,
        int $parallelYears=0,
        int $ensureExlusive=0
    ) {
        parent::__construct($projectId,$isBatchSimulation,$force,$disableEBSSpot,$isServerless,$apiActionId,$nodeId,$parallelProject,$parallelYears,$ensureExlusive);
    }

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

enum ApiResponseStatus : int
{
    case Undefined = 0;
    case Success = 1;
    case Pending = 10;
    case Failed = 100;
}

enum BatterySimulationType : int
{
    case Undefined = 0;
    case SingleRun = 1;
    case BatchSimulation = 2;
    case BatchSub = 21;
    case Siting = 100;
}

enum BatteryProjectGroup : string
{
    case Undefined = 'Undefined';
    case StandAlone = 'StandAlone';
    case FTM = 'FTM';
    case BTM = 'BTM';
}

enum BatteryProjectAction : string
{
    case Undefined = 'Undefined';
    case Arbitrage = 'Arbitrage';
    case PeakShaving = 'PeakShaving';
    case Smooting = 'Smooting';
    case Firming = 'Firming';
}

enum DataProvider : int
{
    case Undefined = 0;
    case SPP = 1;
    case ERCOT = 2;
    case MISO = 3;
    case CAISO = 4;
    case PJM = 5;
    case ISONE = 6;
    case NYISO = 7;
    case NW = 8;
    case SW = 9;
    case SE = 10;
    case AESO = 11;
    case IESO = 12;
    case CENACE = 20;
    case NONISO = 99;
    case EIA = 100;
    case PNM = 150;
    case NREL = 200;
    case NOAA = 210;
    case ENTSOE = 1000;
    case EPIAS = 1010;
    case SELF = 10000;
}

enum BatteryDataSoruce : string
{
    case Undefined = 'Undefined';
    case Merchant = 'Merchant';
    case Future = 'Future';
    case TOD = 'TOD';
}

enum PriceMarketType : int
{
    case Undefined = 0;
    case Realtime = 1;
    case DayAhead = 10;
    case DART = 101;
}

enum TimeGranularity : int
{
    case Undefined = 0;
    case hourly = 1;
    case daily = 2;
    case weekly = 3;
    case monthy = 4;
    case yearly = 5;
    case fivemin = 10;
    case tenmin = 11;
    case fifteenmin = 12;
    case halfhour = 13;
    case quarterly = 14;
    case twohours = 21;
    case threehours = 22;
    case fourhours = 24;
    case sixhours = 26;
    case eighthours = 28;
    case twelvehours = 32;
    case irregular = 100;
}

enum BooleanValue : string
{
    case Undefined = 'Undefined';
    case Yes = 'Yes';
    case No = 'No';
    case Custom = 'Custom';
}

enum CapacityMethod : string
{
    case Undefined = 'Undefined';
    case Annual = 'Annual';
    case Tod = 'Tod';
    case Schedule = 'Schedule';
}

enum BatteryProductionDataSource : string
{
    case Undefined = 'Undefined';
    case SetClosest = 'SetClosest';
    case UploadedFile = 'UploadedFile';
}

enum PowerPlantType : string
{
    case Undefined = 'Undefined';
    case Solar = 'Solar';
    case Wind = 'Wind';
    case Hybrid = 'Hybrid';
}

enum RevenueStackingMode : string
{
    case SolveWithoutAncillary = 'SolveWithoutAncillary';
    case SolveWithAncillary = 'SolveWithAncillary';
}

class BatteryProjectForOptimizer implements JsonSerializable
{
    public function __construct(
        /** @var string */
        public string $projectId='',
        /** @var string|null */
        public ?string $version=null,
        /** @var string */
        public string $baseId='',
        /** @var int */
        public int $altId=0,
        /** @var BatterySimulationType|null */
        public ?BatterySimulationType $simulationType=null,
        /** @var BatteryProjectGroup|null */
        public ?BatteryProjectGroup $projectGroup=null,
        /** @var BatteryProjectAction|null */
        public ?BatteryProjectAction $projectAction=null,
        /** @var DataProvider|null */
        public ?DataProvider $iso=null,
        /** @var string|null */
        public ?string $name=null,
        /** @var int */
        public int $baseNodeId=0,
        /** @var int */
        public int $orgNodeId=0,
        /** @var int */
        public int $baseZoneId=0,
        /** @var BatteryDataSoruce|null */
        public ?BatteryDataSoruce $dataSource=null,
        /** @var PriceMarketType|null */
        public ?PriceMarketType $baseMarket=null,
        /** @var TimeGranularity|null */
        public ?TimeGranularity $priceGranularity=null,
        /** @var DateTime */
        public DateTime $startDate=new DateTime(),
        /** @var DateTime */
        public DateTime $endDate=new DateTime(),
        /** @var float */
        public float $batteryCapacity=0.0,
        /** @var float */
        public float $interconnectionLimit=0.0,
        /** @var float */
        public float $namepaletCapacity=0.0,
        // @Ignore()
        /** @var float */
        public float $chargeDischargeLimit=0.0,

        // @Ignore()
        /** @var float */
        public float $baseCapacityRate=0.0,

        // @Ignore()
        /** @var float */
        public float $capacityRate=0.0,

        /** @var float */
        public float $chargeEfficiency=0.0,
        /** @var float */
        public float $disChargeEfficiency=0.0,
        /** @var float */
        public float $paraciticLossesOperation=0.0,
        /** @var float */
        public float $paraciticLossesResting=0.0,
        /** @var float */
        public float $hvacLosses=0.0,
        /** @var float */
        public float $acCablingLosses=0.0,
        /** @var float */
        public float $transformatorLosses=0.0,
        /** @var float */
        public float $thermalLosses=0.0,
        /** @var float */
        public float $otherLosses=0.0,
        /** @var BooleanValue|null */
        public ?BooleanValue $useEnergy=null,
        /** @var BooleanValue|null */
        public ?BooleanValue $useCapacity=null,
        /** @var CapacityMethod|null */
        public ?CapacityMethod $capacityBasis=null,
        /** @var float */
        public float $capacityPayment=0.0,
        /** @var float */
        public float $netCapacityFactor=0.0,
        /** @var BooleanValue|null */
        public ?BooleanValue $useAncillary=null,
        /** @var BatteryProductionDataSource|null */
        public ?BatteryProductionDataSource $productionDataSource=null,
        /** @var PowerPlantType|null */
        public ?PowerPlantType $powerPlantType=null,
        /** @var float */
        public float $solarAcCapacity=0.0,
        /** @var float */
        public float $solarDcCapacity=0.0,
        /** @var float */
        public float $windAcCapacity=0.0,
        // @Ignore()
        /** @var float */
        public float $solarCapacityRate=0.0,

        // @Ignore()
        /** @var float */
        public float $windCapacityRate=0.0,

        /** @var int */
        public int $status=0,
        /** @var int */
        public int $simulationStatus=0,
        /** @var DateTime */
        public DateTime $lastSimulationDate=new DateTime(),
        /** @var DateTime */
        public DateTime $dataStartDate=new DateTime(),
        /** @var DateTime */
        public DateTime $dataEndDate=new DateTime(),
        /** @var int */
        public int $solarId=0,
        /** @var int */
        public int $windId=0,
        /** @var int */
        public int $lmpFileId=0,
        /** @var int */
        public int $productionFileId=0,
        /** @var int */
        public int $loadFileId=0,
        /** @var int */
        public int $capacityFileId=0,
        /** @var int */
        public int $nodeAltId=0,
        /** @var int */
        public int $nodeRefId=0,
        /** @var float */
        public float $useRegup=0.0,
        /** @var float */
        public float $useRegdown=0.0,
        /** @var float */
        public float $useSpinning=0.0,
        /** @var float */
        public float $useNonSpinning=0.0,
        /** @var float */
        public float $solarDegredation=0.0,
        /** @var float */
        public float $batteryDegredation=0.0,
        /** @var float */
        public float $augmentation=0.0,
        /** @var float */
        public float $augmentationFrequency=0.0,
        /** @var float */
        public float $energyIncrement=0.0,
        /** @var float */
        public float $ancillaryIncrement=0.0,
        /** @var int */
        public int $enableGridArbitrage=0,
        /** @var int */
        public int $incrementReferanceYear=0,
        /** @var int */
        public int $representativeYear=0,
        /** @var int */
        public int $useFutureData=0,
        /** @var float */
        public float $maxDailyCycle=0.0,
        /** @var float */
        public float $minDailyProfitPerMw=0.0,
        /** @var int */
        public int $ancillaryFileId=0,
        /** @var float */
        public float $maxChargingPriceCap=0.0,
        /** @var float */
        public float $maxDischargingPriceCap=0.0,
        /** @var float */
        public float $maxAncillaryPriceCap=0.0,
        /** @var RevenueStackingMode|null */
        public ?RevenueStackingMode $revenueStackingMode=null,
        /** @var int */
        public int $optimizationQuality=0,
        /** @var bool|null */
        public ?bool $useInternalSolver=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['projectId'])) $this->projectId = $o['projectId'];
        if (isset($o['version'])) $this->version = $o['version'];
        if (isset($o['baseId'])) $this->baseId = $o['baseId'];
        if (isset($o['altId'])) $this->altId = $o['altId'];
        if (isset($o['simulationType'])) $this->simulationType = JsonConverters::from('BatterySimulationType', $o['simulationType']);
        if (isset($o['projectGroup'])) $this->projectGroup = JsonConverters::from('BatteryProjectGroup', $o['projectGroup']);
        if (isset($o['projectAction'])) $this->projectAction = JsonConverters::from('BatteryProjectAction', $o['projectAction']);
        if (isset($o['iso'])) $this->iso = JsonConverters::from('DataProvider', $o['iso']);
        if (isset($o['name'])) $this->name = $o['name'];
        if (isset($o['baseNodeId'])) $this->baseNodeId = $o['baseNodeId'];
        if (isset($o['orgNodeId'])) $this->orgNodeId = $o['orgNodeId'];
        if (isset($o['baseZoneId'])) $this->baseZoneId = $o['baseZoneId'];
        if (isset($o['dataSource'])) $this->dataSource = JsonConverters::from('BatteryDataSoruce', $o['dataSource']);
        if (isset($o['baseMarket'])) $this->baseMarket = JsonConverters::from('PriceMarketType', $o['baseMarket']);
        if (isset($o['priceGranularity'])) $this->priceGranularity = JsonConverters::from('TimeGranularity', $o['priceGranularity']);
        if (isset($o['startDate'])) $this->startDate = JsonConverters::from('DateTime', $o['startDate']);
        if (isset($o['endDate'])) $this->endDate = JsonConverters::from('DateTime', $o['endDate']);
        if (isset($o['batteryCapacity'])) $this->batteryCapacity = $o['batteryCapacity'];
        if (isset($o['interconnectionLimit'])) $this->interconnectionLimit = $o['interconnectionLimit'];
        if (isset($o['namepaletCapacity'])) $this->namepaletCapacity = $o['namepaletCapacity'];
        if (isset($o['chargeDischargeLimit'])) $this->chargeDischargeLimit = $o['chargeDischargeLimit'];
        if (isset($o['baseCapacityRate'])) $this->baseCapacityRate = $o['baseCapacityRate'];
        if (isset($o['capacityRate'])) $this->capacityRate = $o['capacityRate'];
        if (isset($o['chargeEfficiency'])) $this->chargeEfficiency = $o['chargeEfficiency'];
        if (isset($o['disChargeEfficiency'])) $this->disChargeEfficiency = $o['disChargeEfficiency'];
        if (isset($o['paraciticLossesOperation'])) $this->paraciticLossesOperation = $o['paraciticLossesOperation'];
        if (isset($o['paraciticLossesResting'])) $this->paraciticLossesResting = $o['paraciticLossesResting'];
        if (isset($o['hvacLosses'])) $this->hvacLosses = $o['hvacLosses'];
        if (isset($o['acCablingLosses'])) $this->acCablingLosses = $o['acCablingLosses'];
        if (isset($o['transformatorLosses'])) $this->transformatorLosses = $o['transformatorLosses'];
        if (isset($o['thermalLosses'])) $this->thermalLosses = $o['thermalLosses'];
        if (isset($o['otherLosses'])) $this->otherLosses = $o['otherLosses'];
        if (isset($o['useEnergy'])) $this->useEnergy = JsonConverters::from('BooleanValue', $o['useEnergy']);
        if (isset($o['useCapacity'])) $this->useCapacity = JsonConverters::from('BooleanValue', $o['useCapacity']);
        if (isset($o['capacityBasis'])) $this->capacityBasis = JsonConverters::from('CapacityMethod', $o['capacityBasis']);
        if (isset($o['capacityPayment'])) $this->capacityPayment = $o['capacityPayment'];
        if (isset($o['netCapacityFactor'])) $this->netCapacityFactor = $o['netCapacityFactor'];
        if (isset($o['useAncillary'])) $this->useAncillary = JsonConverters::from('BooleanValue', $o['useAncillary']);
        if (isset($o['productionDataSource'])) $this->productionDataSource = JsonConverters::from('BatteryProductionDataSource', $o['productionDataSource']);
        if (isset($o['powerPlantType'])) $this->powerPlantType = JsonConverters::from('PowerPlantType', $o['powerPlantType']);
        if (isset($o['solarAcCapacity'])) $this->solarAcCapacity = $o['solarAcCapacity'];
        if (isset($o['solarDcCapacity'])) $this->solarDcCapacity = $o['solarDcCapacity'];
        if (isset($o['windAcCapacity'])) $this->windAcCapacity = $o['windAcCapacity'];
        if (isset($o['solarCapacityRate'])) $this->solarCapacityRate = $o['solarCapacityRate'];
        if (isset($o['windCapacityRate'])) $this->windCapacityRate = $o['windCapacityRate'];
        if (isset($o['status'])) $this->status = $o['status'];
        if (isset($o['simulationStatus'])) $this->simulationStatus = $o['simulationStatus'];
        if (isset($o['lastSimulationDate'])) $this->lastSimulationDate = JsonConverters::from('DateTime', $o['lastSimulationDate']);
        if (isset($o['dataStartDate'])) $this->dataStartDate = JsonConverters::from('DateTime', $o['dataStartDate']);
        if (isset($o['dataEndDate'])) $this->dataEndDate = JsonConverters::from('DateTime', $o['dataEndDate']);
        if (isset($o['solarId'])) $this->solarId = $o['solarId'];
        if (isset($o['windId'])) $this->windId = $o['windId'];
        if (isset($o['lmpFileId'])) $this->lmpFileId = $o['lmpFileId'];
        if (isset($o['productionFileId'])) $this->productionFileId = $o['productionFileId'];
        if (isset($o['loadFileId'])) $this->loadFileId = $o['loadFileId'];
        if (isset($o['capacityFileId'])) $this->capacityFileId = $o['capacityFileId'];
        if (isset($o['nodeAltId'])) $this->nodeAltId = $o['nodeAltId'];
        if (isset($o['nodeRefId'])) $this->nodeRefId = $o['nodeRefId'];
        if (isset($o['useRegup'])) $this->useRegup = $o['useRegup'];
        if (isset($o['useRegdown'])) $this->useRegdown = $o['useRegdown'];
        if (isset($o['useSpinning'])) $this->useSpinning = $o['useSpinning'];
        if (isset($o['useNonSpinning'])) $this->useNonSpinning = $o['useNonSpinning'];
        if (isset($o['solarDegredation'])) $this->solarDegredation = $o['solarDegredation'];
        if (isset($o['batteryDegredation'])) $this->batteryDegredation = $o['batteryDegredation'];
        if (isset($o['augmentation'])) $this->augmentation = $o['augmentation'];
        if (isset($o['augmentationFrequency'])) $this->augmentationFrequency = $o['augmentationFrequency'];
        if (isset($o['energyIncrement'])) $this->energyIncrement = $o['energyIncrement'];
        if (isset($o['ancillaryIncrement'])) $this->ancillaryIncrement = $o['ancillaryIncrement'];
        if (isset($o['enableGridArbitrage'])) $this->enableGridArbitrage = $o['enableGridArbitrage'];
        if (isset($o['incrementReferanceYear'])) $this->incrementReferanceYear = $o['incrementReferanceYear'];
        if (isset($o['representativeYear'])) $this->representativeYear = $o['representativeYear'];
        if (isset($o['useFutureData'])) $this->useFutureData = $o['useFutureData'];
        if (isset($o['maxDailyCycle'])) $this->maxDailyCycle = $o['maxDailyCycle'];
        if (isset($o['minDailyProfitPerMw'])) $this->minDailyProfitPerMw = $o['minDailyProfitPerMw'];
        if (isset($o['ancillaryFileId'])) $this->ancillaryFileId = $o['ancillaryFileId'];
        if (isset($o['maxChargingPriceCap'])) $this->maxChargingPriceCap = $o['maxChargingPriceCap'];
        if (isset($o['maxDischargingPriceCap'])) $this->maxDischargingPriceCap = $o['maxDischargingPriceCap'];
        if (isset($o['maxAncillaryPriceCap'])) $this->maxAncillaryPriceCap = $o['maxAncillaryPriceCap'];
        if (isset($o['revenueStackingMode'])) $this->revenueStackingMode = JsonConverters::from('RevenueStackingMode', $o['revenueStackingMode']);
        if (isset($o['optimizationQuality'])) $this->optimizationQuality = $o['optimizationQuality'];
        if (isset($o['useInternalSolver'])) $this->useInternalSolver = $o['useInternalSolver'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->projectId)) $o['projectId'] = $this->projectId;
        if (isset($this->version)) $o['version'] = $this->version;
        if (isset($this->baseId)) $o['baseId'] = $this->baseId;
        if (isset($this->altId)) $o['altId'] = $this->altId;
        if (isset($this->simulationType)) $o['simulationType'] = JsonConverters::to('BatterySimulationType', $this->simulationType);
        if (isset($this->projectGroup)) $o['projectGroup'] = JsonConverters::to('BatteryProjectGroup', $this->projectGroup);
        if (isset($this->projectAction)) $o['projectAction'] = JsonConverters::to('BatteryProjectAction', $this->projectAction);
        if (isset($this->iso)) $o['iso'] = JsonConverters::to('DataProvider', $this->iso);
        if (isset($this->name)) $o['name'] = $this->name;
        if (isset($this->baseNodeId)) $o['baseNodeId'] = $this->baseNodeId;
        if (isset($this->orgNodeId)) $o['orgNodeId'] = $this->orgNodeId;
        if (isset($this->baseZoneId)) $o['baseZoneId'] = $this->baseZoneId;
        if (isset($this->dataSource)) $o['dataSource'] = JsonConverters::to('BatteryDataSoruce', $this->dataSource);
        if (isset($this->baseMarket)) $o['baseMarket'] = JsonConverters::to('PriceMarketType', $this->baseMarket);
        if (isset($this->priceGranularity)) $o['priceGranularity'] = JsonConverters::to('TimeGranularity', $this->priceGranularity);
        if (isset($this->startDate)) $o['startDate'] = JsonConverters::to('DateTime', $this->startDate);
        if (isset($this->endDate)) $o['endDate'] = JsonConverters::to('DateTime', $this->endDate);
        if (isset($this->batteryCapacity)) $o['batteryCapacity'] = $this->batteryCapacity;
        if (isset($this->interconnectionLimit)) $o['interconnectionLimit'] = $this->interconnectionLimit;
        if (isset($this->namepaletCapacity)) $o['namepaletCapacity'] = $this->namepaletCapacity;
        if (isset($this->chargeDischargeLimit)) $o['chargeDischargeLimit'] = $this->chargeDischargeLimit;
        if (isset($this->baseCapacityRate)) $o['baseCapacityRate'] = $this->baseCapacityRate;
        if (isset($this->capacityRate)) $o['capacityRate'] = $this->capacityRate;
        if (isset($this->chargeEfficiency)) $o['chargeEfficiency'] = $this->chargeEfficiency;
        if (isset($this->disChargeEfficiency)) $o['disChargeEfficiency'] = $this->disChargeEfficiency;
        if (isset($this->paraciticLossesOperation)) $o['paraciticLossesOperation'] = $this->paraciticLossesOperation;
        if (isset($this->paraciticLossesResting)) $o['paraciticLossesResting'] = $this->paraciticLossesResting;
        if (isset($this->hvacLosses)) $o['hvacLosses'] = $this->hvacLosses;
        if (isset($this->acCablingLosses)) $o['acCablingLosses'] = $this->acCablingLosses;
        if (isset($this->transformatorLosses)) $o['transformatorLosses'] = $this->transformatorLosses;
        if (isset($this->thermalLosses)) $o['thermalLosses'] = $this->thermalLosses;
        if (isset($this->otherLosses)) $o['otherLosses'] = $this->otherLosses;
        if (isset($this->useEnergy)) $o['useEnergy'] = JsonConverters::to('BooleanValue', $this->useEnergy);
        if (isset($this->useCapacity)) $o['useCapacity'] = JsonConverters::to('BooleanValue', $this->useCapacity);
        if (isset($this->capacityBasis)) $o['capacityBasis'] = JsonConverters::to('CapacityMethod', $this->capacityBasis);
        if (isset($this->capacityPayment)) $o['capacityPayment'] = $this->capacityPayment;
        if (isset($this->netCapacityFactor)) $o['netCapacityFactor'] = $this->netCapacityFactor;
        if (isset($this->useAncillary)) $o['useAncillary'] = JsonConverters::to('BooleanValue', $this->useAncillary);
        if (isset($this->productionDataSource)) $o['productionDataSource'] = JsonConverters::to('BatteryProductionDataSource', $this->productionDataSource);
        if (isset($this->powerPlantType)) $o['powerPlantType'] = JsonConverters::to('PowerPlantType', $this->powerPlantType);
        if (isset($this->solarAcCapacity)) $o['solarAcCapacity'] = $this->solarAcCapacity;
        if (isset($this->solarDcCapacity)) $o['solarDcCapacity'] = $this->solarDcCapacity;
        if (isset($this->windAcCapacity)) $o['windAcCapacity'] = $this->windAcCapacity;
        if (isset($this->solarCapacityRate)) $o['solarCapacityRate'] = $this->solarCapacityRate;
        if (isset($this->windCapacityRate)) $o['windCapacityRate'] = $this->windCapacityRate;
        if (isset($this->status)) $o['status'] = $this->status;
        if (isset($this->simulationStatus)) $o['simulationStatus'] = $this->simulationStatus;
        if (isset($this->lastSimulationDate)) $o['lastSimulationDate'] = JsonConverters::to('DateTime', $this->lastSimulationDate);
        if (isset($this->dataStartDate)) $o['dataStartDate'] = JsonConverters::to('DateTime', $this->dataStartDate);
        if (isset($this->dataEndDate)) $o['dataEndDate'] = JsonConverters::to('DateTime', $this->dataEndDate);
        if (isset($this->solarId)) $o['solarId'] = $this->solarId;
        if (isset($this->windId)) $o['windId'] = $this->windId;
        if (isset($this->lmpFileId)) $o['lmpFileId'] = $this->lmpFileId;
        if (isset($this->productionFileId)) $o['productionFileId'] = $this->productionFileId;
        if (isset($this->loadFileId)) $o['loadFileId'] = $this->loadFileId;
        if (isset($this->capacityFileId)) $o['capacityFileId'] = $this->capacityFileId;
        if (isset($this->nodeAltId)) $o['nodeAltId'] = $this->nodeAltId;
        if (isset($this->nodeRefId)) $o['nodeRefId'] = $this->nodeRefId;
        if (isset($this->useRegup)) $o['useRegup'] = $this->useRegup;
        if (isset($this->useRegdown)) $o['useRegdown'] = $this->useRegdown;
        if (isset($this->useSpinning)) $o['useSpinning'] = $this->useSpinning;
        if (isset($this->useNonSpinning)) $o['useNonSpinning'] = $this->useNonSpinning;
        if (isset($this->solarDegredation)) $o['solarDegredation'] = $this->solarDegredation;
        if (isset($this->batteryDegredation)) $o['batteryDegredation'] = $this->batteryDegredation;
        if (isset($this->augmentation)) $o['augmentation'] = $this->augmentation;
        if (isset($this->augmentationFrequency)) $o['augmentationFrequency'] = $this->augmentationFrequency;
        if (isset($this->energyIncrement)) $o['energyIncrement'] = $this->energyIncrement;
        if (isset($this->ancillaryIncrement)) $o['ancillaryIncrement'] = $this->ancillaryIncrement;
        if (isset($this->enableGridArbitrage)) $o['enableGridArbitrage'] = $this->enableGridArbitrage;
        if (isset($this->incrementReferanceYear)) $o['incrementReferanceYear'] = $this->incrementReferanceYear;
        if (isset($this->representativeYear)) $o['representativeYear'] = $this->representativeYear;
        if (isset($this->useFutureData)) $o['useFutureData'] = $this->useFutureData;
        if (isset($this->maxDailyCycle)) $o['maxDailyCycle'] = $this->maxDailyCycle;
        if (isset($this->minDailyProfitPerMw)) $o['minDailyProfitPerMw'] = $this->minDailyProfitPerMw;
        if (isset($this->ancillaryFileId)) $o['ancillaryFileId'] = $this->ancillaryFileId;
        if (isset($this->maxChargingPriceCap)) $o['maxChargingPriceCap'] = $this->maxChargingPriceCap;
        if (isset($this->maxDischargingPriceCap)) $o['maxDischargingPriceCap'] = $this->maxDischargingPriceCap;
        if (isset($this->maxAncillaryPriceCap)) $o['maxAncillaryPriceCap'] = $this->maxAncillaryPriceCap;
        if (isset($this->revenueStackingMode)) $o['revenueStackingMode'] = JsonConverters::to('RevenueStackingMode', $this->revenueStackingMode);
        if (isset($this->optimizationQuality)) $o['optimizationQuality'] = $this->optimizationQuality;
        if (isset($this->useInternalSolver)) $o['useInternalSolver'] = $this->useInternalSolver;
        return empty($o) ? new class(){} : $o;
    }
}

class CommonOptimizerResponse implements JsonSerializable
{
    public function __construct(
        /** @var ApiResponseStatus|null */
        public ?ApiResponseStatus $status=null,
        /** @var string|null */
        public ?string $message=null,
        /** @var string */
        public string $apiActionId='',
        /** @var string|null */
        public ?string $detail=null,
        /** @var array<BatteryProjectForOptimizer>|null */
        public ?array $items=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['status'])) $this->status = JsonConverters::from('ApiResponseStatus', $o['status']);
        if (isset($o['message'])) $this->message = $o['message'];
        if (isset($o['apiActionId'])) $this->apiActionId = $o['apiActionId'];
        if (isset($o['detail'])) $this->detail = $o['detail'];
        if (isset($o['items'])) $this->items = JsonConverters::fromArray('BatteryProjectForOptimizer', $o['items']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->status)) $o['status'] = JsonConverters::to('ApiResponseStatus', $this->status);
        if (isset($this->message)) $o['message'] = $this->message;
        if (isset($this->apiActionId)) $o['apiActionId'] = $this->apiActionId;
        if (isset($this->detail)) $o['detail'] = $this->detail;
        if (isset($this->items)) $o['items'] = JsonConverters::toArray('BatteryProjectForOptimizer', $this->items);
        return empty($o) ? new class(){} : $o;
    }
}

PHP CommonOptimizerRequest 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 /optimizer/ftm HTTP/1.1 
Host: dev-optimization.power.dev 
Accept: application/xml
Content-Type: application/xml
Content-Length: length

<CommonOptimizerRequest xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.ServiceModel">
  <ApiActionId xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">00000000-0000-0000-0000-000000000000</ApiActionId>
  <DisableEBSSpot xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">false</DisableEBSSpot>
  <EnsureExlusive xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">0</EnsureExlusive>
  <Force xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">false</Force>
  <IsBatchSimulation xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">false</IsBatchSimulation>
  <IsServerless xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">false</IsServerless>
  <NodeId xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">0</NodeId>
  <ParallelProject xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">0</ParallelProject>
  <ParallelYears xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">0</ParallelYears>
  <ProjectId xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">00000000-0000-0000-0000-000000000000</ProjectId>
</CommonOptimizerRequest>
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<CommonOptimizerResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">
  <ApiActionId>00000000-0000-0000-0000-000000000000</ApiActionId>
  <Detail>String</Detail>
  <Items i:nil="true" />
  <Message>String</Message>
  <Status>Undefined</Status>
</CommonOptimizerResponse>