package openplatform import ( "encoding/json" "time" ) const ( StatusNormal = "NORMAL" StatusNoData = "NO_DATA" StatusDataAnomaly = "DATA_ANOMALY" ) type QueryRequest struct { PlateNumbers []string `json:"plateNumbers"` Date string `json:"date"` ProtocolPriority ProtocolPriority `json:"protocolPriority,omitempty"` } type MileageRangeRequest struct { StartDate string `json:"startDate"` EndDate string `json:"endDate"` PlateNumbers []string `json:"plateNumbers"` ProtocolPriority ProtocolPriority `json:"protocolPriority,omitempty"` Cursor string `json:"cursor"` PageSize int `json:"pageSize"` } type ProtocolPriority struct { Values []string Present bool } func (p *ProtocolPriority) UnmarshalJSON(data []byte) error { p.Present = true if string(data) == "null" { p.Values = []string{} return nil } var values []string if err := json.Unmarshal(data, &values); err != nil { return err } p.Values = values return nil } type HydrogenResult struct { PlateNumber string `json:"plateNumber"` Date string `json:"date"` HydrogenConsumptionKg *float64 `json:"hydrogenConsumptionKg"` CalculationPhase string `json:"calculationPhase,omitempty"` AlgorithmVersion string `json:"algorithmVersion,omitempty"` Status string `json:"status"` } type MileageResult struct { VIN string `json:"vin"` PlateNumber string `json:"plateNumber"` Date string `json:"date"` DailyMileageKm *float64 `json:"dailyMileageKm"` TotalMileageKm *float64 `json:"totalMileageKm"` DataTime *string `json:"dataTime"` UpdatedAt *string `json:"updatedAt"` SourceProtocol *string `json:"sourceProtocol"` DataQuality *string `json:"dataQuality,omitempty"` Status string `json:"status"` } type MileageRangeResult struct { VIN string `json:"vin"` PlateNumber string `json:"plateNumber"` Date string `json:"date"` DailyMileageKm *float64 `json:"dailyMileageKm"` TotalMileageKm *float64 `json:"totalMileageKm"` DataTime *string `json:"dataTime"` UpdatedAt *string `json:"updatedAt"` SourceProtocol *string `json:"sourceProtocol"` DataQuality *string `json:"dataQuality,omitempty"` Status string `json:"status"` } type TotalMileageQueryRequest struct { VIN string `json:"vin"` Time string `json:"time"` Protocol string `json:"protocol,omitempty"` } type TotalMileageResult struct { VIN string `json:"vin"` QueryTime string `json:"queryTime"` TotalMileageKm *float64 `json:"totalMileageKm"` Protocol string `json:"protocol,omitempty"` ProtocolInput string `json:"protocolInput,omitempty"` MileageMeaning string `json:"mileageMeaning,omitempty"` RecordTime string `json:"recordTime,omitempty"` TimeDifferenceSeconds *int64 `json:"timeDifferenceSeconds,omitempty"` SelectionPolicy string `json:"selectionPolicy"` Status string `json:"status"` } type TotalMileagePoint struct { VIN string Protocol string ObservedAt time.Time TotalMileageKm float64 } // StationaryVehicleQueryRequest verifies whether an authorized vehicle stayed // at a refuelling-site coordinate during a supplied time window. Coordinates // may be supplied in WGS84 or GCJ02 (Amap) longitude/latitude. type StationaryVehicleQueryRequest struct { StartTime string `json:"startTime"` EndTime string `json:"endTime"` Longitude float64 `json:"longitude"` Latitude float64 `json:"latitude"` CoordinateSystem string `json:"coordinateSystem,omitempty"` RadiusMeters *float64 `json:"radiusMeters,omitempty"` PlateNumbers []string `json:"plateNumbers,omitempty"` } type StationaryVehicleResult struct { VIN string `json:"vin"` PlateNumber string `json:"plateNumber"` StayStartTime string `json:"stayStartTime"` StayEndTime string `json:"stayEndTime"` StayDurationSeconds int64 `json:"stayDurationSeconds"` StayDurationMinutes float64 `json:"stayDurationMinutes"` MatchScore float64 `json:"matchScore"` AverageDistanceM float64 `json:"averageDistanceMeters"` MaxDistanceM float64 `json:"maxDistanceMeters"` AverageSpeedKmh float64 `json:"averageSpeedKmh"` MaxSpeedKmh float64 `json:"maxSpeedKmh"` MatchedSamples int `json:"matchedSamples"` SourceProtocols []string `json:"sourceProtocols"` } type StationaryLocationPoint struct { VIN string Protocol string ObservedAt time.Time Longitude float64 Latitude float64 SpeedKmh float64 } type RealtimeVehicleRequest struct { PlateNumbers []string `json:"plateNumbers,omitempty"` } type RealtimeVehiclePoint struct { VIN string Protocol string Longitude float64 Latitude float64 SpeedKmh float64 SOCPercent *float64 TotalMileageKm float64 ObservedAt time.Time Online bool ActiveToday bool } type RealtimeVehicleResult struct { VIN string `json:"vin"` PlateNumber string `json:"plateNumber"` // Protocol is the single, canonical source protocol for this realtime record. // It is normalized to GB32960, MQTT, or JT808. Protocol string `json:"protocol,omitempty"` Longitude *float64 `json:"longitude"` Latitude *float64 `json:"latitude"` SpeedKmh *float64 `json:"speedKmh"` SOCPercent *float64 `json:"socPercent,omitempty"` TotalMileageKm *float64 `json:"totalMileageKm"` RecordTime string `json:"recordTime,omitempty"` TimeDifferenceSeconds *int64 `json:"timeDifferenceSeconds,omitempty"` Online bool `json:"online"` ActiveToday bool `json:"activeToday"` MotionStatus string `json:"motionStatus"` LocationAvailable bool `json:"locationAvailable"` Status string `json:"status"` } type HydrogenStationRequest struct { Province string `json:"province,omitempty"` City string `json:"city,omitempty"` CooperateOnly *bool `json:"cooperateOnly,omitempty"` } type HydrogenStation struct { ID string `json:"id"` Name string `json:"name"` ShortName string `json:"shortName,omitempty"` Address string `json:"address,omitempty"` Longitude float64 `json:"longitude"` Latitude float64 `json:"latitude"` Province string `json:"province,omitempty"` City string `json:"city,omitempty"` District string `json:"district,omitempty"` Cooperative bool `json:"cooperative"` ContactPerson string `json:"contactPerson,omitempty"` ContactPhone string `json:"contactPhone,omitempty"` UnitPrice float64 `json:"unitPrice,omitempty"` MonthlyHydrogenKg float64 `json:"monthlyHydrogenKg"` TotalHydrogenKg float64 `json:"totalHydrogenKg"` } type ExternalResponse struct { Code string `json:"code"` Message string `json:"message"` Data any `json:"data,omitempty"` TraceID string `json:"traceId"` } type MileageRangeResponse struct { Code string `json:"code"` Message string `json:"message"` Data []MileageRangeResult `json:"data"` SnapshotID string `json:"snapshotId"` NextCursor *string `json:"nextCursor"` TraceID string `json:"traceId"` } type App struct { ID uint64 `json:"id"` Name string `json:"name"` AppKeyPrefix string `json:"appKeyPrefix"` Status string `json:"status"` ValidFrom time.Time `json:"validFrom"` ValidTo *time.Time `json:"validTo,omitempty"` CreatedBy string `json:"createdBy"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` } type AppCreated struct { App AppKey string `json:"appKey"` } type AppInput struct { Name string `json:"name"` Status string `json:"status"` ValidFrom string `json:"validFrom"` ValidTo string `json:"validTo"` } type VehicleGrantInput struct { VIN string `json:"vin"` ValidFrom string `json:"validFrom"` ValidTo string `json:"validTo"` } type VehicleGrantRequest struct { Vehicles []VehicleGrantInput `json:"vehicles"` } type VehicleGrant struct { VIN string `json:"vin"` Plate string `json:"plate"` ValidFrom time.Time `json:"validFrom"` ValidTo *time.Time `json:"validTo,omitempty"` GrantedBy string `json:"grantedBy"` UpdatedAt time.Time `json:"updatedAt"` } type VehicleCatalogItem struct { VIN string `json:"vin"` Plate string `json:"plate"` OEM string `json:"oem"` Status string `json:"status"` Source string `json:"source"` } type AuthorizedVehicle struct { VIN string Plate string } type AppCredential struct { ID uint64 Name string } type DailyHydrogen struct { VIN string Date string ConsumptionKg float64 SampleCount int QualityStatus string CalculationPhase string AlgorithmVersion string } type DailyMileage struct { VIN string Date string Protocol string MileageKm float64 TotalMileageKm float64 DataTime string UpdatedAt string } type MileageSnapshot struct { ID string AppID uint64 RequestHash []byte StartDate string EndDate string VehicleCount int ExpiresAt time.Time Vehicles []AuthorizedVehicle } type HydrogenObservation struct { VIN string Source string EventID string ObservedAt time.Time MassKg float64 TankCapacityLiter float64 PressureMPa float64 TemperatureC float64 NoiseKg float64 RefuelThresholdKg float64 FuelCellActive bool FuelCellStateKnown bool FuelCellVoltageV float64 FuelCellCurrentA float64 FuelCellPowerKnown bool SOCPercent float64 SOCKnown bool MileageKm float64 MileageKnown bool VehicleState int VehicleStateKnown bool ChargeState int ChargeStateKnown bool RunningMode int RunningModeKnown bool BoundaryEligible bool BoundaryReason string RefuelBoundary bool RefuelAmountKg float64 PressureInvalid bool } type HydrogenCalculationParameters struct { BatteryCapacityKWh float64 `json:"batteryCapacityKWh"` HydrogenEnergyKWhKg float64 `json:"hydrogenEnergyKWhPerKg"` PowerOnDelaySeconds int `json:"powerOnDelaySeconds"` PowerOffLeadSeconds int `json:"powerOffLeadSeconds"` RefuelRiseMPa float64 `json:"refuelRiseMpa"` RefuelSustainSeconds int `json:"refuelSustainSeconds"` PureElectricDropMPA float64 `json:"pureElectricDropMpa"` PureElectricWindowSeconds int `json:"pureElectricWindowSeconds"` InitialChargeCycleKnown bool `json:"initialChargeCycleKnown,omitempty"` InitialMixedLocked bool `json:"initialMixedLocked,omitempty"` AlgorithmVersion string `json:"algorithmVersion"` } type HydrogenIntervalEvidence struct { Index int `json:"index"` Type string `json:"type"` StartTime string `json:"startTime"` EndTime string `json:"endTime"` StartEventID string `json:"startEventId"` EndEventID string `json:"endEventId"` Source string `json:"source"` StartPressureMPa float64 `json:"startPressureMpa"` EndPressureMPa float64 `json:"endPressureMpa"` StartTemperatureC float64 `json:"startTemperatureC"` EndTemperatureC float64 `json:"endTemperatureC"` StartMassKg float64 `json:"startMassKg"` EndMassKg float64 `json:"endMassKg"` RawHydrogenConsumptionKg float64 `json:"rawHydrogenConsumptionKg"` StartSOCPercent *float64 `json:"startSocPercent,omitempty"` EndSOCPercent *float64 `json:"endSocPercent,omitempty"` BatterySOCDeltaPct *float64 `json:"batterySocDeltaPct,omitempty"` BatteryEnergyChangeKWh *float64 `json:"batteryEnergyChangeKWh,omitempty"` ElectricEquivalentKg *float64 `json:"electricEquivalentHydrogenKg,omitempty"` CorrectedConsumptionKg *float64 `json:"correctedHydrogenConsumptionKg,omitempty"` BatteryDischargeKWh *float64 `json:"batteryDischargeKWh,omitempty"` BatteryEquivalentKg *float64 `json:"batteryEquivalentKg,omitempty"` SOCBalancedConsumptionKg *float64 `json:"socBalancedConsumptionKg,omitempty"` StartMileageKm *float64 `json:"startMileageKm,omitempty"` EndMileageKm *float64 `json:"endMileageKm,omitempty"` MileageKm *float64 `json:"mileageKm,omitempty"` ConsumptionKgPer100Km *float64 `json:"consumptionKgPer100Km,omitempty"` SampleCount int `json:"sampleCount"` QualityStatus string `json:"qualityStatus"` QualityReason string `json:"qualityReason"` } type HydrogenRateObservation struct { VIN string Source string ObservedAt time.Time Rate float64 MileageKm float64 } type HydrogenRateDailyStat struct { VIN string Source string Date string ConsumptionKg float64 SampleCount int QualityStatus string QualityReason string } type HydrogenDailyStat struct { VIN string Source string Date string ConsumptionKg float64 FirstMassKg float64 LastMassKg float64 CycleMinimumMassKg float64 SampleCount int RefuelCount int RefuelAmountKg float64 AbnormalDropCount int SuspectedLeakCount int SuspectedLeakMaxPressureDropMPa float64 EligibleIntervalCount int QualifiedSegmentCount int ChargeCount int ChargeEnergyKWh float64 InvalidSegmentCount int BatterySOCDeltaPct *float64 BatteryEnergyChangeKWh *float64 ElectricEquivalentKg *float64 CorrectedConsumptionKg *float64 BatteryDischargeKWh *float64 BatteryEquivalentKg *float64 SOCBalancedConsumptionKg *float64 MixedMileageKm float64 PureElectricMileageKm float64 ConsumptionKgPer100Km *float64 SOCBalancedKgPer100Km *float64 CalculationParameters HydrogenCalculationParameters Intervals []HydrogenIntervalEvidence HydrogenIntervals []HydrogenIntervalEvidence FirstObservation HydrogenObservation LastObservation HydrogenObservation QualityStatus string QualityReason string } type PortalUser struct { ID uint64 `json:"id"` Username string `json:"username"` DisplayName string `json:"displayName"` Status string `json:"status"` ValidFrom time.Time `json:"validFrom"` ValidTo *time.Time `json:"validTo,omitempty"` LastLoginAt *time.Time `json:"lastLoginAt,omitempty"` CreatedBy string `json:"createdBy"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` } type PortalUserInput struct { Username string `json:"username"` DisplayName string `json:"displayName"` Password string `json:"password"` Status string `json:"status"` ValidFrom string `json:"validFrom"` ValidTo string `json:"validTo"` } type PortalUserAppInput struct { AppID uint64 `json:"appId"` Role string `json:"role"` } type PortalUserAppRequest struct { Apps []PortalUserAppInput `json:"apps"` } type PortalUserApp struct { AppID uint64 `json:"appId"` AppName string `json:"appName"` AppKeyPrefix string `json:"appKeyPrefix"` AppStatus string `json:"appStatus"` Role string `json:"role"` ValidFrom time.Time `json:"validFrom"` ValidTo *time.Time `json:"validTo,omitempty"` } type PortalSession struct { UserID uint64 `json:"userId"` Username string `json:"username"` DisplayName string `json:"displayName"` UserType string `json:"userType"` ExpiresAt time.Time `json:"expiresAt"` } type PortalLoginResponse struct { AccessToken string `json:"accessToken"` ExpiresAt time.Time `json:"expiresAt"` Session PortalSession `json:"session"` } type PortalLoginRequest struct { Username string `json:"username"` Password string `json:"password"` } type PortalAuditItem struct { TraceID string `json:"traceId"` Endpoint string `json:"endpoint"` Result string `json:"result"` VehicleCount int `json:"vehicleCount"` CreatedAt time.Time `json:"createdAt"` } type DataProduct struct { Code string `json:"code"` Name string `json:"name"` Description string `json:"description"` Version string `json:"version"` Status string `json:"status"` Method string `json:"method"` Path string `json:"path"` Unit string `json:"unit"` }