""" Will check if the user has any/all permissions to resolve this. When the condition fails, the following can be returned (following this priority): 1) `OperationInfo`/`OperationMessage` if those types are allowed at the return type 2) `null` in case the field is not mandatory (e.g. `String` or `[String]`) 3) An empty list in case the field is a list (e.g. `[String]!`) 4) An empty `Connection` in case the return type is a relay connection 2) Otherwise, an error will be raised """ directive @hasPerm(permissions: [PermDefinition!]!, any: Boolean! = true) repeatable on FIELD_DEFINITION input AcceptInvitationInput { customerId: Int! } type AcceptInvitationPayload implements MutationResponse { code: String! success: Boolean! message: String! customerUser: CustomerUser } type ActivityTimeEditReason { id: ID! code: String! name: String! sortOrder: Int! } type ActivityTimeEditReasonOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ActivityTimeEditReason!]! } input AddAnomalyClientFieldInput { customerId: Int! name: String! type: String! = "TEXT" options: JSON = null } type AddAnomalyClientFieldPayload implements MutationResponse { code: String! success: Boolean! message: String! anomalyClientField: AnomalyClientField } input AddAnomalyCommentInput { anomalyId: Int! body: String! } input AddAnomalyCustomValueInput { anomalyId: Int! customFieldId: Int! value: String = null } type AddAnomalyCustomValuePayload implements MutationResponse { code: String! success: Boolean! message: String! anomalyCustomValue: AnomalyCustomValue } input AddAnomalyInput { distanceToRoot: Float! internalExternal: AnomalyPlacement! name: String = null turbineId: Int = null turbineComponentId: Int = null turbineComponentSerialNumber: String = null projectId: Int = null workorderId: Int = null serviceOrderLineId: Int = null maxDistance: Float = null distanceToLeadingEdge: Float = null crossSectionDistance: Float = null crossSectionChamberDistance: Float = null width: Float = null profileDepthFrom: Float = null @deprecated(reason: "Profile depth is recorded as client custom fields; use customValues instead (OH-4117). A value sent here is still stored on the anomaly and read back, but nothing downstream consumes it. Removed once the client portal and VIS stop naming it.") profileDepthTo: Float = null @deprecated(reason: "Profile depth is recorded as client custom fields; use customValues instead (OH-4117). A value sent here is still stored on the anomaly and read back, but nothing downstream consumes it. Removed once the client portal and VIS stop naming it.") severity: AnomalySeverity! status: String! = "NEW" aiStatus: AnomalyAIStatus = null stage: AnomalyStage! = RELEASED side: AnomalySide = null crossSectionSide: AnomalyCrossSectionSide = null crossSectionType: AnomalyCrossSectionType! = DOUBLE_SHEAR_WEB rib: AnomalyRib = null anomalyTypeId: Int = null anomalySubTypeId: Int = null anomalyMajorComponentId: Int = null anomalyComponentId: Int = null anomalySubComponentId: Int = null anomalyMaterialId: Int = null parentTypeId: Int = null rootCauseId: Int = null clientStatus: String = null chargeable: Boolean = null description: String = null comments: String = null serviceProviderId: Int = null damageCause: String = null parentAnomalyId: Int = null @deprecated(reason: "No longer used. Use link_group instead.") crossFileIds: JSON = null videoTimestampMs: Int = null linkGroup: String = null registeredBy: AnomalyRegisteredBy! = AERONES registrationOrigin: String = null widthDifferenceSincePrevious: Float = null widthDifferenceSinceOldest: Float = null lengthDifferenceSincePrevious: Float = null lengthDifferenceSinceOldest: Float = null sourceObjectId: Int = null sourceObjectTypeId: Int = null videoFrame: Int = null frameBlobPath: String = null segmentation: String = null segmentationVersion: Int! = 2 bbox: String = null aiConfidence: Float = null aiImagesV2: Boolean = null customValues: [AnomalyCustomValueEntryInput!] = null } input AddAnomalyLabelInput { name: String! color: String! anomalyId: Int = null attachToAnomaly: Boolean! = true } type AddAnomalyPayload implements MutationResponse { code: String! success: Boolean! message: String! anomaly: Anomaly } input AddAnomalyPresetInput { name: String! value: JSON! templateId: Int rank: Int } type AddAnomalyPresetPayload implements MutationResponse { code: String! success: Boolean! message: String! preset: AnomalyPreset } input AddAnomalyPresetTemplateInput { name: String! inspectionType: TemplateInspectionType! customerId: Int projectId: Int isDefault: Boolean! = false } type AddAnomalyPresetTemplatePayload implements MutationResponse { code: String! success: Boolean! message: String! template: AnomalyPresetTemplate } input AddAnomalyRecommendationInput { name: String! action: String = null type: String = null status: String = null } type AddAnomalyRecommendationPayload implements MutationResponse { code: String! success: Boolean! message: String! anomalyRecommendation: AnomalyRecommendation } input AddBookmarkInput { type: BookmarkType! visibility: BookmarkVisibility! serviceOrderLineId: Int! turbineComponentId: Int! sourceObjectTypeId: Int! sourceObjectId: Int! distanceToRoot: Float! positionX: Float! positionY: Float! description: String! = "" videoTimestampMs: Int = null videoFrame: Int = null } type AddBookmarkPayload implements MutationResponse { code: String! success: Boolean! message: String! bookmark: Bookmark } input AddBusinessRegionInput { name: String! } type AddBusinessRegionPayload implements MutationResponse { code: String! success: Boolean! message: String! businessRegion: BusinessRegion } input AddCertificateCategoryInput { name: String! description: String = null color: String = null sortOrder: Int! = 0 } type AddCertificateCategoryPayload implements MutationResponse { code: String! success: Boolean! message: String! certificateCategory: CertificateCategory } input AddCertificateExpenseInput { resourceId: Int! amount: Decimal! currencyId: Int! orderDate: Date! certificateId: Int = null resourceCertificateId: Int = null issuerId: Int = null issuerName: String = null offeringId: Int = null projectId: Int = null status: Status! = PENDING completionDate: Date = null invoiceNumber: String = null notes: String = null reason: String = null } type AddCertificateExpensePayload implements MutationResponse { code: String! success: Boolean! message: String! certificateExpense: CertificateExpense } input AddCertificateInput { name: String! code: String = null description: String = null defaultValidityMonths: Int = null isActive: Boolean! = true countryId: Int = null categoryId: Int = null source: String = null } input AddCertificateIssuerInput { name: String! description: String = null website: String = null email: String = null phone: String = null address: String = null countryId: Int = null additionalInfo: String = null isActive: Boolean! = true } type AddCertificateIssuerPayload implements MutationResponse { code: String! success: Boolean! message: String! certificateIssuer: CertificateIssuer } input AddCertificateOfferingInput { certificateId: Int! issuerId: Int! countryId: Int = null cost: Decimal = null currencyId: Int = null validityMonths: Int = null format: String = null duration: String = null howToAcquire: String = null bookingUrl: String = null additionalInfo: String = null isActive: Boolean! = true } type AddCertificateOfferingPayload implements MutationResponse { code: String! success: Boolean! message: String! certificateOffering: CertificateOffering } type AddCertificatePayload implements MutationResponse { code: String! success: Boolean! message: String! certificate: Certificate } input AddComponentModelInput { name: String! manufacturerId: Int! componentTypeId: Int! length: Decimal = null crawlerRange: Decimal = null bladeType: BladeType = null bladeRoot: Decimal = null } type AddComponentModelPayload implements MutationResponse { code: String! success: Boolean! message: String! componentModel: ManufacturerComponentModel } input AddComponentTypeInput { name: String! parentId: Int = null fieldList: [String!] = null } type AddComponentTypePayload implements MutationResponse { code: String! success: Boolean! message: String! componentType: ComponentType } input AddCountryInput { code: String! name: String = null regionId: Int = null businessRegionId: Int = null currencyId: Int = null enabled: Boolean! = true } type AddCountryPayload implements MutationResponse { code: String! success: Boolean! message: String! country: Country } input AddCurrencyInput { code: String! name: String! } type AddCurrencyPayload implements MutationResponse { code: String! success: Boolean! message: String! currency: Currency } input AddCustomerAddressInput { customerId: Int! addressLine1: String! name: String = null additionalInfo: String = null type: String = null addressLine2: String = null city: String = null stateRegion: String = null postalCode: String = null countryId: Int = null timezoneId: Int = null } type AddCustomerAddressPayload implements MutationResponse { code: String! success: Boolean! message: String! customerAddress: CustomerAddress } input AddCustomerBankAccountInput { customerId: Int! name: String = null iban: String = null accountNumber: String = null bankName: String = null swiftBic: String = null currencyCode: String = null isPrimary: Boolean! = false } type AddCustomerBankAccountPayload implements MutationResponse { code: String! success: Boolean! message: String! customerBankAccount: CustomerBankAccount } input AddCustomerContactInput { customerId: Int! name: String! customerLocationId: Int = null title: String = null department: String = null email: String = null phone: String = null isPrimary: Boolean! = false additionalInfo: String = null } type AddCustomerContactPayload implements MutationResponse { code: String! success: Boolean! message: String! customerContact: CustomerContact } input AddCustomerInput { displayName: String! countryId: Int! currencyId: Int! netsuiteSubsidiaryId: Int! legalName: String = null email: String = null phone: String = null parentCustomerId: Int = null vatNumber: String = null registrationNumber: String = null additionalInfo: String = null netsuiteCustomerId: Int = null pipedriveOrgId: Int = null customFields: JSON = null } input AddCustomerInspectionScopeInput { projectId: Int! locationId: Int! level: InspectionScopeLevel! turbines: [InspectionScopeTurbineInput!]! } type AddCustomerInspectionScopePayload implements MutationResponse { code: String! success: Boolean! message: String! turbineIds: [Int!]! turbineComponentIds: [Int!]! scopeItemIds: [Int!]! serviceOrderLineIds: [Int!]! turbinesCreated: Int! scopeItemsCreated: Int! serviceOrderLinesCreated: Int! } input AddCustomerLocationInput { customerId: Int! locationId: Int! relationshipId: Int! childrenRelationshipId: Int! } type AddCustomerLocationPayload implements MutationResponse { code: String! success: Boolean! message: String! customerLocation: CustomerLocation } type AddCustomerPayload implements MutationResponse { code: String! success: Boolean! message: String! customer: Customer } input AddCustomerRoleInput { customerId: Int! name: String! description: String! = "" featureLevels: CustomerRoleFeatureLevelsInput! } type AddCustomerRolePayload implements MutationResponse { code: String! success: Boolean! message: String! customerRole: CustomerRole } input AddCustomerTurbineInput { customerId: Int! turbineId: Int! relationshipId: Int = null } type AddCustomerTurbinePayload implements MutationResponse { code: String! success: Boolean! message: String! customerTurbine: CustomerTurbine } input AddCustomerUserInput { customerId: Int! email: String! firstName: String = null lastName: String = null phone: String = null authGroupId: Int = null customerRoleIds: [Int!]! = [] planningScopeRestricted: Boolean! = false } type AddCustomerUserPayload implements MutationResponse { code: String! success: Boolean! message: String! customerUser: CustomerUser } input AddDelayCategoryInput { code: String! description: String = null enabled: Boolean! = true includeInClientReports: Boolean! = true } type AddDelayCategoryPayload implements MutationResponse { code: String! success: Boolean! message: String! delayCategory: DelayCategory } input AddDelayInput { delayTypeId: Int! comment: String! description: String! = "" startDatetime: DateTime! endDatetime: DateTime = null durationMinutes: Int = null customFields: JSON robotSetId: Int = null resourceId: Int = null locationId: Int = null projectId: Int = null serviceOrderId: Int = null workorderId: Int = null workorderActivityId: Int = null } type AddDelayPayload implements MutationResponse { code: String! success: Boolean! message: String! delay: Delay } input AddDelayTypeInput { delayCategoryId: Int! code: String! description: String = null enabled: Boolean! = true includeInClientReports: Boolean! = true } type AddDelayTypePayload implements MutationResponse { code: String! success: Boolean! message: String! delayType: DelayType } input AddFileInput { name: String! previewName: String = null bucket: String = null type: String = null comments: String = null status: String = null customFields: JSON = null tags: JSON = null originalName: String = null deleteReason: String = null } type AddFilePayload implements MutationResponse { code: String! success: Boolean! message: String! file: File } input AddLocationInput { name: String! type: String! addressLine1: String! city: String! countryId: Int! timezoneId: Int! latitude: Decimal! longitude: Decimal! additionalInfo: String = null windparkType: String = null addressLine2: String = null stateRegion: String = null postalCode: String = null coordinates: String = null globalWindParkDbId: Int = null certificates: [LocationCertificateInput!] = null } type AddLocationPayload implements MutationResponse { code: String! success: Boolean! message: String! location: Location } input AddLogisticsFormSubmissionInput { formTypeId: Int! robotSetId: Int = null } type AddLogisticsFormSubmissionPayload implements MutationResponse { code: String! success: Boolean! message: String! formSubmission: LogisticsFormSubmission } input AddManufacturerInput { name: String! } type AddManufacturerPayload implements MutationResponse { code: String! success: Boolean! message: String! manufacturer: Manufacturer } input AddPlanningCampaignInput { customerId: Int! name: String! status: String = null description: String = null plannedStartDate: Date = null plannedEndDate: Date = null actualStartDate: Date = null actualEndDate: Date = null plannedCost: Decimal = null actualCost: Decimal = null currencyId: Int = null notes: String = null } type AddPlanningCampaignPayload implements MutationResponse { code: String! success: Boolean! message: String! planningCampaign: PlanningCampaign } input AddPlanningCommentInput { body: String! campaignId: Int = null projectId: Int = null serviceOrderId: Int = null workOrderId: Int = null } type AddPlanningCommentPayload implements MutationResponse { code: String! success: Boolean! message: String! planningComment: PlanningComment } input AddPlanningCustomerVendorInput { customerId: Int! name: String! vendorId: Int } type AddPlanningCustomerVendorPayload implements MutationResponse { code: String! success: Boolean! message: String! planningCustomerVendor: PlanningCustomerVendor } input AddPlanningProjectInput { customerId: Int! name: String! campaignId: Int = null coreProjectId: Int = null code: String = null status: String = null description: String = null priority: String = null plannedStartDate: Date = null plannedEndDate: Date = null actualStartDate: Date = null actualEndDate: Date = null plannedCost: Decimal = null actualCost: Decimal = null currencyId: Int = null notes: String = null } type AddPlanningProjectPayload implements MutationResponse { code: String! success: Boolean! message: String! planningProject: PlanningProject } input AddPlanningServiceInput { customerId: Int! code: String! coreServiceId: Int = null description: String = null active: Boolean! = true } input AddPlanningServiceOrderInput { customerId: Int! serviceId: Int! projectId: Int = null vendorId: Int = null locationId: Int = null turbineId: Int = null turbineComponentId: Int = null anomalyIds: [Int!] = null number: String = null status: String = null priority: String = null description: String = null notes: String = null plannedStartDate: Date = null plannedEndDate: Date = null actualStartDate: Date = null actualEndDate: Date = null plannedCost: Decimal = null actualCost: Decimal = null } type AddPlanningServiceOrderPayload implements MutationResponse { code: String! success: Boolean! message: String! planningServiceOrder: PlanningServiceOrder } input AddPlanningServiceOrdersInput { orders: [AddPlanningServiceOrderInput!]! } type AddPlanningServiceOrdersPayload implements MutationResponse { code: String! success: Boolean! message: String! planningServiceOrders: [PlanningServiceOrder!] } type AddPlanningServicePayload implements MutationResponse { code: String! success: Boolean! message: String! planningService: PlanningService } input AddPlanningWorkOrderInput { customerId: Int! serviceOrderId: Int! typeId: Int! name: String! status: String = null description: String = null plannedStartDate: Date = null plannedEndDate: Date = null completedDate: Date = null position: Int = null customFields: JSON = null source: String = null } type AddPlanningWorkOrderPayload implements MutationResponse { code: String! success: Boolean! message: String! planningWorkOrder: PlanningWorkOrder } input AddPlanningWorkOrderTypeInput { customerId: Int! code: String! description: String = null } type AddPlanningWorkOrderTypePayload implements MutationResponse { code: String! success: Boolean! message: String! planningWorkOrderType: PlanningWorkOrderType } input AddPositionInput { name: String! isLead: Boolean! = false } type AddPositionPayload implements MutationResponse { code: String! success: Boolean! message: String! position: Position } input AddProjectCommentInput { body: String! bodyFormat: ProjectTaskCommentBodyFormat! = TEXT projectId: Int = null projectTaskId: Int = null mentionedUserIds: [Int!] = null fileIds: [UUID!] = null } type AddProjectCommentPayload implements MutationResponse { code: String! success: Boolean! message: String! projectComment: ProjectComment } input AddProjectContactInput { projectId: Int! customerContactId: Int! customerType: String! role: ProjectContactMutableRole = null customerLocationId: Int = null } type AddProjectContactPayload implements MutationResponse { code: String! success: Boolean! message: String! projectContact: ProjectContact } input AddProjectLocationInput { projectId: Int! locationId: Int! projectContactId: Int = null additionalInformation: JSON = null } type AddProjectLocationPayload implements MutationResponse { code: String! success: Boolean! message: String! projectLocation: ProjectLocation } input AddProjectPlannedResourceSetInput { projectId: Int! name: String! description: String = null projectLocationId: Int = null status: ProjectPlannedResourceSetStatus! = APPROVED } input AddProjectPlannedResourceSetItemInput { projectPlannedResourceSetId: Int! resourceType: String! resourceId: Int = null isLead: Boolean = null projectLocationId: Int = null startDate: Date = null endDate: Date = null status: ProjectPlannedResourceSetStatus! = PLANNED } type AddProjectPlannedResourceSetItemPayload implements MutationResponse { code: String! success: Boolean! message: String! projectPlannedResourceSetItem: ProjectPlannedResourceSetItem } type AddProjectPlannedResourceSetPayload implements MutationResponse { code: String! success: Boolean! message: String! projectPlannedResourceSet: ProjectPlannedResourceSet } input AddProjectStatusInput { code: String! description: String = null enabled: Boolean! = true sortOrder: Int! = 0 } type AddProjectStatusPayload implements MutationResponse { code: String! success: Boolean! message: String! projectStatus: ProjectStatus } input AddProjectTaskCommentInput { projectTaskId: Int! body: String! bodyFormat: ProjectTaskCommentBodyFormat! = TEXT mentionedUserIds: [Int!] = null fileIds: [UUID!] = null } type AddProjectTaskCommentPayload implements MutationResponse { code: String! success: Boolean! message: String! projectTaskComment: ProjectTaskComment } input AddProjectTaskInput { projectId: Int! taskType: ProjectTaskType! status: ProjectTaskStatus! title: String! applicability: Applicability! projectStatusId: Int parentTaskId: Int notes: String notRequiredReason: String responsibleUserId: Int startDate: Date endDate: Date dueDate: Date confirmedAt: DateTime confirmedById: Int isManuallyOverridden: Boolean externalRefSystem: String externalRefId: String additionalInformation: JSON } type AddProjectTaskPayload implements MutationResponse { code: String! success: Boolean! message: String! projectTask: ProjectTask } input AddPurchaseOrderInput { customerId: Int! currencyId: Int! orderNumber: String! issueDate: Date! amount: Decimal! fileId: Int = null projectIds: [Int!] = null } type AddPurchaseOrderPayload implements MutationResponse { code: String! success: Boolean! message: String! purchaseOrder: PurchaseOrder } input AddPurchaseOrderProjectInput { purchaseOrderId: Int! projectId: Int! } type AddPurchaseOrderProjectPayload implements MutationResponse { code: String! success: Boolean! message: String! purchaseOrderProject: PurchaseOrderProject } input AddPurchaseOrderVersionInput { purchaseOrderId: Int! orderNumber: String! issueDate: Date! amount: Decimal! fileId: Int = null } type AddPurchaseOrderVersionPayload implements MutationResponse { code: String! success: Boolean! message: String! purchaseOrderVersion: PurchaseOrderVersion } input AddRegionInput { name: String! } type AddRegionPayload implements MutationResponse { code: String! success: Boolean! message: String! region: Region } input AddRelationshipTypeInput { code: String! description: String = null } type AddRelationshipTypePayload implements MutationResponse { code: String! success: Boolean! message: String! relationshipType: RelationshipType } input AddResourceInput { qualifications: [JSON!] = null userId: Int = null robotSetId: Int = null certificates: [ResourceCertificateInput!] = null fullName: String = null email: String = null resourceType: String = null } type AddResourcePayload implements MutationResponse { code: String! success: Boolean! message: String! resource: Resource } input AddResourceServicePositionInput { resourceId: Int! serviceId: Int! positionId: Int! fromDate: Date! } type AddResourceServicePositionPayload implements MutationResponse { code: String! success: Boolean! message: String! resourceServicePosition: ResourceServicePosition } input AddResourceSetInput { name: String! description: String = null setItems: [ResourceSetItemInput!] = null } type AddResourceSetPayload implements MutationResponse { code: String! success: Boolean! message: String! resourceSet: ResourceSet } input AddRobotSetInput { name: String! serviceIds: [Int!] = null } type AddRobotSetPayload implements MutationResponse { code: String! success: Boolean! message: String! robotSet: RobotSet } input AddRobotSetServiceInput { robotSetId: Int! serviceId: Int! } type AddRobotSetServicePayload implements MutationResponse { code: String! success: Boolean! message: String! robotSetService: RobotSetServices } input AddServiceItemActivityInput { serviceItemId: Int = null description: String = null requiresRobotSet: Boolean = null estimatedDuration: Int = null customFields: JSON = null sortOrder: Int = null } type AddServiceItemActivityPayload implements MutationResponse { code: String! success: Boolean! message: String! serviceItemActivity: ServiceItemActivity } input AddServiceItemInput { code: String! componentId: Int = null description: String = null isOptional: Boolean = null serviceId: Int = null sortOrder: Int = null } type AddServiceItemPayload implements MutationResponse { code: String! success: Boolean! message: String! serviceItem: ServiceItem } input AddServiceOrderHeaderInput { projectId: Int! customerId: Int! projectName: String = null locationId: Int = null customerName: String = null serviceOrderDate: String = null serviceOrderNumber: String = null serviceOrderType: String = null projectManagerUserId: Int = null status: String = null } type AddServiceOrderHeaderPayload implements MutationResponse { code: String! success: Boolean! message: String! serviceOrderHeader: ServiceOrderHeader } input AddServiceOrderLineInput { number: String = null serviceOrderId: Int = null serviceId: Int = null quantity: Int = null turbineId: Int = null componentTypeId: Int = null turbineComponentId: Int = null serviceCode: String = null serviceDescription: String = null customerId: Int = null projectId: Int = null scopeChangeRequestId: Int = null projectScopeItemId: Int = null requiredQualifications: JSON = null status: String = null stage: String = null originalSolId: Int = null billable: Boolean! = true } type AddServiceOrderLinePayload implements MutationResponse { code: String! success: Boolean! message: String! serviceOrderLine: ServiceOrderLine } input AddServiceResultInput { workorderId: Int! turbineId: Int! data: JSON! serviceOrderLineId: Int = null turbineComponentId: Int = null templateId: Int = null resultThresholdId: Int = null } type AddServiceResultPayload implements MutationResponse { code: String! success: Boolean! message: String! serviceResult: ServiceResult } input AddServiceResultTemplateFieldInput { templateId: Int! key: String! label: String! fieldType: String! description: String = null isRequired: Boolean! = false sortOrder: Int! = 0 unit: String = null options: JSON = null defaultValue: JSON = null } type AddServiceResultTemplateFieldPayload implements MutationResponse { code: String! success: Boolean! message: String! serviceResultTemplateField: ServiceResultTemplateField } input AddServiceResultTemplateInput { code: String! description: String = null componentTypeId: Int = null } type AddServiceResultTemplatePayload implements MutationResponse { code: String! success: Boolean! message: String! serviceResultTemplate: ServiceResultTemplate } input AddTaskCommentInput { taskId: Int! body: String! } input AddTimezoneInput { city: String! timezone: String! regionId: Int = null abbrev: String = null isDst: Boolean = null } type AddTimezonePayload implements MutationResponse { code: String! success: Boolean! message: String! timezone: Timezone } input AddTurbineComponentInput { componentTypeId: Int! serialNumber: String! manufacturerSerialNumber: String = null turbineId: Int! manufacturerId: Int = null modelId: Int = null parentTurbineComponentId: Int = null length: Float = null radius: Float = null bladeTip: Boolean! = false position: String = null additionalInformation: JSON = null } type AddTurbineComponentPayload implements MutationResponse { code: String! success: Boolean! message: String! turbineComponent: TurbineComponent } input AddTurbineCustomerInput { customerId: Int! relationshipId: Int = null } input AddTurbineInput { locationId: Int! customers: [AddTurbineCustomerInput!]! name: String = null latitude: Decimal = null longitude: Decimal = null additionalInfo: String = null efficiency: Int = null commissioningYear: Int = null output: String = null coordinates: String = null manufacturerTurbineModelId: Int = null manufacturerId: Int = null hubHeight: Float = null rotorRadius: Float = null nominalPower: Float = null doubleReceptors: Boolean! = false hvDoubleReceptors: Boolean! = false manufacturerNumber: String = null isVirtual: Boolean! = false padNumber: String = null } input AddTurbineModelInput { name: String! manufacturerId: Int! nominalPower: Float = null centerToRootOffset: Float = null rotorRadius: Float = null hubHeight: Float = null doubleReceptors: Boolean! = false hvDoubleReceptors: Boolean! = false } type AddTurbineModelPayload implements MutationResponse { code: String! success: Boolean! message: String! turbineModel: ManufacturerTurbineModel } type AddTurbinePayload implements MutationResponse { code: String! success: Boolean! message: String! turbine: Turbine } input AddUserInput { username: String! email: String = null firstName: String = null lastName: String = null isActive: Boolean! = true } type AddUserPayload implements MutationResponse { code: String! success: Boolean! message: String! user: User } input AddVendorInput { displayName: String! legalName: String = null email: String = null phone: String = null countryId: Int = null parentVendorId: Int = null vatNumber: String = null registrationNumber: String = null currencyId: Int = null additionalInfo: String = null netsuiteVendorId: Int = null } type AddVendorPayload implements MutationResponse { code: String! success: Boolean! message: String! vendor: Vendor } input AddWorkTimeCategoryInput { name: String! isRestricted: Boolean! = false parentId: Int = null payrollCategoryType: String = null timeLimit: Int = null allowedProjectType: String = null isFieldWork: Boolean! = false offshoreLimitExempt: Boolean! = false } type AddWorkTimeCategoryPayload implements MutationResponse { code: String! success: Boolean! message: String! workTimeCategory: WorkTimeCategory } input AddWorkTimeLogInput { startedAt: String! endedAt: String! workorderId: Int = null activityId: Int = null projectId: Int = null resourceId: Int = null durationMin: Int = null comment: String = null reason: String = null timezone: String = null customFields: JSON = null correctedEntryId: Int = null workTimeCategoryId: Int = null status: String = null statusChangedById: Int = null statusChangeReason: String = null robotSetId: Int = null payType: String = null approvedById: Int = null approvedAt: String = null approverComment: String = null isApproved: Boolean = null } type AddWorkTimeLogPayload implements MutationResponse { code: String! success: Boolean! message: String! workTimeLog: WorkTimeLog } input AddWorkorderActivityInput { workorderId: Int = null serviceItemId: Int = null serviceItemActivityId: Int = null portalServiceActivityId: Int = null startDatetime: String = null endDatetime: String = null resources: JSON = null robotSetId: Int = null status: String = null isInternal: Boolean! = false locationId: Int = null turbineId: Int = null componentTypeId: Int = null turbineComponentId: Int = null activityDescription: String = null anomalyId: Int = null statusChangeReason: String = null statusChangeBy: Int = null customFields: JSON = null sortOrder: Int = null isOptional: Boolean = null } input AddWorkorderActivityMetadataInput { workorderActivityId: Int! payload: JSON = null } type AddWorkorderActivityMetadataPayload implements MutationResponse { code: String! success: Boolean! message: String! workorderActivityMetadata: WorkorderActivityMetadata } type AddWorkorderActivityPayload implements MutationResponse { code: String! success: Boolean! message: String! workorderActivity: WorkorderActivity } input AddWorkorderInput { name: String! = "" description: String = null serviceOrderId: Int = null serviceOrderLineId: Int = null serviceItemId: Int = null projectId: Int = null projectName: String = null customerId: Int = null status: String = null plannedStartDatetime: String = null plannedEndDatetime: String = null locationId: Int = null turbineId: Int = null turbineComponentId: Int = null isInternal: Boolean = null statusChangeReason: String = null statusChangeBy: Int = null type: String = null mandatoryStartDate: String = null mandatoryDueDate: String = null projectManagerUserId: Int = null } type AddWorkorderPayload implements MutationResponse { code: String! success: Boolean! message: String! workorder: Workorder } input AddWorkorderPlanInput { workorderId: Int! resourceType: String! plannedStartAt: String! plannedEndAt: String! status: String! workorderActivityId: Int = null actualStartAt: String = null actualEndAt: String = null resources: JSON = null } type AddWorkorderPlanPayload implements MutationResponse { code: String! success: Boolean! message: String! workorderPlan: WorkorderPlan } input AddWorkorderResourceSetInput { workorderId: Int! projectResourceSetId: Int = null name: String! description: String = null } type AddWorkorderResourceSetPayload implements MutationResponse { code: String! success: Boolean! message: String! workorderResourceSet: WorkorderResourceSet } input AerotaskEventLocationInput { eventId: Int! latitude: Float! longitude: Float! altitude: Float = null accuracy: Float = null locationData: JSON = null } type AerotaskEventLocationPayload { success: Boolean! } input AerotaskUserEventInput { eventType: UserEventType! eventTime: String! eventTimezone: String! eventData: JSON! entityId: Int = null } type AerotaskUserEventPayload { success: Boolean! eventId: Int } type AiAnomaly { id: Int! inferenceDefectId: Int defectUid: String internalExternal: String! coreAnomalyId: Int! serviceOrderLineId: Int frameBlobPath: String originalImageDest: String inferenceJobId: Int frameNr: Int severity: Int defectType: String typeId: Int subTypeId: Int materialId: Int confScore: Float distanceFromRoot: Float sizeHMm: Float sizeVMm: Float bbox: String filename: String extension: String aiModelConfigId: Int aiModelRelease: String createdAt: DateTime! modifiedAt: DateTime! files: [File!]! } type AnnotationRecommendation { id: Int! type: String severityLevel: String templateText: String! name: String! action: String } type Anomaly { id: Int! turbineId: Int turbineComponentId: Int turbineComponentSerialNumber: String projectId: Int workorderId: Int serviceOrderLineId: Int distanceToRoot: Float! maxDistance: Float distanceToLeadingEdge: Float crossSectionDistance: Float crossSectionChamberDistance: Float width: Float profileDepthFrom: Float @deprecated(reason: "Profile depth is recorded as client custom fields; use customValues instead (OH-4117). A value sent here is still stored on the anomaly and read back, but nothing downstream consumes it. Removed once the client portal and VIS stop naming it.") profileDepthTo: Float @deprecated(reason: "Profile depth is recorded as client custom fields; use customValues instead (OH-4117). A value sent here is still stored on the anomaly and read back, but nothing downstream consumes it. Removed once the client portal and VIS stop naming it.") severity: AnomalySeverity! status: String! aiStatus: AnomalyAIStatus stage: AnomalyStage! resolutionStatus: String internalExternal: AnomalyPlacement! side: AnomalySide crossSectionSide: AnomalyCrossSectionSide crossSectionType: AnomalyCrossSectionType! rib: AnomalyRib anomalyTypeId: Int anomalySubTypeId: Int anomalyMajorComponentId: Int anomalyComponentId: Int anomalySubComponentId: Int anomalyMaterialId: Int parentTypeId: Int rootCauseId: Int clientStatus: String chargeable: Boolean description: String comments: String serviceProviderId: Int damageCause: String parentAnomalyId: Int @deprecated(reason: "No longer used. Use link_group instead.") crossFileIds: JSON videoTimestampMs: Int linkGroup: String registeredBy: AnomalyRegisteredBy! registrationOrigin: String widthDifferenceSincePrevious: Float widthDifferenceSinceOldest: Float lengthDifferenceSincePrevious: Float lengthDifferenceSinceOldest: Float sourceObjectId: Int sourceObjectTypeId: Int videoFrame: Int frameBlobPath: String segmentation: String segmentationVersion: Int! bbox: String aiConfidence: Float aiImagesV2: Boolean customFields: [AnomalyClientField!]! customValues: [AnomalyCustomValue!]! } enum AnomalyAIStatus { NEW QUALIFIED UNQUALIFIED CONFIRMED REJECTED DUPLICATE } type AnomalyActivity { progressed: Int! buckets: [AnomalyActivityBucket!]! } type AnomalyActivityBucket { weekStart: Date! progressed: Int! } type AnomalyActivityFeedItem { key: ID! kind: String! field: String previousValue: String newValue: String actorUserId: Int createdAt: DateTime! source: String! actor: User } type AnomalyClientField { customer: Customer! options: JSON accessRules: JSON createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! type: String! } input AnomalyClientFieldFilter { id: IDBaseFilterLookup customer: DjangoModelFilterInput name: StrFilterLookup type: StrFilterLookup AND: AnomalyClientFieldFilter OR: AnomalyClientFieldFilter NOT: AnomalyClientFieldFilter DISTINCT: Boolean } type AnomalyClientFieldOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [AnomalyClientField!]! } input AnomalyClientFieldOrder { id: Ordering name: Ordering type: Ordering } type AnomalyComment { anomalyId: Int! authorId: Int! deletedAt: DateTime createdAt: DateTime! updatedAt: DateTime! id: ID! body: String! editedAt: DateTime } type AnomalyCommentCount { anomalyId: Int! count: Int! } type AnomalyCommentPayload implements MutationResponse { code: String! success: Boolean! message: String! anomalyComment: AnomalyComment } type AnomalyComponent { parentAnomalyComponent: AnomalyComponent createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! inspectionType: String! } type AnomalyComponentOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [AnomalyComponent!]! } input AnomalyComponentOrder { id: Ordering name: Ordering inspectionType: Ordering parentAnomalyComponent: Ordering } type AnomalyComponentTypeMap { anomalyComponent: AnomalyComponent! anomalyType: AnomalyType! createdAt: DateTime! updatedAt: DateTime! id: ID! } input AnomalyComponentTypeMapFilter { id: IDBaseFilterLookup anomalyComponent: IDFilterLookup anomalyType: IDFilterLookup AND: AnomalyComponentTypeMapFilter OR: AnomalyComponentTypeMapFilter NOT: AnomalyComponentTypeMapFilter DISTINCT: Boolean serviceCode: String } type AnomalyComponentTypeMapOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [AnomalyComponentTypeMap!]! } input AnomalyComponentTypeMapOrder { id: Ordering anomalyComponent: Ordering anomalyType: Ordering } enum AnomalyCrossSectionSide { SUCTION_SIDE PRESSURE_SIDE MSW1 MSW2 TE_WEB END_WEB BEAM_LE BEAM_TE BEAM_PS BEAM_SS } enum AnomalyCrossSectionType { NO_SHEAR_WEB SINGLE_SHEAR_WEB DOUBLE_SHEAR_WEB TRIPLE_SHEAR_WEB QUADRUPLE_SHEAR_WEB } type AnomalyCustomValue { anomalyId: Int! customField: AnomalyClientField! valueJson: JSON createdAt: DateTime! updatedAt: DateTime! id: ID! value: String } input AnomalyCustomValueCriterion { customFieldId: Int! values: [String!]! } input AnomalyCustomValueEntryInput { customFieldId: Int! value: String = null valueJson: JSON = null } input AnomalyCustomValueFilterInput { criteria: [AnomalyCustomValueCriterion!]! serviceOrderLineId: Int = null } type AnomalyDailyCount { day: Date! aiStatus: String registeredBy: String count: Int! } type AnomalyEvent { id: ID! op: String! changedColumns: [String!]! oldValues: JSON newValues: JSON actorUserId: Int createdAt: DateTime! actor: User } type AnomalyEventOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [AnomalyEvent!]! } enum AnomalyExportFormat { XLSX CSV } type AnomalyImage { url: String! originalName: String type: String } type AnomalyLabel { customerId: Int! createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! color: String! } type AnomalyLabelDiff { anomalyId: Int! addedLabelIds: [Int!]! removedLabelIds: [Int!]! } input AnomalyLabelFilter { id: IDBaseFilterLookup name: StrFilterLookup customerId: IDBaseFilterLookup AND: AnomalyLabelFilter OR: AnomalyLabelFilter NOT: AnomalyLabelFilter DISTINCT: Boolean forAnomalyId: Int } type AnomalyLabelLink { customerId: Int! anomalyId: Int! label: AnomalyLabel! createdAt: DateTime! updatedAt: DateTime! id: ID! } input AnomalyLabelLinkFilter { id: IDBaseFilterLookup anomalyId: IDBaseFilterLookup labelId: IDBaseFilterLookup customerId: IDBaseFilterLookup AND: AnomalyLabelLinkFilter OR: AnomalyLabelLinkFilter NOT: AnomalyLabelLinkFilter DISTINCT: Boolean } type AnomalyLabelLinkOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [AnomalyLabelLink!]! } input AnomalyLabelLinkOrder { id: Ordering } type AnomalyLabelLinksPayload implements MutationResponse { code: String! success: Boolean! message: String! anomalyLabelLinks: [AnomalyLabelLink!]! } type AnomalyLabelOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [AnomalyLabel!]! } input AnomalyLabelOrder { id: Ordering name: Ordering } type AnomalyLabelPayload implements MutationResponse { code: String! success: Boolean! message: String! anomalyLabel: AnomalyLabel } type AnomalyMaterial { anomalyType: AnomalyType! createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! } type AnomalyMaterialOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [AnomalyMaterial!]! } input AnomalyMaterialOrder { id: Ordering name: Ordering anomalyType: Ordering } input AnomalyOrder { id: Ordering turbineId: Ordering turbineComponentId: Ordering projectId: Ordering workorderId: Ordering distanceToRoot: Ordering distanceToLeadingEdge: Ordering maxDistance: Ordering width: Ordering size: Ordering severity: Ordering status: Ordering aiStatus: Ordering stage: Ordering resolutionStatus: Ordering internalExternal: Ordering side: Ordering rib: Ordering crossSectionType: Ordering anomalyTypeId: Ordering anomalyComponentId: Ordering parentTypeId: Ordering rootCauseId: Ordering linkGroup: Ordering widthDifferenceSincePrevious: Ordering widthDifferenceSinceOldest: Ordering lengthDifferenceSincePrevious: Ordering lengthDifferenceSinceOldest: Ordering registeredBy: Ordering createdAt: Ordering updatedAt: Ordering name: Ordering serviceOrderLineNumber: Ordering fieldServicePeriodEnd: Ordering detectedAt: Ordering serviceCompletedDate: Ordering serviceDescription: Ordering windparkName: Ordering countryName: Ordering projectCode: Ordering turbineName: Ordering findingsReviewOrder: Ordering bladeSerialNumber: Ordering bladeManufacturerName: Ordering bladeModelName: Ordering majorComponentName: Ordering componentName: Ordering subComponentName: Ordering anomalyTypeName: Ordering anomalySubTypeName: Ordering materialName: Ordering rootCauseTitle: Ordering linkGroupTotalCount: Ordering clientWorkorderCount: Ordering } type AnomalyParentType { createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! } type AnomalyParentTypeOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [AnomalyParentType!]! } input AnomalyParentTypeOrder { id: Ordering name: Ordering } enum AnomalyPlacement { INTERNAL EXTERNAL BOTH } type AnomalyPreset { id: Int! templateId: Int! name: String! rank: Int! value: JSON! createdAt: DateTime! modifiedAt: DateTime! } type AnomalyPresetTemplate { id: Int! name: String! inspectionType: TemplateInspectionType! customerId: Int customerName: String projectId: Int projectCode: String isDefault: Boolean! createdAt: DateTime! modifiedAt: DateTime! } type AnomalyRecommendation { createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! action: String type: String status: String } type AnomalyRecommendationOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [AnomalyRecommendation!]! } input AnomalyRecommendationOrder { id: Ordering name: Ordering type: Ordering status: Ordering } enum AnomalyRegisteredBy { AERONES AI CUSTOMER } enum AnomalyRegistrationOrigin { INSPECTION_PLATFORM VIS ANOMALY_APP OPS_HUB } enum AnomalyRib { TRAILING_EDGE LEADING_EDGE MID_1 MID_2 MID_3 } type AnomalyRootCauseType { createdAt: DateTime! updatedAt: DateTime! id: ID! title: String } type AnomalyRootCauseTypeOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [AnomalyRootCauseType!]! } input AnomalyRootCauseTypeOrder { id: Ordering title: Ordering } enum AnomalySeverity { LEVEL_0 LEVEL_1 LEVEL_2 LEVEL_3 LEVEL_4 LEVEL_5 } enum AnomalySide { PRESSURE_SIDE SUCTION_SIDE TRAILING_EDGE LEADING_EDGE } enum AnomalyStage { RELEASED REVIEWED CONFIRMED RESOLUTION_IN_PROGRESS RESOLUTION_COMPLETE CLOSED } type AnomalyStats { total: Int! newReleased: Int! newCritical: Int! resolved: Int! unresolved: Int! bySeverity: [AnomalyStatsSeverityItem!]! byMonth: [AnomalyStatsTimeItem!]! byYear: [AnomalyStatsTimeItem!]! byResolutionStatus: [AnomalyStatsGroupItem!]! byStage: [AnomalyStatsGroupItem!]! byType: [AnomalyStatsTypeItem!]! bySubType: [AnomalyStatsSubTypeItem!]! byMaterial: [AnomalyStatsMaterialItem!]! byComponent: [AnomalyStatsComponentItem!]! bySubComponent: [AnomalyStatsSubComponentItem!]! byCause: [AnomalyStatsCauseItem!]! } type AnomalyStatsCauseItem { cause: String! total: Int! } type AnomalyStatsComponentItem { component: String! total: Int! } type AnomalyStatsGroupItem { label: String! total: Int! } type AnomalyStatsMaterialItem { material: String! total: Int! } type AnomalyStatsSeverityItem { severity: String! total: Int! new: Int! } type AnomalyStatsSubComponentItem { subComponent: String! total: Int! } type AnomalyStatsSubTypeItem { subType: String! total: Int! } type AnomalyStatsTimeItem { period: DateTime! total: Int! } type AnomalyStatsTypeItem { type: String! total: Int! } type AnomalyTrendPoint { serviceOrderLineId: ID! completedDate: DateTime isCurrent: Boolean! total: Int! } type AnomalyType { parentAnomalyType: AnomalyType createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! inspectionType: String } input AnomalyTypeFilter { id: IDBaseFilterLookup name: StrFilterLookup inspectionType: StrFilterLookup parentAnomalyType: IDFilterLookup AND: AnomalyTypeFilter OR: AnomalyTypeFilter NOT: AnomalyTypeFilter DISTINCT: Boolean serviceCode: String } type AnomalyTypeOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [AnomalyType!]! } input AnomalyTypeOrder { id: Ordering name: Ordering inspectionType: Ordering parentAnomalyType: Ordering } type ApiKey { id: ID! prefix: String! name: String! createdAt: DateTime! lastUsedAt: DateTime } type ApiKeyOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ApiKey!]! } enum Applicability { REQUIRED CONDITIONAL } input AssignTurbineInput { workorderId: Int! turbineId: Int! turbineComponentId: Int = null } type AssignTurbinePayload implements MutationResponse { code: String! success: Boolean! message: String! workorder: Workorder serviceOrderLine: ServiceOrderLine } input AuthInput { token: String! tokenType: TokenType! impersonateId: Int = null } type AuthPayload { success: Boolean! } input BladeComponentLinkInput { id: Int! turbineComponentId: Int! } type BladeCountryRef { id: ID! code: String! name: String } type BladeLastServiceByCategory { inspection: BladeServiceBucket! cleaning: BladeServiceBucket! repair: BladeServiceBucket! lps: BladeServiceBucket! } type BladeMatrixAxisItem { id: String! name: String! } type BladeMatrixCell { rowId: String! colId: String! worstSeverityCount: Int! distribution: BladeMatrixDistribution! } type BladeMatrixDistribution { cat12: Int! cat3: Int! cat45: Int! total: Int! } enum BladeMatrixLifecycle { OPERATIONAL FACTORY } type BladeMatrixStats { rows: [BladeMatrixAxisItem!]! cols: [BladeMatrixAxisItem!]! cells: [BladeMatrixCell!]! } type BladeMonthlySeverity { month: String! maxSeverity: Int! count: Int! } type BladeRef { id: ID! name: String! } type BladeRollup { bladeId: ID! maxSeverityLevel: Int! activeAnomalyCount: Int! criticalCount: Int! actionGapCount: Int! latestAnomalyAt: DateTime lastServiceByCategory: BladeLastServiceByCategory! repairSource: String park: BladeRef locationType: String country: BladeCountryRef turbineOem: BladeRef turbineModel: BladeRef } type BladeServiceBucket { date: DateTime serviceCode: String serviceOrderLineId: ID } type BladeServiceCounts { bladeId: ID! servicesCount: Int! inspectionsCount: Int! } type BladeSeverityHistory { bladeId: ID! monthlySeverities: [BladeMonthlySeverity!]! } type BladeStats { total: Int! turbinesTotal: Int! locationsTotal: Int! servicesTotal: Int! criticalTotal: Int! actionGapTotal: Int! newlyCriticalTotal: Int! noInspection12mTotal: Int! severity: [BladeStatsSeverityItem!]! health: [BladeStatsHealthItem!]! new: [BladeStatsNewItem!]! serviceType: [BladeStatsServiceTypeItem!]! locations: [BladeStatsLocationItem!]! } type BladeStatsHealthItem { health: String! total: Int! } type BladeStatsLocationItem { id: ID! name: String! latitude: Float longitude: Float coordinates: String turbineCount: Int! health: String! maxSeverityLevel: String } type BladeStatsNewItem { severity: String! total: Int! } type BladeStatsServiceTypeItem { serviceType: String! total: Int! } type BladeStatsSeverityItem { severity: String! total: Int! } enum BladeType { BOX_SPAR SINGLE_SHEAR_WEB DOUBLE_SHEAR_WEB TRIPLE_SHEAR_WEB QUADRUPLE_SHEAR_WEB } type Bookmark { id: Int! type: BookmarkType! description: String! visibility: BookmarkVisibility! serviceOrderLineId: Int! turbineComponentId: Int! sourceObjectTypeId: Int! sourceObjectId: Int! distanceToRoot: Float! videoTimestampMs: Int videoFrame: Int positionX: Float! positionY: Float! updatedAt: DateTime! } type BookmarkOffsetPaginated { pageInfo: OffsetPaginationInfo! totalCount: Int! results: [Bookmark!]! } enum BookmarkType { POINT_OF_INTEREST SUSPECTED_DAMAGE NEEDS_SECOND_OPINION REPAIR_REFERENCE } enum BookmarkVisibility { ME INTERNAL CLIENT } input BoolBaseFilterLookup { """Exact match. Filter will be skipped on `null` value""" exact: Boolean """Assignment test. Filter will be skipped on `null` value""" isNull: Boolean """ Exact match of items in a given list. Filter will be skipped on `null` value """ inList: [Boolean!] } type BulkAnnotationStageFailure { id: Int! code: String! message: String! currentStage: AnomalyStage } type BulkAnomalyLabelDiffPayload implements MutationResponse { code: String! success: Boolean! message: String! diffs: [AnomalyLabelDiff!]! } input BulkAttachDetachAnomalyLabelsInput { anomalyIds: [Int!]! addLabelIds: [Int!]! = [] removeLabelIds: [Int!]! = [] } input BulkCreateTasksInput { entityType: String! entityIds: [Int!]! title: String! description: String = null assigneeUserId: Int = null status: String! = "backlog" priority: Int! = 2 visibility: String! = "private" startDate: Date = null dueDate: Date = null } type BulkCreateTasksPayload implements MutationResponse { code: String! success: Boolean! message: String! tasks: [Task!]! } type BulkServiceOrderLineStageFailure { id: Int! code: String! message: String! currentStage: ServiceOrderLineStage } input BulkSetWatchedInput { entityType: String! entityIds: [Int!]! watched: Boolean! } type BulkSetWatchedPayload implements MutationResponse { code: String! success: Boolean! message: String! entityIds: [Int!]! } input BulkUpdateAnnotationStagesInput { annotationIds: [Int!]! stage: AnomalyStage! } type BulkUpdateAnnotationStagesPayload implements MutationResponse { code: String! success: Boolean! message: String! requestedIds: [Int!]! updatedIds: [Int!]! targetStage: AnomalyStage failures: [BulkAnnotationStageFailure!]! } input BulkUpdateServiceOrderLinesStageInput { ids: [Int!]! stage: ServiceOrderLineStage! } type BulkUpdateServiceOrderLinesStagePayload implements MutationResponse { code: String! success: Boolean! message: String! requestedIds: [Int!]! updatedIds: [Int!]! targetStage: ServiceOrderLineStage failures: [BulkServiceOrderLineStageFailure!]! } type BusinessRegion { createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! } type BusinessRegionOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [BusinessRegion!]! } input BusinessRegionOrder { id: Ordering name: Ordering } type CWMActiveCampaign { id: Int! name: String! status: String! } type CWMCampaign { customerId: Int createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! status: String! description: String startDate: Date dueDate: Date completedDate: Date notes: String } input CWMCampaignFilter { id: IDBaseFilterLookup name: StrFilterLookup status: StrFilterLookup customerId: IDBaseFilterLookup AND: CWMCampaignFilter OR: CWMCampaignFilter NOT: CWMCampaignFilter DISTINCT: Boolean } type CWMCampaignOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [CWMCampaign!]! } input CWMCampaignOrder { id: Ordering name: Ordering status: Ordering startDate: Ordering dueDate: Ordering updatedAt: Ordering } type CWMTurbineActiveCampaigns { turbineId: Int! campaigns: [CWMActiveCampaign!]! } type Certificate { country: Country category: CertificateCategory createdAt: DateTime! updatedAt: DateTime! id: ID! code: String name: String! description: String defaultValidityMonths: Int isActive: Boolean! source: String } type CertificateCategory { createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! description: String color: String sortOrder: Int! } type CertificateCategoryOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [CertificateCategory!]! } input CertificateCategoryOrder { id: Ordering name: Ordering sortOrder: Ordering } type CertificateExpense { resource: Resource! certificate: Certificate resourceCertificate: ResourceCertificate issuer: CertificateIssuer offering: CertificateOffering project: Project currency: Currency! status: Status! createdAt: DateTime! updatedAt: DateTime! id: ID! issuerName: String amount: Decimal! orderDate: Date! completionDate: Date invoiceNumber: String notes: String reason: String } type CertificateExpenseOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [CertificateExpense!]! } input CertificateExpenseOrder { id: Ordering orderDate: Ordering completionDate: Ordering amount: Ordering status: Ordering } type CertificateIssuer { country: Country createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! description: String website: String email: String phone: String address: String additionalInfo: String isActive: Boolean! } type CertificateIssuerOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [CertificateIssuer!]! } input CertificateIssuerOrder { id: Ordering name: Ordering isActive: Ordering } type CertificateOffering { certificate: Certificate! issuer: CertificateIssuer! country: Country currency: Currency createdAt: DateTime! updatedAt: DateTime! id: ID! cost: Decimal validityMonths: Int format: String duration: String howToAcquire: String bookingUrl: String additionalInfo: String isActive: Boolean! } type CertificateOfferingOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [CertificateOffering!]! } input CertificateOfferingOrder { id: Ordering cost: Ordering validityMonths: Ordering isActive: Ordering } type CertificateOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Certificate!]! } input CertificateOrder { id: Ordering name: Ordering code: Ordering isActive: Ordering } type ComponentType { parent: ComponentType createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! } input ComponentTypeFilter { name: StrFilterLookup AND: ComponentTypeFilter OR: ComponentTypeFilter NOT: ComponentTypeFilter DISTINCT: Boolean } type ComponentTypeOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ComponentType!]! } input ComponentTypeOrder { id: Ordering name: Ordering } input ConfirmLogisticsAttachmentInput { submissionId: Int! fieldId: String! attachmentUuid: String! } type ConfirmLogisticsAttachmentPayload implements MutationResponse { code: String! success: Boolean! message: String! formSubmission: LogisticsFormSubmission } input ConfirmPlanningAttachmentInput { attachmentUuid: String! fileName: String! contentType: String! byteSize: Int! campaignId: Int = null projectId: Int = null serviceOrderId: Int = null workOrderId: Int = null commentId: Int = null } type ConfirmPlanningAttachmentPayload implements MutationResponse { code: String! success: Boolean! message: String! planningAttachment: PlanningAttachment } type CoreAnomaly { turbine: Turbine turbineComponent: TurbineComponent project: Project workorderId: Int serviceOrderLineId: Int aiAnomalyId: Int sourceObjectTypeId: Int serviceOrderLine: ServiceOrderLine severity: AnomalySeverity aiStatus: AnomalyAIStatus stage: AnomalyStage! internalExternal: AnomalyPlacement! side: AnomalySide crossSectionSide: AnomalyCrossSectionSide crossSectionType: AnomalyCrossSectionType! rib: AnomalyRib registeredBy: AnomalyRegisteredBy! anomalyType: AnomalyType anomalySubType: AnomalyType anomalyMajorComponent: AnomalyComponent anomalyComponent: AnomalyComponent anomalySubComponent: AnomalyComponent anomalyMaterial: AnomalyMaterial parentType: AnomalyParentType rootCause: AnomalyRootCauseType parentAnomaly: CoreAnomaly crossFileIds: JSON previewImageUrl: String createdAt: DateTime! updatedAt: DateTime! id: ID! name: String turbineComponentSerialNumber: String distanceToRoot: Float! maxDistance: Float distanceToLeadingEdge: Float crossSectionDistance: Float crossSectionChamberDistance: Float width: Float status: String! resolutionStatus: String! clientStatus: String chargeable: Boolean description: String comments: String serviceProviderId: Int damageCause: String videoTimestampMs: Int linkGroup: String registrationOrigin: String widthDifferenceSincePrevious: Float widthDifferenceSinceOldest: Float lengthDifferenceSincePrevious: Float lengthDifferenceSinceOldest: Float sourceObjectId: Int videoFrame: Int qrCode: Int segmentation: String segmentationVersion: Int! unityDetails: JSON bbox: String aiConfidence: Float aiImagesV2: Boolean frameBlobPath: String profileDepthFrom: Float @deprecated(reason: "Profile depth is recorded as client custom fields; read customValues instead (OH-4117). Nothing downstream reads this column, but it is not guaranteed null: whatever was written here is read back. Removed once the client portal and VIS stop selecting it.") profileDepthTo: Float @deprecated(reason: "Profile depth is recorded as client custom fields; read customValues instead (OH-4117). Nothing downstream reads this column, but it is not guaranteed null: whatever was written here is read back. Removed once the client portal and VIS stop selecting it.") customFields: [AnomalyClientField!]! customValues: [AnomalyCustomValue!]! linkGroupTotalCount: Int! clientWorkorderCount: Int! distanceToHub: Float images: [AnomalyImage!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) events(pagination: OffsetPaginationInput): AnomalyEventOffsetPaginated! } input CoreAnomalyFilter { id: ID name: String turbine: DjangoModelFilterInput turbineComponent: DjangoModelFilterInput project: DjangoModelFilterInput workorder: DjangoModelFilterInput serviceOrderLine: DjangoModelFilterInput severity: String status: String aiStatus: String stage: String resolutionStatus: String internalExternal: String side: String registeredBy: String anomalyType: DjangoModelFilterInput anomalyComponent: DjangoModelFilterInput parentType: DjangoModelFilterInput rootCause: DjangoModelFilterInput parentAnomaly: DjangoModelFilterInput createdAt: DatetimeFilterLookup updatedAt: DatetimeFilterLookup AND: CoreAnomalyFilter OR: CoreAnomalyFilter NOT: CoreAnomalyFilter DISTINCT: Boolean serviceOrderLineIds: [ID!] turbineIds: [ID!] turbineComponentIds: [ID!] projectIds: [ID!] anomalyTypeIds: [ID!] anomalyComponentIds: [ID!] anomalySubComponentIds: [ID!] anomalySubTypeIds: [ID!] anomalyMaterialIds: [ID!] rootCauseIds: [ID!] severities: [String!] stages: [String!] statuses: [String!] resolutionStatuses: [String!] sides: [String!] registeredByList: [String!] windparkIds: [ID!] countryIds: [ID!] isVirtual: Boolean hasTurbineComponent: Boolean bladeManufacturerIds: [ID!] bladeModelIds: [ID!] search: String customValues: AnomalyCustomValueFilterInput linkGroupSearch: String distanceToRootGte: Float distanceToRootLte: Float idsIn: [ID!] anomalyDetailComponentIds: [ID!] serviceTypes: [String!] serviceTypePrefixes: [String!] serviceDescriptions: [String!] serviceStatuses: [String!] linkGroup: String hasWorkOrders: Boolean hasClientWorkorders: Boolean hasServiceOrderLine: Boolean detectedAtGte: Date detectedAtLte: Date serviceCompletedDateGte: Date serviceCompletedDateLte: Date serviceDateRangeGte: Date @deprecated(reason: "Use serviceCompletedDateGte. Temporary alias during the rename rollout (Wrike 4463377887); remove once inspection-platform is live on prod with the new name and no callers send the old one.") serviceDateRangeLte: Date @deprecated(reason: "Use serviceCompletedDateLte. Temporary alias during the rename rollout (Wrike 4463377887); remove once inspection-platform is live on prod with the new name and no callers send the old one.") createdAtGte: Date createdAtLte: Date updatedAtGte: Date updatedAtLte: Date untouchedSince: DateTime } type CoreAnomalyOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [CoreAnomaly!]! } type Country { region: Region businessRegion: BusinessRegion currency: Currency createdAt: DateTime! updatedAt: DateTime! id: ID! code: String! name: String enabled: Boolean! } type CountryOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Country!]! } input CountryOrder { id: Ordering code: Ordering name: Ordering enabled: Ordering } input CreateApiKeyInput { name: String! } type CreateApiKeyPayload implements MutationResponse { code: String! success: Boolean! message: String! apiKey: ApiKey key: String } input CreateCustomerUserInput { customerId: Int! firstName: String! lastName: String! email: String! phone: String = null customerRoleIds: [Int!]! = [] planningScopeRestricted: Boolean! = false } type CreateCustomerUserPayload implements MutationResponse { code: String! success: Boolean! message: String! customerUser: CustomerUser } type CreateLogisticsAttachmentUploadUrlPayload implements MutationResponse { code: String! success: Boolean! message: String! attachmentUploadUrl: LogisticsAttachmentUploadUrl } input CreatePlanningAttachmentUploadUrlInput { contentType: String = null } type CreatePlanningAttachmentUploadUrlPayload implements MutationResponse { code: String! success: Boolean! message: String! attachmentUploadUrl: PlanningAttachmentUploadUrl } input CreateSavedTaskViewInput { name: String! baseView: String! groupKey: String! layout: String! filters: JSON! sort: JSON! icon: String! = "star" search: String = null } input CreateTaskInput { title: String! description: String = null entityType: String = null entityId: Int = null assigneeUserId: Int = null status: String! = "backlog" priority: Int! = 2 visibility: String! = "private" startDate: Date = null dueDate: Date = null } type Currency { createdAt: DateTime! updatedAt: DateTime! id: ID! code: String! name: String! } type CurrencyOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Currency!]! } input CurrencyOrder { id: Ordering code: Ordering name: Ordering } type Customer { country: Country parentCustomer: Customer currency: Currency type: CustomerType! createdAt: DateTime! updatedAt: DateTime! id: ID! number: String displayName: String! legalName: String vatNumber: String registrationNumber: String additionalInfo: String netsuiteCustomerId: Int children: [Customer!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) } type CustomerAddress { customer: Customer country: Country timezone: Timezone createdAt: DateTime! updatedAt: DateTime! id: ID! name: String additionalInfo: String type: String addressLine1: String! addressLine2: String city: String stateRegion: String postalCode: String } type CustomerAddressOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [CustomerAddress!]! } input CustomerAddressOrder { id: Ordering name: Ordering type: Ordering addressLine1: Ordering addressLine2: Ordering city: Ordering stateRegion: Ordering postalCode: Ordering } type CustomerBankAccount { customer: Customer createdAt: DateTime! updatedAt: DateTime! id: ID! name: String iban: String accountNumber: String bankName: String swiftBic: String currencyCode: String isPrimary: Boolean! } type CustomerBankAccountOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [CustomerBankAccount!]! } input CustomerBankAccountOrder { id: Ordering name: Ordering iban: Ordering accountNumber: Ordering bankName: Ordering swiftBic: Ordering currencyCode: Ordering isPrimary: Ordering } type CustomerContact { customer: Customer customerLocation: CustomerLocation createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! title: String department: String email: String phone: String isPrimary: Boolean! additionalInfo: String } input CustomerContactFilter { isPrimary: BoolBaseFilterLookup AND: CustomerContactFilter OR: CustomerContactFilter NOT: CustomerContactFilter DISTINCT: Boolean customer: [ID!] customerGeneral: Boolean } type CustomerContactOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [CustomerContact!]! } input CustomerContactOrder { id: Ordering name: Ordering title: Ordering department: Ordering email: Ordering phone: Ordering isPrimary: Ordering } type CustomerCustomField { customer: Customer! accessRules: JSON validation: JSON optionsSource: String createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! type: String! options: JSON } type CustomerCustomFieldValue { customField: CustomerCustomField! valueJson: JSON createdAt: DateTime! updatedAt: DateTime! id: ID! value: String } input CustomerCustomValueEntryInput { customFieldId: Int! value: String = null valueJson: JSON = null } enum CustomerFeatureLevel { NONE VIEW FULL } type CustomerLocation { customer: Customer! location: Location! relationship: RelationshipType createdAt: DateTime! updatedAt: DateTime! id: ID! } type CustomerLocationOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [CustomerLocation!]! } input CustomerLocationOrder { id: Ordering customer: Ordering location: Ordering relationship: Ordering } type CustomerOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Customer!]! } input CustomerOrder { id: Ordering number: Ordering displayName: Ordering legalName: Ordering firstName: Ordering lastName: Ordering vatNumber: Ordering registrationNumber: Ordering netsuiteCustomerId: Ordering } type CustomerPermissionGroup { key: String! label: String! description: String! levels: [CustomerFeatureLevel!]! } type CustomerRole { id: Int! customerId: Int! name: String! description: String! isEditable: Boolean! featureLevels: CustomerRoleFeatureLevels! } type CustomerRoleFeatureLevels { fleet: CustomerFeatureLevel! accessControl: CustomerFeatureLevel! servicesAnomalies: CustomerFeatureLevel! planning: CustomerFeatureLevel! reports: CustomerFeatureLevel! inspectionScope: CustomerFeatureLevel! } input CustomerRoleFeatureLevelsInput { fleet: CustomerFeatureLevel! = NONE accessControl: CustomerFeatureLevel! = NONE servicesAnomalies: CustomerFeatureLevel! = NONE planning: CustomerFeatureLevel! = NONE reports: CustomerFeatureLevel! = NONE inspectionScope: CustomerFeatureLevel! = NONE } type CustomerTurbine { customer: Customer! turbine: Turbine! relationship: RelationshipType createdAt: DateTime! updatedAt: DateTime! id: ID! } type CustomerTurbineOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [CustomerTurbine!]! } input CustomerTurbineOrder { id: Ordering customer: Ordering turbine: Ordering relationship: Ordering } enum CustomerType { COMMERCIAL VIRTUAL } enum CustomerTypeFilter { COMMERCIAL VIRTUAL ALL } type CustomerUser { id: Int! customerId: Int! planningScopeRestricted: Boolean! createdAt: DateTime! user: User! authGroup: UserRole status: CustomerUserStatus! customerRoleIds: [Int!]! customerRoles: [CustomerRole!]! inviteExpiresAt: DateTime inviteExpired: Boolean! } input CustomerUserFilter { AND: CustomerUserFilter OR: CustomerUserFilter NOT: CustomerUserFilter DISTINCT: Boolean search: String email: String isActive: Boolean emailDomains: [String!] createdAtAfter: DateTime createdAtBefore: DateTime lastLoginAfter: DateTime lastLoginBefore: DateTime customerRoleId: Int statuses: [CustomerUserStatus!] } type CustomerUserOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [CustomerUser!]! } input CustomerUserOrder { id: Ordering status: Ordering user_Email: Ordering user_FirstName: Ordering user_LastName: Ordering createdAt: Ordering user_LastLogin: Ordering } enum CustomerUserStatus { INVITED ACTIVE DECLINED EXPIRED DELETED } type DailyDebrief { project: Project projectResourceSet: ProjectResourceSet createdAt: DateTime! createdBy: DjangoModelType id: ID! date: Date! comments: String plansForTomorrow: String maintainxTickets: String resources: [DailyDebriefTeamMember!]! } type DailyDebriefTeamMember { resourceId: Int! isLead: Boolean resourceFullName: String resourceEmail: String } type DailyReportEntry { date: Date! serviceOrderLine: ServiceOrderLine! } input DailyReportEntryOrder { field: DailyReportEntryOrderField! = DATE direction: DailyReportEntryOrderDirection! = ASC } enum DailyReportEntryOrderDirection { ASC DESC } enum DailyReportEntryOrderField { DATE TURBINE_NAME LOCATION_NAME PROJECT_CODE SERVICE_CODE SERVICE_NUMBER } type DailyReportEntryPage { pageInfo: DailyReportEntryPageInfo! totalCount: Int! results: [DailyReportEntry!]! } type DailyReportEntryPageInfo { offset: Int! limit: Int } """Date (isoformat)""" scalar Date input DateComparisonFilterLookup { """Exact match. Filter will be skipped on `null` value""" exact: Date """Assignment test. Filter will be skipped on `null` value""" isNull: Boolean """ Exact match of items in a given list. Filter will be skipped on `null` value """ inList: [Date!] """Greater than. Filter will be skipped on `null` value""" gt: Date """Greater than or equal to. Filter will be skipped on `null` value""" gte: Date """Less than. Filter will be skipped on `null` value""" lt: Date """Less than or equal to. Filter will be skipped on `null` value""" lte: Date """Inclusive range test (between)""" range: DateRangeLookup } input DateFilterLookup { """Exact match. Filter will be skipped on `null` value""" exact: Date """Assignment test. Filter will be skipped on `null` value""" isNull: Boolean """ Exact match of items in a given list. Filter will be skipped on `null` value """ inList: [Date!] """Greater than. Filter will be skipped on `null` value""" gt: Date """Greater than or equal to. Filter will be skipped on `null` value""" gte: Date """Less than. Filter will be skipped on `null` value""" lt: Date """Less than or equal to. Filter will be skipped on `null` value""" lte: Date """Inclusive range test (between)""" range: DateRangeLookup year: IntComparisonFilterLookup month: IntComparisonFilterLookup day: IntComparisonFilterLookup weekDay: IntComparisonFilterLookup isoWeekDay: IntComparisonFilterLookup week: IntComparisonFilterLookup isoYear: IntComparisonFilterLookup quarter: IntComparisonFilterLookup } input DateRangeLookup { start: Date = null end: Date = null } """Date with time (isoformat)""" scalar DateTime input DatetimeFilterLookup { """Exact match. Filter will be skipped on `null` value""" exact: DateTime """Assignment test. Filter will be skipped on `null` value""" isNull: Boolean """ Exact match of items in a given list. Filter will be skipped on `null` value """ inList: [DateTime!] """Greater than. Filter will be skipped on `null` value""" gt: DateTime """Greater than or equal to. Filter will be skipped on `null` value""" gte: DateTime """Less than. Filter will be skipped on `null` value""" lt: DateTime """Less than or equal to. Filter will be skipped on `null` value""" lte: DateTime """Inclusive range test (between)""" range: DatetimeRangeLookup year: IntComparisonFilterLookup month: IntComparisonFilterLookup day: IntComparisonFilterLookup weekDay: IntComparisonFilterLookup isoWeekDay: IntComparisonFilterLookup week: IntComparisonFilterLookup isoYear: IntComparisonFilterLookup quarter: IntComparisonFilterLookup hour: IntComparisonFilterLookup minute: IntComparisonFilterLookup second: IntComparisonFilterLookup date: DateComparisonFilterLookup time: TimeComparisonFilterLookup } input DatetimeRangeLookup { start: DateTime = null end: DateTime = null } """Decimal (fixed-point)""" scalar Decimal input DecimalComparisonFilterLookup { """Exact match. Filter will be skipped on `null` value""" exact: Decimal """Assignment test. Filter will be skipped on `null` value""" isNull: Boolean """ Exact match of items in a given list. Filter will be skipped on `null` value """ inList: [Decimal!] """Greater than. Filter will be skipped on `null` value""" gt: Decimal """Greater than or equal to. Filter will be skipped on `null` value""" gte: Decimal """Less than. Filter will be skipped on `null` value""" lt: Decimal """Less than or equal to. Filter will be skipped on `null` value""" lte: Decimal """Inclusive range test (between)""" range: DecimalRangeLookup } input DecimalRangeLookup { start: Decimal = null end: Decimal = null } input DeclineInvitationInput { customerId: Int! } type DeclineInvitationPayload implements MutationResponse { code: String! success: Boolean! message: String! customerUser: CustomerUser } type Delay { delayType: DelayType! robotSet: RobotSet resource: Resource location: Location project: Project workorder: Workorder createdAt: DateTime! updatedAt: DateTime! id: ID! comment: String! description: String! startDatetime: DateTime endDatetime: DateTime durationMinutes: Int customFields: JSON! teamResources: JSON } type DelayCategory { createdAt: DateTime! updatedAt: DateTime! id: ID! code: String! description: String enabled: Boolean! includeInClientReports: Boolean! } type DelayCategoryOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [DelayCategory!]! } input DelayFilter { workorder: DjangoModelFilterInput robotSet: DjangoModelFilterInput resource: DjangoModelFilterInput startDatetime: DatetimeFilterLookup endDatetime: DatetimeFilterLookup AND: DelayFilter OR: DelayFilter NOT: DelayFilter DISTINCT: Boolean teamResourceIds: [Int!] workorderResourceIds: [Int!] } type DelayOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Delay!]! } type DelayType { delayCategory: DelayCategory! createdAt: DateTime! updatedAt: DateTime! id: ID! code: String! description: String enabled: Boolean! includeInClientReports: Boolean! customFields: JSON! } type DelayTypeOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [DelayType!]! } input DeleteAnomalyClientFieldInput { id: Int! } type DeleteAnomalyClientFieldPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteAnomalyCommentInput { id: Int! } input DeleteAnomalyCrossSectionImageInput { anomalyId: Int! } type DeleteAnomalyCrossSectionImagePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteAnomalyCustomValueInput { id: Int! } type DeleteAnomalyCustomValuePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteAnomalyInput { id: Int! } input DeleteAnomalyLabelInput { id: Int! } type DeleteAnomalyLabelPayload implements MutationResponse { code: String! success: Boolean! message: String! affectedAnomalyIds: [Int!]! } type DeleteAnomalyPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteAnomalyPresetInput { id: Int! } type DeleteAnomalyPresetPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteAnomalyPresetTemplateInput { id: Int! } type DeleteAnomalyPresetTemplatePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteAnomalyRecommendationInput { id: Int! } type DeleteAnomalyRecommendationPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteBookmarkInput { id: Int! } type DeleteBookmarkPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteBusinessRegionInput { id: Int! } type DeleteBusinessRegionPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteCertificateCategoryInput { id: Int! } type DeleteCertificateCategoryPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteCertificateExpenseInput { id: Int! } type DeleteCertificateExpensePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteCertificateInput { id: Int! } input DeleteCertificateIssuerInput { id: Int! } type DeleteCertificateIssuerPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteCertificateOfferingInput { id: Int! } type DeleteCertificateOfferingPayload implements MutationResponse { code: String! success: Boolean! message: String! } type DeleteCertificatePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteComponentModelInput { id: Int! } type DeleteComponentModelPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteComponentTypeInput { id: Int! } type DeleteComponentTypePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteCountryInput { id: Int! } type DeleteCountryPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteCurrencyInput { id: Int! } type DeleteCurrencyPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteCustomerAddressInput { id: Int! } type DeleteCustomerAddressPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteCustomerBankAccountInput { id: Int! } type DeleteCustomerBankAccountPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteCustomerContactInput { id: Int! } type DeleteCustomerContactPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteCustomerInput { id: Int! } input DeleteCustomerLocationInput { id: Int! } type DeleteCustomerLocationPayload implements MutationResponse { code: String! success: Boolean! message: String! } type DeleteCustomerPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteCustomerRoleInput { id: Int! } type DeleteCustomerRolePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteCustomerTurbineInput { id: Int! } type DeleteCustomerTurbinePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteCustomerUserInput { id: Int! } type DeleteCustomerUserPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteDelayCategoryInput { id: Int! } type DeleteDelayCategoryPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteDelayInput { id: Int! } type DeleteDelayPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteDelayTypeInput { id: Int! } type DeleteDelayTypePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteFileInput { id: Int! } type DeleteFilePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteLocationInput { id: Int! } type DeleteLocationPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteLogisticsAttachmentInput { submissionId: Int! fieldId: String! attachmentUuid: String! } type DeleteLogisticsAttachmentPayload implements MutationResponse { code: String! success: Boolean! message: String! formSubmission: LogisticsFormSubmission } input DeleteLogisticsFormSubmissionInput { id: Int! } type DeleteLogisticsFormSubmissionPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteManufacturerInput { id: Int! } type DeleteManufacturerPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeletePlanningAttachmentInput { id: Int! } type DeletePlanningAttachmentPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeletePlanningCampaignInput { id: Int! } type DeletePlanningCampaignPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeletePlanningCommentInput { id: Int! } type DeletePlanningCommentPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeletePlanningCustomerVendorInput { id: Int! } type DeletePlanningCustomerVendorPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeletePlanningProjectInput { id: Int! } type DeletePlanningProjectPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeletePlanningServiceInput { id: Int! } input DeletePlanningServiceOrderInput { id: Int! } type DeletePlanningServiceOrderPayload implements MutationResponse { code: String! success: Boolean! message: String! } type DeletePlanningServicePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeletePlanningWorkOrderInput { id: Int! } type DeletePlanningWorkOrderPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeletePlanningWorkOrderTypeInput { id: Int! } type DeletePlanningWorkOrderTypePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeletePositionInput { id: Int! } type DeletePositionPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteProjectCommentInput { id: Int! } type DeleteProjectCommentPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteProjectContactInput { id: Int! } type DeleteProjectContactPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteProjectLocationInput { id: Int! } type DeleteProjectLocationPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteProjectPlannedResourceSetInput { id: Int! } input DeleteProjectPlannedResourceSetItemInput { id: Int! } type DeleteProjectPlannedResourceSetItemPayload implements MutationResponse { code: String! success: Boolean! message: String! } type DeleteProjectPlannedResourceSetPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteProjectStatusInput { id: Int! } type DeleteProjectStatusPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteProjectTaskCommentInput { id: Int! } type DeleteProjectTaskCommentPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteProjectTaskInput { id: Int! } type DeleteProjectTaskPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeletePurchaseOrderInput { id: Int! } type DeletePurchaseOrderPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeletePurchaseOrderProjectInput { id: Int! } type DeletePurchaseOrderProjectPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeletePurchaseOrderVersionInput { id: Int! } type DeletePurchaseOrderVersionPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteRegionInput { id: Int! } type DeleteRegionPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteRelationshipTypeInput { id: Int! } type DeleteRelationshipTypePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteResourceInput { id: Int! } type DeleteResourcePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteResourceServicePositionInput { id: Int! } type DeleteResourceServicePositionPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteResourceSetInput { id: Int! } type DeleteResourceSetPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteRobotSetInput { id: Int! } type DeleteRobotSetPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteRobotSetServiceInput { id: Int! } type DeleteRobotSetServicePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteSavedTaskViewInput { id: Int! } type DeleteSavedTaskViewPayload implements MutationResponse { code: String! success: Boolean! message: String! deleted: Boolean! } input DeleteServiceItemActivityInput { id: Int! } type DeleteServiceItemActivityPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteServiceItemInput { id: Int! } type DeleteServiceItemPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteServiceOrderHeaderInput { id: Int! } type DeleteServiceOrderHeaderPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteServiceOrderLineInput { id: Int! } type DeleteServiceOrderLinePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteServiceResultInput { id: Int! } type DeleteServiceResultPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteServiceResultTemplateFieldInput { id: Int! } type DeleteServiceResultTemplateFieldPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteServiceResultTemplateInput { id: Int! } type DeleteServiceResultTemplatePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteTaskCommentInput { id: Int! } input DeleteTaskInput { id: Int! } type DeleteTaskPayload implements MutationResponse { code: String! success: Boolean! message: String! deleted: Boolean! } input DeleteTimezoneInput { id: Int! } type DeleteTimezonePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteTurbineComponentInput { id: Int! } type DeleteTurbineComponentPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteTurbineInput { id: Int! } input DeleteTurbineModelInput { id: Int! } type DeleteTurbineModelPayload implements MutationResponse { code: String! success: Boolean! message: String! } type DeleteTurbinePayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteUserInput { id: Int! } type DeleteUserPayload implements MutationResponse { code: String! success: Boolean! message: String! user: User } input DeleteVendorInput { id: Int! } type DeleteVendorPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteWorkTimeCategoryInput { id: Int! } type DeleteWorkTimeCategoryPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteWorkTimeLogInput { id: Int! } type DeleteWorkTimeLogPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteWorkorderActivityInput { id: Int! } input DeleteWorkorderActivityMetadataInput { id: Int! } type DeleteWorkorderActivityMetadataPayload implements MutationResponse { code: String! success: Boolean! message: String! } type DeleteWorkorderActivityPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteWorkorderInput { id: Int! } type DeleteWorkorderPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteWorkorderPlanInput { planId: Int! } type DeleteWorkorderPlanPayload implements MutationResponse { code: String! success: Boolean! message: String! } input DeleteWorkorderResourceSetInput { id: Int! } type DeleteWorkorderResourceSetPayload implements MutationResponse { code: String! success: Boolean! message: String! } type DistanceVector { startX: Int! startY: Int! endX: Int! endY: Int! } input DjangoModelFilterInput { pk: ID! } type DjangoModelType { pk: ID! } input DuplicateTaskInput { id: Int! } input EditAnomalyCommentInput { id: Int! body: String! } input EditTaskCommentInput { id: Int! body: String! } type EntityStatsDelta { today: EntityStatsSnapshot weekAgo: EntityStatsSnapshot latest: EntityStatsSnapshot latestBaseline: EntityStatsSnapshot } type EntityStatsSnapshot { createdAt: DateTime! updatedAt: DateTime! id: ID! entityType: String! entityId: Int! snapshotDate: Date! healthDistribution: JSON! criticalFindingsCount: Int! } input ExportAnomaliesReportInput { format: AnomalyExportFormat! = XLSX filters: CoreAnomalyFilter = null selectedAnomalyIds: [ID!] = null visibleColumns: [String!] = null } type ExportAnomaliesReportPayload implements MutationResponse { code: String! success: Boolean! message: String! fileName: String contentType: String fileBase64: String } enum ExportFileFormat { XLSX CSV } input ExportPlanningProjectsReportInput { selectedIds: [ID!]! format: ExportFileFormat! = XLSX visibleColumns: [String!] = null } type ExportPlanningProjectsReportPayload implements MutationResponse { code: String! success: Boolean! message: String! fileName: String contentType: String fileBase64: String } input ExportServicesReportInput { format: ServiceExportFormat! = XLSX filters: ServiceOrderLineFilter = null order: ServiceOrderLineOrder = null selectedSolIds: [ID!] = null visibleColumns: [String!] = null } type ExportServicesReportPayload implements MutationResponse { code: String! success: Boolean! message: String! fileName: String contentType: String fileBase64: String } enum ExternalImageStatus { NEW ANOMALIES_FLAGGED ACCEPTED } type FeedSeenMarker { createdAt: DateTime! updatedAt: DateTime! id: ID! feedKind: String! rowKey: String! seenAt: DateTime! } type File { createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! previewName: String bucket: String type: String comments: String status: String customFields: JSON tags: JSON originalName: String deleteReason: String } type FileEntityLink { fileId: Int! workorderActivityId: Int workorderId: Int serviceOrderLineId: Int serviceOrderId: Int projectId: Int turbineId: Int turbineComponentId: Int anomalyId: Int serviceResultId: Int createdAt: DateTime! updatedAt: DateTime! id: ID! additionalInformation: JSON } input FileEntityLinkFilter { anomaly: DjangoModelFilterInput serviceOrderLine: DjangoModelFilterInput workorder: DjangoModelFilterInput project: DjangoModelFilterInput turbine: DjangoModelFilterInput turbineComponent: DjangoModelFilterInput AND: FileEntityLinkFilter OR: FileEntityLinkFilter NOT: FileEntityLinkFilter DISTINCT: Boolean anomalyIds: [ID!] } type FileEntityLinkOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [FileEntityLink!]! } input FileEntityLinkOrder { id: Ordering additionalInformation: Ordering } type FileOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [File!]! } type FleetComposition { turbinesByOemModel: [FleetCompositionOemModelItem!]! bladesByOemModel: [FleetCompositionOemModelItem!]! bladesBySizeClass: [FleetCompositionSizeClassItem!]! inspectionCoverage: [FleetCompositionCoverageItem!]! } type FleetCompositionCoverageItem { bucket: String! count: Int! } type FleetCompositionOemModelItem { manufacturerId: ID manufacturerName: String! modelId: ID modelName: String count: Int! } type FleetCompositionSizeClassItem { sizeClass: String! count: Int! } type FleetGrainAsset { id: ID! label: String! worstLevel: Int! } type FleetGrainLevelCount { level: Int! total: Int! } type FleetGrainResult { total: Int! assets: [FleetGrainAsset!]! byLevel: [FleetGrainLevelCount!]! } type FleetInsights { kpis: FleetInsightsKpis! trend: [FleetInsightsTrendItem!]! backlog: [FleetInsightsBacklogItem!]! windparkSeverity: [FleetInsightsWindparkSeverityItem!]! manufacturerSeverity: [FleetInsightsManufacturerItem!]! severityDistribution: [FleetInsightsSeverityItem!]! distanceToRoot: [FleetInsightsDistanceItem!]! sizeSeverity: [FleetInsightsSizeSeverityItem!]! topAnomalyTypes: [FleetInsightsAnomalyTypeItem!]! } type FleetInsightsAnomalyTypeItem { anomalyTypeId: ID! anomalyTypeName: String! count: Int! percentage: Float! } type FleetInsightsBacklogItem { period: DateTime! totalOpen: Int! criticalOpen: Int! } type FleetInsightsDistanceItem { bucket: String! cat12: Int! cat3: Int! cat45: Int! total: Int! } enum FleetInsightsGranularity { MONTH QUARTER YEAR } type FleetInsightsKpis { totalAnomalies: Int! distinctWindparks: Int! avgSeverity: Float! criticalCount: Int! } type FleetInsightsManufacturerItem { manufacturerName: String! modelName: String cat12: Int! cat3: Int! cat45: Int! total: Int! } type FleetInsightsSeverityItem { severity: String! total: Int! percentage: Float! } type FleetInsightsSizeSeverityItem { sizeBucket: String! severity: String! count: Int! isOutlier: Boolean! } type FleetInsightsTrendItem { period: DateTime! severity: String! count: Int! } type FleetInsightsWindparkSeverityItem { windparkId: ID! windparkName: String! level0: Int! level1: Int! level2: Int! level3: Int! level4: Int! level5: Int! total: Int! } type FleetStatsDelta { today: FleetStatsSnapshot weekAgo: FleetStatsSnapshot latest: FleetStatsSnapshot latestBaseline: FleetStatsSnapshot } type FleetStatsSnapshot { createdAt: DateTime! updatedAt: DateTime! id: ID! snapshotDate: Date! surface: String! fleetHealthDistribution: JSON! criticalFindingsCount: Int! } type GlobalSearchResult { entityType: String! entityId: String! label: String! subtitle: String recency: String } type HomeMetricSeries { metricKey: String! series: [Int!]! delta: Int } input IDBaseFilterLookup { """Exact match. Filter will be skipped on `null` value""" exact: ID """Assignment test. Filter will be skipped on `null` value""" isNull: Boolean """ Exact match of items in a given list. Filter will be skipped on `null` value """ inList: [ID!] } input IDFilterLookup { exact: ID iExact: ID contains: ID iContains: ID inList: [ID!] gt: ID gte: ID lt: ID lte: ID startsWith: ID iStartsWith: ID endsWith: ID iEndsWith: ID range: [ID!] isNull: Boolean regex: String iRegex: String } type InsightsDefects { spanProfile: [InsightsSpanBinItem!]! spanZones: [InsightsSpanZoneItem!]! severityDistribution: [InsightsSeverityItem!]! parkSeverity: [InsightsParkSeverityItem!]! patternExplorer: InsightsPatternExplorer! sizeProfile: [InsightsSizeClassItem!]! manufacturer: InsightsManufacturer! } type InsightsManufacturer { bladeOem: [InsightsManufacturerItem!]! turbineOem: [InsightsManufacturerItem!]! } type InsightsManufacturerItem { manufacturerName: String! manufacturerId: ID modelName: String modelId: ID level1: Int! level2: Int! level3: Int! level4: Int! level5: Int! total: Int! } type InsightsParkSeverityItem { parkId: ID! parkName: String! level0: Int! level1: Int! level2: Int! level3: Int! level4: Int! level5: Int! total: Int! turbineCount: Int! } type InsightsPatternExplorer { byType: [InsightsPatternTypeItem!]! byRootCause: [InsightsPatternRootCauseItem!]! } type InsightsPatternRootCauseItem { rootCauseId: ID rootCauseTitle: String level1: Int! level2: Int! level3: Int! level4: Int! level5: Int! total: Int! } type InsightsPatternTypeItem { anomalyTypeId: ID! anomalyTypeName: String! anomalySubTypeId: ID anomalySubTypeName: String level1: Int! level2: Int! level3: Int! level4: Int! level5: Int! total: Int! } type InsightsSeverityItem { severity: String! total: Int! percentage: Float! } type InsightsSizeClassItem { sizeClass: String! level1: Int! level2: Int! level3: Int! level4: Int! level5: Int! total: Int! } type InsightsSpanBinItem { binIndex: Int! level1: Int! level2: Int! level3: Int! level4: Int! level5: Int! total: Int! } type InsightsSpanZoneItem { zone: String! level1: Int! level2: Int! level3: Int! level4: Int! level5: Int! total: Int! sides: [InsightsSpanZoneSideItem!]! } type InsightsSpanZoneSideItem { side: String! level1: Int! level2: Int! level3: Int! level4: Int! level5: Int! total: Int! } type InspectionImage { url: String! previewUrl: String originalName: String } enum InspectionItemStatus { NOT_STARTED IN_PROGRESS AI_REVIEW DETAILED_REVIEW COMPLETED } input InspectionScopeBladeInput { serialNumber: String! position: String = null modelId: Int = null } enum InspectionScopeLevel { BLADE TURBINE } input InspectionScopeTurbineInput { turbineId: Int = null name: String = null latitude: Float = null longitude: Float = null isVirtual: Boolean! = false manufacturerId: Int = null manufacturerTurbineModelId: Int = null blades: [InspectionScopeBladeInput!]! = [] } type InspectionStats { severityByBlade: [SeverityByBladeItem!]! priorInspectionBladeTotals: [PriorInspectionBladeTotal!]! currentStats: AnomalyStats priorStats: AnomalyStats anomalyTrend: [AnomalyTrendPoint!]! } type InspectionStatsSeverityItem { severity: String! total: Int! } enum InspectionType { INTERNAL EXTERNAL } type InspectionValues { anomalyTypes: [String!]! rootCauses: [String!]! crossSectionTypes: [String!]! crossSectionSides: [String!]! annotationSeverityLevels: [String!]! serviceStages: [String!]! } input IntComparisonFilterLookup { """Exact match. Filter will be skipped on `null` value""" exact: Int """Assignment test. Filter will be skipped on `null` value""" isNull: Boolean """ Exact match of items in a given list. Filter will be skipped on `null` value """ inList: [Int!] """Greater than. Filter will be skipped on `null` value""" gt: Int """Greater than or equal to. Filter will be skipped on `null` value""" gte: Int """Less than. Filter will be skipped on `null` value""" lt: Int """Less than or equal to. Filter will be skipped on `null` value""" lte: Int """Inclusive range test (between)""" range: IntRangeLookup } input IntRangeLookup { start: Int = null end: Int = null } input InviteCustomerUserInput { customerId: Int! userId: Int! customerRoleId: Int! } type InviteCustomerUserPayload implements MutationResponse { code: String! success: Boolean! message: String! customerUser: CustomerUser } type InviteTokenResolution { valid: Boolean! customerId: Int expired: Boolean! } """ The `JSON` scalar type represents JSON values as specified by [ECMA-404](https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf). """ scalar JSON @specifiedBy(url: "https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf") enum LERImageStatus { NEW ANOMALIES_FLAGGED ACCEPTED } enum LERInspectionStatus { NOT_STARTED IN_PROGRESS COMPLETED FLAGGED } type LerBladeRow { id: ID! serialNumber: String position: String remark: String repair: LerRepair! materials: [LerMaterial!]! bladeFields: [LerReportField!]! repairWorkorderStatus: String layout: LerLayout! columns: [LerColumn!]! } type LerColumn { side: String! phase: String! composite: InspectionImage capturedOn: Date } type LerLayout { phases: [LerLayoutEntry!]! positions: [LerLayoutEntry!]! } type LerLayoutEntry { key: String! label: String! } type LerMaterial { materialType: String name: String applicationTempC: Float humidityPct: Float surfaceTempC: Float batchNo: String expirationDate: String description: String image: InspectionImage } type LerRepair { lengthMm: Float widthMm: Float lepThicknessUm: Float } type LerReportField { key: String! label: String! unit: String value: String } type LerResults { serviceOrderLineId: ID! turbineId: ID turbineName: String scopeFields: [LerReportField!]! blades: [LerBladeRow!]! } input LinkAnomaliesInput { anomalyIds: [Int!]! } type LinkAnomaliesPayload implements MutationResponse { code: String! success: Boolean! message: String! linkGroup: String } input LinkAnomaliesToPlanningServiceOrderInput { id: Int! anomalyIds: [Int!]! } type LinkAnomaliesToPlanningServiceOrderPayload implements MutationResponse { code: String! success: Boolean! message: String! planningServiceOrder: PlanningServiceOrder } input LinkBladeComponentsInput { links: [BladeComponentLinkInput!]! } type LinkBladeComponentsPayload implements MutationResponse { code: String! success: Boolean! message: String! } type Location { country: Country timezone: Timezone! createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! additionalInfo: String type: String windparkType: String addressLine1: String! addressLine2: String city: String stateRegion: String postalCode: String latitude: Decimal longitude: Decimal coordinates: String globalWindParkDbId: Int turbineCount: Int! anomalyCount: Int! serviceCount: Int! } input LocationCertificateInput { certificateId: Int! isMandatory: Boolean! = false } input LocationFilter { name: StrFilterLookup country: DjangoModelFilterInput type: StrFilterLookup AND: LocationFilter OR: LocationFilter NOT: LocationFilter DISTINCT: Boolean types: [String!] countryIds: [ID!] maxSeverityLevel: [String!] locationIds: [ID!] health: [Int!] search: String activeWork: [String!] } type LocationOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Location!]! } input LocationOrder { id: Ordering name: Ordering city: Ordering stateRegion: Ordering postalCode: Ordering type: Ordering windparkType: Ordering latitude: Ordering longitude: Ordering globalWindParkDbId: Ordering country: CountryOrder turbineCount: Ordering anomalyCount: Ordering serviceCount: Ordering health: Ordering } type LocationRequiredCertificate { location: Location! certificate: Certificate! createdAt: DateTime! updatedAt: DateTime! id: ID! isMandatory: Boolean! } type LocationRequiredCertificateOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [LocationRequiredCertificate!]! } type LocationRollup { locationId: ID! health: String! maxSeverityLevel: String severityBreakdown: [LocationSeverityCount!]! actionGapCount: Int! actionGapCutoff: DateTime! servicesByStatus: LocationServicesByStatus! activeProjectsCount: Int! projectsStartingThisWeek: Int! activeProjectIds: [Int!]! startingProjectIds: [Int!]! } type LocationServicesByStatus { planned: Int! live: Int! completed: Int! cancelled: Int! startingThisWeek: Int! } type LocationSeverityCount { severity: String! total: Int! } type LocationStats { total: Int! turbinesTotal: Int! servicesTotal: Int! severity: [LocationStatsSeverityItem!]! health: [LocationStatsHealthItem!]! new: [LocationStatsNewItem!]! topLocationServices: [LocationStatsTopServiceItem!]! locations: [LocationStatsLocationItem!]! actionGapCutoff: DateTime! openCriticalTotal: Int! actionGapTotal: Int! servicesLiveTotal: Int! servicesStartingThisWeekTotal: Int! activeProjectsTotal: Int! projectsStartingThisWeekTotal: Int! } type LocationStatsHealthItem { health: String! total: Int! } type LocationStatsLocationItem { id: ID! name: String! latitude: Float longitude: Float coordinates: String countryName: String turbineCount: Int! health: String! maxSeverityLevel: String severityBreakdown: [LocationSeverityCount!]! actionGapCount: Int! staleAnomalyIds: [Int!]! servicesByStatus: LocationServicesByStatus! activeProjectsCount: Int! projectsStartingThisWeek: Int! activeProjectIds: [Int!]! startingProjectIds: [Int!]! } type LocationStatsNewItem { severity: String! total: Int! } type LocationStatsSeverityItem { severity: String! total: Int! } type LocationStatsTopServiceItem { name: String! total: Int! } type LogisticsAttachmentDownloadUrl { url: String! expiresAt: DateTime! } type LogisticsAttachmentUploadHeader { name: String! value: String! } type LogisticsAttachmentUploadUrl { uploadUrl: String! attachmentUuid: String! expiresAt: DateTime! requiredHeaders: [LogisticsAttachmentUploadHeader!]! } type LogisticsForm { formType: LogisticsFormType! formTypeId: ID! definition: JSON! submissionSchema: JSON! updatedAt: DateTime! id: ID! version: Int! schemaVersion: Int! schema: LogisticsFormSchema! } type LogisticsFormAnswerIssue { code: LogisticsFormAnswerIssueCode! severity: LogisticsFormIssueSeverity! message: String! path: String } enum LogisticsFormAnswerIssueCode { ANSWER_UNKNOWN_FIELD ANSWER_TYPE_MISMATCH ANSWER_MISSING_REQUIRED } type LogisticsFormImageDownloadUrl { url: String! expiresAt: DateTime! } enum LogisticsFormIssueSeverity { ERROR WARNING } type LogisticsFormOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [LogisticsForm!]! } type LogisticsFormSchema { schemaVersion: LogisticsFormSchemaVersion! schema: JSON! } enum LogisticsFormSchemaVersion { V1 } type LogisticsFormSubmission { form: LogisticsForm! formId: ID! answers: JSON! robotSet: RobotSet updatedAt: DateTime! id: ID! status: String! } type LogisticsFormSubmissionOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [LogisticsFormSubmission!]! } type LogisticsFormType { subjectType: LogisticsSubjectType! updatedAt: DateTime! id: ID! code: String! name: String! description: String } type LogisticsFormTypeOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [LogisticsFormType!]! } type LogisticsFormValidationReport { success: Boolean! errors: [LogisticsFormAnswerIssue!]! } enum LogisticsSubjectType { ROBOT_SET } type LpsBladeRow { id: ID! serialNumber: String position: String images: [InspectionImage!]! receptors: [LpsReceptorRow!]! } type LpsMeasurementCell { resultId: ID! reading: Float unit: String noReading: Boolean! status: String comment: String isOxidationRemoval: Boolean! oxidationReading: Float images: [InspectionImage!]! } type LpsReceptorRow { id: ID! name: String! radiusFromHubM: Float isBladeTip: Boolean! edge: String ss: LpsMeasurementCell ps: LpsMeasurementCell } type LpsResults { serviceOrderLineId: ID! turbineId: ID turbineName: String doubleReceptors: Boolean! standard: LpsStandard bands: [LpsThresholdBand!]! blades: [LpsBladeRow!]! } type LpsStandard { id: ID! key: String name: String! } type LpsThresholdBand { id: ID! name: String! status: String valueFrom: Float valueTo: Float } type Manufacturer { createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! } type ManufacturerComponentModel { manufacturer: Manufacturer! componentType: ComponentType! bladeType: BladeType length: Float bladeRoot: Float createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! } input ManufacturerComponentModelFilter { name: StrFilterLookup AND: ManufacturerComponentModelFilter OR: ManufacturerComponentModelFilter NOT: ManufacturerComponentModelFilter DISTINCT: Boolean id: [ID!] manufacturer: [ID!] } type ManufacturerComponentModelOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ManufacturerComponentModel!]! } input ManufacturerComponentModelOrder { id: Ordering name: Ordering bladeType: Ordering length: Ordering } input ManufacturerFilter { name: StrFilterLookup AND: ManufacturerFilter OR: ManufacturerFilter NOT: ManufacturerFilter DISTINCT: Boolean id: [ID!] } type ManufacturerOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Manufacturer!]! } input ManufacturerOrder { id: Ordering name: Ordering } type ManufacturerTurbineModel { manufacturer: Manufacturer! createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! nominalPower: Float centerToRootOffset: Float rotorRadius: Float hubHeight: Float doubleReceptors: Boolean! hvDoubleReceptors: Boolean! } input ManufacturerTurbineModelFilter { name: StrFilterLookup AND: ManufacturerTurbineModelFilter OR: ManufacturerTurbineModelFilter NOT: ManufacturerTurbineModelFilter DISTINCT: Boolean id: [ID!] manufacturer: [ID!] } type ManufacturerTurbineModelOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ManufacturerTurbineModel!]! } input ManufacturerTurbineModelOrder { id: Ordering name: Ordering nominalPower: Ordering centerToRootOffset: Ordering rotorRadius: Ordering hubHeight: Ordering doubleReceptors: Ordering hvDoubleReceptors: Ordering } type MarkAllNotificationsReadPayload implements MutationResponse { code: String! success: Boolean! message: String! updatedCount: Int! } input MarkEntitiesSeenInput { entityType: String! entityIds: [Int!]! } type MarkEntitiesSeenPayload implements MutationResponse { code: String! success: Boolean! message: String! entityIds: [Int!]! } input MarkEntitySeenInput { entityType: String! entityId: Int! } input MarkFeedRowsSeenInput { feedKind: String! rowKeys: [String!]! } type MarkFeedRowsSeenPayload implements MutationResponse { code: String! success: Boolean! message: String! rowKeys: [String!]! } input MarkTeamMessageSeenInput { messageId: Int! seenAt: DateTime = null } type MarkTeamMessageSeenPayload { teamMessage: TeamMessage! } enum MeasurementRecalculationStatus { QUEUED RUNNING SUCCESS FAILED } type MobilisationPendingTask { taskId: ID! title: String! status: ProjectTaskStatus! link: ProjectTaskLink daysLate: Int } type MobilisationRow { projectId: ID! setId: ID setName: String! setDeploymentStatus: String fieldStart: Date readiness: Int! pendingTasks: [MobilisationPendingTask!]! } type Mutation { auth(input: AuthInput!): AuthPayload! setPassword(input: SetPasswordInput!): SetPasswordPayload! updateUserProfileCustomer(input: UpdateUserProfileCustomerInput!): UpdateUserProfileCustomerPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) updateMyProfile(input: UpdateMyProfileInput!): UpdateMyProfilePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) createApiKey(input: CreateApiKeyInput!): CreateApiKeyPayload! @hasPerm(permissions: [{app: "permissions", permission: "create_api_key"}], any: true) revokeApiKey(input: RevokeApiKeyInput!): RevokeApiKeyPayload! @hasPerm(permissions: [{app: "permissions", permission: "create_api_key"}], any: true) aerotaskUserEvent(input: AerotaskUserEventInput!): AerotaskUserEventPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) aerotaskEventLocation(input: AerotaskEventLocationInput!): AerotaskEventLocationPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addManufacturer(input: AddManufacturerInput!): AddManufacturerPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateManufacturer(input: UpdateManufacturerInput!): UpdateManufacturerPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteManufacturer(input: DeleteManufacturerInput!): DeleteManufacturerPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addCertificate(input: AddCertificateInput!): AddCertificatePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateCertificate(input: UpdateCertificateInput!): UpdateCertificatePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteCertificate(input: DeleteCertificateInput!): DeleteCertificatePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addCertificateCategory(input: AddCertificateCategoryInput!): AddCertificateCategoryPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateCertificateCategory(input: UpdateCertificateCategoryInput!): UpdateCertificateCategoryPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteCertificateCategory(input: DeleteCertificateCategoryInput!): DeleteCertificateCategoryPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addCertificateIssuer(input: AddCertificateIssuerInput!): AddCertificateIssuerPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateCertificateIssuer(input: UpdateCertificateIssuerInput!): UpdateCertificateIssuerPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteCertificateIssuer(input: DeleteCertificateIssuerInput!): DeleteCertificateIssuerPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addCertificateOffering(input: AddCertificateOfferingInput!): AddCertificateOfferingPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateCertificateOffering(input: UpdateCertificateOfferingInput!): UpdateCertificateOfferingPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteCertificateOffering(input: DeleteCertificateOfferingInput!): DeleteCertificateOfferingPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addCertificateExpense(input: AddCertificateExpenseInput!): AddCertificateExpensePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateCertificateExpense(input: UpdateCertificateExpenseInput!): UpdateCertificateExpensePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteCertificateExpense(input: DeleteCertificateExpenseInput!): DeleteCertificateExpensePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addTimezone(input: AddTimezoneInput!): AddTimezonePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateTimezone(input: UpdateTimezoneInput!): UpdateTimezonePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteTimezone(input: DeleteTimezoneInput!): DeleteTimezonePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addCurrency(input: AddCurrencyInput!): AddCurrencyPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateCurrency(input: UpdateCurrencyInput!): UpdateCurrencyPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteCurrency(input: DeleteCurrencyInput!): DeleteCurrencyPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addBusinessRegion(input: AddBusinessRegionInput!): AddBusinessRegionPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateBusinessRegion(input: UpdateBusinessRegionInput!): UpdateBusinessRegionPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteBusinessRegion(input: DeleteBusinessRegionInput!): DeleteBusinessRegionPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addRegion(input: AddRegionInput!): AddRegionPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateRegion(input: UpdateRegionInput!): UpdateRegionPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteRegion(input: DeleteRegionInput!): DeleteRegionPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addProjectStatus(input: AddProjectStatusInput!): AddProjectStatusPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateProjectStatus(input: UpdateProjectStatusInput!): UpdateProjectStatusPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteProjectStatus(input: DeleteProjectStatusInput!): DeleteProjectStatusPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addProjectContact(input: AddProjectContactInput!): AddProjectContactPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateProjectContact(input: UpdateProjectContactInput!): UpdateProjectContactPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteProjectContact(input: DeleteProjectContactInput!): DeleteProjectContactPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addProjectLocation(input: AddProjectLocationInput!): AddProjectLocationPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateProjectLocation(input: UpdateProjectLocationInput!): UpdateProjectLocationPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteProjectLocation(input: DeleteProjectLocationInput!): DeleteProjectLocationPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addProjectPlannedResourceSet(input: AddProjectPlannedResourceSetInput!): AddProjectPlannedResourceSetPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateProjectPlannedResourceSet(input: UpdateProjectPlannedResourceSetInput!): UpdateProjectPlannedResourceSetPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteProjectPlannedResourceSet(input: DeleteProjectPlannedResourceSetInput!): DeleteProjectPlannedResourceSetPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addProjectPlannedResourceSetItem(input: AddProjectPlannedResourceSetItemInput!): AddProjectPlannedResourceSetItemPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateProjectPlannedResourceSetItem(input: UpdateProjectPlannedResourceSetItemInput!): UpdateProjectPlannedResourceSetItemPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteProjectPlannedResourceSetItem(input: DeleteProjectPlannedResourceSetItemInput!): DeleteProjectPlannedResourceSetItemPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addProjectTask(input: AddProjectTaskInput!): AddProjectTaskPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateProjectTask(input: UpdateProjectTaskInput!): UpdateProjectTaskPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteProjectTask(input: DeleteProjectTaskInput!): DeleteProjectTaskPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addProjectTaskComment(input: AddProjectTaskCommentInput!): AddProjectTaskCommentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateProjectTaskComment(input: UpdateProjectTaskCommentInput!): UpdateProjectTaskCommentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteProjectTaskComment(input: DeleteProjectTaskCommentInput!): DeleteProjectTaskCommentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addProjectComment(input: AddProjectCommentInput!): AddProjectCommentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateProjectComment(input: UpdateProjectCommentInput!): UpdateProjectCommentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteProjectComment(input: DeleteProjectCommentInput!): DeleteProjectCommentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addRobotSet(input: AddRobotSetInput!): AddRobotSetPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateRobotSet(input: UpdateRobotSetInput!): UpdateRobotSetPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteRobotSet(input: DeleteRobotSetInput!): DeleteRobotSetPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addRobotSetService(input: AddRobotSetServiceInput!): AddRobotSetServicePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateRobotSetService(input: UpdateRobotSetServiceInput!): UpdateRobotSetServicePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteRobotSetService(input: DeleteRobotSetServiceInput!): DeleteRobotSetServicePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addResource(input: AddResourceInput!): AddResourcePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateResource(input: UpdateResourceInput!): UpdateResourcePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteResource(input: DeleteResourceInput!): DeleteResourcePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addResourceSet(input: AddResourceSetInput!): AddResourceSetPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateResourceSet(input: UpdateResourceSetInput!): UpdateResourceSetPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteResourceSet(input: DeleteResourceSetInput!): DeleteResourceSetPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addCountry(input: AddCountryInput!): AddCountryPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateCountry(input: UpdateCountryInput!): UpdateCountryPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteCountry(input: DeleteCountryInput!): DeleteCountryPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addLocation(input: AddLocationInput!): AddLocationPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateLocation(input: UpdateLocationInput!): UpdateLocationPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteLocation(input: DeleteLocationInput!): DeleteLocationPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addCustomer(input: AddCustomerInput!): AddCustomerPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateCustomer(input: UpdateCustomerInput!): UpdateCustomerPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteCustomer(input: DeleteCustomerInput!): DeleteCustomerPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addVendor(input: AddVendorInput!): AddVendorPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateVendor(input: UpdateVendorInput!): UpdateVendorPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteVendor(input: DeleteVendorInput!): DeleteVendorPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addCustomerContact(input: AddCustomerContactInput!): AddCustomerContactPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateCustomerContact(input: UpdateCustomerContactInput!): UpdateCustomerContactPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteCustomerContact(input: DeleteCustomerContactInput!): DeleteCustomerContactPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addCustomerAddress(input: AddCustomerAddressInput!): AddCustomerAddressPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateCustomerAddress(input: UpdateCustomerAddressInput!): UpdateCustomerAddressPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteCustomerAddress(input: DeleteCustomerAddressInput!): DeleteCustomerAddressPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addCustomerBankAccount(input: AddCustomerBankAccountInput!): AddCustomerBankAccountPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateCustomerBankAccount(input: UpdateCustomerBankAccountInput!): UpdateCustomerBankAccountPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteCustomerBankAccount(input: DeleteCustomerBankAccountInput!): DeleteCustomerBankAccountPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addCustomerLocation(input: AddCustomerLocationInput!): AddCustomerLocationPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateCustomerLocation(input: UpdateCustomerLocationInput!): UpdateCustomerLocationPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteCustomerLocation(input: DeleteCustomerLocationInput!): DeleteCustomerLocationPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addCustomerRole(input: AddCustomerRoleInput!): AddCustomerRolePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_access_control"}], any: true) updateCustomerRole(input: UpdateCustomerRoleInput!): UpdateCustomerRolePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_access_control"}], any: true) deleteCustomerRole(input: DeleteCustomerRoleInput!): DeleteCustomerRolePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_access_control"}], any: true) addCustomerUser(input: AddCustomerUserInput!): AddCustomerUserPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_access_control"}], any: true) createCustomerUser(input: CreateCustomerUserInput!): CreateCustomerUserPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_access_control"}], any: true) updateCustomerUser(input: UpdateCustomerUserInput!): UpdateCustomerUserPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_access_control"}], any: true) deleteCustomerUser(input: DeleteCustomerUserInput!): DeleteCustomerUserPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_access_control"}], any: true) inviteCustomerUser(input: InviteCustomerUserInput!): InviteCustomerUserPayload! @hasPerm(permissions: [{app: "permissions", permission: "customer_manage_access_control"}], any: true) acceptInvitation(input: AcceptInvitationInput!): AcceptInvitationPayload! declineInvitation(input: DeclineInvitationInput!): DeclineInvitationPayload! addCustomerTurbine(input: AddCustomerTurbineInput!): AddCustomerTurbinePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateCustomerTurbine(input: UpdateCustomerTurbineInput!): UpdateCustomerTurbinePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteCustomerTurbine(input: DeleteCustomerTurbineInput!): DeleteCustomerTurbinePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addDelayCategory(input: AddDelayCategoryInput!): AddDelayCategoryPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateDelayCategory(input: UpdateDelayCategoryInput!): UpdateDelayCategoryPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteDelayCategory(input: DeleteDelayCategoryInput!): DeleteDelayCategoryPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addDelayType(input: AddDelayTypeInput!): AddDelayTypePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateDelayType(input: UpdateDelayTypeInput!): UpdateDelayTypePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteDelayType(input: DeleteDelayTypeInput!): DeleteDelayTypePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addDelay(input: AddDelayInput!): AddDelayPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateDelay(input: UpdateDelayInput!): UpdateDelayPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteDelay(input: DeleteDelayInput!): DeleteDelayPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addTurbineComponent(input: AddTurbineComponentInput!): AddTurbineComponentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateTurbineComponent(input: UpdateTurbineComponentInput!): UpdateTurbineComponentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteTurbineComponent(input: DeleteTurbineComponentInput!): DeleteTurbineComponentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) exportAnomaliesReport(input: ExportAnomaliesReportInput!): ExportAnomaliesReportPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_view_reports"}, {app: "permissions", permission: "customer_view_services"}], any: true) addAnomaly(input: AddAnomalyInput!): AddAnomalyPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) updateAnomaly(input: UpdateAnomalyInput!): UpdateAnomalyPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) bulkUpdateAnnotationStages(input: BulkUpdateAnnotationStagesInput!): BulkUpdateAnnotationStagesPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) deleteAnomaly(input: DeleteAnomalyInput!): DeleteAnomalyPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) linkAnomalies(input: LinkAnomaliesInput!): LinkAnomaliesPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) unlinkAnomaly(input: UnlinkAnomalyInput!): UnlinkAnomalyPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) deleteAnomalyCrossSectionImage(input: DeleteAnomalyCrossSectionImageInput!): DeleteAnomalyCrossSectionImagePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) exportServicesReport(input: ExportServicesReportInput!): ExportServicesReportPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_view_reports"}, {app: "permissions", permission: "customer_view_services"}], any: true) addAnomalyRecommendation(input: AddAnomalyRecommendationInput!): AddAnomalyRecommendationPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateAnomalyRecommendation(input: UpdateAnomalyRecommendationInput!): UpdateAnomalyRecommendationPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteAnomalyRecommendation(input: DeleteAnomalyRecommendationInput!): DeleteAnomalyRecommendationPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addRelationshipType(input: AddRelationshipTypeInput!): AddRelationshipTypePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateRelationshipType(input: UpdateRelationshipTypeInput!): UpdateRelationshipTypePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteRelationshipType(input: DeleteRelationshipTypeInput!): DeleteRelationshipTypePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addUser(input: AddUserInput!): AddUserPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateUser(input: UpdateUserInput!): UpdateUserPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteUser(input: DeleteUserInput!): DeleteUserPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addComponentType(input: AddComponentTypeInput!): AddComponentTypePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateComponentType(input: UpdateComponentTypeInput!): UpdateComponentTypePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteComponentType(input: DeleteComponentTypeInput!): DeleteComponentTypePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addComponentModel(input: AddComponentModelInput!): AddComponentModelPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateComponentModel(input: UpdateComponentModelInput!): UpdateComponentModelPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteComponentModel(input: DeleteComponentModelInput!): DeleteComponentModelPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addTurbineModel(input: AddTurbineModelInput!): AddTurbineModelPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateTurbineModel(input: UpdateTurbineModelInput!): UpdateTurbineModelPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteTurbineModel(input: DeleteTurbineModelInput!): DeleteTurbineModelPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addTurbine(input: AddTurbineInput!): AddTurbinePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateTurbine(input: UpdateTurbineInput!): UpdateTurbinePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteTurbine(input: DeleteTurbineInput!): DeleteTurbinePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addAnomalyClientField(input: AddAnomalyClientFieldInput!): AddAnomalyClientFieldPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) updateAnomalyClientField(input: UpdateAnomalyClientFieldInput!): UpdateAnomalyClientFieldPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) deleteAnomalyClientField(input: DeleteAnomalyClientFieldInput!): DeleteAnomalyClientFieldPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) addAnomalyCustomValue(input: AddAnomalyCustomValueInput!): AddAnomalyCustomValuePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) updateAnomalyCustomValue(input: UpdateAnomalyCustomValueInput!): UpdateAnomalyCustomValuePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) deleteAnomalyCustomValue(input: DeleteAnomalyCustomValueInput!): DeleteAnomalyCustomValuePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) addServiceResult(input: AddServiceResultInput!): AddServiceResultPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateServiceResult(input: UpdateServiceResultInput!): UpdateServiceResultPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteServiceResult(input: DeleteServiceResultInput!): DeleteServiceResultPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addServiceResultTemplate(input: AddServiceResultTemplateInput!): AddServiceResultTemplatePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateServiceResultTemplate(input: UpdateServiceResultTemplateInput!): UpdateServiceResultTemplatePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteServiceResultTemplate(input: DeleteServiceResultTemplateInput!): DeleteServiceResultTemplatePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addServiceResultTemplateField(input: AddServiceResultTemplateFieldInput!): AddServiceResultTemplateFieldPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateServiceResultTemplateField(input: UpdateServiceResultTemplateFieldInput!): UpdateServiceResultTemplateFieldPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteServiceResultTemplateField(input: DeleteServiceResultTemplateFieldInput!): DeleteServiceResultTemplateFieldPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addFile(input: AddFileInput!): AddFilePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateFile(input: UpdateFileInput!): UpdateFilePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteFile(input: DeleteFileInput!): DeleteFilePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateNotification(input: UpdateNotificationInput!): UpdateNotificationPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) markAllNotificationsRead: MarkAllNotificationsReadPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addPurchaseOrder(input: AddPurchaseOrderInput!): AddPurchaseOrderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updatePurchaseOrder(input: UpdatePurchaseOrderInput!): UpdatePurchaseOrderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deletePurchaseOrder(input: DeletePurchaseOrderInput!): DeletePurchaseOrderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addPurchaseOrderVersion(input: AddPurchaseOrderVersionInput!): AddPurchaseOrderVersionPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updatePurchaseOrderVersion(input: UpdatePurchaseOrderVersionInput!): UpdatePurchaseOrderVersionPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deletePurchaseOrderVersion(input: DeletePurchaseOrderVersionInput!): DeletePurchaseOrderVersionPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) replacePurchaseOrderVersionFile(input: ReplacePurchaseOrderVersionFileInput!): ReplacePurchaseOrderVersionFilePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) removePurchaseOrderVersionFile(input: RemovePurchaseOrderVersionFileInput!): RemovePurchaseOrderVersionFilePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addPurchaseOrderProject(input: AddPurchaseOrderProjectInput!): AddPurchaseOrderProjectPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deletePurchaseOrderProject(input: DeletePurchaseOrderProjectInput!): DeletePurchaseOrderProjectPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addPosition(input: AddPositionInput!): AddPositionPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updatePosition(input: UpdatePositionInput!): UpdatePositionPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deletePosition(input: DeletePositionInput!): DeletePositionPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addResourceServicePosition(input: AddResourceServicePositionInput!): AddResourceServicePositionPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateResourceServicePosition(input: UpdateResourceServicePositionInput!): UpdateResourceServicePositionPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteResourceServicePosition(input: DeleteResourceServicePositionInput!): DeleteResourceServicePositionPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addServiceItem(input: AddServiceItemInput!): AddServiceItemPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateServiceItem(input: UpdateServiceItemInput!): UpdateServiceItemPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteServiceItem(input: DeleteServiceItemInput!): DeleteServiceItemPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addServiceItemActivity(input: AddServiceItemActivityInput!): AddServiceItemActivityPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateServiceItemActivity(input: UpdateServiceItemActivityInput!): UpdateServiceItemActivityPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteServiceItemActivity(input: DeleteServiceItemActivityInput!): DeleteServiceItemActivityPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addServiceOrderHeader(input: AddServiceOrderHeaderInput!): AddServiceOrderHeaderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateServiceOrderHeader(input: UpdateServiceOrderHeaderInput!): UpdateServiceOrderHeaderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteServiceOrderHeader(input: DeleteServiceOrderHeaderInput!): DeleteServiceOrderHeaderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addServiceOrderLine(input: AddServiceOrderLineInput!): AddServiceOrderLinePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateServiceOrderLine(input: UpdateServiceOrderLineInput!): UpdateServiceOrderLinePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_services"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) bulkUpdateServiceOrderLinesStage(input: BulkUpdateServiceOrderLinesStageInput!): BulkUpdateServiceOrderLinesStagePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_services"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) deleteServiceOrderLine(input: DeleteServiceOrderLineInput!): DeleteServiceOrderLinePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addWorkorder(input: AddWorkorderInput!): AddWorkorderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateWorkorder(input: UpdateWorkorderInput!): UpdateWorkorderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) assignTurbine(input: AssignTurbineInput!): AssignTurbinePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteWorkorder(input: DeleteWorkorderInput!): DeleteWorkorderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addWorkorderActivity(input: AddWorkorderActivityInput!): AddWorkorderActivityPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateWorkorderActivity(input: UpdateWorkorderActivityInput!): UpdateWorkorderActivityPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteWorkorderActivity(input: DeleteWorkorderActivityInput!): DeleteWorkorderActivityPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addWorkorderActivityMetadata(input: AddWorkorderActivityMetadataInput!): AddWorkorderActivityMetadataPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateWorkorderActivityMetadata(input: UpdateWorkorderActivityMetadataInput!): UpdateWorkorderActivityMetadataPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteWorkorderActivityMetadata(input: DeleteWorkorderActivityMetadataInput!): DeleteWorkorderActivityMetadataPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addWorkorderPlan(input: AddWorkorderPlanInput!): AddWorkorderPlanPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateWorkorderPlan(input: UpdateWorkorderPlanInput!): UpdateWorkorderPlanPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteWorkorderPlan(input: DeleteWorkorderPlanInput!): DeleteWorkorderPlanPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addWorkorderResourceSet(input: AddWorkorderResourceSetInput!): AddWorkorderResourceSetPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateWorkorderResourceSet(input: UpdateWorkorderResourceSetInput!): UpdateWorkorderResourceSetPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteWorkorderResourceSet(input: DeleteWorkorderResourceSetInput!): DeleteWorkorderResourceSetPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addWorkTimeCategory(input: AddWorkTimeCategoryInput!): AddWorkTimeCategoryPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateWorkTimeCategory(input: UpdateWorkTimeCategoryInput!): UpdateWorkTimeCategoryPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteWorkTimeCategory(input: DeleteWorkTimeCategoryInput!): DeleteWorkTimeCategoryPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addWorkTimeLog(input: AddWorkTimeLogInput!): AddWorkTimeLogPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateWorkTimeLog(input: UpdateWorkTimeLogInput!): UpdateWorkTimeLogPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteWorkTimeLog(input: DeleteWorkTimeLogInput!): DeleteWorkTimeLogPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) submitDailyDebrief(input: SubmitDailyDebriefInput!): SubmitDailyDebriefPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) submitNordexCirIncident(incidentNumber: String!): SubmitNordexCirIncidentPayload! @hasPerm(permissions: [{app: "permissions", permission: "cir_dashboard_app"}], any: true) resolveNordexCirIncident(incidentNumber: String!, resolution: String!, note: String!): NordexCirResolutionPayload! @hasPerm(permissions: [{app: "permissions", permission: "cir_dashboard_app"}], any: true) reopenNordexCirIncident(incidentNumber: String!): NordexCirResolutionPayload! @hasPerm(permissions: [{app: "permissions", permission: "cir_dashboard_app"}], any: true) syncNordexCir: SyncNordexCirPayload! @hasPerm(permissions: [{app: "permissions", permission: "cir_dashboard_app"}], any: true) respondToTeamMessage(input: RespondToTeamMessageInput!): RespondToTeamMessagePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) markTeamMessageSeen(input: MarkTeamMessageSeenInput!): MarkTeamMessageSeenPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) setWorkorderTurbine(input: SetWorkorderTurbineInput!): SetWorkorderTurbinePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) resolveScopeCommitmentTurbine(input: ResolveScopeCommitmentTurbineInput!): ResolveScopeCommitmentTurbinePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) addLogisticsFormSubmission(input: AddLogisticsFormSubmissionInput!): AddLogisticsFormSubmissionPayload! @hasPerm(permissions: [{app: "permissions", permission: "manage_logistics"}], any: true) patchLogisticsFormSubmission(input: PatchLogisticsFormSubmissionInput!): PatchLogisticsFormSubmissionPayload! @hasPerm(permissions: [{app: "permissions", permission: "manage_logistics"}], any: true) submitLogisticsFormSubmission(input: SubmitLogisticsFormSubmissionInput!): SubmitLogisticsFormSubmissionPayload! @hasPerm(permissions: [{app: "permissions", permission: "manage_logistics"}], any: true) deleteLogisticsFormSubmission(input: DeleteLogisticsFormSubmissionInput!): DeleteLogisticsFormSubmissionPayload! @hasPerm(permissions: [{app: "permissions", permission: "manage_logistics"}], any: true) createLogisticsAttachmentUploadUrl: CreateLogisticsAttachmentUploadUrlPayload! @hasPerm(permissions: [{app: "permissions", permission: "manage_logistics"}], any: true) confirmLogisticsAttachment(input: ConfirmLogisticsAttachmentInput!): ConfirmLogisticsAttachmentPayload! @hasPerm(permissions: [{app: "permissions", permission: "manage_logistics"}], any: true) deleteLogisticsAttachment(input: DeleteLogisticsAttachmentInput!): DeleteLogisticsAttachmentPayload! @hasPerm(permissions: [{app: "permissions", permission: "manage_logistics"}], any: true) submitFeedback(input: SubmitFeedbackInput!): SubmitFeedbackPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) dtSoftDeleteInspection(input: VISSoftDeleteInput!): VISEmptyResponse! @hasPerm(permissions: [{app: "auth", permission: "admin"}, {app: "auth", permission: "vis_qc"}], any: true) dtMoveInspectionItems(input: VISMoveInput!): VISEmptyResponse! @hasPerm(permissions: [{app: "auth", permission: "admin"}, {app: "auth", permission: "vis_qc"}], any: true) dtRecalculateMeasurements(serviceOrderLineId: Int!): VISMeasurementRecalculationResponse! @hasPerm(permissions: [{app: "auth", permission: "admin"}, {app: "auth", permission: "vis_qc"}], any: true) dtSwapInspectionItems(input: VISSwapInput!): VISEmptyResponse! @hasPerm(permissions: [{app: "auth", permission: "admin"}, {app: "auth", permission: "vis_qc"}], any: true) dtEditInspection(input: VISEditInspectionInput!): VISEmptyResponse! @hasPerm(permissions: [{app: "auth", permission: "admin"}, {app: "auth", permission: "vis_qc"}], any: true) addBookmark(input: AddBookmarkInput!): AddBookmarkPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) updateBookmark(input: UpdateBookmarkInput!): UpdateBookmarkPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) deleteBookmark(input: DeleteBookmarkInput!): DeleteBookmarkPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) registerAiDefect(input: RegisterAiDefectInput!): RegisterAiDefectPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) setAiDefectSourceObject(input: SetAiDefectSourceObjectInput!): SetAiDefectSourceObjectPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) addAnomalyPreset(input: AddAnomalyPresetInput!): AddAnomalyPresetPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) updateAnomalyPreset(input: UpdateAnomalyPresetInput!): UpdateAnomalyPresetPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) deleteAnomalyPreset(input: DeleteAnomalyPresetInput!): DeleteAnomalyPresetPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) reorderAnomalyPresets(input: ReorderAnomalyPresetsInput!): ReorderAnomalyPresetsPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) addAnomalyPresetTemplate(input: AddAnomalyPresetTemplateInput!): AddAnomalyPresetTemplatePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) updateAnomalyPresetTemplate(input: UpdateAnomalyPresetTemplateInput!): UpdateAnomalyPresetTemplatePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) deleteAnomalyPresetTemplate(input: DeleteAnomalyPresetTemplateInput!): DeleteAnomalyPresetTemplatePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) setServiceOrderLinePresetTemplate(input: SetServiceOrderLinePresetTemplateInput!): SetServiceOrderLinePresetTemplatePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) requestVideoFrameSnapshotUrl(input: RequestVideoFrameSnapshotUrlInput!): RequestVideoFrameSnapshotUrlPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) linkBladeComponents(input: LinkBladeComponentsInput!): LinkBladeComponentsPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) setDistanceVector(input: SetDistanceVectorInput!): SetDistanceVectorPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) updateVisSectionStatus(input: UpdateSectionStatusInput!): UpdateSectionStatusPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) updateExternalPhotoStatus(input: UpdateExternalPhotoStatusInput!): UpdateExternalPhotoStatusPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) updateExternalPhotoStatuses(input: UpdateExternalPhotoStatusesInput!): UpdateExternalPhotoStatusesPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) updateLerPhotoStatus(input: UpdateLERPhotoStatusInput!): UpdateLERPhotoStatusPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) updateLerPhotoIncludeInReport(input: UpdateLERPhotoIncludeInReportInput!): UpdateLERPhotoIncludeInReportPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) updateLerPhotoStepStatus(input: UpdateLERPhotoStepStatusInput!): UpdateLERPhotoStepStatusPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) updateImageSortOrder(input: UpdateImageSortOrderInput!): UpdateImageSortOrderResponse! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) resetImageSortOrder(input: ResetImageSortOrderInput!): ResetImageSortOrderResponse! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) updateLerImageSortOrder(input: UpdateLERImageSortOrderInput!): UpdateLERImageSortOrderResponse! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) resetLerImageSortOrder(input: ResetLERImageSortOrderInput!): ResetLERImageSortOrderResponse! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) updateImageRotation(input: UpdateImageRotationInput!): UpdateImageRotationResponse! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_vis"}], any: true) dtCreateAcademyInspection(input: VISAcademyCreateInput!): VISAcademyInspectionResponse! @hasPerm(permissions: [{app: "auth", permission: "admin"}, {app: "auth", permission: "vis_qc"}], any: true) dtResetAcademyInspection(academyInspectionId: Int!): VISAcademyInspectionResponse! @hasPerm(permissions: [{app: "auth", permission: "admin"}, {app: "auth", permission: "vis_qc"}], any: true) dtDeleteAcademyInspection(academyInspectionId: Int!): VISAcademyDeleteResponse! @hasPerm(permissions: [{app: "auth", permission: "admin"}, {app: "auth", permission: "vis_qc"}], any: true) dtUpdateAcademyInspectionAssignee(input: VISAcademyUpdateAssigneeInput!): VISAcademyInspectionResponse! @hasPerm(permissions: [{app: "auth", permission: "admin"}, {app: "auth", permission: "vis_qc"}], any: true) addPlanningCampaign(input: AddPlanningCampaignInput!): AddPlanningCampaignPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) updatePlanningCampaign(input: UpdatePlanningCampaignInput!): UpdatePlanningCampaignPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) deletePlanningCampaign(input: DeletePlanningCampaignInput!): DeletePlanningCampaignPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) addPlanningProject(input: AddPlanningProjectInput!): AddPlanningProjectPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) updatePlanningProject(input: UpdatePlanningProjectInput!): UpdatePlanningProjectPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) deletePlanningProject(input: DeletePlanningProjectInput!): DeletePlanningProjectPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) addPlanningService(input: AddPlanningServiceInput!): AddPlanningServicePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) updatePlanningService(input: UpdatePlanningServiceInput!): UpdatePlanningServicePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) deletePlanningService(input: DeletePlanningServiceInput!): DeletePlanningServicePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) addPlanningCustomerVendor(input: AddPlanningCustomerVendorInput!): AddPlanningCustomerVendorPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) updatePlanningCustomerVendor(input: UpdatePlanningCustomerVendorInput!): UpdatePlanningCustomerVendorPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) deletePlanningCustomerVendor(input: DeletePlanningCustomerVendorInput!): DeletePlanningCustomerVendorPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) addPlanningServiceOrder(input: AddPlanningServiceOrderInput!): AddPlanningServiceOrderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) addPlanningServiceOrders(input: AddPlanningServiceOrdersInput!): AddPlanningServiceOrdersPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) updatePlanningServiceOrder(input: UpdatePlanningServiceOrderInput!): UpdatePlanningServiceOrderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) deletePlanningServiceOrder(input: DeletePlanningServiceOrderInput!): DeletePlanningServiceOrderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) linkAnomaliesToPlanningServiceOrder(input: LinkAnomaliesToPlanningServiceOrderInput!): LinkAnomaliesToPlanningServiceOrderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) unlinkAnomalyFromPlanningServiceOrder(input: UnlinkAnomalyFromPlanningServiceOrderInput!): UnlinkAnomalyFromPlanningServiceOrderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) addPlanningWorkOrderType(input: AddPlanningWorkOrderTypeInput!): AddPlanningWorkOrderTypePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) updatePlanningWorkOrderType(input: UpdatePlanningWorkOrderTypeInput!): UpdatePlanningWorkOrderTypePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) deletePlanningWorkOrderType(input: DeletePlanningWorkOrderTypeInput!): DeletePlanningWorkOrderTypePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) addPlanningWorkOrder(input: AddPlanningWorkOrderInput!): AddPlanningWorkOrderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) updatePlanningWorkOrder(input: UpdatePlanningWorkOrderInput!): UpdatePlanningWorkOrderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) deletePlanningWorkOrder(input: DeletePlanningWorkOrderInput!): DeletePlanningWorkOrderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) addPlanningComment(input: AddPlanningCommentInput!): AddPlanningCommentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) updatePlanningComment(input: UpdatePlanningCommentInput!): UpdatePlanningCommentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) deletePlanningComment(input: DeletePlanningCommentInput!): DeletePlanningCommentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) createPlanningAttachmentUploadUrl(input: CreatePlanningAttachmentUploadUrlInput!): CreatePlanningAttachmentUploadUrlPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) confirmPlanningAttachment(input: ConfirmPlanningAttachmentInput!): ConfirmPlanningAttachmentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) deletePlanningAttachment(input: DeletePlanningAttachmentInput!): DeletePlanningAttachmentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) exportPlanningProjectsReport(input: ExportPlanningProjectsReportInput!): ExportPlanningProjectsReportPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}, {app: "permissions", permission: "customer_manage_work_management"}], any: true) setUserPreference(input: SetUserPreferenceInput!): SetUserPreferencePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) setEntityWatched(input: SetEntityWatchedInput!): UserEntityPreferencePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) markEntitySeen(input: MarkEntitySeenInput!): UserEntityPreferencePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) bulkSetWatched(input: BulkSetWatchedInput!): BulkSetWatchedPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) markEntitiesSeen(input: MarkEntitiesSeenInput!): MarkEntitiesSeenPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) markFeedRowsSeen(input: MarkFeedRowsSeenInput!): MarkFeedRowsSeenPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) addAnomalyComment(input: AddAnomalyCommentInput!): AnomalyCommentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) editAnomalyComment(input: EditAnomalyCommentInput!): AnomalyCommentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) deleteAnomalyComment(input: DeleteAnomalyCommentInput!): AnomalyCommentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) addAnomalyLabel(input: AddAnomalyLabelInput!): AnomalyLabelPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) updateAnomalyLabel(input: UpdateAnomalyLabelInput!): AnomalyLabelPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) deleteAnomalyLabel(input: DeleteAnomalyLabelInput!): DeleteAnomalyLabelPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) setAnomalyLabels(input: SetAnomalyLabelsInput!): AnomalyLabelLinksPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) bulkAttachDetachAnomalyLabels(input: BulkAttachDetachAnomalyLabelsInput!): BulkAnomalyLabelDiffPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) createTask(input: CreateTaskInput!): TaskPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) bulkCreateTasks(input: BulkCreateTasksInput!): BulkCreateTasksPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) updateTask(input: UpdateTaskInput!): TaskPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) deleteTask(input: DeleteTaskInput!): DeleteTaskPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) duplicateTask(input: DuplicateTaskInput!): TaskPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) addTaskComment(input: AddTaskCommentInput!): TaskCommentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) editTaskComment(input: EditTaskCommentInput!): TaskCommentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) deleteTaskComment(input: DeleteTaskCommentInput!): TaskCommentPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) createSavedTaskView(input: CreateSavedTaskViewInput!): SavedTaskViewPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) deleteSavedTaskView(input: DeleteSavedTaskViewInput!): DeleteSavedTaskViewPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) recordRecentlyViewed(input: RecordRecentlyViewedInput!): RecordRecentlyViewedPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) setPlanningUserScope(input: SetPlanningUserScopeInput!): SetPlanningUserScopePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_access_control"}], any: true) addCustomerInspectionScope(input: AddCustomerInspectionScopeInput!): AddCustomerInspectionScopePayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}, {app: "permissions", permission: "customer_manage_inspection_scope"}], any: true) setProjectGoogleDriveFolder(input: SetProjectGoogleDriveFolderInput!): SetProjectGoogleDriveFolderPayload! @hasPerm(permissions: [{app: "auth", permission: "mutate_basic_graphql"}], any: true) } interface MutationResponse { code: String! success: Boolean! message: String! } type NextServiceDue { date: Date! serviceGroup: String! driver: String! intervalMonths: Int! } type NordexCirBlade { position: String serialNumber: String } type NordexCirDryRun { incidentNumber: String! verdict: String! stagesRun: [String!]! summary: JSON! critical: [NordexCirDryRunIssue!]! warnings: [NordexCirDryRunIssue!]! report: JSON } type NordexCirDryRunIssue { severity: String! stage: String! message: String! details: JSON } type NordexCirEmail { cirEmailId: Int! receivedAt: DateTime checkedAt: DateTime! sender: String! subject: String! bodyText: String! incidentNumbers: [String!]! } input NordexCirEmailFilter { matched: Boolean = null search: String = null } type NordexCirEmailPage { pageInfo: OffsetPaginationInfo! totalCount: Int! results: [NordexCirEmail!]! } type NordexCirIncident { incidentNumber: String! status: String! projects: [NordexCirProjectRef!]! turbines: [NordexCirTurbine!]! serviceOrderLines: [NordexCirServiceOrderLine!]! cir: NordexCirRecord emails: [NordexCirEmail!]! resolution: NordexCirResolution } input NordexCirIncidentFilter { search: String = null projectId: Int = null locationId: Int = null statuses: [String!] = null } type NordexCirIncidentPage { pageInfo: OffsetPaginationInfo! totalCount: Int! results: [NordexCirIncident!]! } type NordexCirLocationRef { id: Int! name: String } type NordexCirProjectProgress { project: NordexCirProjectRef! lineCount: Int! linesWithoutIncidentNumber: Int! statusCounts: [NordexCirStatusCount!]! } input NordexCirProjectProgressFilter { search: String = null } type NordexCirProjectProgressPage { pageInfo: OffsetPaginationInfo! totalCount: Int! results: [NordexCirProjectProgress!]! } type NordexCirProjectRef { id: Int! code: String projectBuilderId: String } type NordexCirRecord { submittedAt: DateTime! cirUpdatedAt: DateTime! processingStartedAt: DateTime processingCompletedAt: DateTime errorMessage: String archiveKey: String archivedAt: DateTime deliveredFile: String deliveredAt: DateTime clientDirectory: String clientOutcome: String clientCheckedAt: DateTime updatedAt: DateTime! } type NordexCirResolution { resolution: String! note: String! createdAt: DateTime! createdByEmail: String } type NordexCirResolutionPayload implements MutationResponse { code: String! success: Boolean! message: String! } type NordexCirServiceOrderLine { id: Int! number: String status: String serviceCode: String bladePosition: String projectId: Int anomalyCount: Int! } type NordexCirStatusCount { status: String! count: Int! } type NordexCirSubmittedIncident { incidentNumber: String! status: String! } type NordexCirSummary { statusCounts: [NordexCirStatusCount!]! projects: [NordexCirProjectRef!]! locations: [NordexCirLocationRef!]! emailCount: Int! unmatchedEmailCount: Int! lastSync: NordexCirSyncRun lastSuccessfulSyncAt: DateTime } type NordexCirSyncRun { startedAt: DateTime! finishedAt: DateTime status: String! incidentsSynced: Int! emailsSynced: Int! errorMessage: String } type NordexCirTurbine { id: Int! name: String manufacturerNumber: String location: NordexCirLocationRef! blades: [NordexCirBlade!]! } type Notification { user: User! id: ID! notificationType: String! action: String entityType: String entityId: Int kind: String seenAt: DateTime isRead: Boolean! readAt: DateTime isArchived: Boolean! data: JSON! metadata: JSON! eventCount: Int! createdAt: DateTime! } input NotificationFilter { isRead: Boolean isArchived: Boolean notificationType: String entityType: String customerId: ID AND: NotificationFilter OR: NotificationFilter NOT: NotificationFilter DISTINCT: Boolean } type NotificationOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Notification!]! } type OffsetPaginationInfo { offset: Int! limit: Int } input OffsetPaginationInput { offset: Int! = 0 limit: Int } enum Ordering { ASC ASC_NULLS_FIRST ASC_NULLS_LAST DESC DESC_NULLS_FIRST DESC_NULLS_LAST } input PatchLogisticsFormSubmissionInput { id: Int! patch: JSON! } type PatchLogisticsFormSubmissionPayload implements MutationResponse { code: String! success: Boolean! message: String! formSubmission: LogisticsFormSubmission } type PayrollUnit { resourceId: Int! resourceEmail: String completionDate: DateTime completionDateLocal: DateTime workorderStatusCompletionDate: DateTime workorderIds: [Int!]! turbineComponentId: Int turbineComponentName: String serviceOrderLineId: Int serviceCode: String serviceOrderLineStatus: String projectId: Int projectCode: String timezone: String payrollUnitType: PayrollUnitType! } type PayrollUnitOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [PayrollUnit!]! } enum PayrollUnitType { BLADE WTG } """Permission definition for schema directives.""" input PermDefinition { """ The app to which we are requiring permission. If this is empty that means that we are checking the permission directly. """ app: String """ The permission itself. If this is empty that means that we are checking for any permission for the given app. """ permission: String } type PlanningAttachment { customerId: Int! campaignId: Int projectId: Int serviceOrderId: Int workOrderId: Int commentId: Int createdById: Int createdAt: DateTime! updatedAt: DateTime! id: ID! fileName: String! contentType: String! byteSize: Int! } type PlanningAttachmentDownloadUrl { url: String! expiresAt: DateTime! } input PlanningAttachmentFilter { id: IDBaseFilterLookup customerId: IDBaseFilterLookup campaignId: IDBaseFilterLookup projectId: IDBaseFilterLookup serviceOrderId: IDBaseFilterLookup workOrderId: IDBaseFilterLookup commentId: IDBaseFilterLookup AND: PlanningAttachmentFilter OR: PlanningAttachmentFilter NOT: PlanningAttachmentFilter DISTINCT: Boolean } type PlanningAttachmentOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [PlanningAttachment!]! } input PlanningAttachmentOrder { id: Ordering createdAt: Ordering } type PlanningAttachmentUploadHeader { name: String! value: String! } type PlanningAttachmentUploadUrl { uploadUrl: String! attachmentUuid: String! expiresAt: DateTime! requiredHeaders: [PlanningAttachmentUploadHeader!]! } type PlanningCampaign { customerId: Int! currencyId: Int createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! status: String! description: String plannedStartDate: Date plannedEndDate: Date actualStartDate: Date actualEndDate: Date plannedCost: Decimal actualCost: Decimal notes: String } input PlanningCampaignFilter { id: IDBaseFilterLookup name: StrFilterLookup status: StrFilterLookup customerId: IDBaseFilterLookup AND: PlanningCampaignFilter OR: PlanningCampaignFilter NOT: PlanningCampaignFilter DISTINCT: Boolean } type PlanningCampaignOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [PlanningCampaign!]! } input PlanningCampaignOrder { id: Ordering name: Ordering status: Ordering plannedStartDate: Ordering plannedEndDate: Ordering updatedAt: Ordering } type PlanningComment { customerId: Int! campaignId: Int projectId: Int serviceOrderId: Int workOrderId: Int createdAt: DateTime! updatedAt: DateTime! id: ID! body: String! } type PlanningCustomerVendor { customerId: Int! vendorId: Int createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! } input PlanningCustomerVendorFilter { id: IDBaseFilterLookup customerId: IDBaseFilterLookup name: StrFilterLookup vendorId: IDBaseFilterLookup AND: PlanningCustomerVendorFilter OR: PlanningCustomerVendorFilter NOT: PlanningCustomerVendorFilter DISTINCT: Boolean } type PlanningCustomerVendorOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [PlanningCustomerVendor!]! } input PlanningCustomerVendorOrder { id: Ordering name: Ordering updatedAt: Ordering } type PlanningEngagementCounts { id: ID! commentCount: Int! attachmentCount: Int! } type PlanningProject { customerId: Int! coreProjectId: Int currencyId: Int createdAt: DateTime! updatedAt: DateTime! id: ID! code: String name: String! status: String! description: String priority: String plannedStartDate: Date plannedEndDate: Date actualStartDate: Date actualEndDate: Date plannedCost: Decimal actualCost: Decimal notes: String campaign: PlanningCampaign campaignId: Int } input PlanningProjectFilter { id: IDBaseFilterLookup name: StrFilterLookup code: StrFilterLookup status: StrFilterLookup customerId: IDBaseFilterLookup campaignId: IDBaseFilterLookup coreProjectId: IDBaseFilterLookup AND: PlanningProjectFilter OR: PlanningProjectFilter NOT: PlanningProjectFilter DISTINCT: Boolean } type PlanningProjectOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [PlanningProject!]! } input PlanningProjectOrder { id: Ordering name: Ordering code: Ordering status: Ordering plannedStartDate: Ordering plannedEndDate: Ordering updatedAt: Ordering } type PlanningScopeCatalog { campaigns: [PlanningScopeCatalogCampaign!]! standaloneProjects: [PlanningScopeCatalogProject!]! standaloneServiceOrders: [PlanningScopeCatalogServiceOrder!]! } type PlanningScopeCatalogCampaign { id: Int! name: String! status: String! projects: [PlanningScopeCatalogProject!]! } type PlanningScopeCatalogProject { id: Int! name: String! code: String status: String! serviceOrders: [PlanningScopeCatalogServiceOrder!]! } type PlanningScopeCatalogServiceOrder { id: Int! number: String status: String! } type PlanningService { customerId: Int! coreServiceId: Int createdAt: DateTime! updatedAt: DateTime! id: ID! code: String! description: String active: Boolean! } input PlanningServiceCatalogueOrder { id: Ordering code: Ordering active: Ordering updatedAt: Ordering } input PlanningServiceFilter { id: IDBaseFilterLookup code: StrFilterLookup active: BoolBaseFilterLookup customerId: IDBaseFilterLookup coreServiceId: IDBaseFilterLookup AND: PlanningServiceFilter OR: PlanningServiceFilter NOT: PlanningServiceFilter DISTINCT: Boolean } type PlanningServiceOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [PlanningService!]! } type PlanningServiceOrder { service: PlanningService! customerId: Int! serviceId: Int! locationId: Int turbineId: Int turbineComponentId: Int createdAt: DateTime! updatedAt: DateTime! id: ID! number: String status: String! priority: String description: String notes: String plannedStartDate: Date plannedEndDate: Date actualStartDate: Date actualEndDate: Date plannedCost: Decimal actualCost: Decimal project: PlanningProject projectId: Int vendor: PlanningCustomerVendor vendorId: Int anomalyId: Int anomalyIds: [Int!]! } input PlanningServiceOrderFilter { id: IDBaseFilterLookup number: StrFilterLookup status: StrFilterLookup customerId: IDBaseFilterLookup projectId: IDBaseFilterLookup serviceId: IDBaseFilterLookup turbineId: IDBaseFilterLookup AND: PlanningServiceOrderFilter OR: PlanningServiceOrderFilter NOT: PlanningServiceOrderFilter DISTINCT: Boolean anomalyId: IDBaseFilterLookup } type PlanningServiceOrderOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [PlanningServiceOrder!]! } input PlanningServiceOrderOrder { id: Ordering number: Ordering status: Ordering priority: Ordering plannedStartDate: Ordering plannedEndDate: Ordering updatedAt: Ordering } type PlanningUserScope { customerUserId: Int! campaignIds: [Int!]! projectIds: [Int!]! serviceOrderIds: [Int!]! } type PlanningWorkOrder { type: PlanningWorkOrderType! customFields: JSON customerId: Int! typeId: Int! createdAt: DateTime! updatedAt: DateTime! id: ID! status: String! name: String! description: String plannedStartDate: Date plannedEndDate: Date completedDate: Date position: Int source: String serviceOrder: PlanningServiceOrder serviceOrderId: Int } input PlanningWorkOrderFilter { id: IDBaseFilterLookup name: StrFilterLookup status: StrFilterLookup customerId: IDBaseFilterLookup serviceOrderId: IDBaseFilterLookup typeId: IDBaseFilterLookup AND: PlanningWorkOrderFilter OR: PlanningWorkOrderFilter NOT: PlanningWorkOrderFilter DISTINCT: Boolean } type PlanningWorkOrderOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [PlanningWorkOrder!]! } input PlanningWorkOrderOrder { id: Ordering name: Ordering status: Ordering position: Ordering plannedStartDate: Ordering plannedEndDate: Ordering updatedAt: Ordering } type PlanningWorkOrderType { customerId: Int! createdAt: DateTime! updatedAt: DateTime! id: ID! code: String! description: String } input PlanningWorkOrderTypeFilter { id: IDBaseFilterLookup code: StrFilterLookup customerId: IDBaseFilterLookup AND: PlanningWorkOrderTypeFilter OR: PlanningWorkOrderTypeFilter NOT: PlanningWorkOrderTypeFilter DISTINCT: Boolean } type PlanningWorkOrderTypeOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [PlanningWorkOrderType!]! } input PlanningWorkOrderTypeOrder { id: Ordering code: Ordering updatedAt: Ordering } input PointInput { x: Int! y: Int! } type Position { createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! isLead: Boolean! } type PositionOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Position!]! } input PositionOrder { id: Ordering name: Ordering isLead: Ordering } enum PresetTemplateMatch { EXPLICIT PROJECT_DEFAULT CUSTOMER_DEFAULT GLOBAL_DEFAULT NONE } type PricingUnit { createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! netsuiteId: Int } type PricingUnitOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [PricingUnit!]! } input PricingUnitOrder { id: Ordering name: Ordering netsuiteId: Ordering } type PriorInspectionBladeTotal { bladeId: ID! position: String totalCount: Int! } type Project { requestingCustomer: Customer billingCustomer: Customer vendor: Vendor country: Country timezone: Timezone status: ProjectStatus projectManager: User salesperson: User supervisor: User projectBuilder: ProjectBuilder projectResourceSets(order: ProjectResourceSetOrder): [ProjectResourceSet!]! googleDriveLinks(order: ProjectGoogleDriveLinkOrder): [ProjectGoogleDriveLink!]! offers(filters: ProjectOfferFilter, order: ProjectOfferOrder, pagination: OffsetPaginationInput): [ProjectOffer!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) probability: Int @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) projectScopeItems(pagination: OffsetPaginationInput, order: ProjectScopeItemOrder): ProjectScopeItemOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) createdAt: DateTime! updatedAt: DateTime! id: ID! code: String! type: String! description: String isOffshore: Boolean! pipedriveId: Int plannedStartDate: Date plannedEndDate: Date actualStartDate: Date actualEndDate: Date scopeChangeAutoAcceptEnabled: Boolean! title: String! serviceCount: Int! poReceived: Boolean! scopeItemCount: Int! offerVersion: Int offeredAssetCount: Int commentCount: Int! lastComment: ProjectLastComment activeServiceCount: Int! servicesTotal: Int! servicesCompleted: Int! turbinesInScope: Int! turbinesCompleted: Int! servicesToReviewCount: Int! serviceGroups: [String!]! unseenDeliverableCount: Int! """ Distinct Service catalog entries referenced by the project's offer items. Defaults to APPROVED offers only; pass `statuses` to widen or narrow the set (e.g. PENDING/DRAFT/REJECTED — an empty list returns no services). Project-wide, not resource-set-scoped: ProjectPlannedResourceSet has no relation to the offer/service domain. Passing `statuses` costs one query per project — for a paginated list of projects, use the batched `projectServicesByStatus` root query instead of selecting this with `statuses` on every row. """ services(statuses: [ProjectOfferStatus!] = null): [Service!]! """ Earliest planned-resource-set start date — MIN(start_date) over the project's planned resource set items, same source as the REST potential_start_date. Null when the project has no planned set with a start date. Not the legacy plannedStartDate column. """ potentialStartDate: String originId: String scopeChangeFeatureEnabled: Boolean! @deprecated(reason: "Renamed to scopeChangeAutoAcceptEnabled (same value). Temporary alias during the scope-change approval rollout (Wrike 4509460355); remove once AeroTask and the OpsHub frontend select the new name.") locations: [ProjectLocationInfo!]! comments(pagination: OffsetPaginationInput): ProjectCommentOffsetPaginated! turbineSummary(pagination: OffsetPaginationInput = null, serviceStatuses: [String!] = null, serviceTypes: [String!] = null): ProjectTurbineRowsOffsetPaginated! assetInventory: ProjectAssetInventory! } type ProjectAssetInventory { turbines: [ProjectAssetTurbineBucket!]! siteLevelSolIds: [ID!]! } type ProjectAssetTurbineBucket { turbineId: ID! turbineName: String turbineModel: String parkName: String servicesDone: Int! servicesTotal: Int! findingsSum: Int! solIds: [ID!]! } type ProjectBuilder { id: UUID! code: String } type ProjectComment { projectTask: ProjectTask mentionedUsers(order: UserOrder): [User!]! attachments: [UploadedFile!]! author: User @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) createdAt: DateTime! updatedAt: DateTime! id: ID! body: String! bodyFormat: String! } type ProjectCommentOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ProjectComment!]! } type ProjectContact { project: Project! customerContact: CustomerContact! createdAt: DateTime! updatedAt: DateTime! id: ID! role: String } enum ProjectContactMutableRole { PRIMARY_CONTACT REPORT_RECEPIENT INVOICE_APPROVER QHSE_CONTACT } type ProjectContactOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ProjectContact!]! } input ProjectContactOrder { id: Ordering project: Ordering customerContact: Ordering role: Ordering } type ProjectDailyReports { owed: [Date!]! sent: [Date!]! lastActiveDay: Date } input ProjectFilter { id: ID code: String type: String AND: ProjectFilter OR: ProjectFilter NOT: ProjectFilter DISTINCT: Boolean statusCodes: [String!] search: String potentialStartDateGte: String potentialStartDateLte: String projectManagerIds: [ID!] supervisorIds: [ID!] hasProjectManager: Boolean hasSalesperson: Boolean hasSupervisor: Boolean turbineIds: [ID!] bladeIds: [ID!] probabilityGte: Int serviceOrderLines: ServiceOrderLineFilter } type ProjectFinancials { coValue: Float chargedValue: Float purchaseOrderValue: Float currency: String } type ProjectGoogleDriveLink { project: Project! createdAt: DateTime! updatedAt: DateTime! id: ID! linkType: String! url: String! } type ProjectGoogleDriveLinkOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ProjectGoogleDriveLink!]! } input ProjectGoogleDriveLinkOrder { id: Ordering linkType: Ordering } type ProjectLastComment { id: ID! body: String! createdAt: DateTime! authorFirstName: String authorLastName: String authorEmail: String taskTitle: String } type ProjectLocation { project: Project! location: Location! projectContact: ProjectContact createdAt: DateTime! updatedAt: DateTime! id: ID! additionalInformation: JSON } type ProjectLocationInfo { id: Int! name: String! country: Country } type ProjectLocationOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ProjectLocation!]! } input ProjectLocationOrder { id: Ordering project: Ordering location: Ordering projectContact: Ordering additionalInformation: Ordering } type ProjectLocationRef { id: Int! name: String! } type ProjectOffer { project: Project! currency: Currency! reviewer: User items(filters: ProjectOfferItemFilter, order: ProjectOfferItemOrder, pagination: OffsetPaginationInput): [ProjectOfferItem!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) createdAt: DateTime! updatedAt: DateTime! id: ID! discount: Decimal! status: String! version: Int type: String changeReason: String grossMargin: Decimal adjustedGrossMargin: Decimal comment: String! requiredApproverRole: String! } input ProjectOfferFilter { id: ID status: String type: String version: Int AND: ProjectOfferFilter OR: ProjectOfferFilter NOT: ProjectOfferFilter DISTINCT: Boolean projectIds: [Int!] last: Boolean } type ProjectOfferItem { offer: ProjectOffer! location: ProjectLocation service: Service pricingUnit: PricingUnit turbineManufacturer: Manufacturer turbineModel: ManufacturerTurbineModel componentManufacturer: Manufacturer manufacturerComponentModel: ManufacturerComponentModel createdAt: DateTime! updatedAt: DateTime! id: ID! price: Decimal quantity: Int discount: Decimal adjustment: Decimal amount: Decimal coefficients: JSON! groupId: Int description: String isOptional: Boolean! } input ProjectOfferItemFilter { id: ID service: DjangoModelFilterInput pricingUnit: DjangoModelFilterInput AND: ProjectOfferItemFilter OR: ProjectOfferItemFilter NOT: ProjectOfferItemFilter DISTINCT: Boolean isService: Boolean pricingUnitName: String } type ProjectOfferItemOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ProjectOfferItem!]! } input ProjectOfferItemOrder { id: Ordering offer: Ordering location: Ordering service: Ordering price: Ordering quantity: Ordering discount: Ordering adjustment: Ordering amount: Ordering pricingUnit: Ordering groupId: Ordering description: Ordering } type ProjectOfferOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ProjectOffer!]! } input ProjectOfferOrder { id: Ordering project: Ordering currency: Ordering discount: Ordering status: Ordering version: Ordering grossMargin: Ordering requiredApproverRole: Ordering } enum ProjectOfferStatus { REJECTED DRAFT PENDING APPROVED } type ProjectOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Project!]! } input ProjectOrder { id: Ordering type: Ordering updatedAt: Ordering description: Ordering requestingCustomer: Ordering billingCustomer: Ordering vendor: Ordering country: Ordering timezone: Ordering status: Ordering projectManager: Ordering supervisor: Ordering pipedriveId: Ordering projectBuilder: Ordering plannedStartDate: Ordering title: Ordering code: Ordering plannedEndDate: Ordering actualStartDate: Ordering actualEndDate: Ordering countryName: Ordering locationName: Ordering serviceCount: Ordering } type ProjectOverviewRow { id: ID! code: String title: String! statusCode: String statusLabel: String countryCode: String countryName: String locations: [ProjectLocationRef!]! serviceGroups: [String!]! families: [String!]! isRental: Boolean! isFactory: Boolean! activeServiceCount: Int! servicesToReviewCount: Int! servicesTotal: Int! servicesCompleted: Int! turbinesInScope: Int! turbinesCompleted: Int! unseenDeliverableCount: Int! plannedStartDate: Date plannedEndDate: Date actualStartDate: Date actualEndDate: Date } type ProjectPlanCampaignRow { id: ID! projectId: ID! name: String! startDate: Date endDate: Date status: String! scope: [ProjectPlanCampaignScope!]! } type ProjectPlanCampaignScope { service: String! serviceCode: String! pricingUnit: String! quantity: Float! turbineModel: String } type ProjectPlannedResourceSet { project: Project! projectLocation: ProjectLocation items: [ProjectPlannedResourceSetItem!]! createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! description: String status: String! } type ProjectPlannedResourceSetItem { projectPlannedResourceSet: ProjectPlannedResourceSet! projectLocation: ProjectLocation resource: Resource createdAt: DateTime! updatedAt: DateTime! id: ID! isLead: Boolean resourceType: String! startDate: Date endDate: Date status: String! } type ProjectPlannedResourceSetItemOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ProjectPlannedResourceSetItem!]! } type ProjectPlannedResourceSetOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ProjectPlannedResourceSet!]! } input ProjectPlannedResourceSetOrder { id: Ordering project: Ordering projectLocation: Ordering name: Ordering status: Ordering } enum ProjectPlannedResourceSetStatus { PLANNED SUGGESTED APPROVED PLANNING EXECUTION FIELD_COMPLETED REJECTED } type ProjectPreJobAnswers { project: Project! question: ProjectQuestionConfig! service: Service projectLocation: ProjectLocation createdAt: DateTime! updatedAt: DateTime! id: ID! title: String! answer: JSON! } input ProjectPreJobAnswersFilter { project: DjangoModelFilterInput question: DjangoModelFilterInput service: DjangoModelFilterInput projectLocation: DjangoModelFilterInput AND: ProjectPreJobAnswersFilter OR: ProjectPreJobAnswersFilter NOT: ProjectPreJobAnswersFilter DISTINCT: Boolean } type ProjectPreJobAnswersOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ProjectPreJobAnswers!]! } input ProjectPreJobAnswersOrder { id: Ordering project: Ordering question: Ordering service: Ordering projectLocation: Ordering } type ProjectPreJobCompletionItem { projectId: ID! filledCount: Int! totalCount: Int! percentComplete: Int! } type ProjectQuestionConfig { service: Service createdAt: DateTime! updatedAt: DateTime! id: ID! section: String! priority: Int! key: String! title: String! type: String! required: Boolean! choices: JSON tooltip: String unit: String enabled: Boolean! } input ProjectQuestionConfigFilter { section: String service: DjangoModelFilterInput enabled: Boolean AND: ProjectQuestionConfigFilter OR: ProjectQuestionConfigFilter NOT: ProjectQuestionConfigFilter DISTINCT: Boolean serviceCode: String } type ProjectQuestionConfigOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ProjectQuestionConfig!]! } input ProjectQuestionConfigOrder { id: Ordering section: Ordering service: Ordering priority: Ordering key: Ordering title: Ordering enabled: Ordering } type ProjectReportFigures { projectId: Int! dailyReports: ProjectDailyReports! serviceReports: [ProjectServiceReports!]! } type ProjectResourceSet { project: Project! projectLocation: ProjectLocation items: [ProjectResourceSetItem!]! createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! description: String } type ProjectResourceSetItem { projectResourceSet: ProjectResourceSet! projectLocation: ProjectLocation resource: Resource! createdAt: DateTime! updatedAt: DateTime! id: ID! isLead: Boolean resourceType: String! startDate: Date endDate: Date } type ProjectResourceSetItemOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ProjectResourceSetItem!]! } type ProjectResourceSetOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ProjectResourceSet!]! } input ProjectResourceSetOrder { id: Ordering project: Ordering projectLocation: Ordering name: Ordering description: Ordering } enum ProjectRoster { """On the project's resource set right now.""" LIVE """ On the set, or taken off it within the removal grace -- five days at present. The default for both feeds. """ WITHIN_REMOVAL_GRACE """ On the set at any point, however long ago the person was taken off it. Reaches work on projects they have since left. """ ALL """ The roster is not considered, so a pin alone assigns the workorder. The roster half matches nothing under this, being reached through the roster itself. """ IGNORED } type ProjectScopeItem { project: Project! location: Location! turbine: Turbine componentType: ComponentType turbineComponent: TurbineComponent service: Service createdAt: DateTime! updatedAt: DateTime! id: ID! additionalInformation: JSON } type ProjectScopeItemOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ProjectScopeItem!]! } input ProjectScopeItemOrder { id: Ordering project: Ordering location: Ordering turbine: Ordering componentType: Ordering turbineComponent: Ordering service: Ordering additionalInformation: Ordering } type ProjectServiceReportLine { id: ID! turbine: String blade: String reported: Boolean! } type ProjectServiceReports { serviceCode: String turbines: Int! blades: Int! completed: Int! reported: Int! lines: [ProjectServiceReportLine!]! } type ProjectServicesByStatusItem { projectId: ID! services: [Service!]! } type ProjectStatus { createdAt: DateTime! updatedAt: DateTime! id: ID! code: String! description: String enabled: Boolean! sortOrder: Int! } enum ProjectStatusCode { UPCOMING INITIATION PLANNING EXECUTION CLOSURE COMPLETED CANCELLED } type ProjectStatusOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ProjectStatus!]! } input ProjectStatusOrder { id: Ordering code: Ordering description: Ordering enabled: Ordering sortOrder: Ordering } type ProjectTask { project: Project! projectStatus: ProjectStatus parentTask: ProjectTask responsibleUser: User confirmedBy: User projectPlannedResourceSet: ProjectPlannedResourceSet taskType: ProjectTaskType! status: ProjectTaskStatus! applicability: Applicability! comments(pagination: OffsetPaginationInput): ProjectTaskCommentOffsetPaginated! createdAt: DateTime! updatedAt: DateTime! id: ID! title: String! notes: String! notRequiredReason: String! startDate: Date endDate: Date dueDate: Date confirmedAt: DateTime isManuallyOverridden: Boolean! externalRefSystem: String! externalRefId: String! additionalInformation: ProjectTaskAdditionalInformation! events(pagination: OffsetPaginationInput): ProjectTaskEventOffsetPaginated! } type ProjectTaskAdditionalInformation { link: ProjectTaskLink } type ProjectTaskComment { mentionedUsers(order: UserOrder): [User!]! attachments: [UploadedFile!]! author: User @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) createdAt: DateTime! updatedAt: DateTime! id: ID! body: String! bodyFormat: String! isSystem: Boolean! } enum ProjectTaskCommentBodyFormat { TEXT MARKDOWN } type ProjectTaskCommentOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ProjectTaskComment!]! } type ProjectTaskEvent { id: ID! op: String! changedColumns: [String!]! oldValues: JSON newValues: JSON actorUserId: Int createdAt: DateTime! actor: User } type ProjectTaskEventOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ProjectTaskEvent!]! } input ProjectTaskFilter { id: ID projectStatus: DjangoModelFilterInput parentTask: DjangoModelFilterInput responsibleUser: DjangoModelFilterInput isManuallyOverridden: Boolean projectPlannedResourceSet: DjangoModelFilterInput AND: ProjectTaskFilter OR: ProjectTaskFilter NOT: ProjectTaskFilter DISTINCT: Boolean project: ProjectTaskProjectFilter projectWide: Boolean taskType: ProjectTaskType taskTypes: [ProjectTaskType!] status: ProjectTaskStatus statuses: [ProjectTaskStatus!] applicability: Applicability applicabilities: [Applicability!] dueDateGte: Date dueDateLte: Date search: String } type ProjectTaskLink { kind: ProjectTaskLinkKind! route: ProjectTaskRoute href: String } enum ProjectTaskLinkKind { INTERNAL EXTERNAL } type ProjectTaskOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ProjectTask!]! } input ProjectTaskOrder { id: Ordering project: Ordering projectStatus: Ordering parentTask: Ordering taskType: Ordering status: Ordering title: Ordering applicability: Ordering responsibleUser: Ordering startDate: Ordering endDate: Ordering dueDate: Ordering confirmedAt: Ordering isManuallyOverridden: Ordering createdAt: Ordering updatedAt: Ordering } input ProjectTaskProjectFilter { pk: ID pks: [ID!] code: String } enum ProjectTaskRoute { PROJECT_RFI PROJECT_RFI_BILLING PROJECT_COMMERCIAL_OFFER PROJECT_RAMS PROJECT_PRE_JOB PROJECT_SERVICE_ORDERS PROJECT_BTO PROJECT_ACCOUNTING PROJECT_DEVIATIONS PROJECT_REQUESTS PROJECT_EXECUTION } enum ProjectTaskStatus { TODO IN_PROGRESS COMPLETED APPROVED } enum ProjectTaskType { RFI_COMPLETE OFFER_COMPLETE PURCHASE_ORDER_RECEIVED SALES_ORDER_CREATED KICKOFF_CALL TECH_CALL REPORTING_REQUIREMENTS RAMS PREJOB_RECEIVED REQUEST_SPECIAL_PPE REQUEST_CONSUMABLES REQUEST_TEAM SET_REQUEST MOBILISE_SET VEHICLE_REQUEST RENTAL_VEHICLE EQUIPMENT_RENTAL BUSINESS_TRIP_ORDER APPROVE_FLIGHTS ACCOMMODATION DAILY_ALLOWANCES SERVICE_ORDERS_CREATED FINAL_REPORTS INVOICE_SENT_TO_CUSTOMER OTHER } type ProjectTurbineRow { turbineId: ID! turbineName: String locationId: ID locationName: String turbineStatus: String! servicesTotal: Int! servicesCompleted: Int! services: [ProjectTurbineService!]! } type ProjectTurbineRowsOffsetPaginated { pageInfo: ProjectTurbineRowsPageInfo! totalCount: Int! results: [ProjectTurbineRow!]! } type ProjectTurbineRowsPageInfo { offset: Int! limit: Int } type ProjectTurbineService { id: ID! serviceCode: String serviceType: String! status: String serviceOrderDate: String anomalyCount: Int! } input ProjectWorkorderFilter { AND: ProjectWorkorderFilter OR: ProjectWorkorderFilter NOT: ProjectWorkorderFilter DISTINCT: Boolean status: [WorkorderStatus!] types: [WorkorderType!] assignment: WorkorderAssignment onProjectRoster: ProjectRoster assignedUserId: Int projectStatuses: [ProjectStatusCode!] turbineId: Int } type PurchaseOrder { customer: Customer currency: Currency createdAt: DateTime! updatedAt: DateTime! id: ID! } type PurchaseOrderOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [PurchaseOrder!]! } input PurchaseOrderOrder { id: Ordering customer: Ordering currency: Ordering createdAt: Ordering updatedAt: Ordering } type PurchaseOrderProject { purchaseOrder: PurchaseOrder! project: Project! createdAt: DateTime! updatedAt: DateTime! id: ID! } type PurchaseOrderProjectOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [PurchaseOrderProject!]! } input PurchaseOrderProjectOrder { id: Ordering purchaseOrder: Ordering project: Ordering } type PurchaseOrderVersion { purchaseOrder: PurchaseOrder! createdAt: DateTime! updatedAt: DateTime! id: ID! versionNumber: Int! orderNumber: String! issueDate: Date! amount: Decimal! } type PurchaseOrderVersionOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [PurchaseOrderVersion!]! } input PurchaseOrderVersionOrder { id: Ordering purchaseOrder: Ordering versionNumber: Ordering issueDate: Ordering orderNumber: Ordering } type Query { myApiKeys(pagination: OffsetPaginationInput): ApiKeyOffsetPaginated! @hasPerm(permissions: [{app: "permissions", permission: "create_api_key"}], any: true) me: User! userRoles(pagination: OffsetPaginationInput, order: UserRoleOrder): UserRoleOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) regions(pagination: OffsetPaginationInput, order: RegionOrder): RegionOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) componentTypes(pagination: OffsetPaginationInput, order: ComponentTypeOrder): ComponentTypeOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) anomalyComponents(pagination: OffsetPaginationInput, order: AnomalyComponentOrder): AnomalyComponentOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}, {app: "permissions", permission: "academy_trainee"}], any: true) anomalyTypes(pagination: OffsetPaginationInput, filters: AnomalyTypeFilter, order: AnomalyTypeOrder): AnomalyTypeOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}, {app: "permissions", permission: "academy_trainee"}], any: true) anomalyRootCauseTypes(pagination: OffsetPaginationInput, order: AnomalyRootCauseTypeOrder): AnomalyRootCauseTypeOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}, {app: "permissions", permission: "academy_trainee"}], any: true) anomalyParentTypes(pagination: OffsetPaginationInput, order: AnomalyParentTypeOrder): AnomalyParentTypeOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}, {app: "permissions", permission: "academy_trainee"}], any: true) anomalyMaterials(pagination: OffsetPaginationInput, order: AnomalyMaterialOrder): AnomalyMaterialOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}, {app: "permissions", permission: "academy_trainee"}], any: true) anomalyComponentTypeMaps(pagination: OffsetPaginationInput, filters: AnomalyComponentTypeMapFilter, order: AnomalyComponentTypeMapOrder): AnomalyComponentTypeMapOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}, {app: "permissions", permission: "academy_trainee"}], any: true) anomalyRecommendations(pagination: OffsetPaginationInput, order: AnomalyRecommendationOrder): AnomalyRecommendationOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}, {app: "permissions", permission: "academy_trainee"}], any: true) anomalies(pagination: OffsetPaginationInput, filters: CoreAnomalyFilter, order: AnomalyOrder): CoreAnomalyOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) anomalyClientFields(pagination: OffsetPaginationInput, filters: AnomalyClientFieldFilter, order: AnomalyClientFieldOrder): AnomalyClientFieldOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) countries(pagination: OffsetPaginationInput, order: CountryOrder): CountryOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) serviceCategories(pagination: OffsetPaginationInput, order: ServiceCategoryOrder): ServiceCategoryOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) serviceFamilies(pagination: OffsetPaginationInput, order: ServiceFamilyOrder): ServiceFamilyOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) serviceGroups(pagination: OffsetPaginationInput, order: ServiceGroupOrder): ServiceGroupOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) services(pagination: OffsetPaginationInput, filters: ServiceFilter, order: ServiceOrder): ServiceOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) servicePricingUnits(pagination: OffsetPaginationInput, order: ServicePricingUnitOrder): ServicePricingUnitOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) serviceComponents(pagination: OffsetPaginationInput): ServiceComponentOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) pricingUnits(pagination: OffsetPaginationInput, order: PricingUnitOrder): PricingUnitOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) serviceRelatedServices(pagination: OffsetPaginationInput, order: ServiceRelatedServiceOrder): ServiceRelatedServiceOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) customers(customerType: CustomerTypeFilter! = COMMERCIAL, order: CustomerOrder, pagination: OffsetPaginationInput): CustomerOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) vendors(pagination: OffsetPaginationInput, order: VendorOrder): VendorOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) customerContacts(pagination: OffsetPaginationInput, filters: CustomerContactFilter, order: CustomerContactOrder): CustomerContactOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) timezones(pagination: OffsetPaginationInput, order: TimezoneOrder): TimezoneOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) customerAddresses(pagination: OffsetPaginationInput, order: CustomerAddressOrder): CustomerAddressOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) relationshipTypes(pagination: OffsetPaginationInput, order: RelationshipTypeOrder): RelationshipTypeOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) customerLocations(pagination: OffsetPaginationInput, order: CustomerLocationOrder): CustomerLocationOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) customerTurbines(pagination: OffsetPaginationInput, order: CustomerTurbineOrder): CustomerTurbineOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) customerBankAccounts(pagination: OffsetPaginationInput, order: CustomerBankAccountOrder): CustomerBankAccountOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) termsOfServices(pagination: OffsetPaginationInput, order: TermsOfServiceOrder): TermsOfServiceOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) manufacturers(pagination: OffsetPaginationInput, filters: ManufacturerFilter, order: ManufacturerOrder): ManufacturerOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) certificates(pagination: OffsetPaginationInput, order: CertificateOrder): CertificateOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) certificateCategories(pagination: OffsetPaginationInput, order: CertificateCategoryOrder): CertificateCategoryOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) certificateIssuers(pagination: OffsetPaginationInput, order: CertificateIssuerOrder): CertificateIssuerOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) certificateOfferings(pagination: OffsetPaginationInput, order: CertificateOfferingOrder): CertificateOfferingOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) certificateExpenses(pagination: OffsetPaginationInput, order: CertificateExpenseOrder): CertificateExpenseOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) manufacturerTurbineModels(pagination: OffsetPaginationInput, filters: ManufacturerTurbineModelFilter, order: ManufacturerTurbineModelOrder): ManufacturerTurbineModelOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) manufacturerComponentModels(pagination: OffsetPaginationInput, filters: ManufacturerComponentModelFilter, order: ManufacturerComponentModelOrder): ManufacturerComponentModelOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) robotSets(pagination: OffsetPaginationInput, order: RobotSetOrder): RobotSetOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) robotSetServices(pagination: OffsetPaginationInput, order: RobotSetServicesOrder): RobotSetServicesOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) turbines(pagination: OffsetPaginationInput, filters: TurbineFilter, order: TurbineOrder): TurbineOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}], any: true) turbineComponents(pagination: OffsetPaginationInput, filters: TurbineComponentFilter, order: TurbineComponentOrder): TurbineComponentOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}], any: true) businessRegions(pagination: OffsetPaginationInput, order: BusinessRegionOrder): BusinessRegionOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) currencies(pagination: OffsetPaginationInput, order: CurrencyOrder): CurrencyOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) projectStatuses(pagination: OffsetPaginationInput, order: ProjectStatusOrder): ProjectStatusOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) projectContacts(pagination: OffsetPaginationInput, order: ProjectContactOrder): ProjectContactOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) projects(pagination: OffsetPaginationInput, filters: ProjectFilter, order: ProjectOrder): ProjectOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) projectOffers(pagination: OffsetPaginationInput, filters: ProjectOfferFilter, order: ProjectOfferOrder): ProjectOfferOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) projectOfferItems(pagination: OffsetPaginationInput, order: ProjectOfferItemOrder): ProjectOfferItemOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) projectLocations(pagination: OffsetPaginationInput, order: ProjectLocationOrder): ProjectLocationOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) projectTasks(pagination: OffsetPaginationInput, filters: ProjectTaskFilter, order: ProjectTaskOrder): ProjectTaskOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) projectScopeItems(pagination: OffsetPaginationInput, order: ProjectScopeItemOrder): ProjectScopeItemOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) resources(includeDeleted: Boolean! = false, order: ResourceOrder, pagination: OffsetPaginationInput): ResourceOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) resourceSets(pagination: OffsetPaginationInput, order: ResourceSetOrder): ResourceSetOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) resourceSetItems(pagination: OffsetPaginationInput): ResourceSetItemOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) positions(pagination: OffsetPaginationInput, order: PositionOrder): PositionOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) resourceServicePositions(pagination: OffsetPaginationInput, order: ResourceServicePositionOrder): ResourceServicePositionOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) projectResourceSets(pagination: OffsetPaginationInput, order: ProjectResourceSetOrder): ProjectResourceSetOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) projectResourceSetItems(pagination: OffsetPaginationInput): ProjectResourceSetItemOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) projectPlannedResourceSets(pagination: OffsetPaginationInput, order: ProjectPlannedResourceSetOrder): ProjectPlannedResourceSetOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) projectPlannedResourceSetItems(pagination: OffsetPaginationInput): ProjectPlannedResourceSetItemOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) projectQuestionConfigs(pagination: OffsetPaginationInput, filters: ProjectQuestionConfigFilter, order: ProjectQuestionConfigOrder): ProjectQuestionConfigOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) projectGoogleDriveLinks(pagination: OffsetPaginationInput, order: ProjectGoogleDriveLinkOrder): ProjectGoogleDriveLinkOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) projectPreJobAnswers(pagination: OffsetPaginationInput, filters: ProjectPreJobAnswersFilter, order: ProjectPreJobAnswersOrder): ProjectPreJobAnswersOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) purchaseOrders(pagination: OffsetPaginationInput, order: PurchaseOrderOrder): PurchaseOrderOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) purchaseOrderVersions(pagination: OffsetPaginationInput, order: PurchaseOrderVersionOrder): PurchaseOrderVersionOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) purchaseOrderProjects(pagination: OffsetPaginationInput, order: PurchaseOrderProjectOrder): PurchaseOrderProjectOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) resourceCertificates(pagination: OffsetPaginationInput): ResourceCertificateOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) locationRequiredCertificates(pagination: OffsetPaginationInput): LocationRequiredCertificateOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) files(pagination: OffsetPaginationInput): FileOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) fileEntityLinks(pagination: OffsetPaginationInput, filters: FileEntityLinkFilter, order: FileEntityLinkOrder): FileEntityLinkOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) vehicles(pagination: OffsetPaginationInput): VehicleOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) vehicleInsurances(pagination: OffsetPaginationInput): VehicleInsuranceOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) vehicleFleetAssignments(pagination: OffsetPaginationInput): VehicleFleetAssignmentOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) vehicleFleetAssignmentReports(pagination: OffsetPaginationInput): VehicleFleetAssignmentReportOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) fleetVehicleAssignments(pagination: OffsetPaginationInput): VehicleFleetAssignmentOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) @deprecated(reason: "Renamed to vehicleFleetAssignments") fleetVehicleAssignmentReports(pagination: OffsetPaginationInput): VehicleFleetAssignmentReportOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) @deprecated(reason: "Renamed to vehicleFleetAssignmentReports") delayCategories(pagination: OffsetPaginationInput): DelayCategoryOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) delayTypes(pagination: OffsetPaginationInput): DelayTypeOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) delays(pagination: OffsetPaginationInput, filters: DelayFilter): DelayOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) serviceResults(pagination: OffsetPaginationInput, order: ServiceResultOrder): ServiceResultOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) serviceResultTemplates(pagination: OffsetPaginationInput, order: ServiceResultTemplateOrder): ServiceResultTemplateOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) serviceResultTemplateFields(pagination: OffsetPaginationInput, order: ServiceResultTemplateFieldOrder): ServiceResultTemplateFieldOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) locations(pagination: OffsetPaginationInput, filters: LocationFilter, order: LocationOrder): LocationOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) users(filters: UserFilter, order: UserOrder, pagination: OffsetPaginationInput): UserOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_manage_access_control"}, {app: "permissions", permission: "customer_manage_anomalies"}], any: true) userEmailDomains(customerId: Int!): [String!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_manage_access_control"}], any: true) userExistsByEmail(email: String!): Boolean! @hasPerm(permissions: [{app: "permissions", permission: "customer_manage_access_control"}], any: true) projectServicesByStatus(projectIds: [ID!]!, statuses: [ProjectOfferStatus!] = null): [ProjectServicesByStatusItem!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) mobilisationRows(projectIds: [ID!]!, today: Date = null): [MobilisationRow!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) projectPreJobCompletionByProject(projectIds: [ID!]!): [ProjectPreJobCompletionItem!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) inspectionValues: InspectionValues! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) annotationRecommendations(type: String = null, status: String = null, anomalyTypeId: Int = null): [AnnotationRecommendation!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) region(id: ID!): Region @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) componentType(id: ID!): ComponentType @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) anomaly(id: ID!): CoreAnomaly @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) anomalyLinks(anomalyId: ID!): [CoreAnomaly!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) anomalyClientFieldsForServiceOrderLine(serviceOrderLineId: Int!): [AnomalyClientField!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) anomalyClientFieldsForViewer: [AnomalyClientField!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) country(id: ID!): Country @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) serviceCategory(id: ID!): ServiceCategory @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) serviceFamily(id: ID!): ServiceFamily @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) serviceGroup(id: ID!): ServiceGroup @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) service(id: ID!): Service @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) servicePricingUnit(id: ID!): ServicePricingUnit @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) serviceComponent(id: ID!): ServiceComponent @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) pricingUnit(id: ID!): PricingUnit @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) serviceRelatedService(id: ID!): ServiceRelatedService @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) customer(id: ID!): Customer @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) vendor(id: ID!): Vendor @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) customerContact(id: ID!): CustomerContact @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) timezone(id: ID!): Timezone @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) location(id: ID!): Location @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) customerAddress(id: ID!): CustomerAddress @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) relationshipType(id: ID!): RelationshipType @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) customerLocation(id: ID!): CustomerLocation @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}], any: true) customerTurbine(id: ID!): CustomerTurbine @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}], any: true) customerBankAccount(id: ID!): CustomerBankAccount @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) customerRoles(customerId: Int!): [CustomerRole!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_manage_access_control"}], any: true) customerUsers(customerId: Int!, filters: CustomerUserFilter = null, order: CustomerUserOrder = null, pagination: OffsetPaginationInput = null): CustomerUserOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_manage_access_control"}], any: true) resolveInviteToken(token: String!): InviteTokenResolution! customerPermissionGroups: [CustomerPermissionGroup!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_manage_access_control"}], any: true) termsOfService(id: ID!): TermsOfService @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) userTosAcceptances(pagination: OffsetPaginationInput = null): UserTosAcceptanceOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) userTosAcceptance(id: ID!): UserTosAcceptance @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) manufacturer(id: ID!): Manufacturer @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) certificate(id: ID!): Certificate @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) certificateCategory(id: ID!): CertificateCategory @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) certificateIssuer(id: ID!): CertificateIssuer @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) certificateOffering(id: ID!): CertificateOffering @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) certificateExpense(id: ID!): CertificateExpense @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) manufacturerTurbineModel(id: ID!): ManufacturerTurbineModel @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) manufacturerComponentModel(id: ID!): ManufacturerComponentModel @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) robotSet(id: ID!): RobotSet @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) robotSetService(id: ID!): RobotSetServices @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) turbine(id: ID!): Turbine @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}], any: true) turbineComponent(id: ID!): TurbineComponent @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}], any: true) businessRegion(id: ID!): BusinessRegion @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) currency(id: ID!): Currency @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) projectStatus(id: ID!): ProjectStatus @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) projectContact(id: ID!): ProjectContact @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) project(id: ID!): Project @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) projectOffer(id: ID!): ProjectOffer @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) projectOfferItem(id: ID!): ProjectOfferItem @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) projectLocation(id: ID!): ProjectLocation @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) projectTask(id: ID!): ProjectTask @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) projectScopeItem(id: ID!): ProjectScopeItem @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_scope_changes"}], any: true) resource(id: ID!): Resource @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) resourceSet(id: ID!): ResourceSet @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) resourceSetItem(id: ID!): ResourceSetItem @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) projectResourceSet(id: ID!): ProjectResourceSet @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) projectResourceSetItem(id: ID!): ProjectResourceSetItem @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) projectPlannedResourceSet(id: ID!): ProjectPlannedResourceSet @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) projectPlannedResourceSetItem(id: ID!): ProjectPlannedResourceSetItem @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) projectQuestionConfig(id: ID!): ProjectQuestionConfig @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) projectGoogleDriveLink(id: ID!): ProjectGoogleDriveLink @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) projectPreJobAnswer(id: ID!): ProjectPreJobAnswers @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) resourceCertificate(id: ID!): ResourceCertificate @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) locationRequiredCertificate(id: ID!): LocationRequiredCertificate @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) file(id: ID!): File @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) fileEntityLink(id: ID!): FileEntityLink @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) vehicle(id: ID!): Vehicle @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}], any: true) vehicleInsurance(id: ID!): VehicleInsurance @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}], any: true) vehicleFleetAssignment(id: ID!): VehicleFleetAssignment @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}], any: true) vehicleFleetAssignmentReport(id: ID!): VehicleFleetAssignmentReport @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}], any: true) fleetVehicleAssignment(id: ID!): VehicleFleetAssignment @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}], any: true) @deprecated(reason: "Renamed to vehicleFleetAssignment") fleetVehicleAssignmentReport(id: ID!): VehicleFleetAssignmentReport @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}], any: true) @deprecated(reason: "Renamed to vehicleFleetAssignmentReport") delayCategory(id: ID!): DelayCategory @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) delayType(id: ID!): DelayType @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) delay(id: ID!): Delay @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) serviceResult(id: ID!): ServiceResult @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) serviceResultTemplate(id: ID!): ServiceResultTemplate @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) serviceResultTemplateField(id: ID!): ServiceResultTemplateField @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) notifications(filters: NotificationFilter = null, pagination: OffsetPaginationInput = null): NotificationOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) notification(id: ID!): Notification @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) notificationUnreadCount: Int! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) serviceItems(pagination: OffsetPaginationInput, order: ServiceItemOrder): ServiceItemOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) serviceItemActivities(pagination: OffsetPaginationInput, order: ServiceItemActivityOrder): ServiceItemActivityOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) serviceOrderHeaders(pagination: OffsetPaginationInput, order: ServiceOrderHeaderOrder): ServiceOrderHeaderOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) serviceOrderLines(pagination: OffsetPaginationInput, filters: ServiceOrderLineFilter, order: ServiceOrderLineOrder): ServiceOrderLineOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) serviceOrderLogs(pagination: OffsetPaginationInput): ServiceOrderLogOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) serviceDispatchConfigs(pagination: OffsetPaginationInput): ServiceDispatchConfigOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) workorders(assignedUserId: Int = null @deprecated(reason: "Use filters: { assignedUserId } instead. This argument carries the scope this feed has always applied to it, which a subject named in filters does not: assignment DIRECT and the default roster window. Name them in filters to keep them."), resourceIds: [Int!] = null @deprecated(reason: "Use filters: { resourceIds } instead. Every root argument on this field is a filter by another name, applied through the field that replaces it; they go when assignedUserId does."), status: [WorkorderStatus!] = null @deprecated(reason: "Use filters: { status } instead. Every root argument on this field is a filter by another name, applied through the field that replaces it; they go when assignedUserId does."), types: [WorkorderType!] = null @deprecated(reason: "Use filters: { types } instead. Every root argument on this field is a filter by another name, applied through the field that replaces it; they go when assignedUserId does."), turbineId: Int = null @deprecated(reason: "Use filters: { turbineId } instead. Every root argument on this field is a filter by another name, applied through the field that replaces it; they go when assignedUserId does."), filters: WorkorderFilter, order: WorkorderOrder, pagination: OffsetPaginationInput): WorkorderOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) projectWorkorders(assignedUserId: Int = null @deprecated(reason: "Use filters: { assignedUserId } instead. This argument carries the scope this feed has always applied to it, which a subject named in filters does not: assignment INDIRECT, the default roster window, and projects that are over left out. Name them in filters to keep them."), status: [WorkorderStatus!] = null @deprecated(reason: "Use filters: { status } instead. Every root argument on this field is a filter by another name, applied through the field that replaces it; they go when assignedUserId does."), types: [WorkorderType!] = null @deprecated(reason: "Use filters: { types } instead. Every root argument on this field is a filter by another name, applied through the field that replaces it; they go when assignedUserId does."), turbineId: Int = null @deprecated(reason: "Use filters: { turbineId } instead. Every root argument on this field is a filter by another name, applied through the field that replaces it; they go when assignedUserId does."), filters: ProjectWorkorderFilter, order: WorkorderOrder, pagination: OffsetPaginationInput): WorkorderOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) workorderActivities(pagination: OffsetPaginationInput, filters: WorkorderActivityFilter, order: WorkorderActivityOrder): WorkorderActivityOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) workorderActivityMetadataEntries(pagination: OffsetPaginationInput, filters: WorkorderActivityMetadataFilter): WorkorderActivityMetadataOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) workorderPlans(pagination: OffsetPaginationInput, order: WorkorderPlanOrder): WorkorderPlanOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) workorderStatusChangeLogs(pagination: OffsetPaginationInput, order: WorkorderStatusChangeLogOrder): WorkorderStatusChangeLogOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) workorderResourceSets(pagination: OffsetPaginationInput): WorkorderResourceSetOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) activityTimeEditReasons(pagination: OffsetPaginationInput): ActivityTimeEditReasonOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) workTimeCategories(pagination: OffsetPaginationInput): WorkTimeCategoryOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) workTimeLogs(pagination: OffsetPaginationInput, filters: WorkTimeLogFilter, order: WorkTimeLogOrder): WorkTimeLogOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) myClockEvents(filters: ResourceClockEventFilter, order: ResourceClockEventOrder, pagination: OffsetPaginationInput): ResourceClockEventOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) teamMessages(projectResourceSetId: Int!, date: Date = null, sinceDate: Date = null, untilDate: Date = null, pagination: OffsetPaginationInput): TeamMessageOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) dailyReportEntries(filters: ServiceOrderLineFilter = null, dateGte: Date = null, dateLte: Date = null, order: DailyReportEntryOrder = null, pagination: OffsetPaginationInput = null): DailyReportEntryPage! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_reports"}], any: true) projectReportFigures(projectIds: [Int!]!): [ProjectReportFigures!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_reports"}], any: true) teamCheckIns(projectId: Int = null, robotSetId: Int = null, dateGte: Date = null, dateLte: Date = null, order: TeamCheckInOrder = null, pagination: OffsetPaginationInput = null): TeamCheckInPage! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) workActivityFeed(startDate: Date!, endDate: Date!, resourceIds: [Int!] = null, pagination: OffsetPaginationInput = null): WorkActivityFeedPage! @hasPerm(permissions: [{app: "auth", permission: "payroll_manager"}], any: true) serviceItem(id: ID!): ServiceItem @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) serviceItemActivity(id: ID!): ServiceItemActivity @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) serviceOrderHeader(id: ID!): ServiceOrderHeader @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) serviceOrderLine(id: ID!): ServiceOrderLine @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) inspectionStats(serviceOrderLineId: Int!, priorLimit: Int! = 5): InspectionStats! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) myPendingScopeCommitments: [ScopeDispatchCommitmentType!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) scopeCommitmentTurbineOptions(commitmentId: Int!): [ScopeCommitmentTurbineOptionType!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) serviceOrderLineTeams(serviceOrderLineId: Int!): [ProjectResourceSet!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) relatedServiceOrderLines(serviceOrderLineId: Int!, pagination: OffsetPaginationInput = null): RelatedServiceOrderLineOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) latestServiceOrderLineForComponent(turbineComponentId: Int!): ServiceOrderLine @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) relatedServiceAnomalies(serviceOrderLineId: Int!, turbineComponentId: Int = null, distanceToRoot: Float = null): [CoreAnomaly!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) aggregatedServiceAnomalies(turbineComponentId: Int = null, turbineId: Int = null, locationId: Int = null, side: AnomalySide = null, crossSectionSide: AnomalyCrossSectionSide = null, rib: AnomalyRib = null, includeServiceOrderLineIds: [Int!] = null): [CoreAnomaly!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) serviceOrderLog(id: ID!): ServiceOrderLog @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) serviceDispatchConfig(id: ID!): ServiceDispatchConfig @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) workorder(id: ID!): Workorder @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) payrollUnits(resourceIds: [Int!]!, completionDateGte: DateTime = null, completionDateLte: DateTime = null, pagination: OffsetPaginationInput = null, workorderStatus: [WorkorderStatus!] = null @deprecated(reason: "Payroll units are now pre-filtered to COMPLETED workorders. This argument is accepted for backwards compatibility but has no effect.")): PayrollUnitOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) workorderActivity(id: ID!): WorkorderActivity @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) workorderActivityMetadataEntry(id: ID!): WorkorderActivityMetadata @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) workorderPlan(id: ID!): WorkorderPlan @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) workorderStatusChangeLog(id: ID!): WorkorderStatusChangeLog @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) workorderResourceSet(id: ID!): WorkorderResourceSet @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) workTimeCategory(id: ID!): WorkTimeCategory @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) workTimeLog(id: ID!): WorkTimeLog @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_workorders"}], any: true) nordexCirIncidents(filters: NordexCirIncidentFilter = null, pagination: OffsetPaginationInput = null): NordexCirIncidentPage! @hasPerm(permissions: [{app: "permissions", permission: "cir_dashboard_app"}], any: true) nordexCirEmails(filters: NordexCirEmailFilter = null, pagination: OffsetPaginationInput = null): NordexCirEmailPage! @hasPerm(permissions: [{app: "permissions", permission: "cir_dashboard_app"}], any: true) nordexCirSummary: NordexCirSummary! @hasPerm(permissions: [{app: "permissions", permission: "cir_dashboard_app"}], any: true) nordexCirProjectProgress(filters: NordexCirProjectProgressFilter = null, pagination: OffsetPaginationInput = null): NordexCirProjectProgressPage! @hasPerm(permissions: [{app: "permissions", permission: "cir_dashboard_app"}], any: true) nordexCirDryRun(incidentNumber: String!): NordexCirDryRun! @hasPerm(permissions: [{app: "permissions", permission: "cir_dashboard_app"}], any: true) dtSearchInspections(serviceOrderLineId: [Int!] = null, projectName: [String!] = null, windParkName: [String!] = null, turbineName: [String!] = null, componentName: [String!] = null, order: VISInspectionOrder = null, pagination: OffsetPaginationInput = null): VISInspectionOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "admin"}, {app: "auth", permission: "vis_qc"}], any: true) dtGetInspection(inspectionId: Int!): VISInspection @hasPerm(permissions: [{app: "auth", permission: "admin"}, {app: "auth", permission: "vis_qc"}], any: true) dtMeasurementRecalculationRun(id: Int!): VISMeasurementRecalculationRun @hasPerm(permissions: [{app: "auth", permission: "admin"}, {app: "auth", permission: "vis_qc"}], any: true) dtMeasurementRecalculationRuns(serviceOrderLineId: Int!, limit: Int! = 10): [VISMeasurementRecalculationRun!]! @hasPerm(permissions: [{app: "auth", permission: "admin"}, {app: "auth", permission: "vis_qc"}], any: true) dtExpectedComponents(inspectionId: Int!): [VISExpectedComponent!]! @hasPerm(permissions: [{app: "auth", permission: "admin"}, {app: "auth", permission: "vis_qc"}], any: true) dtExpectedSections(componentId: Int!): [VISExpectedSection!]! @hasPerm(permissions: [{app: "auth", permission: "admin"}, {app: "auth", permission: "vis_qc"}], any: true) bookmarks(serviceOrderLineId: Int!, turbineComponentId: Int = null, sourceObjectTypeId: Int = null, sourceObjectId: Int = null, pagination: OffsetPaginationInput = null): BookmarkOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_vis"}], any: true) bookmark(id: Int!): Bookmark @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_vis"}], any: true) distanceVector(externalPhotoId: Int!): DistanceVector @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_vis"}], any: true) anomalyPresets(templateId: Int = null): [AnomalyPreset!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) anomalyPreset(id: Int!): AnomalyPreset @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) anomalyPresetTemplates(inspectionType: TemplateInspectionType = null, customerId: Int = null, projectId: Int = null): [AnomalyPresetTemplate!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) anomalyPresetTemplate(id: Int!): AnomalyPresetTemplate @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) presetTemplatesForServiceOrderLine(serviceOrderLineId: Int!): [AnomalyPresetTemplate!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) resolvedPresetTemplate(serviceOrderLineId: Int!): ResolvedPresetTemplate! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) aiAnomaly(id: Int!): AiAnomaly @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) aiAnomalyByDefectId(defectId: Int!): AiAnomaly @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) aiAnomalyByDefectUid(defectUid: String!): AiAnomaly @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) dtAcademyInspections(serviceOrderLineId: Int = null, pagination: OffsetPaginationInput = null): VISAcademyInspectionOffsetPaginated! logisticsForms(includeAllVersions: Boolean! = false, pagination: OffsetPaginationInput): LogisticsFormOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) logisticsFormTypes(pagination: OffsetPaginationInput): LogisticsFormTypeOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) logisticsFormSubmissions(pagination: OffsetPaginationInput): LogisticsFormSubmissionOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) logisticsForm(id: Int!): LogisticsForm @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) logisticsFormSchema(schemaVersion: LogisticsFormSchemaVersion!): JSON! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) logisticsFormSchemas: [LogisticsFormSchema!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) logisticsFormSubmission(id: Int!): LogisticsFormSubmission @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) validateLogisticsFormSubmission(id: Int!): LogisticsFormValidationReport @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) logisticsAttachmentDownloadUrl(submissionId: Int!, attachmentUuid: String!): LogisticsAttachmentDownloadUrl @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) logisticsFormImageDownloadUrl(formId: Int!, imageUuid: String!): LogisticsFormImageDownloadUrl @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) planningCampaigns(pagination: OffsetPaginationInput, filters: PlanningCampaignFilter, order: PlanningCampaignOrder): PlanningCampaignOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningProjects(pagination: OffsetPaginationInput, filters: PlanningProjectFilter, order: PlanningProjectOrder): PlanningProjectOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningServices(pagination: OffsetPaginationInput, filters: PlanningServiceFilter, order: PlanningServiceCatalogueOrder): PlanningServiceOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningCustomerVendors(pagination: OffsetPaginationInput, filters: PlanningCustomerVendorFilter, order: PlanningCustomerVendorOrder): PlanningCustomerVendorOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningServiceOrders(pagination: OffsetPaginationInput, filters: PlanningServiceOrderFilter, order: PlanningServiceOrderOrder): PlanningServiceOrderOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningWorkOrderTypes(pagination: OffsetPaginationInput, filters: PlanningWorkOrderTypeFilter, order: PlanningWorkOrderTypeOrder): PlanningWorkOrderTypeOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningWorkOrders(pagination: OffsetPaginationInput, filters: PlanningWorkOrderFilter, order: PlanningWorkOrderOrder): PlanningWorkOrderOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningAttachments(pagination: OffsetPaginationInput, filters: PlanningAttachmentFilter, order: PlanningAttachmentOrder): PlanningAttachmentOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningCampaign(id: ID!): PlanningCampaign @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningProject(id: ID!): PlanningProject @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningService(id: ID!): PlanningService @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningCustomerVendor(id: ID!): PlanningCustomerVendor @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningServiceOrder(id: ID!): PlanningServiceOrder @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningWorkOrderType(id: ID!): PlanningWorkOrderType @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningWorkOrder(id: ID!): PlanningWorkOrder @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningCampaignComments(campaignId: ID!): [PlanningComment!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningProjectComments(projectId: ID!): [PlanningComment!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningServiceOrderComments(serviceOrderId: ID!): [PlanningComment!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningWorkOrderComments(workOrderId: ID!): [PlanningComment!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningCampaignAttachments(campaignId: ID!): [PlanningAttachment!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningProjectAttachments(projectId: ID!): [PlanningAttachment!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningServiceOrderAttachments(serviceOrderId: ID!): [PlanningAttachment!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningWorkOrderAttachments(workOrderId: ID!): [PlanningAttachment!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningAttachmentDownloadUrl(id: ID!, inline: Boolean! = false): PlanningAttachmentDownloadUrl @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningCampaignEngagementCounts(campaignIds: [ID!]!): [PlanningEngagementCounts!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningProjectEngagementCounts(projectIds: [ID!]!): [PlanningEngagementCounts!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningServiceOrderEngagementCounts(serviceOrderIds: [ID!]!): [PlanningEngagementCounts!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) planningWorkOrderEngagementCounts(workOrderIds: [ID!]!): [PlanningEngagementCounts!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) cwmCampaigns(pagination: OffsetPaginationInput, filters: CWMCampaignFilter, order: CWMCampaignOrder): CWMCampaignOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) cwmCampaign(id: ID!): CWMCampaign @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) cwmTurbineActiveCampaigns(turbineIds: [Int!] = null): [CWMTurbineActiveCampaigns!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_work_management"}], any: true) anomalyLabels(pagination: OffsetPaginationInput, filters: AnomalyLabelFilter, order: AnomalyLabelOrder): AnomalyLabelOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) anomalyLabelLinks(pagination: OffsetPaginationInput, filters: AnomalyLabelLinkFilter, order: AnomalyLabelLinkOrder): AnomalyLabelLinkOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) tasks(pagination: OffsetPaginationInput, filters: TaskFilter, order: TaskOrder): TaskOffsetPaginated! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) projectsOverview: [ProjectOverviewRow!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) projectsPlanCampaigns: [ProjectPlanCampaignRow!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) projectFinancials(projectId: ID!): ProjectFinancials @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_projects"}], any: true) fleetGrain(locationId: Int = null): FleetGrainResult! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}], any: true) serviceEvents(serviceOrderLineId: ID!): ServiceEvents @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) entityPreferences(entityType: String!, watchedOnly: Boolean! = false): [UserEntityPreference!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) entitiesChangedSinceLastSeen(entityType: String!, entityIds: [Int!] = null): [Int!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) feedSeenMarkers(feedKind: String!): [FeedSeenMarker!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) reportsFinalUnseenCount: Int! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_reports"}], any: true) fleetStatsDelta(surface: String!): FleetStatsDelta! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}], any: true) fleetStatsSeries(surface: String!, fromDate: Date!, toDate: Date!): [FleetStatsSnapshot!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}], any: true) entityStatsDelta(surface: String!, entityId: Int!): EntityStatsDelta! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}], any: true) lpsResults(serviceOrderLineId: ID!): LpsResults @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) lerResults(serviceOrderLineId: ID!): LerResults @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) userPreference(scope: String!): JSON @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) anomalyComments(anomalyId: ID!, includeDeleted: Boolean! = false): [AnomalyComment!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) anomalyCommentCounts(anomalyIds: [ID!]!): [AnomalyCommentCount!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) anomalyActivityFeed(anomalyId: ID!): [AnomalyActivityFeedItem!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) task(id: ID!): Task @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) taskEvents(taskId: ID!): [TaskEvent!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) taskComments(taskId: ID!, includeDeleted: Boolean! = false): [TaskComment!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) taskCommentCounts(taskIds: [ID!]!): [TaskCommentCount!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) savedTaskViews: [SavedTaskView!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) taskedEntityIds(entityType: String!, statuses: [String!] = null): [Int!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) taskActivity(fromDate: Date = null, toDate: Date = null, parkIds: [Int!] = null): TaskActivity! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) globalSearch(query: String!, limit: Int = null): [GlobalSearchResult!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) recentlyViewed(entityTypes: [String!] = null, limit: Int = null): [RecentlyViewed!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) homeMetricSeries(metricKeys: [String!] = null, days: Int = null): [HomeMetricSeries!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) anomalyStats(filters: CoreAnomalyFilter = null): AnomalyStats! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) anomalyDailyCounts(filters: CoreAnomalyFilter = null): [AnomalyDailyCount!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) locationStats(filters: CoreAnomalyFilter = null, locationFilters: LocationFilter = null): LocationStats! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) topAttentionLocations(locationFilters: LocationFilter = null, limit: Int! = 3): [TopAttentionLocation!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) locationRollups(locationIds: [ID!]!): [LocationRollup!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) turbineStats(filters: CoreAnomalyFilter = null, locationFilters: LocationFilter = null, turbineFilters: TurbineFilter = null): TurbineStats! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) turbineCommissioningYears: [Int!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}], any: true) turbineRollups(turbineIds: [ID!]!): [TurbineRollup!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) bladeRollups(bladeIds: [ID!]!): [BladeRollup!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) bladeMatrix(filters: CoreAnomalyFilter = null, lifecycle: BladeMatrixLifecycle! = OPERATIONAL): BladeMatrixStats! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) turbineVisInspections(turbineIds: [ID!]!): [TurbineVisInspections!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) bladeServiceCounts(bladeIds: [ID!]!): [BladeServiceCounts!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) bladeNewlyCriticalCount(bladeIds: [ID!]!, since: Date!): Int! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) bladeNewlyCriticalIds(bladeIds: [ID!]!, since: Date!): [ID!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) bladeSeverityHistory(bladeIds: [ID!]!, months: Int!): [BladeSeverityHistory!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) turbineFindingsTrend(turbineId: ID!): [TurbineFindingsTrendPoint!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) turbineFindingsBladeCounts(turbineId: ID!): TurbineFindingsBladeCounts! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) worstDegradedBlades(isVirtual: Boolean!, n: Int!, days: Int!): [ID!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) bladeStats(filters: CoreAnomalyFilter = null, locationFilters: LocationFilter = null, turbineFilters: TurbineFilter = null, bladeFilters: TurbineComponentFilter = null, newlyCriticalSince: Date = null): BladeStats! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) fleetInsights(filters: CoreAnomalyFilter = null, granularity: FleetInsightsGranularity! = MONTH): FleetInsights! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) insightsDefects(filters: CoreAnomalyFilter = null): InsightsDefects! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) riskProfileModelDenominators: [RiskProfileModelDenominatorItem!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) riskProfileModel(modelId: ID!, filters: CoreAnomalyFilter = null): RiskProfileModel! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) riskProfileStages: [RiskProfileStageItem!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) riskProfileSiteModels: [RiskProfileSiteModelItem!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) riskProfileErosionSites(modelId: ID = null, offset: Int! = 0, limit: Int = null): [RiskProfileErosionSite!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) fleetComposition: FleetComposition! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_fleet"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) anomalyActivity(fromDate: Date = null, toDate: Date = null, parkIds: [Int!] = null): AnomalyActivity! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_anomalies"}], any: true) serviceStats(filters: ServiceOrderLineFilter = null): ServiceStats! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) serviceDelivery(filters: ServiceOrderLineFilter = null, granularity: ServiceDeliveryGranularity! = MONTH): [ServiceDeliveryCell!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_services"}], any: true) reportsFeedFacets(filters: ServiceOrderLineFilter = null): ReportsFeedFacets! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_view_reports"}], any: true) planningUserScope(customerUserId: Int!): PlanningUserScope! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_manage_access_control"}], any: true) planningScopeCatalog(customerId: Int!): PlanningScopeCatalog! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_manage_access_control"}], any: true) } type RecentlyViewed { createdAt: DateTime! updatedAt: DateTime! id: ID! entityType: String! entityId: String! entityLabel: String! viewedAt: DateTime! } input RecordRecentlyViewedInput { entityType: String! entityId: String! entityLabel: String! } type RecordRecentlyViewedPayload implements MutationResponse { code: String! success: Boolean! message: String! recentlyViewed: RecentlyViewed } type Region { createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! } type RegionOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Region!]! } input RegionOrder { id: Ordering name: Ordering } input RegisterAiDefectInput { inferenceDefectId: Int = null defectUid: String = null internalExternal: AnomalyPlacement! = INTERNAL serviceOrderLineId: Int = null componentName: String = null inferenceJobId: Int = null frameNr: Int = null severity: Int = null defectType: String = null majorComponentId: Int = null componentId: Int = null subComponentId: Int = null typeId: Int = null subTypeId: Int = null materialId: Int = null confScore: Float = null distanceFromRoot: Float = null sizeHMm: Float = null sizeVMm: Float = null bbox: String = null qrCode: Int = null segmentation: String = null name: String = null rib: AnomalyRib = null side: AnomalySide = null crossSectionSide: AnomalyCrossSectionSide = null comments: String = null workorderId: Int = null sourceObjectId: Int = null sourceObjectTypeId: Int = null registrationOrigin: AnomalyRegistrationOrigin = null replace: Boolean! = false originalImageDest: String = null frameBlobPath: String = null filename: String = null extension: String = null aiModelConfigId: Int = null aiModelRelease: String = null } type RegisterAiDefectPayload implements MutationResponse { code: String! success: Boolean! message: String! inferenceDefectId: Int defectUid: String aiAnomalyId: Int coreAnomalyId: Int } type RelatedServiceOrderLine { serviceOrderLineId: Int! finalizationDate: DateTime type: String serviceNumber: String turbineId: Int turbineName: String } type RelatedServiceOrderLineOffsetPaginated { pageInfo: RelatedServiceOrderLinePageInfo! totalCount: Int! results: [RelatedServiceOrderLine!]! } type RelatedServiceOrderLinePageInfo { offset: Int! limit: Int } type RelationshipType { createdAt: DateTime! updatedAt: DateTime! id: ID! code: String! description: String } type RelationshipTypeOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [RelationshipType!]! } input RelationshipTypeOrder { id: Ordering code: Ordering description: Ordering } input RemovePurchaseOrderVersionFileInput { versionId: Int! } type RemovePurchaseOrderVersionFilePayload implements MutationResponse { code: String! success: Boolean! message: String! purchaseOrderVersion: PurchaseOrderVersion } input ReorderAnomalyPresetsInput { templateId: Int! presetIds: [Int!]! } type ReorderAnomalyPresetsPayload implements MutationResponse { code: String! success: Boolean! message: String! presets: [AnomalyPreset!] } input ReplacePurchaseOrderVersionFileInput { versionId: Int! fileId: Int! } type ReplacePurchaseOrderVersionFilePayload implements MutationResponse { code: String! success: Boolean! message: String! purchaseOrderVersion: PurchaseOrderVersion } type ReportsFeedFacets { locations: [String!]! projects: [String!]! } input RequestVideoFrameSnapshotUrlInput { anomalyId: Int! } type RequestVideoFrameSnapshotUrlPayload implements MutationResponse { code: String! success: Boolean! message: String! uploadUrl: String blobName: String } input ResetImageSortOrderInput { imageType: VISModelType! sectionId: Int! } type ResetImageSortOrderResponse implements MutationResponse { code: String! success: Boolean! message: String! } input ResetLERImageSortOrderInput { lerPhotoStepId: Int! rootToTip: Boolean! = false } type ResetLERImageSortOrderResponse implements MutationResponse { code: String! success: Boolean! message: String! } input ResolveScopeCommitmentTurbineInput { commitmentId: Int! turbineId: Int! turbineComponentId: Int = null } type ResolveScopeCommitmentTurbinePayload { workorder: Workorder! } type ResolvedPresetTemplate { template: AnomalyPresetTemplate presetsEnabled: Boolean! confirmed: Boolean! match: PresetTemplateMatch! inspectionType: InspectionType! } type Resource { userId: Int robotSetId: Int deletedAt: DateTime createdAt: DateTime! updatedAt: DateTime! id: ID! fullName: String email: String qualifications: JSON resourceType: String robotSet: DjangoModelType employmentContract: String! } type ResourceCertificate { resource: Resource! certificate: Certificate! issuer: CertificateIssuer createdAt: DateTime! updatedAt: DateTime! id: ID! certificateNumber: String issuedDate: Date expiryDate: Date additionalInfo: String source: String sourceId: String } input ResourceCertificateInput { certificateId: Int! expiryDate: String = null } type ResourceCertificateOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ResourceCertificate!]! } type ResourceClockEvent { resource: Resource type: ResourceClockEventType! id: ID! createdAt: DateTime! clockinDatetime: DateTime! timezone: String! } input ResourceClockEventFilter { clockinDatetime: DatetimeFilterLookup type: ResourceClockEventType AND: ResourceClockEventFilter OR: ResourceClockEventFilter NOT: ResourceClockEventFilter DISTINCT: Boolean } type ResourceClockEventOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ResourceClockEvent!]! } input ResourceClockEventOrder { id: Ordering clockinDatetime: Ordering type: Ordering } enum ResourceClockEventType { CLOCK_IN CLOCK_OUT } type ResourceOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Resource!]! } input ResourceOrder { id: Ordering fullName: Ordering email: Ordering qualifications: Ordering resourceType: Ordering robotSetId: Ordering } type ResourceServicePosition { resource: Resource! service: Service! position: Position! createdAt: DateTime! updatedAt: DateTime! id: ID! fromDate: Date! } type ResourceServicePositionOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ResourceServicePosition!]! } input ResourceServicePositionOrder { id: Ordering fromDate: Ordering } type ResourceSet { createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! description: String } type ResourceSetItem { resourceSet: ResourceSet! resource: Resource! createdAt: DateTime! updatedAt: DateTime! id: ID! isLead: Boolean resourceType: String! startDate: Date endDate: Date isActive: Boolean! } input ResourceSetItemInput { resourceId: Int! resourceType: String! isLead: Boolean = null isActive: Boolean! = true startDate: String = null endDate: String = null } type ResourceSetItemOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ResourceSetItem!]! } type ResourceSetOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ResourceSet!]! } input ResourceSetOrder { id: Ordering name: Ordering description: Ordering } input RespondToTeamMessageInput { messageId: Int! reaction: TeamMessageReaction! comment: String = null } type RespondToTeamMessagePayload { teamMessage: TeamMessage! } input RevokeApiKeyInput { id: ID! } type RevokeApiKeyPayload implements MutationResponse { code: String! success: Boolean! message: String! } type RiskProfileAgeBandItem { band: String! label: String! bladesInspected: Int! bladesInternallyInspected: Int! bladesExternallyInspected: Int! bladesWithSevereInternal: Int! bladesWithSevereExternal: Int! internalTopTypes: [RiskProfileBandTypeItem!]! externalTopTypes: [RiskProfileBandTypeItem!]! } type RiskProfileBandTypeItem { anomalyTypeId: ID! anomalyTypeName: String! bladesAffected: Int! } type RiskProfileErosionExtent { sampleCount: Int! excludedCount: Int! meanWidthMm: Float meanLengthMm: Float meanAreaMm2: Float meanROverR: Float } type RiskProfileErosionSite { parkId: ID! parkName: String! latitude: Float longitude: Float bladesInspected: Int! bladesEroded: Int! bands: [RiskProfileErosionSiteBand!]! } type RiskProfileErosionSiteBand { band: String! label: String! bladesInspected: Int! bladesEroded: Int! } type RiskProfileModel { modelId: ID! bladesOwned: Int! bladesInspected: Int! bladesInStorage: Int! bladesOutsideBands: Int! scopeSeverity: RiskProfileSeveritySplit! spanProfile: [InsightsSpanBinItem!]! spanZones: [InsightsSpanZoneItem!]! parkSeverity: [RiskProfileParkSeverityItem!]! typeMix: [RiskProfileTypeSeverityItem!]! erosionExtent: RiskProfileErosionExtent! ageBands: [RiskProfileAgeBandItem!]! } type RiskProfileModelDenominatorItem { manufacturerId: ID manufacturerName: String! modelId: ID modelName: String bladesOwned: Int! bladesInspected: Int! level1: Int! level2: Int! level3: Int! level4: Int! level5: Int! } type RiskProfileParkSeverityItem { parkId: ID! parkName: String! locationType: String bladesInspected: Int! level1: Int! level2: Int! level3: Int! level4: Int! level5: Int! total: Int! } type RiskProfileSeveritySplit { level1: Int! level2: Int! level3: Int! level4: Int! level5: Int! total: Int! } type RiskProfileSiteModelItem { siteId: ID! siteName: String! locationType: String! manufacturerId: ID manufacturerName: String! modelId: ID modelName: String bladesOwned: Int! bladesInspected: Int! level1: Int! level2: Int! level3: Int! level4: Int! level5: Int! total: Int! topTypes: [RiskProfileTypeSeverityItem!]! } type RiskProfileStageItem { stage: String! siteCount: Int! bladesOwned: Int! bladesInspected: Int! level1: Int! level2: Int! level3: Int! level4: Int! level5: Int! total: Int! topTypes: [RiskProfileTypeSeverityItem!]! } type RiskProfileTypeSeverityItem { anomalyTypeId: ID! anomalyTypeName: String! level1: Int! level2: Int! level3: Int! level4: Int! level5: Int! total: Int! } type RobotSet { createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! } type RobotSetOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [RobotSet!]! } input RobotSetOrder { id: Ordering name: Ordering } type RobotSetServices { robotSet: RobotSet! service: Service! createdAt: DateTime! updatedAt: DateTime! id: ID! } type RobotSetServicesOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [RobotSetServices!]! } input RobotSetServicesOrder { id: Ordering robotSet: Ordering service: Ordering } type SavedTaskView { createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! icon: String! baseView: String! filters: JSON! sort: JSON! search: String groupKey: String! layout: String! } type SavedTaskViewPayload implements MutationResponse { code: String! success: Boolean! message: String! savedTaskView: SavedTaskView } enum ScopeChangeRequestRole { SOURCE REPLACEMENT } enum ScopeChangeRequestStatus { WAITING_FOR_QC WAITING_FOR_SALES WAITING_FOR_PM APPROVED REJECTED } enum ScopeChangeRequestType { SERVICE_CHANGE_SEVERITY CLIENT_CANCEL_SERVICE ASSET_SWAP CLIENT_DECREASE_SCOPE } type ScopeCommitmentEvent { eventType: SubscriptionEventType! commitment: ScopeDispatchCommitmentType! } type ScopeCommitmentTurbineOptionType { turbineId: Int! turbineName: String } type ScopeDispatchCommitmentType { id: Int! projectId: Int! projectName: String! serviceCode: String! serviceDescription: String locationName: String componentTypeName: String plannedStartDatetime: DateTime! plannedEndDatetime: DateTime! } type Service { category: ServiceCategory! group: ServiceGroup! serviceFamily: ServiceFamily pricingUnits(order: PricingUnitOrder): [PricingUnit!]! relatedItems(filters: ServiceFilter, order: ServiceOrder): [Service!]! createdAt: DateTime! updatedAt: DateTime! id: ID! code: String! description: String! rat: Boolean! service: Boolean! deprecated: Boolean! netsuiteId: Int } type ServiceCategory { createdAt: DateTime! updatedAt: DateTime! id: ID! code: String! name: String! } type ServiceCategoryOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ServiceCategory!]! } input ServiceCategoryOrder { id: Ordering code: Ordering name: Ordering } type ServiceComponent { service: Service! componentType: ComponentType! createdAt: DateTime! updatedAt: DateTime! id: ID! } type ServiceComponentOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ServiceComponent!]! } type ServiceDeliveryCell { category: String! period: DateTime! count: Int! } enum ServiceDeliveryGranularity { MONTH QUARTER } type ServiceDispatchConfig { category: ServiceCategory group: ServiceGroup pricingUnits(order: PricingUnitOrder): [PricingUnit!]! relatedItems(filters: ServiceFilter, order: ServiceOrder): [Service!]! id: ID! code: String! description: String! rat: Boolean! service: Boolean! netsuiteId: Int } type ServiceDispatchConfigOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ServiceDispatchConfig!]! } type ServiceDowntimeWindow { startedAt: DateTime! endedAt: DateTime } type ServiceEvent { id: String! occurredAt: DateTime! endedAt: DateTime operation: String! operator: String result: String! } type ServiceEvents { events: [ServiceEvent!]! downtime: [ServiceDowntimeWindow!]! } enum ServiceExportFormat { XLSX CSV } type ServiceFamily { createdAt: DateTime! updatedAt: DateTime! id: ID! code: String! name: String! } type ServiceFamilyOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ServiceFamily!]! } input ServiceFamilyOrder { id: Ordering code: Ordering name: Ordering } input ServiceFilter { id: IDBaseFilterLookup code: StrFilterLookup rat: BoolBaseFilterLookup service: BoolBaseFilterLookup deprecated: BoolBaseFilterLookup category: DjangoModelFilterInput group: DjangoModelFilterInput serviceFamily: DjangoModelFilterInput AND: ServiceFilter OR: ServiceFilter NOT: ServiceFilter DISTINCT: Boolean serviceOrderLines: ServiceOrderLineFilter } type ServiceGroup { createdAt: DateTime! updatedAt: DateTime! id: ID! name: String! } type ServiceGroupOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ServiceGroup!]! } input ServiceGroupOrder { id: Ordering name: Ordering } type ServiceItem { component: ComponentType service: Service id: ID! code: String! description: String isOptional: Boolean sortOrder: Int isPackingUp: Boolean! } type ServiceItemActivity { serviceItem: ServiceItem id: ID! description: String requiresRobotSet: Boolean estimatedDuration: Int customFields: JSON sortOrder: Int isOptional: Boolean instructions: [ServiceItemActivityInstruction!]! } type ServiceItemActivityAttachment { id: ID! caption: String sortOrder: Int fileName: String! fileType: String! url: String } type ServiceItemActivityInstruction { id: ID! title: String! body: String sortOrder: Int attachments: [ServiceItemActivityAttachment!]! links: [ServiceItemActivityInstructionLink!]! } type ServiceItemActivityInstructionLink { id: ID! url: String! label: String! sortOrder: Int } type ServiceItemActivityOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ServiceItemActivity!]! } input ServiceItemActivityOrder { id: Ordering serviceItem: Ordering description: Ordering requiresRobotSet: Ordering estimatedDuration: Ordering sortOrder: Ordering } type ServiceItemOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ServiceItem!]! } input ServiceItemOrder { id: Ordering code: Ordering description: Ordering isOptional: Ordering service: Ordering sortOrder: Ordering } type ServiceOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Service!]! } input ServiceOrder { id: Ordering code: Ordering description: Ordering rat: Ordering service: Ordering deprecated: Ordering netsuiteId: Ordering category: Ordering group: Ordering serviceFamily: Ordering } type ServiceOrderHeader { project: Project! customer: Customer! location: Location id: ID! projectName: String customerName: String serviceOrderDate: Date serviceOrderNumber: String serviceOrderType: String projectManagerUserId: Int status: String } type ServiceOrderHeaderOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ServiceOrderHeader!]! } input ServiceOrderHeaderOrder { id: Ordering project: Ordering projectName: Ordering customer: Ordering location: Ordering customerName: Ordering serviceOrderDate: Ordering serviceOrderNumber: Ordering serviceOrderType: Ordering projectManagerUserId: Ordering status: Ordering } type ServiceOrderLine { serviceOrder: ServiceOrderHeader service: Service turbine: Turbine componentType: ComponentType turbineComponent: TurbineComponent customer: Customer project: Project projectScopeItem: ProjectScopeItem completedBy: User completedDate: DateTime fieldCompletedDate: DateTime anomalyCount: Int! newlyCriticalCount: Int! highSeverityCount: Int! ratedAnomalyCount: Int! originalSol: ServiceOrderLine billable: Boolean! id: ID! number: String quantity: Int serviceCode: String serviceDescription: String requiredQualifications: JSON status: String stage: String fieldServicePeriodStart: Date fieldServicePeriodEnd: Date activityDateFrom: Date activityDateTo: Date assignedTeamLead: String detectedAt: DateTime derivedBladeModel: String nextServiceDue: NextServiceDue hasPendingScopeChangeRequest: Boolean! scopeChangeRequests: [ServiceOrderLineScopeChangeRequest!]! releaseBackfillSuppressed: Boolean! aiImagesV2: Boolean! customerCustomFields: [CustomerCustomField!]! customerCustomValues: [CustomerCustomFieldValue!]! } input ServiceOrderLineFilter { AND: ServiceOrderLineFilter OR: ServiceOrderLineFilter NOT: ServiceOrderLineFilter DISTINCT: Boolean solIds: [Int!] windparkIds: [Int!] turbineIds: [Int!] hasWindpark: Boolean bladeIds: [Int!] serviceTypes: [String!] serviceCodePrefixes: [String!] reportedAsService: Boolean serviceDescriptions: [String!] status: [String!] stage: [String!] nrLike: String turbineModelIds: [Int!] bladeModelNames: [String!] projectIds: [Int!] billable: Boolean originalSolIds: [Int!] isRework: Boolean completedDateGte: Date completedDateLte: Date fieldServicePeriodEndGte: Date fieldServicePeriodEndLte: Date search: String advancedSearch: String relatedToServiceOrderLineId: Int locationNames: [String!] projectCodes: [String!] serviceGroups: [String!] assignedUserId: Int onProjectRoster: ProjectRoster activityDateFrom: Date activityDateTo: Date codeDescriptionOrId: String fieldServiceDatePeriodEndGte: Date @deprecated(reason: "Use completedDateGte. Temporary alias during the rename rollout (Wrike 4461463006); remove once inspection-platform MR !4218 is live on prod and no callers send the old name.") fieldServiceDatePeriodEndLte: Date @deprecated(reason: "Use completedDateLte. Temporary alias during the rename rollout (Wrike 4461463006); remove once inspection-platform MR !4218 is live on prod and no callers send the old name.") } type ServiceOrderLineOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ServiceOrderLine!]! } input ServiceOrderLineOrder { id: Ordering serviceOrder: Ordering service: Ordering quantity: Ordering turbine: Ordering componentType: Ordering turbineComponent: Ordering serviceCode: Ordering customer: Ordering project: Ordering projectScopeItem: Ordering status: Ordering stage: Ordering billable: Ordering serviceNumber: Ordering fieldServicePeriodEnd: Ordering completedDate: Ordering locationName: Ordering turbineName: Ordering turbineModelName: Ordering bladeModelName: Ordering projectCode: Ordering serviceDescription: Ordering anomalyCount: Ordering newlyCriticalCount: Ordering } type ServiceOrderLineScopeChangeRequest { id: Int! status: ScopeChangeRequestStatus! type: ScopeChangeRequestType! role: ScopeChangeRequestRole! isPending: Boolean! rejectionReason: String sourceServiceOrderLineId: Int sourceTurbineComponentId: Int replacementServiceId: Int newServiceOrderLineId: Int } enum ServiceOrderLineStage { RELEASED IN_REVIEW REVIEWED } type ServiceOrderLog { serviceOrder: ServiceOrderHeader! id: ID! entity: String! entityId: Int actorUserId: Int! activityType: String! body: String data: JSON } type ServiceOrderLogOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ServiceOrderLog!]! } type ServicePricingUnit { service: Service! pricingUnit: PricingUnit! createdAt: DateTime! updatedAt: DateTime! id: ID! isDefault: Boolean! } type ServicePricingUnitOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ServicePricingUnit!]! } input ServicePricingUnitOrder { id: Ordering service: Ordering pricingUnit: Ordering isDefault: Ordering } type ServiceRelatedService { serviceId: Service! relatedServiceId: Service! id: ID! createdAt: DateTime! updatedAt: DateTime! } type ServiceRelatedServiceOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ServiceRelatedService!]! } input ServiceRelatedServiceOrder { id: Ordering serviceId: Ordering relatedServiceId: Ordering } type ServiceResult { turbineComponent: TurbineComponent template: ServiceResultTemplate data: JSON! createdAt: DateTime! updatedAt: DateTime! id: ID! workorder: DjangoModelType serviceOrderLine: DjangoModelType turbine: DjangoModelType! resultThreshold: DjangoModelType } type ServiceResultOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ServiceResult!]! } input ServiceResultOrder { id: Ordering workorder: Ordering turbine: Ordering turbineComponent: Ordering } type ServiceResultTemplate { componentTypeId: Int createdAt: DateTime! updatedAt: DateTime! id: ID! code: String! description: String } type ServiceResultTemplateField { template: ServiceResultTemplate! options: JSON defaultValue: JSON createdAt: DateTime! updatedAt: DateTime! id: ID! key: String! label: String! description: String fieldType: String! isRequired: Boolean! sortOrder: Int! unit: String } type ServiceResultTemplateFieldOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ServiceResultTemplateField!]! } input ServiceResultTemplateFieldOrder { id: Ordering key: Ordering label: Ordering fieldType: Ordering sortOrder: Ordering template: Ordering } type ServiceResultTemplateOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [ServiceResultTemplate!]! } input ServiceResultTemplateOrder { id: Ordering code: Ordering } type ServiceStats { total: Int! anomalies: Int! anomaliesNewCritical: Int! projects: Int! turbines: Int! turbinesCompleted: Int! turbinesInProgress: Int! turbinesNotStarted: Int! byMonth: [ServiceStatsTimeItem!]! byYear: [ServiceStatsTimeItem!]! byStatus: [ServiceStatsGroupItem!]! byType: [ServiceStatsGroupItem!]! } type ServiceStatsGroupItem { label: String! total: Int! } type ServiceStatsTimeItem { period: DateTime! total: Int! } input SetAiDefectSourceObjectInput { aiAnomalyId: Int! sourceObjectId: Int sourceObjectTypeId: Int } type SetAiDefectSourceObjectPayload implements MutationResponse { code: String! success: Boolean! message: String! aiAnomalyId: Int coreAnomalyId: Int } input SetAnomalyLabelsInput { anomalyId: Int! labelIds: [Int!]! } input SetDistanceVectorInput { externalPhotoId: Int! start: PointInput! end: PointInput! } type SetDistanceVectorPayload implements MutationResponse { code: String! success: Boolean! message: String! } input SetEntityWatchedInput { entityType: String! entityId: Int! watched: Boolean! } input SetPasswordInput { token: String! newPassword: String! newPasswordRepeat: String! } type SetPasswordPayload implements MutationResponse { code: String! success: Boolean! message: String! } input SetPlanningUserScopeInput { customerUserId: Int! campaignIds: [Int!]! = [] projectIds: [Int!]! = [] serviceOrderIds: [Int!]! = [] } type SetPlanningUserScopePayload implements MutationResponse { code: String! success: Boolean! message: String! scope: PlanningUserScope } input SetProjectGoogleDriveFolderInput { projectCode: String! rootFolderUrl: String! } type SetProjectGoogleDriveFolderPayload implements MutationResponse { code: String! success: Boolean! message: String! googleDriveLinks: [ProjectGoogleDriveLink!] } input SetServiceOrderLinePresetTemplateInput { serviceOrderLineId: Int! templateId: Int presetsEnabled: Boolean! = true } type SetServiceOrderLinePresetTemplatePayload implements MutationResponse { code: String! success: Boolean! message: String! resolved: ResolvedPresetTemplate } input SetUserPreferenceInput { scope: String! data: JSON! } type SetUserPreferencePayload implements MutationResponse { code: String! success: Boolean! message: String! data: JSON } input SetWorkorderTurbineInput { workorderId: Int! turbineId: Int! } type SetWorkorderTurbinePayload { workorder: Workorder! } type SeverityByBladeItem { bladeId: ID! position: String serialNumber: String severityCounts: [InspectionStatsSeverityItem!]! } enum Status { PENDING COMPLETED CANCELLED } input StrFilterLookup { """Exact match. Filter will be skipped on `null` value""" exact: String """Assignment test. Filter will be skipped on `null` value""" isNull: Boolean """ Exact match of items in a given list. Filter will be skipped on `null` value """ inList: [String!] """Case-insensitive exact match. Filter will be skipped on `null` value""" iExact: String """ Case-sensitive containment test. Filter will be skipped on `null` value """ contains: String """ Case-insensitive containment test. Filter will be skipped on `null` value """ iContains: String """Case-sensitive starts-with. Filter will be skipped on `null` value""" startsWith: String """Case-insensitive starts-with. Filter will be skipped on `null` value""" iStartsWith: String """Case-sensitive ends-with. Filter will be skipped on `null` value""" endsWith: String """Case-insensitive ends-with. Filter will be skipped on `null` value""" iEndsWith: String """ Case-sensitive regular expression match. Filter will be skipped on `null` value """ regex: String """ Case-insensitive regular expression match. Filter will be skipped on `null` value """ iRegex: String } input SubmitDailyDebriefInput { date: Date! projectResourceSetId: Int! comments: String = null plansForTomorrow: String = null maintainxTickets: String = null } type SubmitDailyDebriefPayload { dailyDebrief: DailyDebrief! } input SubmitFeedbackInput { feedbackType: String! description: String! } type SubmitFeedbackPayload implements MutationResponse { code: String! success: Boolean! message: String! } input SubmitLogisticsFormSubmissionInput { id: Int! } type SubmitLogisticsFormSubmissionPayload implements MutationResponse { code: String! success: Boolean! message: String! formSubmission: LogisticsFormSubmission errors: [LogisticsFormAnswerIssue!] } type SubmitNordexCirIncidentPayload implements MutationResponse { code: String! success: Boolean! message: String! incident: NordexCirSubmittedIncident } type Subscription { workorderChanged(assignedUserId: Int = null @deprecated(reason: "Use filters: { assignedUserId } instead. Every root argument on this field is a filter by another name, applied through the field that replaces it; they go when assignedUserId does."), resourceIds: [Int!] = null @deprecated(reason: "Use filters: { resourceIds } instead. Every root argument on this field is a filter by another name, applied through the field that replaces it; they go when assignedUserId does."), status: [WorkorderStatus!] = null @deprecated(reason: "Use filters: { status } instead. Every root argument on this field is a filter by another name, applied through the field that replaces it; they go when assignedUserId does."), types: [WorkorderType!] = null @deprecated(reason: "Use filters: { types } instead. Every root argument on this field is a filter by another name, applied through the field that replaces it; they go when assignedUserId does."), turbineId: Int = null @deprecated(reason: "Use filters: { turbineId } instead. Every root argument on this field is a filter by another name, applied through the field that replaces it; they go when assignedUserId does."), filters: WorkorderFilter = null): WorkorderEvent! projectWorkorderChanged(assignedUserId: Int = null @deprecated(reason: "Use filters: { assignedUserId } instead. Every root argument on this field is a filter by another name, applied through the field that replaces it; they go when assignedUserId does."), status: [WorkorderStatus!] = null @deprecated(reason: "Use filters: { status } instead. Every root argument on this field is a filter by another name, applied through the field that replaces it; they go when assignedUserId does."), types: [WorkorderType!] = null @deprecated(reason: "Use filters: { types } instead. Every root argument on this field is a filter by another name, applied through the field that replaces it; they go when assignedUserId does."), turbineId: Int = null @deprecated(reason: "Use filters: { turbineId } instead. Every root argument on this field is a filter by another name, applied through the field that replaces it; they go when assignedUserId does."), filters: ProjectWorkorderFilter = null): WorkorderEvent! myPendingScopeCommitmentsChanged: ScopeCommitmentEvent! notificationReceived: Notification! } enum SubscriptionEventType { ADDED UPDATED REMOVED } type SyncNordexCirPayload implements MutationResponse { code: String! success: Boolean! message: String! summary: NordexCirSummary } type Task { creatorId: Int! assigneeId: Int createdAt: DateTime! updatedAt: DateTime! id: ID! entityType: String entityId: Int title: String! description: String status: String! priority: Int! visibility: String! startDate: Date dueDate: Date completedAt: DateTime } type TaskActivity { created: Int! completed: Int! buckets: [TaskActivityBucket!]! truncated: Boolean! } type TaskActivityBucket { weekStart: Date! created: Int! completed: Int! } type TaskComment { taskId: Int! authorId: Int! deletedAt: DateTime createdAt: DateTime! updatedAt: DateTime! id: ID! body: String! editedAt: DateTime } type TaskCommentCount { taskId: Int! count: Int! } type TaskCommentPayload implements MutationResponse { code: String! success: Boolean! message: String! taskComment: TaskComment } type TaskEvent { actorId: Int! createdAt: DateTime! updatedAt: DateTime! id: ID! taskId: Int! field: String! previousValue: String newValue: String source: String! } input TaskFilter { id: IDBaseFilterLookup status: StrFilterLookup priority: IntComparisonFilterLookup entityType: StrFilterLookup entityId: IntComparisonFilterLookup assigneeId: IDBaseFilterLookup creatorId: IDBaseFilterLookup dueDate: DateFilterLookup visibility: StrFilterLookup title: StrFilterLookup AND: TaskFilter OR: TaskFilter NOT: TaskFilter DISTINCT: Boolean } type TaskOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Task!]! } input TaskOrder { id: Ordering priority: Ordering dueDate: Ordering title: Ordering createdAt: Ordering assigneeId: Ordering } type TaskPayload implements MutationResponse { code: String! success: Boolean! message: String! task: Task } type TeamCheckIn { date: Date! project: Project! roboticSet: RobotSet! teamLead: User teamLeadResource: Resource teamMembers: [Resource!]! } input TeamCheckInOrder { field: TeamCheckInOrderField! = DATE direction: TeamCheckInOrderDirection! = ASC } enum TeamCheckInOrderDirection { ASC DESC } enum TeamCheckInOrderField { DATE PROJECT_CODE ROBOT_SET_NAME } type TeamCheckInPage { pageInfo: TeamCheckInPageInfo! totalCount: Int! results: [TeamCheckIn!]! } type TeamCheckInPageInfo { offset: Int! limit: Int } type TeamMessage { project: Project projectResourceSet: ProjectResourceSet reaction: TeamMessageReaction! createdAt: DateTime! id: ID! date: Date! text: String! reactionComment: String reactedAt: DateTime seenAt: DateTime createdById: Int reactedById: Int seenById: Int attachments: [TeamMessageAttachment!]! } type TeamMessageAttachment { id: Int! url: String } type TeamMessageOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [TeamMessage!]! } enum TeamMessageReaction { PENDING AGREED DISAGREED } enum TemplateInspectionType { INTERNAL EXTERNAL BOTH } type TermsOfService { createdAt: DateTime! updatedAt: DateTime! id: ID! version: String! title: String! content: String! isRequired: Boolean! isActive: Boolean! } type TermsOfServiceOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [TermsOfService!]! } input TermsOfServiceOrder { id: Ordering version: Ordering title: Ordering isRequired: Ordering isActive: Ordering } """Time (isoformat)""" scalar Time input TimeComparisonFilterLookup { """Exact match. Filter will be skipped on `null` value""" exact: Time """Assignment test. Filter will be skipped on `null` value""" isNull: Boolean """ Exact match of items in a given list. Filter will be skipped on `null` value """ inList: [Time!] """Greater than. Filter will be skipped on `null` value""" gt: Time """Greater than or equal to. Filter will be skipped on `null` value""" gte: Time """Less than. Filter will be skipped on `null` value""" lt: Time """Less than or equal to. Filter will be skipped on `null` value""" lte: Time """Inclusive range test (between)""" range: TimeRangeLookup } input TimeRangeLookup { start: Time = null end: Time = null } type Timezone { region: Region utcOffset: timedelta createdAt: DateTime! updatedAt: DateTime! id: ID! city: String! timezone: String! abbrev: String isDst: Boolean } type TimezoneOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Timezone!]! } input TimezoneOrder { id: Ordering city: Ordering timezone: Ordering abbrev: Ordering utcOffset: Ordering isDst: Ordering } enum TokenType { BEARER JWT PWT } type TopAttentionLocation { id: ID! name: String! health: String! anomalyCount: Int! } type Turbine { location: Location! manufacturerTurbineModel: ManufacturerTurbineModel manufacturer: Manufacturer rotorRadius: Float serviceCount: Int! workorderCount: Int! turbineComponents(filters: TurbineComponentFilter, order: TurbineComponentOrder): [TurbineComponent!]! latestService: TurbineLatestService createdAt: DateTime! updatedAt: DateTime! id: ID! name: String latitude: Decimal longitude: Decimal additionalInfo: String efficiency: Int commissioningYear: Int output: String coordinates: String hubHeight: Float doubleReceptors: Boolean! hvDoubleReceptors: Boolean! manufacturerNumber: String isVirtual: Boolean! padNumber: String anomalyCount: Int! clientWorkorderCount: Int! newlyCriticalCount: Int! maxSeverityLevel: String health: String! hubRadius: Float! } type TurbineBladeFindingCount { turbineComponentId: ID! count: Int! } type TurbineBladeSeverity { turbineComponentId: ID! serialNumber: String actionCount: Int! attentionCount: Int! } type TurbineComponent { componentType: ComponentType! turbine: Turbine location: Location manufacturer: Manufacturer manufacturerComponentModel: ManufacturerComponentModel length: Float anomalyCount: Int! serviceCount: Int! clientWorkorderCount: Int! newlyCriticalCount: Int! health: String! createdAt: DateTime! updatedAt: DateTime! id: ID! serialNumber: String! manufacturerSerialNumber: String position: String additionalInformation: JSON } input TurbineComponentFilter { componentType: ComponentTypeFilter serialNumber: StrFilterLookup length: DecimalComparisonFilterLookup AND: TurbineComponentFilter OR: TurbineComponentFilter NOT: TurbineComponentFilter DISTINCT: Boolean id: [ID!] turbine: [ID!] location: [ID!] manufacturer: [ID!] manufacturerComponentModel: [ID!] commissioningYear: IntComparisonFilterLookup isVirtual: Boolean health: [String!] hasWorkOrders: Boolean hasClientWorkorders: Boolean hasActiveFindings: Boolean maxSeverityLevel: [String!] } type TurbineComponentOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [TurbineComponent!]! } input TurbineComponentOrder { id: Ordering componentType: Ordering serialNumber: Ordering turbine: Ordering location: Ordering turbineName: Ordering locationName: Ordering manufacturer: Ordering manufacturerComponentModel: Ordering length: Ordering position: Ordering serviceCount: Ordering anomalyCount: Ordering clientWorkorderCount: Ordering newlyCriticalCount: Ordering commissioningYear: Ordering health: Ordering turbineLatestServiceNumber: Ordering worstSeverity: Ordering lastService: Ordering } input TurbineFilter { name: StrFilterLookup commissioningYear: IntComparisonFilterLookup AND: TurbineFilter OR: TurbineFilter NOT: TurbineFilter DISTINCT: Boolean id: [ID!] location: [ID!] manufacturer: [ID!] manufacturerTurbineModel: [ID!] isVirtual: Boolean health: [Int!] maxSeverityLevel: [String!] hasClientWorkorders: Boolean actionGap: Boolean activeWork: [String!] search: String country: [ID!] locationType: [String!] lastInspectionOlderThanMonths: Int serviceOrderLines: ServiceOrderLineFilter } type TurbineFindingsBladeCounts { total: Int! nonBlade: Int! blades: [TurbineBladeFindingCount!]! } type TurbineFindingsTrendPoint { month: String! severityLevel: Int! count: Int! } type TurbineLastServiceByCategory { inspection: TurbineServiceBucket! cleaning: TurbineServiceBucket! repair: TurbineServiceBucket! lps: TurbineServiceBucket! } type TurbineLatestService { id: ID! number: String status: String createdAt: DateTime! completedDate: DateTime serviceCode: String } type TurbineOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Turbine!]! } input TurbineOrder { id: Ordering name: Ordering location: Ordering manufacturer: Ordering manufacturerTurbineModel: Ordering latitude: Ordering longitude: Ordering efficiency: Ordering commissioningYear: Ordering output: Ordering hubHeight: Ordering doubleReceptors: Ordering hvDoubleReceptors: Ordering manufacturerNumber: Ordering padNumber: Ordering rotorRadius: Ordering locationName: Ordering manufacturerName: Ordering manufacturerTurbineModelName: Ordering anomalyCount: Ordering serviceCount: Ordering health: Ordering workorderCount: Ordering clientWorkorderCount: Ordering newlyCriticalCount: Ordering latestServiceNumber: Ordering latestServiceCreatedAt: Ordering latestServiceCompletedAt: Ordering } type TurbineRollup { turbineId: ID! actionGapCount: Int! servicesByStatus: TurbineServicesByStatus! lastServiceByCategory: TurbineLastServiceByCategory! blades: [TurbineBladeSeverity!]! } type TurbineServiceBucket { date: DateTime serviceCode: String serviceOrderLineId: ID } type TurbineServicesByStatus { planned: Int! live: Int! completed: Int! startingThisWeek: Int! } type TurbineStats { total: Int! locationsTotal: Int! servicesTotal: Int! severity: [TurbineStatsSeverityItem!]! health: [TurbineStatsHealthItem!]! new: [TurbineStatsNewItem!]! serviceType: [TurbineStatsServiceTypeItem!]! locations: [TurbineStatsLocationItem!]! actionGapTotal: Int! newlyCriticalTotal: Int! servicesLiveTotal: Int! servicesStartingThisWeekTotal: Int! noInspection12mTotal: Int! } type TurbineStatsHealthItem { health: String! total: Int! } type TurbineStatsLocationItem { id: ID! name: String! latitude: Float longitude: Float coordinates: String turbineCount: Int! health: String! maxSeverityLevel: String } type TurbineStatsNewItem { severity: String! total: Int! } type TurbineStatsServiceTypeItem { serviceType: String! total: Int! } type TurbineStatsSeverityItem { severity: String! total: Int! } type TurbineVisInspections { turbineId: ID! serviceOrderLineIds: [ID!]! } scalar UUID input UnlinkAnomalyFromPlanningServiceOrderInput { id: Int! anomalyId: Int! } type UnlinkAnomalyFromPlanningServiceOrderPayload implements MutationResponse { code: String! success: Boolean! message: String! planningServiceOrder: PlanningServiceOrder } input UnlinkAnomalyInput { anomalyId: Int! } type UnlinkAnomalyPayload implements MutationResponse { code: String! success: Boolean! message: String! } input UpdateAnomalyClientFieldInput { id: Int! name: String type: String options: JSON } type UpdateAnomalyClientFieldPayload implements MutationResponse { code: String! success: Boolean! message: String! anomalyClientField: AnomalyClientField } input UpdateAnomalyCustomValueInput { id: Int! value: String } type UpdateAnomalyCustomValuePayload implements MutationResponse { code: String! success: Boolean! message: String! anomalyCustomValue: AnomalyCustomValue } input UpdateAnomalyInput { id: Int! name: String turbineId: Int turbineComponentId: Int turbineComponentSerialNumber: String projectId: Int workorderId: Int serviceOrderLineId: Int distanceToRoot: Float maxDistance: Float distanceToLeadingEdge: Float crossSectionDistance: Float crossSectionChamberDistance: Float width: Float profileDepthFrom: Float @deprecated(reason: "Profile depth is recorded as client custom fields; use customValues instead (OH-4117). A value sent here is still stored on the anomaly and read back, but nothing downstream consumes it. Removed once the client portal and VIS stop naming it.") profileDepthTo: Float @deprecated(reason: "Profile depth is recorded as client custom fields; use customValues instead (OH-4117). A value sent here is still stored on the anomaly and read back, but nothing downstream consumes it. Removed once the client portal and VIS stop naming it.") severity: AnomalySeverity status: String aiStatus: AnomalyAIStatus stage: AnomalyStage internalExternal: AnomalyPlacement side: AnomalySide crossSectionSide: AnomalyCrossSectionSide crossSectionType: AnomalyCrossSectionType rib: AnomalyRib anomalyTypeId: Int anomalySubTypeId: Int anomalyMajorComponentId: Int anomalyComponentId: Int anomalySubComponentId: Int anomalyMaterialId: Int parentTypeId: Int rootCauseId: Int clientStatus: String chargeable: Boolean description: String comments: String serviceProviderId: Int damageCause: String parentAnomalyId: Int @deprecated(reason: "No longer used. Use link_group instead.") crossFileIds: JSON videoTimestampMs: Int linkGroup: String registeredBy: AnomalyRegisteredBy registrationOrigin: String widthDifferenceSincePrevious: Float widthDifferenceSinceOldest: Float lengthDifferenceSincePrevious: Float lengthDifferenceSinceOldest: Float videoFrame: Int frameBlobPath: String bbox: String segmentation: String segmentationVersion: Int aiConfidence: Float aiImagesV2: Boolean customValues: [AnomalyCustomValueEntryInput!] } input UpdateAnomalyLabelInput { id: Int! name: String color: String } type UpdateAnomalyPayload implements MutationResponse { code: String! success: Boolean! message: String! anomaly: Anomaly } input UpdateAnomalyPresetInput { id: Int! name: String value: JSON templateId: Int rank: Int } type UpdateAnomalyPresetPayload implements MutationResponse { code: String! success: Boolean! message: String! preset: AnomalyPreset } input UpdateAnomalyPresetTemplateInput { id: Int! name: String inspectionType: TemplateInspectionType customerId: Int projectId: Int isDefault: Boolean } type UpdateAnomalyPresetTemplatePayload implements MutationResponse { code: String! success: Boolean! message: String! template: AnomalyPresetTemplate } input UpdateAnomalyRecommendationInput { id: Int! name: String action: String type: String status: String } type UpdateAnomalyRecommendationPayload implements MutationResponse { code: String! success: Boolean! message: String! anomalyRecommendation: AnomalyRecommendation } input UpdateBookmarkInput { id: Int! type: BookmarkType visibility: BookmarkVisibility serviceOrderLineId: Int turbineComponentId: Int sourceObjectTypeId: Int sourceObjectId: Int distanceToRoot: Float description: String videoTimestampMs: Int videoFrame: Int positionX: Float positionY: Float } type UpdateBookmarkPayload implements MutationResponse { code: String! success: Boolean! message: String! bookmark: Bookmark } input UpdateBusinessRegionInput { id: Int! name: String } type UpdateBusinessRegionPayload implements MutationResponse { code: String! success: Boolean! message: String! businessRegion: BusinessRegion } input UpdateCertificateCategoryInput { id: Int! name: String description: String color: String sortOrder: Int } type UpdateCertificateCategoryPayload implements MutationResponse { code: String! success: Boolean! message: String! certificateCategory: CertificateCategory } input UpdateCertificateExpenseInput { id: Int! resourceId: Int certificateId: Int resourceCertificateId: Int issuerId: Int issuerName: String offeringId: Int projectId: Int amount: Decimal currencyId: Int status: Status orderDate: Date completionDate: Date invoiceNumber: String notes: String reason: String } type UpdateCertificateExpensePayload implements MutationResponse { code: String! success: Boolean! message: String! certificateExpense: CertificateExpense } input UpdateCertificateInput { id: Int! name: String code: String description: String defaultValidityMonths: Int isActive: Boolean countryId: Int categoryId: Int source: String } input UpdateCertificateIssuerInput { id: Int! name: String description: String website: String email: String phone: String address: String countryId: Int additionalInfo: String isActive: Boolean } type UpdateCertificateIssuerPayload implements MutationResponse { code: String! success: Boolean! message: String! certificateIssuer: CertificateIssuer } input UpdateCertificateOfferingInput { id: Int! certificateId: Int issuerId: Int countryId: Int cost: Decimal currencyId: Int validityMonths: Int format: String duration: String howToAcquire: String bookingUrl: String additionalInfo: String isActive: Boolean } type UpdateCertificateOfferingPayload implements MutationResponse { code: String! success: Boolean! message: String! certificateOffering: CertificateOffering } type UpdateCertificatePayload implements MutationResponse { code: String! success: Boolean! message: String! certificate: Certificate } input UpdateComponentModelInput { id: Int! name: String manufacturerId: Int componentTypeId: Int length: Decimal crawlerRange: Decimal bladeType: BladeType bladeRoot: Decimal } type UpdateComponentModelPayload implements MutationResponse { code: String! success: Boolean! message: String! componentModel: ManufacturerComponentModel } input UpdateComponentTypeInput { id: Int! name: String parentId: Int fieldList: [String!] } type UpdateComponentTypePayload implements MutationResponse { code: String! success: Boolean! message: String! componentType: ComponentType } input UpdateCountryInput { id: Int! code: String name: String regionId: Int businessRegionId: Int currencyId: Int enabled: Boolean } type UpdateCountryPayload implements MutationResponse { code: String! success: Boolean! message: String! country: Country } input UpdateCurrencyInput { id: Int! code: String name: String } type UpdateCurrencyPayload implements MutationResponse { code: String! success: Boolean! message: String! currency: Currency } input UpdateCustomerAddressInput { id: Int! customerId: Int name: String additionalInfo: String type: String addressLine1: String addressLine2: String city: String stateRegion: String postalCode: String countryId: Int timezoneId: Int } type UpdateCustomerAddressPayload implements MutationResponse { code: String! success: Boolean! message: String! customerAddress: CustomerAddress } input UpdateCustomerBankAccountInput { id: Int! customerId: Int name: String iban: String accountNumber: String bankName: String swiftBic: String currencyCode: String isPrimary: Boolean } type UpdateCustomerBankAccountPayload implements MutationResponse { code: String! success: Boolean! message: String! customerBankAccount: CustomerBankAccount } input UpdateCustomerContactInput { id: Int! customerId: Int name: String customerLocationId: Int title: String department: String email: String phone: String isPrimary: Boolean additionalInfo: String } type UpdateCustomerContactPayload implements MutationResponse { code: String! success: Boolean! message: String! customerContact: CustomerContact } input UpdateCustomerInput { id: Int! number: String displayName: String legalName: String email: String phone: String countryId: Int parentCustomerId: Int vatNumber: String registrationNumber: String currencyId: Int additionalInfo: String netsuiteCustomerId: Int pipedriveOrgId: Int customFields: JSON } input UpdateCustomerLocationInput { id: Int! locationId: Int relationshipId: Int } type UpdateCustomerLocationPayload implements MutationResponse { code: String! success: Boolean! message: String! customerLocation: CustomerLocation } type UpdateCustomerPayload implements MutationResponse { code: String! success: Boolean! message: String! customer: Customer } input UpdateCustomerRoleInput { id: Int! name: String description: String featureLevels: CustomerRoleFeatureLevelsInput } type UpdateCustomerRolePayload implements MutationResponse { code: String! success: Boolean! message: String! customerRole: CustomerRole } input UpdateCustomerTurbineInput { id: Int! turbineId: Int relationshipId: Int } type UpdateCustomerTurbinePayload implements MutationResponse { code: String! success: Boolean! message: String! customerTurbine: CustomerTurbine } input UpdateCustomerUserInput { id: Int! userId: Int customerRoleIds: [Int!] planningScopeRestricted: Boolean } type UpdateCustomerUserPayload implements MutationResponse { code: String! success: Boolean! message: String! customerUser: CustomerUser } input UpdateDelayCategoryInput { id: Int! code: String description: String enabled: Boolean includeInClientReports: Boolean } type UpdateDelayCategoryPayload implements MutationResponse { code: String! success: Boolean! message: String! delayCategory: DelayCategory } input UpdateDelayInput { id: Int! delayTypeId: Int comment: String description: String startDatetime: DateTime endDatetime: DateTime durationMinutes: Int customFields: JSON robotSetId: Int resourceId: Int locationId: Int projectId: Int serviceOrderId: Int workorderId: Int workorderActivityId: Int } type UpdateDelayPayload implements MutationResponse { code: String! success: Boolean! message: String! delay: Delay } input UpdateDelayTypeInput { id: Int! delayCategoryId: Int code: String description: String enabled: Boolean includeInClientReports: Boolean } type UpdateDelayTypePayload implements MutationResponse { code: String! success: Boolean! message: String! delayType: DelayType } input UpdateExternalPhotoStatusInput { id: Int! status: ExternalImageStatus! } type UpdateExternalPhotoStatusPayload implements MutationResponse { code: String! success: Boolean! message: String! } input UpdateExternalPhotoStatusesInput { ids: [Int!]! status: ExternalImageStatus! } type UpdateExternalPhotoStatusesPayload implements MutationResponse { code: String! success: Boolean! message: String! updatedCount: Int! } input UpdateFileInput { id: Int! name: String previewName: String bucket: String type: String comments: String status: String customFields: JSON tags: JSON originalName: String deleteReason: String } type UpdateFilePayload implements MutationResponse { code: String! success: Boolean! message: String! file: File } input UpdateImageRotationInput { imageType: VISModelType! images: [UpdateImageRotationItemInput!]! } input UpdateImageRotationItemInput { id: Int! rotation: Int! } type UpdateImageRotationResponse implements MutationResponse { code: String! success: Boolean! message: String! } input UpdateImageSortOrderInput { imageType: VISModelType! images: [Int!]! } type UpdateImageSortOrderResponse implements MutationResponse { code: String! success: Boolean! message: String! } input UpdateLERImageSortOrderInput { lerPhotoStepId: Int! images: [Int!]! } type UpdateLERImageSortOrderResponse implements MutationResponse { code: String! success: Boolean! message: String! } input UpdateLERPhotoIncludeInReportInput { id: Int! includeInReport: Boolean! } type UpdateLERPhotoIncludeInReportPayload implements MutationResponse { code: String! success: Boolean! message: String! } input UpdateLERPhotoStatusInput { id: Int! status: LERImageStatus! } type UpdateLERPhotoStatusPayload implements MutationResponse { code: String! success: Boolean! message: String! } input UpdateLERPhotoStepStatusInput { id: Int! status: LERInspectionStatus! } type UpdateLERPhotoStepStatusPayload implements MutationResponse { code: String! success: Boolean! message: String! } input UpdateLocationInput { id: Int! name: String type: String addressLine1: String city: String countryId: Int timezoneId: Int latitude: Decimal longitude: Decimal additionalInfo: String windparkType: String addressLine2: String stateRegion: String postalCode: String coordinates: String globalWindParkDbId: Int certificates: [LocationCertificateInput!] } type UpdateLocationPayload implements MutationResponse { code: String! success: Boolean! message: String! location: Location } input UpdateManufacturerInput { id: Int! name: String } type UpdateManufacturerPayload implements MutationResponse { code: String! success: Boolean! message: String! manufacturer: Manufacturer } input UpdateMyProfileInput { firstName: String lastName: String phone: String } type UpdateMyProfilePayload implements MutationResponse { code: String! success: Boolean! message: String! user: User } input UpdateNotificationInput { id: Int! isRead: Boolean isArchived: Boolean } type UpdateNotificationPayload implements MutationResponse { code: String! success: Boolean! message: String! notification: Notification } input UpdatePlanningCampaignInput { id: Int! name: String status: String description: String plannedStartDate: Date plannedEndDate: Date actualStartDate: Date actualEndDate: Date plannedCost: Decimal actualCost: Decimal currencyId: Int notes: String } type UpdatePlanningCampaignPayload implements MutationResponse { code: String! success: Boolean! message: String! planningCampaign: PlanningCampaign } input UpdatePlanningCommentInput { id: Int! body: String } type UpdatePlanningCommentPayload implements MutationResponse { code: String! success: Boolean! message: String! planningComment: PlanningComment } input UpdatePlanningCustomerVendorInput { id: Int! name: String vendorId: Int } type UpdatePlanningCustomerVendorPayload implements MutationResponse { code: String! success: Boolean! message: String! planningCustomerVendor: PlanningCustomerVendor } input UpdatePlanningProjectInput { id: Int! campaignId: Int coreProjectId: Int code: String name: String status: String description: String priority: String plannedStartDate: Date plannedEndDate: Date actualStartDate: Date actualEndDate: Date plannedCost: Decimal actualCost: Decimal currencyId: Int notes: String } type UpdatePlanningProjectPayload implements MutationResponse { code: String! success: Boolean! message: String! planningProject: PlanningProject } input UpdatePlanningServiceInput { id: Int! coreServiceId: Int code: String description: String active: Boolean } input UpdatePlanningServiceOrderInput { id: Int! projectId: Int serviceId: Int vendorId: Int locationId: Int turbineId: Int turbineComponentId: Int anomalyIds: [Int!] number: String status: String priority: String description: String notes: String plannedStartDate: Date plannedEndDate: Date actualStartDate: Date actualEndDate: Date plannedCost: Decimal actualCost: Decimal } type UpdatePlanningServiceOrderPayload implements MutationResponse { code: String! success: Boolean! message: String! planningServiceOrder: PlanningServiceOrder } type UpdatePlanningServicePayload implements MutationResponse { code: String! success: Boolean! message: String! planningService: PlanningService } input UpdatePlanningWorkOrderInput { id: Int! serviceOrderId: Int typeId: Int name: String status: String description: String plannedStartDate: Date plannedEndDate: Date completedDate: Date position: Int customFields: JSON source: String } type UpdatePlanningWorkOrderPayload implements MutationResponse { code: String! success: Boolean! message: String! planningWorkOrder: PlanningWorkOrder } input UpdatePlanningWorkOrderTypeInput { id: Int! code: String description: String } type UpdatePlanningWorkOrderTypePayload implements MutationResponse { code: String! success: Boolean! message: String! planningWorkOrderType: PlanningWorkOrderType } input UpdatePositionInput { id: Int! name: String isLead: Boolean } type UpdatePositionPayload implements MutationResponse { code: String! success: Boolean! message: String! position: Position } input UpdateProjectCommentInput { id: Int! body: String bodyFormat: ProjectTaskCommentBodyFormat mentionedUserIds: [Int!] fileIds: [UUID!] } type UpdateProjectCommentPayload implements MutationResponse { code: String! success: Boolean! message: String! projectComment: ProjectComment } input UpdateProjectContactInput { id: Int! customerContactId: Int customerType: String role: ProjectContactMutableRole customerLocationId: Int } type UpdateProjectContactPayload implements MutationResponse { code: String! success: Boolean! message: String! projectContact: ProjectContact } input UpdateProjectLocationInput { id: Int! locationId: Int projectContactId: Int additionalInformation: JSON } type UpdateProjectLocationPayload implements MutationResponse { code: String! success: Boolean! message: String! projectLocation: ProjectLocation } input UpdateProjectPlannedResourceSetInput { id: Int! name: String description: String projectLocationId: Int status: ProjectPlannedResourceSetStatus } input UpdateProjectPlannedResourceSetItemInput { id: Int! resourceId: Int resourceType: String isLead: Boolean projectLocationId: Int startDate: Date endDate: Date status: ProjectPlannedResourceSetStatus } type UpdateProjectPlannedResourceSetItemPayload implements MutationResponse { code: String! success: Boolean! message: String! projectPlannedResourceSetItem: ProjectPlannedResourceSetItem } type UpdateProjectPlannedResourceSetPayload implements MutationResponse { code: String! success: Boolean! message: String! projectPlannedResourceSet: ProjectPlannedResourceSet } input UpdateProjectStatusInput { id: Int! code: String description: String enabled: Boolean sortOrder: Int } type UpdateProjectStatusPayload implements MutationResponse { code: String! success: Boolean! message: String! projectStatus: ProjectStatus } input UpdateProjectTaskCommentInput { id: Int! body: String bodyFormat: ProjectTaskCommentBodyFormat mentionedUserIds: [Int!] fileIds: [UUID!] } type UpdateProjectTaskCommentPayload implements MutationResponse { code: String! success: Boolean! message: String! projectTaskComment: ProjectTaskComment } input UpdateProjectTaskInput { id: Int! projectStatusId: Int parentTaskId: Int taskType: ProjectTaskType status: ProjectTaskStatus title: String notes: String applicability: Applicability notRequiredReason: String responsibleUserId: Int startDate: Date endDate: Date dueDate: Date confirmedAt: DateTime confirmedById: Int isManuallyOverridden: Boolean externalRefSystem: String externalRefId: String additionalInformation: JSON } type UpdateProjectTaskPayload implements MutationResponse { code: String! success: Boolean! message: String! projectTask: ProjectTask } input UpdatePurchaseOrderInput { id: Int! customerId: Int currencyId: Int } type UpdatePurchaseOrderPayload implements MutationResponse { code: String! success: Boolean! message: String! purchaseOrder: PurchaseOrder } input UpdatePurchaseOrderVersionInput { id: Int! orderNumber: String issueDate: Date amount: Decimal } type UpdatePurchaseOrderVersionPayload implements MutationResponse { code: String! success: Boolean! message: String! purchaseOrderVersion: PurchaseOrderVersion } input UpdateRegionInput { id: Int! name: String } type UpdateRegionPayload implements MutationResponse { code: String! success: Boolean! message: String! region: Region } input UpdateRelationshipTypeInput { id: Int! code: String description: String } type UpdateRelationshipTypePayload implements MutationResponse { code: String! success: Boolean! message: String! relationshipType: RelationshipType } input UpdateResourceInput { id: Int! qualifications: [JSON!] certificates: [ResourceCertificateInput!] } type UpdateResourcePayload implements MutationResponse { code: String! success: Boolean! message: String! resource: Resource } input UpdateResourceServicePositionInput { id: Int! resourceId: Int serviceId: Int positionId: Int fromDate: Date } type UpdateResourceServicePositionPayload implements MutationResponse { code: String! success: Boolean! message: String! resourceServicePosition: ResourceServicePosition } input UpdateResourceSetInput { id: Int! name: String description: String setItems: [ResourceSetItemInput!] } type UpdateResourceSetPayload implements MutationResponse { code: String! success: Boolean! message: String! resourceSet: ResourceSet } input UpdateRobotSetInput { id: Int! name: String serviceIds: [Int!] } type UpdateRobotSetPayload implements MutationResponse { code: String! success: Boolean! message: String! robotSet: RobotSet } input UpdateRobotSetServiceInput { id: Int! robotSetId: Int serviceId: Int } type UpdateRobotSetServicePayload implements MutationResponse { code: String! success: Boolean! message: String! robotSetService: RobotSetServices } input UpdateSectionStatusInput { sectionId: Int! status: InspectionItemStatus! } type UpdateSectionStatusPayload implements MutationResponse { code: String! success: Boolean! message: String! section: VISSection } input UpdateServiceItemActivityInput { id: Int! serviceItemId: Int description: String requiresRobotSet: Boolean estimatedDuration: Int customFields: JSON sortOrder: Int } type UpdateServiceItemActivityPayload implements MutationResponse { code: String! success: Boolean! message: String! serviceItemActivity: ServiceItemActivity } input UpdateServiceItemInput { id: Int! code: String componentId: Int description: String isOptional: Boolean serviceId: Int sortOrder: Int } type UpdateServiceItemPayload implements MutationResponse { code: String! success: Boolean! message: String! serviceItem: ServiceItem } input UpdateServiceOrderHeaderInput { id: Int! projectId: Int customerId: Int projectName: String locationId: Int customerName: String serviceOrderDate: String serviceOrderNumber: String serviceOrderType: String projectManagerUserId: Int status: String } type UpdateServiceOrderHeaderPayload implements MutationResponse { code: String! success: Boolean! message: String! serviceOrderHeader: ServiceOrderHeader } input UpdateServiceOrderLineInput { id: Int! number: String serviceOrderId: Int serviceId: Int quantity: Int turbineId: Int componentTypeId: Int turbineComponentId: Int serviceCode: String serviceDescription: String customerId: Int projectId: Int scopeChangeRequestId: Int projectScopeItemId: Int requiredQualifications: JSON status: String stage: String originalSolId: Int billable: Boolean customerCustomValues: [CustomerCustomValueEntryInput!] } type UpdateServiceOrderLinePayload implements MutationResponse { code: String! success: Boolean! message: String! serviceOrderLine: ServiceOrderLine } input UpdateServiceResultInput { id: Int! workorderId: Int turbineId: Int data: JSON serviceOrderLineId: Int turbineComponentId: Int templateId: Int resultThresholdId: Int } type UpdateServiceResultPayload implements MutationResponse { code: String! success: Boolean! message: String! serviceResult: ServiceResult } input UpdateServiceResultTemplateFieldInput { id: Int! key: String label: String description: String fieldType: String isRequired: Boolean sortOrder: Int unit: String options: JSON defaultValue: JSON } type UpdateServiceResultTemplateFieldPayload implements MutationResponse { code: String! success: Boolean! message: String! serviceResultTemplateField: ServiceResultTemplateField } input UpdateServiceResultTemplateInput { id: Int! code: String description: String componentTypeId: Int } type UpdateServiceResultTemplatePayload implements MutationResponse { code: String! success: Boolean! message: String! serviceResultTemplate: ServiceResultTemplate } input UpdateTaskInput { id: Int! title: String description: String status: String priority: Int visibility: String assigneeUserId: Int startDate: Date dueDate: Date } input UpdateTimezoneInput { id: Int! city: String timezone: String regionId: Int abbrev: String isDst: Boolean } type UpdateTimezonePayload implements MutationResponse { code: String! success: Boolean! message: String! timezone: Timezone } input UpdateTurbineComponentInput { id: Int! componentTypeId: Int serialNumber: String manufacturerSerialNumber: String turbineId: Int manufacturerId: Int modelId: Int parentTurbineComponentId: Int length: Float radius: Float bladeTip: Boolean position: String additionalInformation: JSON } type UpdateTurbineComponentPayload implements MutationResponse { code: String! success: Boolean! message: String! turbineComponent: TurbineComponent } input UpdateTurbineInput { id: Int! locationId: Int name: String latitude: Decimal longitude: Decimal additionalInfo: String efficiency: Int commissioningYear: Int output: String coordinates: String manufacturerTurbineModelId: Int manufacturerId: Int hubHeight: Float rotorRadius: Float nominalPower: Float doubleReceptors: Boolean hvDoubleReceptors: Boolean manufacturerNumber: String isVirtual: Boolean padNumber: String } input UpdateTurbineModelInput { id: Int! name: String manufacturerId: Int nominalPower: Float centerToRootOffset: Float rotorRadius: Float hubHeight: Float doubleReceptors: Boolean hvDoubleReceptors: Boolean } type UpdateTurbineModelPayload implements MutationResponse { code: String! success: Boolean! message: String! turbineModel: ManufacturerTurbineModel } type UpdateTurbinePayload implements MutationResponse { code: String! success: Boolean! message: String! turbine: Turbine } input UpdateUserInput { id: Int! username: String email: String firstName: String lastName: String isActive: Boolean } type UpdateUserPayload implements MutationResponse { code: String! success: Boolean! message: String! user: User } input UpdateUserProfileCustomerInput { customerId: Int } type UpdateUserProfileCustomerPayload implements MutationResponse { code: String! success: Boolean! message: String! userProfile: UserProfile } input UpdateVendorInput { id: Int! number: String displayName: String legalName: String email: String phone: String countryId: Int parentVendorId: Int vatNumber: String registrationNumber: String currencyId: Int additionalInfo: String netsuiteVendorId: Int } type UpdateVendorPayload implements MutationResponse { code: String! success: Boolean! message: String! vendor: Vendor } input UpdateWorkTimeCategoryInput { id: Int! name: String isRestricted: Boolean parentId: Int payrollCategoryType: String timeLimit: Int allowedProjectType: String isFieldWork: Boolean offshoreLimitExempt: Boolean } type UpdateWorkTimeCategoryPayload implements MutationResponse { code: String! success: Boolean! message: String! workTimeCategory: WorkTimeCategory } input UpdateWorkTimeLogInput { id: Int! startedAt: String endedAt: String workorderId: Int activityId: Int projectId: Int resourceId: Int durationMin: Int comment: String reason: String timezone: String customFields: JSON correctedEntryId: Int workTimeCategoryId: Int status: String statusChangedById: Int statusChangeReason: String robotSetId: Int payType: String approvedById: Int approvedAt: String approverComment: String isApproved: Boolean } type UpdateWorkTimeLogPayload implements MutationResponse { code: String! success: Boolean! message: String! workTimeLog: WorkTimeLog } input UpdateWorkorderActivityInput { id: Int! workorderId: Int serviceItemId: Int serviceItemActivityId: Int portalServiceActivityId: Int startDatetime: String endDatetime: String resources: JSON robotSetId: Int status: String isInternal: Boolean locationId: Int turbineId: Int componentTypeId: Int turbineComponentId: Int activityDescription: String anomalyId: Int statusChangeReason: String statusChangeBy: Int customFields: JSON sortOrder: Int isOptional: Boolean } input UpdateWorkorderActivityMetadataInput { id: Int! workorderActivityId: Int payload: JSON } type UpdateWorkorderActivityMetadataPayload implements MutationResponse { code: String! success: Boolean! message: String! workorderActivityMetadata: WorkorderActivityMetadata } type UpdateWorkorderActivityPayload implements MutationResponse { code: String! success: Boolean! message: String! workorderActivity: WorkorderActivity } input UpdateWorkorderInput { id: Int! name: String description: String serviceOrderId: Int serviceOrderLineId: Int serviceItemId: Int projectId: Int projectName: String customerId: Int status: String plannedStartDatetime: String plannedEndDatetime: String locationId: Int turbineId: Int turbineComponentId: Int isInternal: Boolean statusChangeReason: String statusChangeBy: Int type: String mandatoryStartDate: String mandatoryDueDate: String projectManagerUserId: Int } type UpdateWorkorderPayload implements MutationResponse { code: String! success: Boolean! message: String! workorder: Workorder } input UpdateWorkorderPlanInput { planId: Int! workorderId: Int resourceType: String plannedStartAt: String plannedEndAt: String status: String workorderActivityId: Int actualStartAt: String actualEndAt: String resources: JSON } type UpdateWorkorderPlanPayload implements MutationResponse { code: String! success: Boolean! message: String! workorderPlan: WorkorderPlan } input UpdateWorkorderResourceSetInput { id: Int! workorderId: Int projectResourceSetId: Int name: String description: String } type UpdateWorkorderResourceSetPayload implements MutationResponse { code: String! success: Boolean! message: String! workorderResourceSet: WorkorderResourceSet } type UploadedFile { id: UUID! fileName: String! fileType: String! } type User { roles(order: UserRoleOrder, pagination: OffsetPaginationInput): [UserRole!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) resource: Resource @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) profile: UserProfile @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) id: ID! lastLogin: DateTime username: String! firstName: String! lastName: String! email: String! isActive: Boolean! dateJoined: DateTime! permissions: [String!]! impersonateId: Int } type UserEntityPreference { createdAt: DateTime! updatedAt: DateTime! id: ID! entityType: String! entityId: Int! watched: Boolean! lastSeenAt: DateTime } type UserEntityPreferencePayload implements MutationResponse { code: String! success: Boolean! message: String! userEntityPreference: UserEntityPreference } enum UserEventType { ACTIVITY_START ACTIVITY_FINISH ACTIVITY_UPDATE ACTIVITY_UPDATE_TIME WORKORDER_FINISH ACTIVITY_CREATE ACTIVITY_DELETE DELAY_CREATE DELAY_START DELAY_FINISH DELAY_UPDATE DELAY_DELETE PROJECT_UPDATE_RESOURCES CLOCK_IN CLOCK_OUT LONE_WORKER_CHECK_IN } input UserFilter { id: IDBaseFilterLookup email: StrFilterLookup firstName: StrFilterLookup lastName: StrFilterLookup isActive: BoolBaseFilterLookup dateJoined: DatetimeFilterLookup lastLogin: DatetimeFilterLookup AND: UserFilter OR: UserFilter NOT: UserFilter DISTINCT: Boolean role: String permission: String isInternal: Boolean emailDomains: [String!] customerId: ID } type UserOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [User!]! } input UserOrder { id: Ordering username: Ordering email: Ordering firstName: Ordering lastName: Ordering isActive: Ordering lastLogin: Ordering dateJoined: Ordering } type UserProfile { customer: Customer @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}, {app: "permissions", permission: "customer_basic_access"}], any: true) id: ID! pictureUrl: String! portalId: Int phone: String! } type UserRole { id: ID! name: String! } type UserRoleOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [UserRole!]! } input UserRoleOrder { id: Ordering name: Ordering } type UserTosAcceptance { user: User! tos: TermsOfService! createdAt: DateTime! updatedAt: DateTime! id: ID! ipAddress: String userAgent: String } type UserTosAcceptanceOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [UserTosAcceptance!]! } input VISAcademyCreateInput { serviceOrderLineId: Int! keepAiAnomalies: Boolean! = false assignedToId: Int = null } type VISAcademyDeleteResponse implements MutationResponse { code: String! success: Boolean! message: String! } type VISAcademyInspection { id: Int! sourceInspectionId: Int! serviceOrderLineId: Int! attempt: Int! keepAiAnomalies: Boolean! createdAt: DateTime! assignedToId: Int assignedTo: User } type VISAcademyInspectionOffsetPaginated { pageInfo: OffsetPaginationInfo! totalCount: Int! results: [VISAcademyInspection!]! } type VISAcademyInspectionResponse implements MutationResponse { code: String! success: Boolean! message: String! academyInspection: VISAcademyInspection } input VISAcademyUpdateAssigneeInput { academyInspectionId: Int! assignedToId: Int = null } input VISAddComponentInput { name: String! sections: [VISAddComponentSectionInput!] = null } input VISAddComponentSectionInput { name: String! } input VISAddSectionInput { componentId: Int! name: String! } type VISComponent { id: Int! createdAt: DateTime! deletedAt: DateTime name: String! sections: [VISSection!] } input VISEditInspectionInput { inspectionId: Int! addComponents: [VISAddComponentInput!] = null addSections: [VISAddSectionInput!] = null deleteComponents: [Int!] = null deleteSections: [Int!] = null restoreComponents: [Int!] = null restoreSections: [Int!] = null updateComponents: [VISUpdateComponentInput!] = null updateSections: [VISUpdateSectionInput!] = null } type VISEmptyResponse implements MutationResponse { code: String! success: Boolean! message: String! } type VISExpectedComponent { name: String! } type VISExpectedSection { name: String! } type VISExternalPhoto { id: Int! createdAt: DateTime! deletedAt: DateTime blobName: String! name: String! status: ExternalImageStatus! url: String cdnBaseUrl: String tiles: [VISExternalPhotoTile!] thumbnail: VISExternalPhotoThumbnail lowres: VISExternalPhotoLowRes } type VISExternalPhotoLowRes { id: Int! createdAt: DateTime! deletedAt: DateTime blobName: String! url: String } type VISExternalPhotoThumbnail { id: Int! createdAt: DateTime! deletedAt: DateTime blobName: String! url: String } type VISExternalPhotoTile { id: Int! createdAt: DateTime! deletedAt: DateTime blobName: String! url: String } type VISInspection { id: Int! createdAt: DateTime! deletedAt: DateTime serviceOrderLineId: Int! projectName: String! windParkName: String! turbineName: String! canRecalculateMeasurements: Boolean! components: [VISComponent!] } type VISInspectionOffsetPaginated { pageInfo: OffsetPaginationInfo! totalCount: Int! results: [VISInspection!]! } input VISInspectionOrder { id: Ordering createdAt: Ordering deletedAt: Ordering serviceOrderLineId: Ordering projectName: Ordering turbineName: Ordering windParkName: Ordering } type VISLerPhoto { id: Int! createdAt: DateTime! deletedAt: DateTime blobName: String! name: String! status: LERImageStatus! url: String cdnBaseUrl: String tiles: [VISLerPhotoTile!] thumbnail: VISLerPhotoThumbnail lowres: VISLerPhotoLowRes } type VISLerPhotoGroup { step: String! runs: [VISLerPhotoRun!]! } type VISLerPhotoLowRes { id: Int! createdAt: DateTime! deletedAt: DateTime blobName: String! url: String } type VISLerPhotoRun { id: Int runIndex: Int status: LERInspectionStatus! photos: [VISLerPhoto!]! } type VISLerPhotoThumbnail { id: Int! createdAt: DateTime! deletedAt: DateTime blobName: String! url: String } type VISLerPhotoTile { id: Int! createdAt: DateTime! deletedAt: DateTime blobName: String! url: String } type VISMeasurementRecalculationResponse implements MutationResponse { code: String! success: Boolean! message: String! run: VISMeasurementRecalculationRun } type VISMeasurementRecalculationRun { id: Int! createdAt: DateTime! serviceOrderLineId: Int! status: MeasurementRecalculationStatus! phase: String photosTotal: Int! photosProcessed: Int! startedAt: DateTime finishedAt: DateTime errorMessage: String } enum VISModelType { EXTERNAL_PHOTO ROOT_PHOTO POI_PHOTO LER_PHOTO } input VISMoveInput { items: [VISMoveItemInput!]! } input VISMoveItemInput { sourceId: Int! sourceType: String! destId: Int! destType: String! } type VISPoiPhoto { id: Int! createdAt: DateTime! deletedAt: DateTime blobName: String! name: String! url: String cdnBaseUrl: String tiles: [VISPoiPhotoTile!] thumbnail: VISPoiPhotoThumbnail lowres: VISPoiPhotoLowRes } type VISPoiPhotoLowRes { id: Int! createdAt: DateTime! deletedAt: DateTime blobName: String! url: String } type VISPoiPhotoThumbnail { id: Int! createdAt: DateTime! deletedAt: DateTime blobName: String! url: String } type VISPoiPhotoTile { id: Int! createdAt: DateTime! deletedAt: DateTime blobName: String! url: String } type VISRootPhoto { id: Int! createdAt: DateTime! deletedAt: DateTime blobName: String! name: String! url: String cdnBaseUrl: String tiles: [VISRootPhotoTile!] thumbnail: VISRootPhotoThumbnail lowres: VISRootPhotoLowRes } type VISRootPhotoLowRes { id: Int! createdAt: DateTime! deletedAt: DateTime blobName: String! url: String } type VISRootPhotoThumbnail { id: Int! createdAt: DateTime! deletedAt: DateTime blobName: String! url: String } type VISRootPhotoTile { id: Int! createdAt: DateTime! deletedAt: DateTime blobName: String! url: String } type VISRosbag { id: Int! createdAt: DateTime! deletedAt: DateTime blobName: String! blobs: [VISRosbagBlob!] videoFiles: [VISVideoFile!] } type VISRosbagBlob { id: Int! createdAt: DateTime! deletedAt: DateTime kind: String! blobName: String! url: String! } type VISSection { id: Int! createdAt: DateTime! deletedAt: DateTime name: String! runIndex: Int! status: InspectionItemStatus! videoFiles: [VISVideoFile!] rosbags: [VISRosbag!] rootPhotos: [VISRootPhoto!] poiPhotos: [VISPoiPhoto!] externalPhotos: [VISExternalPhoto!] lerPhotos: [VISLerPhotoGroup!] } input VISSoftDeleteInput { items: [VISSoftDeleteItemInput!]! } input VISSoftDeleteItemInput { id: Int! delete: Boolean! typeName: String! } input VISSwapInput { firstId: Int! secondId: Int! typeName: String! } input VISUpdateComponentInput { componentId: Int! name: String! } input VISUpdateSectionInput { sectionId: Int! name: String! } type VISVideoFile { id: Int! createdAt: DateTime! deletedAt: DateTime name: String! blobName: String! url: String! modelUrl: String blobs: [VISVideoFileBlob!] rosbags: [VISRosbag!] } type VISVideoFileBlob { id: Int! createdAt: DateTime! deletedAt: DateTime kind: String! blobName: String! url: String! } type Vehicle { country: Country createdAt: DateTime! updatedAt: DateTime! id: ID! licensePlate: String! make: String! model: String! type: String! vehicleSource: String! rentalCompany: String rentalAgreementNo: String inspectionTo: Date } type VehicleFleetAssignment { vehicle: Vehicle! assigneeUser: User project: Project robotSet: RobotSet parentAssignment: VehicleFleetAssignment acceptReport: VehicleFleetAssignmentReport returnReport: VehicleFleetAssignmentReport createdAt: DateTime! updatedAt: DateTime! id: ID! fromDate: Date! toDate: Date! acceptedAt: DateTime returnedAt: DateTime status: String! travelRequestReference: String currentOdometerAtAccept: Int currentOdometerAtReturn: Int } type VehicleFleetAssignmentOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [VehicleFleetAssignment!]! } type VehicleFleetAssignmentReport { assignment: VehicleFleetAssignment! vehicle: Vehicle! assigneeUser: User! createdAt: DateTime! updatedAt: DateTime! id: ID! type: String! odometer: Int! possession: JSON! safety: JSON! photos: JSON! notes: String reportedDate: Date! } type VehicleFleetAssignmentReportOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [VehicleFleetAssignmentReport!]! } type VehicleInsurance { vehicle: Vehicle! createdAt: DateTime! updatedAt: DateTime! id: ID! type: String! dateFrom: Date! dateTo: Date insuranceNumber: String! } type VehicleInsuranceOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [VehicleInsurance!]! } type VehicleOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Vehicle!]! } type Vendor { country: Country parentVendor: Vendor currency: Currency createdAt: DateTime! updatedAt: DateTime! id: ID! number: String displayName: String! legalName: String vatNumber: String registrationNumber: String additionalInfo: String netsuiteVendorId: Int } type VendorOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Vendor!]! } input VendorOrder { id: Ordering number: Ordering displayName: Ordering legalName: Ordering firstName: Ordering lastName: Ordering vatNumber: Ordering registrationNumber: Ordering netsuiteVendorId: Ordering } type WorkActivityFeedPage { pageInfo: OffsetPaginationInfo! totalCount: Int! results: [WorkActivityFeedRow!]! } type WorkActivityFeedRow { workTimeLogId: Int! resourceId: Int date: Date! startedAt: DateTime endedAt: DateTime workorderId: Int workorderName: String workorderType: String projectId: Int projectCode: String locationId: Int locationName: String turbineName: String activityId: Int activityDescription: String robotSetId: Int robotSetName: String } type WorkTimeCategory { parent: WorkTimeCategory id: ID! name: String! isRestricted: Boolean! allowedProjectType: String payrollCategoryType: String timeLimit: Int isFieldWork: Boolean! offshoreLimitExempt: Boolean! } type WorkTimeCategoryOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [WorkTimeCategory!]! } type WorkTimeLog { resource: Resource timezone: Timezone project: Project workTimeCategory: WorkTimeCategory statusChangedBy: User robotSet: RobotSet approvedBy: User serviceOrderLine: ServiceOrderLine createdAt: DateTime! id: ID! workorderId: Int activityId: Int startedAt: DateTime endedAt: DateTime durationMin: Int comment: String reason: String activityStartDatetime: DateTime activityEndDatetime: DateTime customFields: JSON correctedEntryId: Int status: String statusChangeReason: String payType: String approvedAt: DateTime approverComment: String isApproved: Boolean } input WorkTimeLogFilter { startedAt: DatetimeFilterLookup endedAt: DatetimeFilterLookup status: String project: DjangoModelFilterInput robotSet: DjangoModelFilterInput resource: DjangoModelFilterInput approvedBy: DjangoModelFilterInput AND: WorkTimeLogFilter OR: WorkTimeLogFilter NOT: WorkTimeLogFilter DISTINCT: Boolean } type WorkTimeLogOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [WorkTimeLog!]! } input WorkTimeLogOrder { id: Ordering workorderId: Ordering activityId: Ordering resource: Ordering startedAt: Ordering endedAt: Ordering durationMin: Ordering status: Ordering isApproved: Ordering approvedAt: Ordering project: Ordering serviceOrderLine: Ordering } type Workorder { serviceOrder: ServiceOrderHeader serviceOrderLine: ServiceOrderLine serviceItem: ServiceItem project: Project customer: Customer location: Location turbine: Turbine turbineComponent: TurbineComponent workorderActivities(filters: WorkorderActivityFilter, order: WorkorderActivityOrder, pagination: OffsetPaginationInput): [WorkorderActivity!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) delays(filters: DelayFilter, pagination: OffsetPaginationInput): [Delay!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) statusChanges(order: WorkorderStatusChangeLogOrder, pagination: OffsetPaginationInput): [WorkorderStatusChangeLog!]! @hasPerm(permissions: [{app: "auth", permission: "query_basic_graphql"}], any: true) updatedAt: DateTime! id: ID! name: String! description: String projectName: String status: String plannedStartDatetime: DateTime plannedEndDatetime: DateTime isInternal: Boolean isOptional: Boolean! isRework: Boolean statusChangeReason: String statusChangeBy: Int type: String mandatoryStartDate: DateTime mandatoryDueDate: DateTime projectManagerUserId: Int workTimeLogs(resourceId: Int = null): [WorkTimeLog!]! completionDate: DateTime isDirect: Boolean } type WorkorderActivity { workorder: Workorder serviceItem: ServiceItem location: Location turbine: Turbine componentType: ComponentType turbineComponent: TurbineComponent id: ID! serviceItemActivityId: Int portalServiceActivityId: Int startDatetime: DateTime endDatetime: DateTime robotSetId: Int status: String isInternal: Boolean! activityDescription: String anomalyId: Int statusChangeReason: String statusChangeBy: Int customFields: JSON sortOrder: Int isOptional: Boolean estimatedDuration: Int comment: String refId: String debriefLockedAt: DateTime componentTypeId: Int resources: JSON activityResources: [WorkorderActivityResourceAssignment!]! teamLeadResourceIds: [Int!]! } input WorkorderActivityFilter { startDatetime: DatetimeFilterLookup endDatetime: DatetimeFilterLookup status: String turbineComponent: DjangoModelFilterInput robotSetId: Int workorder: DjangoModelFilterInput AND: WorkorderActivityFilter OR: WorkorderActivityFilter NOT: WorkorderActivityFilter DISTINCT: Boolean resourceIds: [Int!] workorderResourceIds: [Int!] } type WorkorderActivityMetadata { workorderActivity: WorkorderActivity id: ID! payload: JSON! } input WorkorderActivityMetadataFilter { id: ID workorderActivity: DjangoModelFilterInput AND: WorkorderActivityMetadataFilter OR: WorkorderActivityMetadataFilter NOT: WorkorderActivityMetadataFilter DISTINCT: Boolean } type WorkorderActivityMetadataOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [WorkorderActivityMetadata!]! } type WorkorderActivityOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [WorkorderActivity!]! } input WorkorderActivityOrder { id: Ordering workorder: Ordering startDatetime: Ordering endDatetime: Ordering status: Ordering isInternal: Ordering location: Ordering turbine: Ordering componentType: Ordering turbineComponent: Ordering activityDescription: Ordering anomalyId: Ordering } type WorkorderActivityResourceAssignment { id: Int! resourceId: Int! isLead: Boolean resourceFullName: String resourceEmail: String } enum WorkorderAssignment { """ Assigned to this workorder itself, by a pin or by its own resource set. """ DIRECT """On the project's roster but not on this workorder.""" INDIRECT """ Both halves from one feed, which is what omitting this field asks for. `isDirect` is then evaluated per row rather than being constant, so it costs a subquery a single half does not. """ ANY } type WorkorderEvent { eventType: SubscriptionEventType! workorderId: ID! workorder: Workorder! } input WorkorderFilter { updatedAt: DatetimeFilterLookup AND: WorkorderFilter OR: WorkorderFilter NOT: WorkorderFilter DISTINCT: Boolean status: [WorkorderStatus!] types: [WorkorderType!] assignment: WorkorderAssignment onProjectRoster: ProjectRoster assignedUserId: Int projectStatuses: [ProjectStatusCode!] resourceIds: [Int!] turbineComponentIsnull: Boolean turbineId: Int workTimeLogResourceId: Int completionDateGte: DateTime completionDateLte: DateTime serviceOrderLineIds: [Int!] projectIds: [Int!] projectCodes: [String!] serviceOrderLineStatuses: [String!] projectManagers: [String!] locationNames: [String!] turbineNames: [String!] turbineComponentSerials: [String!] teamLeads: [String!] resourceSetNames: [String!] } type WorkorderOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [Workorder!]! } input WorkorderOrder { id: Ordering name: Ordering status: Ordering updatedAt: Ordering plannedStartDatetime: Ordering plannedEndDatetime: Ordering mandatoryStartDate: Ordering mandatoryDueDate: Ordering projectName: Ordering projectManagerUserId: Ordering type: Ordering isInternal: Ordering } type WorkorderPlan { workorder: Workorder! planId: ID! workorderActivityId: Int resourceType: String! plannedStartAt: DateTime! plannedEndAt: DateTime! actualStartAt: DateTime actualEndAt: DateTime status: String! createdAt: DateTime! updatedAt: DateTime! resources: JSON } type WorkorderPlanOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [WorkorderPlan!]! } input WorkorderPlanOrder { planId: Ordering workorder: Ordering workorderActivityId: Ordering plannedStartAt: Ordering plannedEndAt: Ordering actualStartAt: Ordering actualEndAt: Ordering status: Ordering resourceType: Ordering } type WorkorderResourceSet { workorder: Workorder! id: ID! projectResourceSet: DjangoModelType name: String! description: String } type WorkorderResourceSetOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [WorkorderResourceSet!]! } enum WorkorderStatus { UNASSIGNED NOT_STARTED IN_PROGRESS COMPLETED CANCELLED } type WorkorderStatusChangeLog { workorder: Workorder createdAt: DateTime! createdBy: DjangoModelType id: ID! oldStatus: String changeReason: String changeNote: String newStatus: String } type WorkorderStatusChangeLogOffsetPaginated { pageInfo: OffsetPaginationInfo! """Total count of existing results.""" totalCount: Int! """List of paginated results.""" results: [WorkorderStatusChangeLog!]! } input WorkorderStatusChangeLogOrder { id: Ordering workorder: Ordering oldStatus: Ordering newStatus: Ordering createdAt: Ordering changeReason: Ordering } enum WorkorderType { ADMIN FIELD @deprecated(reason: "Use FIELD_WORK or FIELD_OTHER. FIELD still works for backwards compatibility and expands into both new values.") FIELD_WORK FIELD_OTHER OFFICE DATA_UPLOAD DATA_TRACKING } scalar timedelta