openapi: 3.0.0
info:
  title: Activity AI Sales Order API
  description: API for managing AI-assisted sales order activities
  version: 1.0.0
  contact:
    name: Repzo
    url: https://repzo.com

servers:
  - url: https://sv.api.repzo.me
    description: Production server
  - url: https://staging.sv.api.repzo.me
    description: Staging server

tags:
  - name: Activity AI Sales Order
    description: Operations related to AI-assisted sales order activities

paths:
  /activity-ai-sales-order:
    get:
      tags:
        - Activity AI Sales Order
      summary: Get all AI sales order activities
      description: Retrieve a list of all AI sales order activities with optional filtering and pagination
      parameters:
        - name: limit
          in: query
          description: Maximum number of records to return
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 50
        - name: offset
          in: query
          description: Number of records to skip for pagination
          required: false
          schema:
            type: integer
            minimum: 0
            default: 0
        - name: sort
          in: query
          description: Field to sort by
          required: false
          schema:
            type: string
        - name: order
          in: query
          description: Sort order (asc or desc)
          required: false
          schema:
            type: string
            enum: [asc, desc]
            default: desc
        - name: filter
          in: query
          description: Filter conditions in JSON format
          required: false
          schema:
            type: string
        - name: search
          in: query
          description: Search term for text fields
          required: false
          schema:
            type: string
      responses:
        "200":
          description: List of AI sales order activities retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/ActivityAiSalesOrder"
                  total:
                    type: integer
                    description: Total number of records
        "400":
          description: Bad request
        "401":
          description: Unauthorized
        "500":
          description: Internal server error
    post:
      tags:
        - Activity AI Sales Order
      summary: Create a new AI sales order activity
      description: Create a new AI sales order activity with the provided data
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ActivityAiSalesOrderInput"
      responses:
        "201":
          description: AI sales order activity created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    $ref: "#/components/schemas/ActivityAiSalesOrder"
        "400":
          description: Bad request
        "401":
          description: Unauthorized
        "500":
          description: Internal server error

  /activity-ai-sales-order/{id}:
    get:
      tags:
        - Activity AI Sales Order
      summary: Get AI sales order activity by ID
      description: Retrieve a specific AI sales order activity by its ID
      parameters:
        - name: id
          in: path
          required: true
          description: AI sales order activity ID
          schema:
            type: string
      responses:
        "200":
          description: AI sales order activity retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    $ref: "#/components/schemas/ActivityAiSalesOrder"
        "404":
          description: AI sales order activity not found
        "401":
          description: Unauthorized
        "500":
          description: Internal server error
    put:
      tags:
        - Activity AI Sales Order
      summary: Update AI sales order activity
      description: Update an existing AI sales order activity with new data
      parameters:
        - name: id
          in: path
          required: true
          description: AI sales order activity ID
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ActivityAiSalesOrderInput"
      responses:
        "200":
          description: AI sales order activity updated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    $ref: "#/components/schemas/ActivityAiSalesOrder"
        "400":
          description: Bad request
        "404":
          description: AI sales order activity not found
        "401":
          description: Unauthorized
        "500":
          description: Internal server error
    delete:
      tags:
        - Activity AI Sales Order
      summary: Delete AI sales order activity
      description: Delete an existing AI sales order activity
      parameters:
        - name: id
          in: path
          required: true
          description: AI sales order activity ID
          schema:
            type: string
      responses:
        "200":
          description: AI sales order activity deleted successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: AI sales order activity deleted successfully
        "404":
          description: AI sales order activity not found
        "401":
          description: Unauthorized
        "500":
          description: Internal server error

  /activity-ai-sales-order/{id}/generate:
    post:
      tags:
        - Activity AI Sales Order
      summary: Generate AI recommendations
      description: Generate AI-powered sales order recommendations for the activity
      parameters:
        - name: id
          in: path
          required: true
          description: AI sales order activity ID
          schema:
            type: string
      responses:
        "200":
          description: AI recommendations generated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      recommendations:
                        type: array
                        items:
                          type: object
                          properties:
                            product:
                              type: string
                            quantity:
                              type: integer
                            confidence:
                              type: number
                              format: double
                            reason:
                              type: string
        "404":
          description: AI sales order activity not found
        "401":
          description: Unauthorized
        "500":
          description: Internal server error

components:
  schemas:
    ActivityAiSalesOrder:
      type: object
      properties:
        _id:
          type: string
          description: Unique identifier for the AI sales order activity
          example: "60f7b1b3e4b0e8b3f8b3f8b3"
        client:
          type: string
          description: Client ID
          example: "60f7b1b3e4b0e8b3f8b3f8b4"
        rep:
          type: string
          description: Sales representative ID
          example: "60f7b1b3e4b0e8b3f8b3f8b5"
        activityType:
          type: string
          enum:
            [
              recommendation,
              order-analysis,
              demand-forecasting,
              cross-sell,
              upsell,
            ]
          description: Type of AI activity
          example: "recommendation"
        inputData:
          type: object
          properties:
            historicalOrders:
              type: array
              items:
                type: object
                properties:
                  orderId:
                    type: string
                  date:
                    type: string
                    format: date-time
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        product:
                          type: string
                        quantity:
                          type: integer
                        price:
                          type: number
                          format: double
            clientPreferences:
              type: object
              additionalProperties: true
              description: Client preferences and behavior patterns
            marketData:
              type: object
              additionalProperties: true
              description: Market trends and seasonal data
            inventoryLevels:
              type: object
              additionalProperties: true
              description: Current inventory levels
        aiModel:
          type: object
          properties:
            name:
              type: string
              description: AI model name
              example: "sales-recommender-v2"
            version:
              type: string
              description: Model version
              example: "2.1.0"
            confidence:
              type: number
              format: double
              minimum: 0
              maximum: 1
              description: Overall model confidence
            parameters:
              type: object
              additionalProperties: true
              description: Model parameters used
        recommendations:
          type: array
          items:
            type: object
            properties:
              product:
                type: string
                description: Product ID
              productName:
                type: string
                description: Product name
              quantity:
                type: integer
                minimum: 1
                description: Recommended quantity
              price:
                type: number
                format: double
                minimum: 0
                description: Recommended price
              confidence:
                type: number
                format: double
                minimum: 0
                maximum: 1
                description: Confidence score for this recommendation
              reason:
                type: string
                description: AI reasoning for this recommendation
              category:
                type: string
                enum: [frequent-buy, seasonal, cross-sell, upsell, new-product]
                description: Recommendation category
              priority:
                type: integer
                minimum: 1
                maximum: 10
                description: Priority ranking
        insights:
          type: object
          properties:
            buyingPatterns:
              type: array
              items:
                type: string
              description: Identified buying patterns
            seasonality:
              type: object
              additionalProperties: true
              description: Seasonal trends identified
            riskFactors:
              type: array
              items:
                type: string
              description: Potential risks identified
            opportunities:
              type: array
              items:
                type: string
              description: Sales opportunities identified
        status:
          type: string
          enum: [processing, completed, failed, cancelled]
          default: processing
          description: Processing status
        processingTime:
          type: number
          format: double
          description: Processing time in seconds
        accuracy:
          type: object
          properties:
            historical:
              type: number
              format: double
              minimum: 0
              maximum: 1
              description: Historical accuracy of similar predictions
            estimated:
              type: number
              format: double
              minimum: 0
              maximum: 1
              description: Estimated accuracy for this prediction
        feedback:
          type: object
          properties:
            userRating:
              type: integer
              minimum: 1
              maximum: 5
              description: User rating of recommendations
            acceptedRecommendations:
              type: array
              items:
                type: string
              description: IDs of accepted recommendations
            rejectedRecommendations:
              type: array
              items:
                type: string
              description: IDs of rejected recommendations
            comments:
              type: string
              description: User feedback comments
        generatedOrder:
          type: object
          properties:
            orderId:
              type: string
              description: Generated order ID if order was created
            items:
              type: array
              items:
                type: object
                properties:
                  product:
                    type: string
                  quantity:
                    type: integer
                  price:
                    type: number
                    format: double
            totalAmount:
              type: number
              format: double
              description: Total order amount
        metadata:
          type: object
          additionalProperties: true
          description: Additional metadata
        createdAt:
          type: string
          format: date-time
          description: Record creation timestamp
          example: "2023-01-15T08:00:00Z"
        updatedAt:
          type: string
          format: date-time
          description: Record last update timestamp
          example: "2023-01-15T10:30:00Z"
      required:
        - client
        - rep
        - activityType

    ActivityAiSalesOrderInput:
      type: object
      properties:
        client:
          type: string
          description: Client ID
          example: "60f7b1b3e4b0e8b3f8b3f8b4"
        rep:
          type: string
          description: Sales representative ID
          example: "60f7b1b3e4b0e8b3f8b3f8b5"
        activityType:
          type: string
          enum:
            [
              recommendation,
              order-analysis,
              demand-forecasting,
              cross-sell,
              upsell,
            ]
          description: Type of AI activity
          example: "recommendation"
        inputData:
          type: object
          properties:
            historicalOrders:
              type: array
              items:
                type: object
                properties:
                  orderId:
                    type: string
                  date:
                    type: string
                    format: date-time
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        product:
                          type: string
                        quantity:
                          type: integer
                        price:
                          type: number
                          format: double
            clientPreferences:
              type: object
              additionalProperties: true
              description: Client preferences and behavior patterns
            marketData:
              type: object
              additionalProperties: true
              description: Market trends and seasonal data
            inventoryLevels:
              type: object
              additionalProperties: true
              description: Current inventory levels
        aiModel:
          type: object
          properties:
            name:
              type: string
              description: AI model name
              example: "sales-recommender-v2"
            version:
              type: string
              description: Model version
              example: "2.1.0"
            parameters:
              type: object
              additionalProperties: true
              description: Model parameters used
        feedback:
          type: object
          properties:
            userRating:
              type: integer
              minimum: 1
              maximum: 5
              description: User rating of recommendations
            acceptedRecommendations:
              type: array
              items:
                type: string
              description: IDs of accepted recommendations
            rejectedRecommendations:
              type: array
              items:
                type: string
              description: IDs of rejected recommendations
            comments:
              type: string
              description: User feedback comments
        metadata:
          type: object
          additionalProperties: true
          description: Additional metadata
      required:
        - client
        - rep
        - activityType

  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: api-key

security:
  - ApiKeyAuth: []
