---
openapi: 3.0.0
info:
  title: Omnicomm Clickhouse API specification
  description: Omnicomm Clickhouse API specification
  version: "1.0"
servers:
- url: /v1
tags:
- name: Временные ряды
paths:
  /reportdata/timeseries/{registratorId}:
    post:
      tags:
      - Временные ряды
      summary: Значения временных рядов данных КО за период
      description: "Возвращает упорядоченные по времени наборы телематических данных (таблица emdd), а также результат обработки (преобразование по функции, аггрегация и др) этиswх данных. В частности возвращает  сырые и сглаженные (опционально) значения объема топлива в емкостях КО за период по ID КО, списку ID емкостей. Сырой объем для емкости в момент времени рассчитывается по данным записей таблицы emdd (телеметрия КО) с использованием индивидуальных тарировочных таблиц на каждый период действия тарировочной таблицы по данным сервиса профилей COPS. Бизнес-правило (алгоритм) расчета описано в 5.1.2 Тарировка уровня топлива. В процессе чтения тарировочных таблиц должны производится вычисления соответствующих кусочно-линейных функций (объектов интерполяции) аналогично реализации в NCS. Функции должны хранится в памяти в течении времени расчета и затем удаляться. Ограничения текущей версии: 1. Поскольку в рамках проекта нет требования по поддержке хранения и применения истории изменния профиля КО, то для расчета используется тарировочная таблица из текущего актуального профиля КО, имеющегося в в NCS в кэширующей БД профилей (Aerospike). Т.е. чтение производится не из COPS, а из Aerospike NCS. 2.Расчет сглаженного объема не производится. Сглаженный объем не возвращается. Соответствующий признак в запросе не обрабатывается, интерпретируется как \"false\". Сглаженный уровень не возвращается."
      externalDocs:
        description: Подробнее
        url: http://wiki.omnicomm.ru/pages/viewpage.action?pageId=12880149
      parameters:
      - name: registratorId
        in: path
        description: Идентификатор КО
        required: true
        style: simple
        explode: false
        schema:
          type: integer
      - name: dateFrom
        in: query
        description: Дата начала периода
        required: true
        style: form
        explode: true
        schema:
          type: integer
          format: int64
      - name: dateTo
        in: query
        description: Дата окончания периода
        required: true
        style: form
        explode: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Параметры запроса
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TimeseriesQueryParams'
        required: true
      responses:
        "200":
          description: Возвращаемые данные
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TimeseriesResponse'
components:
  schemas:
    Filter:
      type: object
      additionalProperties:
        type: integer
    Column:
      type: object
      properties:
        aggregation:
          uniqueItems: true
          type: array
          items:
            type: string
        filter:
          type: array
          items:
            $ref: '#/components/schemas/Filter'
        sort:
          type: string
          enum:
          - asc
          - desc
    TimeseriesQueryParams:
      type: object
      properties:
        columns:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/Column'
        pageNum:
          type: integer
        rowsPerPage:
          type: integer
        showLastPage:
          type: boolean
        closestEventDate:
          type: integer
          format: int64
      description: Требуемые наборы данных
      example:
        columns:
          lls_code_1:
            aggregation:
            - avg
            filter:
              gt: 1000
              lt: 2000
            sort: asc
          lls_code_2:
            aggregation:
            - avg
            sort: asc
          lls_code_3: {}
          speed: {}
        pageNum: 1
        rowsPerPage: 100
        showLastPage: false
        closestEventDate: 123456789
    TimeseriesResponse:
      required:
      - header
      - pageNum
      - pagesCount
      - rows
      type: object
      properties:
        data:
          $ref: '#/components/schemas/TimeseriesResponse_data'
      description: Необязательные наборы возвращаемых данных
      example:
        data:
          header:
          - lls_code_1
          - lls_code_2
          - lls_code_3
          - speed
          rows:
            "1468528810":
            - 100
            - 200
            - 250
            - 50
            "1468528840":
            - 120
            - 220
            - 290
            - 50
            "1468528870":
            - 100
            - 140
            - 300
            - 50
          totals:
            lls_code_1:
              avg: 105
              sum: 320
            lls_code_2:
              min: 140
          pageNum: 1
          pagesCount: 20
    TimeseriesResponse_data:
      type: object
      properties:
        header:
          uniqueItems: true
          type: array
          items:
            type: string
        rows:
          type: object
          additionalProperties:
            type: array
            items:
              type: integer
        totals:
          type: object
          additionalProperties:
            type: object
            additionalProperties:
              type: integer
        pageNum:
          type: integer
        pagesCount:
          type: integer
