asyncapi: 2.6.0 info: title: PCP RequestTask API version: 0.0.1 description: "Сервис для приема и подтверждения заявок на съемку, а так же для формирования\ \ и \nбронирования схем покрытия заявок.\n" servers: production: url: kafka://broker.example.com:9092 protocol: kafka defaultContentType: application/json channels: pcp.slot.cover.task: description: 'СПО ПЦП подписывается на заказ схемы покрытия. Содержимое сообщения содержит заявку на съемку. ' subscribe: summary: Запрос на схему покрытия. message: $ref: '#/components/messages/SlotCoverRequest' pcp.slot.cover.ready: description: 'СПО ПЦП публикует сформированную схему покрытия. Содержимое сообщения содержит схему покрытия. ' publish: summary: Публикация схемы покрытия слотами. message: $ref: '#/components/messages/SlotCoverReady' pcp.slot.cover.book: description: 'СПО ПЦП подписывается на топик с запросом на бронирование схемы покрытия. Содержимое сообщения содержит идентификаторы слотов схемы покрытия, утвержденную потребителем. ' subscribe: summary: Запрос на бронирование слотов. message: $ref: '#/components/messages/SlotCoverBooking' pcp.slot.cover.ack: description: 'СПО ПЦП публикует подтверждение бронирования схемы покрытия. Содержимое сообщения содержит идентификаторы слотов подтвержденной схемы покрытия. ' publish: summary: Публикация подтверждения бронирования слотов. message: $ref: '#/components/messages/SlotCoverCommited' pcp.spacecraft.plan.ready: description: СПО ПЦП публикует сформированный план работы КА. publish: summary: Публикация плана работы КА. message: $ref: '#/components/messages/SpacecraftPlanReady' pcp.groundstation.change: description: СПО ПЦП подписывается на уведомления об изменении параметров земных станций (без передачи данных). subscribe: summary: Факт изменения параметров ЗС. message: $ref: '#/components/messages/GroundStationChanged' pcp.spacecraft.nu.change: description: СПО ПЦП подписывается на уведомления об изменении начальных условий КА (без передачи данных). subscribe: summary: Факт изменения начальных условий КА. message: $ref: '#/components/messages/SpacecraftNuChanged' pcp.spacecraft.bls.change: description: СПО ПЦП подписывается на уведомления об изменении блока состояния КА (без передачи данных). subscribe: summary: Факт изменения блока состояния КА. message: $ref: '#/components/messages/SpacecraftBlsChanged' pcp.spacecraft.control.time: description: СПО ПЦП подписывается на события о приходе/обновлении графика управления КА. subscribe: summary: Приход графика управления КА. message: $ref: '#/components/messages/SpacecraftControlTime' components: messages: SlotCoverRequest: name: slotCoverRequest title: Схема покрытия. summary: Запрос схемы покрытия от СПО ПЦП. contentType: application/json headers: $ref: '#/components/schemas/EventHeaders' payload: $ref: '#/components/schemas/Request' bindings: kafka: valueFormat: json SlotCoverReady: name: slotCoverReady title: Схема покрытия. summary: Сформированная схема покрытия. contentType: application/json headers: $ref: '#/components/schemas/EventHeaders' payload: type: array items: $ref: '#/components/schemas/SurveySlot' description: Список слотов (схема покрытия) bindings: kafka: valueFormat: json SlotCoverBooking: name: slotCoverBooking title: Схема покрытия, бронирование. summary: Запрос на бронирование схемы покрытия. contentType: application/json headers: $ref: '#/components/schemas/EventHeaders' payload: properties: slots: type: array items: $ref: '#/components/schemas/SurveySlotInfo' description: Список слотов для бронирования. request: $ref: '#/components/schemas/Request' type: object required: - slots - request bindings: kafka: valueFormat: json SlotCoverCommited: name: slotCoverCommitted title: Схема покрытия, бронирование. summary: Подтверждение от СПО ПЦП бронирования схемы покрытия. contentType: application/json headers: $ref: '#/components/schemas/EventHeaders' payload: type: array items: $ref: '#/components/schemas/SurveySlotInfo' description: Список забронированных слотов. bindings: kafka: valueFormat: json SpacecraftPlanReady: name: SpacecraftPlanReady title: План работы КА готов summary: Публикация сформированного плана работы КА (маршруты съемки + сбросы) для потребителей. contentType: application/json headers: $ref: '#/components/schemas/EventHeaders' payload: $ref: '#/components/schemas/SpacecraftWorkPlan' bindings: kafka: valueFormat: json GroundStationChanged: name: GroundStationChanged title: Изменение параметров земной станции summary: Уведомление о факте изменения параметров земной станции (без передачи данных) (payload содержит только идентификатор). contentType: application/json headers: $ref: '#/components/schemas/EventHeaders' payload: $ref: '#/components/schemas/GroundStationChangedPayload' bindings: kafka: valueFormat: json examples: - payload: stationId: 101 SpacecraftNuChanged: name: SpacecraftNuChanged title: Изменение начальных условий КА summary: Уведомление о факте изменения начальных условий КА (без передачи данных) (payload содержит только идентификатор). contentType: application/json headers: $ref: '#/components/schemas/EventHeaders' payload: $ref: '#/components/schemas/SpacecraftChangedPayload' bindings: kafka: valueFormat: json examples: - payload: spacecraftId: 205 SpacecraftBlsChanged: name: SpacecraftBlsChanged title: Изменение параметров блока состояния КА summary: Уведомление о факте изменения блока состояния КА (без передачи данных) (payload содержит только идентификатор). contentType: application/json headers: $ref: '#/components/schemas/EventHeaders' payload: $ref: '#/components/schemas/SpacecraftChangedPayload' bindings: kafka: valueFormat: json examples: - payload: spacecraftId: 205 SpacecraftControlTime: name: SpacecraftControlTime title: График управления КА summary: Событие о приходе/обновлении графика управления КА (основная/корректирующая закладки и интервал планирования). contentType: application/json headers: $ref: '#/components/schemas/EventHeaders' payload: $ref: '#/components/schemas/SpacecraftControlTimeEvent' bindings: kafka: valueFormat: json examples: - payload: spacecraftId: 205 mainUploadAt: '2026-02-20T10:00:00' correctionUploadAt: '2026-02-20T14:00:00' planningBegin: '2026-02-20T00:00:00' planningEnd: '2026-02-27T00:00:00' schemas: Request: type: object description: Заявка на съемку. Необходимо указать хотя бы одно требование по аппаратуре. properties: id: type: string format: uuid description: Идентификатор заявки UUID. name: type: string maxLength: 255 description: Наименование заявки. Не более 255 символов. kpp: type: array items: type: integer description: Список номеров КПП для сброса. Если не указано, сброс производится на все доступные КПП. highPriorityTransmit: type: boolean default: false description: Признак высокоприоритетной передачи. intervalBegin: type: string format: date-time description: Дата‑время начала выполнения заявки. Не может быть менее чем сегодня. intervalEnd: type: string format: date-time description: Дата‑время конца выполнения заявки. Минимальный интервал съемки - 7 дней. optics: $ref: '#/components/schemas/OpticsConstraints' nullable: true description: Ограничения по оптике (null – не используется). rsa: $ref: '#/components/schemas/RSAConstraints' nullable: true description: Ограничения по РСА (null – не используется). geometry: type: string format: wkt description: Геометрия заявки в формате WKT. Геометрия должна быть Polygon. additionalProperties: false required: - id - name - intervalBegin - intervalEnd - geometry anyOf: - required: - optics - required: - rsa RSAConstraints: type: object description: Ограничения на съемку, РСА properties: resultType: $ref: '#/components/schemas/RsaResultType' description: Режим работы РСА (детальный(Spotlight), маршрутный(StripMap), обзорный(ScanSar)) interferometry: type: boolean description: Признак интерферометрии polarisation: $ref: '#/components/schemas/PolarisationType' description: Поляризация resolution: type: number format: double default: 20 description: Требуемое разрешение, м. additionalProperties: false required: - resultType - resolution - polarisation OpticsConstraints: type: object description: Ограничения на съемку, оптика. properties: resultType: $ref: '#/components/schemas/OpticsResultType' description: Тип требуемого продукта (панхром, мультиспектр, паншарпенинг). resolution: type: number format: double description: Требуемое разрешение, м. sunAngleMin: type: number format: double default: 0 minimum: 0 maximum: 90 description: Минимальный угол солнца. sunAngleMax: type: number format: double default: 90 minimum: 0 maximum: 90 description: Максимальный угол солнца. clouds: type: number format: double default: 100 minimum: 0 maximum: 100 description: Облачность. Максимально допустимое значение. additionalProperties: false required: - resultType - resolution PolarisationType: type: string enum: - HH - VV description: Тип поляризации. OpticsResultType: type: string enum: - PANCHROMATIC - MULTISPECTRAL - PANSHARPENING description: Результат оптической съемки. RsaResultType: type: string enum: - SPOTLIGHT - STRIPMAP - SCANSAR description: Режим работы РСА. SurveySlot: type: object description: Слот наблюдения (часть схемы покрытия). properties: slotNumber: type: integer format: int64 default: 0 description: Номер слота. cycle: type: integer format: int64 default: 0 description: Цикл замыкания. ka: type: integer format: int64 default: 0 description: Идентификатор КА. tn: type: string format: date-time description: Время начала наблюдения слота. tk: type: string format: date-time description: Время конца наблюдения слота. roll: type: number format: double description: Угол визирования. contour: type: string description: Геометрия слота, WKT, WGS 84. revolution: type: integer format: int64 default: 0 description: Виток наблюдения. revolutionSign: $ref: '#/components/schemas/RevolutionSign' description: Признак ветви (восходящая/нисходящая). state: type: integer format: int16 default: 0 description: Статус бронирования (0 - нет, 1 - да). additionalProperties: false required: - cycle - ka - tn - tk - roll - contour - revolution - revolutionSign - slotNumber - state SurveySlotInfo: type: object description: Краткая информация слота, необходимая для бронирования. properties: slotNumber: type: integer format: int64 default: 0 description: Номер слота. cycle: type: integer format: int64 default: 0 description: Цикл замыкания. noradId: type: integer format: int64 default: 0 description: Идентификатор НОРАД. additionalProperties: false required: - slotNumber - cycle - noradId RevolutionSign: type: string enum: - ASC - DESC description: Признак ветви – восходящая/нисходящая. RequestType: type: string enum: - RESERVATION - COMMON description: Тип заявки. Бронь или обычная. EventType: type: string description: Тип события. Значение обязательно и используется для маршрутизации и диагностики. enum: - NEW_REQUEST - NEW_REQUEST_COMMITED - REQUEST_CANCEL - REQUEST_CANCEL_COMMITED - ORDER_SLOT_COVER - SLOT_COVER_READY - SLOT_COVER_BOOKING - SLOT_COVER_BOOKED - GROUNDSTATION_CHANGED - SPACECRAFT_NU_CHANGED - SPACECRAFT_BLS_CHANGED EventHeaders: type: object required: - event_id - event_type - produced_at properties: event_id: type: string description: Уникальный идентификатор события. event_type: $ref: '#/components/schemas/EventType' produced_at: type: string format: date-time description: Время формирования события. trace_id: type: string nullable: true description: Идентификатор трассировки. schema_version: type: string nullable: true description: Версия схемы сообщения. example: v1 SpacecraftWorkPlan: type: object description: План работы КА properties: planningBegin: type: string format: date-time planningEnd: type: string format: date-time imagingRoutes: type: array items: $ref: '#/components/schemas/RoutePlanItem' default: [] downlinks: type: array items: $ref: '#/components/schemas/DownlinkPlanItem' default: [] required: - planningBegin - planningEnd additionalProperties: false RoutePlanItem: type: object description: Маршрут съемки в плане работы КА properties: activationNumber: type: integer format: int32 routeNumber: type: integer format: int32 revolution: type: integer format: int64 routeOnRevolutionNumber: type: integer format: int32 startTime: type: string format: date-time durationSec: type: integer format: int64 payloadType: $ref: '#/components/schemas/PayloadType' targetWkt: type: string description: Координаты точки прицеливания (например WKT) rollDeg: type: number format: double pitchDeg: type: number format: double yawDeg: type: number format: double sunAngleBeginDeg: type: number format: double sunAngleEndDeg: type: number format: double slantRangeBeginMeters: type: number format: double slantRangeEndMeters: type: number format: double required: - activationNumber - routeNumber - revolution - routeOnRevolutionNumber - startTime - durationSec - payloadType - targetWkt - rollDeg - pitchDeg - yawDeg - sunAngleBeginDeg - sunAngleEndDeg - slantRangeBeginMeters - slantRangeEndMeters additionalProperties: false DownlinkPlanItem: type: object description: Сброс в плане работы КА properties: activationNumber: type: integer format: int32 downlinkNumber: type: integer format: int32 revolution: type: integer format: int64 stationId: type: integer format: int64 begin: type: string format: date-time end: type: string format: date-time routeKeys: type: array items: $ref: '#/components/schemas/RouteKey' default: [] required: - activationNumber - downlinkNumber - revolution - stationId - begin - end additionalProperties: false RouteKey: type: object description: Составной ключ маршрута (порядковый номер включения + номер витка + номер на витке) properties: activationNumber: type: integer format: int32 revolution: type: integer format: int64 routeOnRevolutionNumber: type: integer format: int32 required: - activationNumber - revolution - routeOnRevolutionNumber additionalProperties: false PayloadType: type: string description: Данные по аппаратуре enum: - RADAR - OPTICS GroundStationCoordinates: type: object description: 'Координаты ЗС в WGS-84. Можно передавать либо b/l/h, либо WKT Point(x,y,z). ' properties: b: type: number format: double description: Широта (градусы) l: type: number format: double description: Долгота (градусы) h: type: number format: double description: Превышение/высота (метры) wktPoint: type: string description: WKT Point (x y: null z): null additionalProperties: false GroundStationParams: type: object description: Параметры земной станции (ЗС) properties: stationId: type: integer format: int64 description: Идентификатор ЗС coordinates: $ref: '#/components/schemas/GroundStationCoordinates' minAngleDeg: type: number format: double description: Минимальный угол (градусы) maxAngleDeg: type: number format: double description: Максимальный угол (градусы) retargetingTimeSec: type: integer format: int64 description: Время перенацеливания (секунды) receiveIntervalSec: type: integer format: int64 description: Интервал между последовательными приемами (секунды) required: - stationId - coordinates - minAngleDeg - maxAngleDeg - retargetingTimeSec - receiveIntervalSec additionalProperties: false GroundStationBanInterval: type: object description: Интервал запрета на работу с ЗС properties: stationId: type: integer format: int64 description: Идентификатор ЗС begin: type: string format: date-time description: Время начала интервала запрета end: type: string format: date-time description: Время конца интервала запрета required: - stationId - begin - end additionalProperties: false RadarStateConstraints: type: object description: Ограничения для локации (РСА) на уровне блока состояния properties: scanSarRouteMinDurationSec: type: integer format: int64 scanSarRouteMaxDurationSec: type: integer format: int64 stripMapRouteMinDurationSec: type: integer format: int64 stripMapRouteMaxDurationSec: type: integer format: int64 scanSarMaxModesPerOrbit: type: integer format: int32 scanSarMaxModesPerDay: type: integer format: int32 stripMapMaxModesPerOrbit: type: integer format: int32 stripMapMaxModesPerDay: type: integer format: int32 spotLightMaxModesPerOrbit: type: integer format: int32 spotLightMaxModesPerDay: type: integer format: int32 required: - scanSarRouteMinDurationSec - scanSarRouteMaxDurationSec - stripMapRouteMinDurationSec - stripMapRouteMaxDurationSec - scanSarMaxModesPerOrbit - scanSarMaxModesPerDay - stripMapMaxModesPerOrbit - stripMapMaxModesPerDay - spotLightMaxModesPerOrbit - spotLightMaxModesPerDay additionalProperties: false OpticsStateConstraints: type: object description: Ограничения для оптики на уровне блока состояния properties: pssCaptureAngleDeg: type: number format: double mssCaptureAngleDeg: type: number format: double mssMaxDurationPerOrbitSec: type: integer format: int64 mssMaxDurationPerDaySec: type: integer format: int64 pssMaxDurationPerOrbitSec: type: integer format: int64 pssMaxDurationPerDaySec: type: integer format: int64 jointMaxDurationPerOrbitSec: type: integer format: int64 jointMaxDurationPerDaySec: type: integer format: int64 required: - pssCaptureAngleDeg - mssCaptureAngleDeg - mssMaxDurationPerOrbitSec - mssMaxDurationPerDaySec - pssMaxDurationPerOrbitSec - pssMaxDurationPerDaySec - jointMaxDurationPerOrbitSec - jointMaxDurationPerDaySec additionalProperties: false SpacecraftStateBlock: type: object description: Блок состояния КА properties: spacecraftId: type: integer format: int64 description: Идентификатор КА stationIds: type: array description: Перечень станций (идентификаторы ЗС), с которыми работает аппарат items: type: integer format: int64 default: [] rollMinDeg: type: number format: double rollMaxDeg: type: number format: double pitchMinDeg: type: number format: double pitchMaxDeg: type: number format: double yawMinDeg: type: number format: double yawMaxDeg: type: number format: double imagingMaxDurationPerDaySec: type: integer format: int64 imagingMaxDurationPerOrbitSec: type: integer format: int64 downlinkMaxDurationPerDaySec: type: integer format: int64 downlinkMaxDurationPerOrbitSec: type: integer format: int64 imagingModesPerOrbit: type: integer format: int32 imagingModesPerDay: type: integer format: int32 downlinkModesPerOrbit: type: integer format: int32 downlinkModesPerDay: type: integer format: int32 imagingToImagingIntervalSec: type: integer format: int64 downlinkToDownlinkIntervalSec: type: integer format: int64 imagingToDownlinkIntervalSec: type: integer format: int64 downlinkToImagingIntervalSec: type: integer format: int64 minInterRouteIntervalSec: type: integer format: int64 radarConstraints: $ref: '#/components/schemas/RadarStateConstraints' opticsConstraints: $ref: '#/components/schemas/OpticsStateConstraints' required: - spacecraftId - rollMinDeg - rollMaxDeg - pitchMinDeg - pitchMaxDeg - yawMinDeg - yawMaxDeg - imagingMaxDurationPerDaySec - imagingMaxDurationPerOrbitSec - downlinkMaxDurationPerDaySec - downlinkMaxDurationPerOrbitSec - imagingModesPerOrbit - imagingModesPerDay - downlinkModesPerOrbit - downlinkModesPerDay - imagingToImagingIntervalSec - downlinkToDownlinkIntervalSec - imagingToDownlinkIntervalSec - downlinkToImagingIntervalSec - minInterRouteIntervalSec - radarConstraints - opticsConstraints additionalProperties: false PdcmEntry: type: object description: Запись ПДЦМ (позиция/скорость) на момент времени properties: time: type: string format: date-time revolution: type: integer format: int64 vx: type: number format: double vy: type: number format: double vz: type: number format: double x: type: number format: double y: type: number format: double z: type: number format: double required: - time - revolution - vx - vy - vz - x - y - z additionalProperties: false PdcmInterval: type: object description: ПДЦМ на интервал (оперативный или программной орбиты) properties: spacecraftId: type: integer format: int64 begin: type: string format: date-time end: type: string format: date-time entries: type: array items: $ref: '#/components/schemas/PdcmEntry' required: - spacecraftId - begin - end - entries additionalProperties: false UploadSchedule: type: object description: График закладки (основная/корректирующая + интервал планирования) properties: spacecraftId: type: integer format: int64 mainUploadAt: type: string format: date-time correctiveUploadAt: type: string format: date-time planningBegin: type: string format: date-time planningEnd: type: string format: date-time required: - spacecraftId - mainUploadAt - correctiveUploadAt - planningBegin - planningEnd additionalProperties: false SpacecraftInitialConditions: type: object description: Начальные условия КА для расчётов (состояние в момент epoch). properties: spacecraftId: type: integer format: int64 description: Идентификатор КА. epoch: type: string format: date-time description: Момент времени, для которого заданы начальные условия (UTC). frame: type: string description: Система координат/фрейм (например, ECI). default: ECI positionMeters: type: array description: Вектор положения [x,y,z] в метрах в указанной системе координат. items: type: number format: double minItems: 3 maxItems: 3 velocityMetersPerSec: type: array description: Вектор скорости [vx,vy,vz] в м/с в указанной системе координат. items: type: number format: double minItems: 3 maxItems: 3 source: type: string nullable: true description: Источник/поставщик расчёта начальных условий (опционально). version: type: string nullable: true description: Версия/ревизия набора начальных условий (опционально). required: - spacecraftId - epoch - positionMeters - velocityMetersPerSec additionalProperties: false ChangeType: type: string enum: - CREATED - UPDATED - DELETED description: Тип изменения EntityType: type: string description: Тип сущности, которая изменилась enum: - GROUND_STATION - GROUND_STATION_BAN_INTERVALS - SPACECRAFT_STATE_BLOCK - SPACECRAFT_NU - UPLOAD_SCHEDULE - SPACECRAFT_WORKPLAN - CONTROL_TIME ChangeEvent: type: object description: Уведомление о факте изменения данных у поставщика. Сами данные передаются/запрашиваются отдельно. required: - eventId - occurredAt - entityType - entityIds - changeType properties: eventId: type: string format: uuid description: Уникальный идентификатор события occurredAt: type: string format: date-time description: Время изменения у поставщика (UTC/ISO 8601). entityType: $ref: '#/components/schemas/EntityType' entityIds: type: array minItems: 1 items: type: integer format: int64 description: Идентификаторы сущностей, затронутых изменением changeType: $ref: '#/components/schemas/ChangeType' effectiveFrom: type: string format: date-time nullable: true description: (Опционально) начало интервала влияния effectiveTo: type: string format: date-time nullable: true description: (Опционально) конец интервала влияния version: type: string nullable: true description: (Опционально) версия/ревизия данных у поставщика reason: type: string nullable: true description: (Опционально) пояснение причины изменения correlationId: type: string nullable: true description: (Опционально) идентификатор корреляции source: type: string nullable: true description: (Опционально) идентификатор поставщика/источника additionalProperties: false SpacecraftControlTimeEvent: type: object description: Сообщение о приходе (или обновлении) графика управления КА. Все времена — LocalDateTime (без часового пояса). required: - spacecraftId - mainUploadAt - correctionUploadAt - planningBegin - planningEnd properties: spacecraftId: type: integer format: int64 description: Идентификатор КА. mainUploadAt: type: string format: date-time description: Дата-время основной закладки (LocalDateTime, без offset). correctionUploadAt: type: string format: date-time description: Дата-время корректирующей закладки (LocalDateTime, без offset). planningBegin: type: string format: date-time description: Начало интервала планирования (LocalDateTime, без offset). planningEnd: type: string format: date-time description: Конец интервала планирования (LocalDateTime, без offset). additionalProperties: false GroundStationChangeEvent: type: object description: Уведомление о факте изменения данных земной станции (без передачи данных). required: - eventId - occurredAt - changeType - stationId properties: eventId: type: string format: uuid description: Уникальный идентификатор события occurredAt: type: string format: date-time description: Время изменения у поставщика (UTC/ISO 8601). changeType: $ref: '#/components/schemas/ChangeType' stationId: type: integer format: int64 description: Идентификатор земной станции. version: type: string nullable: true description: (Опционально) версия/ревизия данных у поставщика reason: type: string nullable: true description: (Опционально) пояснение причины изменения correlationId: type: string nullable: true description: (Опционально) идентификатор корреляции source: type: string nullable: true description: (Опционально) идентификатор поставщика/источника additionalProperties: false SpacecraftChangeEvent: type: object description: Уведомление о факте изменения данных КА (без передачи данных). required: - eventId - occurredAt - changeType - spacecraftId properties: eventId: type: string format: uuid description: Уникальный идентификатор события occurredAt: type: string format: date-time description: Время изменения у поставщика (UTC/ISO 8601). changeType: $ref: '#/components/schemas/ChangeType' spacecraftId: type: integer format: int64 description: Идентификатор космического аппарата. version: type: string nullable: true description: (Опционально) версия/ревизия данных у поставщика reason: type: string nullable: true description: (Опционально) пояснение причины изменения correlationId: type: string nullable: true description: (Опционально) идентификатор корреляции source: type: string nullable: true description: (Опционально) идентификатор поставщика/источника additionalProperties: false GroundStationChangedPayload: type: object description: Факт изменения параметров земной станции. Payload содержит только идентификатор станции. required: - stationId properties: stationId: type: integer format: int64 description: Идентификатор земной станции. additionalProperties: false SpacecraftChangedPayload: type: object description: Факт изменения параметров КА/НУ/БЛС. Payload содержит только идентификатор аппарата. required: - spacecraftId properties: spacecraftId: type: integer format: int64 description: Идентификатор космического аппарата. additionalProperties: false