# Required Schema for Ingestion
main_ingest_body:
  u_id:
    type: string
    example: testUserId
    summary: user Id in the app.
  d_id:
    type: string
    example: testDeviceId
    summary: device Id of the user.
  ip:
    type: string
    example: 0.0.0.0
    summary: ip address of the user's device.
  ol:
    type: boolean
    example: false
    summary: connectivity status of the device when event was triggered.
  up:
    type: int
    example: 2300
    summary: upload speed for device when log was triggered. In kbps.
  dn:
    type: int
    example: 2300
    summary: download speed for device when log was triggered. In kbps.
  os:
    type: string
    example: android(30) or macIntel
    summary: device, app is currently running on.
  sdk:
    type: string
    example: js/1.0.0-beta.5
    summary: version of the sdk used to log.
  ts:
    type: string
    example: 2022-04-27T10:30:06.239+02:00
    summary: timestamp when the event is triggered, RFC 3339 format.
  block:
    type: string
    example: core
    summary: content block for the event being logged. default is core.
    enum: [ core, e-commerce, e-learning, loyalty, payment ]
  type:
    type: string
    example: app
    summary: type of event being logged.
    enum: [ app, cart, cancel_checkout, checkout, deferred_payment, delivery, exam, identify, item, level, media, milestone, module, nudge_response, page, payment_method, promo, question, rate, search ]
  props:
    type: object
    summary: props depends on different event types based. it can contain one or more elements as a part of the property. Details for each event type are provided below.
  required:
    - u_id
    - d_id
    - ol
    - up
    - dn
    - os
    - sdk
    - ts
    - block
    - type
    - props

#--------------------------------------------------------------------------------------------------
# SDK is divided into multiple content blocks based on the app niche. This includes: core, e-commerce, e-learning, payments and loyalty. Below is the details for the events in each content block:

# Blocks and their details

blocks:
  core:
    display_name: Core
    description: "required tracking events for basic navigation"
  e-commerce:
    display_name: E-commerce
    description: "events for online marketplace platforms"
  e-learning:
    display_name: E-learning
    description: "events for online learning platforms"
  payment:
    display_name: Payment
    description: "events for in-app payments"
  loyalty:
    display_name: Loyalty
    description: "events for reward systems"


data_types:
  itemObject:
    type: object
    properties:
      id:
        type: string
        example: itemId
        summary: Id for the item.
      type:
        type: string
        example: drug
        summary: type of the item in the log.
        enum: [ drug, blood, oxygen, medical_equipment, electronics, clothing, book, misc ]
      quantity:
        type: int
        example: 1
        summary: quantity of the item, default is 1.
      price:
        type: float
        example: 12.3
        summary: total price for the item in log (unit_price * quantity).
      currency:
        type: string
        example: USD
        summary: currency of the item (ISO 4217).
      stock_status:
        type: string
        example: in_stock
        summary: to reflect the stock status of the item.
        enum: [ in_stock, low_stock, out_of_stock ]
      promo_id:
        type: string
        example: testPromoId
        summary: id for the promo if any applied on the item.
      meta:
        type: hashMap
        example: cross_matching:false
        summary: additional properties required for item with types as blood and oxygen. Also when the event type is checkout.
    required:
      - id
      - type
      - quantity
      - price
      - currency
  itemTypeObject:
    type: object
    properties:
      id:
        type: string
        example: itemId
        summary: Id for the item.
      type:
        type: string
        example: drug
        summary: type of the item in the log.
        enum: [ drug, blood, oxygen, medical_equipment, electronics, clothing, book, misc ]
      meta:
        type: hashMap
        example: cross_matching:false
        summary: additional properties required for item with types as blood and oxygen. Also when the event type is checkout.
    required:
      - id
      - type
  bloodMetaObject:
    type: object
    properties:
      cross_matching:
        type: boolean
        example: false
        summary: if the blood order also have a cross matching add-on enabled.
      temperature_strips:
        type: boolean
        example: false
        summary: if the blood order have temperature strip add-on enabled.
      extra_tests:
        type: boolean
        example: false
        summary: if the blood order have extra tests add-on enabled.
      reason:
        type: string
        example: General Surgery
        summary: reason for which blood is being purchased.
    required:
      - cross_matching
      - temperature_strips
      - extra_tests
      - reason
  oxygenMetaObject:
    type: object
    properties:
      order_type:
        type: string
        example: refill
        summary: type of the order for oxygen, refill, exchange or new cylinder.
      reason:
        type: string
        example: General Surgery
        summary: reason for which the oxygen is being purchased.
    required:
      - order_type
      - reason

#--------------------------------------------------------------------------------------------------
# Events related to content blocks

# CORE [app, page, identify, search, media, push, rate]
events:
  app:
    summary: To log App usage related events. [Auto Triggered].
    block: core
    props:
      type: object
      properties:
        action:
          type: string
          example: open
          summary: logs the operation on the app, if app is opened, closed or moved the background.
          enum: [ open, close, background, resume ]
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - action
  page:
    summary: To log page viewings related events. [Auto Triggered].
    block: core
    props:
      type: object
      properties:
        path:
          type: string
          example: ai.causalfoundry.package OR causalfoundry.ai/package
          summary: the path for page currently being shown to the user.
        title:
          type: string
          example: HomePage
          summary: page or class name for the screen currently being shown.
        duration:
          type: float
          example: 3.4
          summary: the time user spent on the screen in seconds.
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - path
        - title
        - duration
  identify:
    summary: To log user auth related events. signUp, signIn and signOut.
    block: core
    props:
      type: object
      properties:
        action:
          type: string
          example: login
          summary: identify action being logged.
          enum: [ register, login, logout ]
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - action
  search:
    summary: To log search related events.
    block: core
    props:
      type: object
      properties:
        id:
          type: string
          example: testSearchId
          summary: special id associated with that search.
        query:
          type: string
          example: Hello
          summary: query the user is searching.
        results_list:
          type: itemTypeObject[]
          summary: list of ids and types for the elements shown in the search results.
        filter:
          type: hashMap
          example: maxPrice:100
          summary: hashmap object of filters applied to that search.
        page:
          type: int
          example: 1
          summary: page number for search on which user is currently at.
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - id
        - query
        - results_list
        - page # defaulted to 1
  media:
    summary: To log media related events.
    block: core
    props:
      type: object
      properties:
        id:
          type: string
          example: video_testMediaId
          summary: id associated with that media concatenated with media type.
        id_source:
          type: string
          example: testMediaId
          summary: id associated with that media.
        type:
          type: string
          example: video
          summary: type of media in question.
          enum: [ video, audio, image ]
        action:
          type: string
          example: play
          summary: actions associated to the media. For image, default is play which refers to app open.
          enum: [ impression, finish, pause, play, seek ]
        time:
          type: float
          example: 1354000
          summary: time in milliseconds for the media when action is performed.
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - id
        - type
        - action
        - time
  rate:
    summary: to log events related to providing rate experience for the elements in the app.
    block: core
    props:
      type: object
      properties:
        rate_value:
          type: float
          example: 4.5
          summary: rate value for the element, range is 0 to 5 (both inclusive).
        type:
          type: string
          example: order
          summary: type of the element the rate is asked for.
          enum: [ app, blood, drug, exam, media, medical_equipment, order, oxygen ]
        subject_id:
          type: string
          example: elementId
          summary: id of the element being rated.
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - rate_value
        - type
        - subject_id
  nudge_response:
    summary: To log user response to nudges i.e. push notifications, in-app messages. [Auto Triggered].
    block: core
    props:
      type: object
      properties:
        nudge_id:
          type: int
          example: nudgeId
          summary: id associated with that nudge
        type:
          type: string
          example: push_notification
          summary: type of nudge the response is for. Should be same as provided by type in the request nudge API.
        response:
          type: object
          summary: response object containing actions for the nudge shown. This can vary based on the type of the nudge shown to the user.
          properties:
            action:
              type: string
              example: open
              summary: type of action performed on the push notification
              enum: [ open, discard, block ]
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - nudge_id
        - type
        - response
  #--------------------------------------------------------------------------------------------------

  # E-COMMERCE [item, cart, checkout, delivery]

  # Below it the item object used in the following events in the e-commerce.

  item:
    summary: To log events related to item view, impressions or if user opened the details.
    block: e-commerce
    props:
      type: object
      properties:
        action:
          type: string
          example: view
          summary: action performed on the item.
          enum: [ add_favorite, add_reminder, detail, impression, remove_favorite, remove_reminder, remove_reminder_auto, view ]
        item:
          type: itemObject
          summary: details for the item in log.
        search_id:
          type: string
          example: testSearchId
          summary: helps with logging search if if the item is showed based on search.
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - action
        - item
  cart:
    summary: To log events related to cart in the app.
    block: e-commerce
    props:
      type: object
      properties:
        id:
          type: string
          example: cartId
          summary: id of the Cart on which events are being performed.
        action:
          type: string
          example: add_item
          summary: action performed on the item in cart.
          enum: [ add_item, remove_item ]
        item:
          type: itemObject
          summary: details for the item in log.
        cart_price:
          type: float
          example: 12.0
          summary: total price of the cart.
        currency:
          type: string
          example: USD
          summary: currency code for the price of the whole cart. Currency in itemObject and here should be same.
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - id
        - action
        - item
        - cart_price
        - currency
  checkout:
    summary: To log events related to checkout in the app.
    block: e-commerce
    props:
      type: object
      properties:
        id:
          type: string
          example: orderId
          summary: id of the order is checkout is successful else cart id if the checkout is not successful.
        cart_id:
          type: string
          example: cartId
          summary: id of the Cart on which events are being performed.
        is_successful:
          type: boolean
          example: true
          summary: reflect if the checkout is successful or not.
        items:
          type: itemObject[]
          summary: list of items in the checkout.
        cart_price:
          type: float
          example: 12.0
          summary: total price of the checkout.
        currency:
          type: string
          example: USD
          summary: currency code for the price of the checkout. Currency in all itemObject and here should be same.
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - id
        - is_successful
        - items
        - cart_id
        - cart_price
        - currency
  delivery:
    summary: To log events related to delivery of the order.
    block: e-commerce
    props:
      type: object
      properties:
        id:
          type: string
          example: deliveredId
          summary: Id for the delivery.
        action:
          type: string
          example: delivered
          summary: action on the delivery of the element.
          enum: [ delivered ]
        order_id:
          type: string
          example: orderId
          summary: id of the order being delivered.
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - id
        - action
        - order_id
  cancel_checkout:
    summary: is used to log the event when the order/cart is canceled.
    block: e-commerce
    props:
      type: object
      properties:
        id:
          type: string
          example: testId
          summary: Id for the order or cart being discarded or cancelled.
        type:
          type: string
          example: cart
          summary: type of the checkout that is being cancelled either cart or order.
          enum: [ cart, order ]
        items:
          type: itemTypeObject[]
          summary: list of items in the checkout.
        reason:
          type: string
          example: Process Too Long
          summary: reason for which the order/cart is being cancelled/discarded.
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - id
        - type
        - items
        - reason
  #--------------------------------------------------------------------------------------------------

  # E-LEARNING [module, exam, question]
  module:
    summary: To log events related to module of e-learning section.
    block: e-learning
    props:
      type: object
      properties:
        id:
          type: string
          example: moduleId
          summary: id of the module.
        action:
          type: string
          example: view
          summary: action performed on the module.
          enum: [ view ]
        progress:
          type: int
          example: 75
          summary: completion progress percentage.
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - id
        - action
  exam:
    summary: To log events related to exam of e-learning section.
    block: e-learning
    props:
      type: object
      properties:
        id:
          type: string
          example: examId
          summary: id of the exam.
        action:
          type: string
          example: start
          summary: action performed on the exam.
          enum: [ start, submit, result ]
        duration:
          type: int
          example: 75
          summary: time spent on the exam, in seconds.
        score:
          type: float
          example: 90.5
          summary: score achieved for the exam.
        is_passed:
          type: boolean
          example: true
          summary: if user passed the exam?
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - id
        - action
        - duration (action = submit)
        - score (action = result)
        - is_passed (action = result)
  question:
    summary: To log events related to question of e-learning section.
    block: e-learning
    props:
      type: object
      properties:
        id:
          type: string
          example: questionId
          summary: id of the question.
        exam_id:
          type: string
          example: examId
          summary: id of the exam from which the question is asked.
        action:
          type: string
          example: answer
          summary: action performed on the question.
          enum: [ answer, skip ]
        answer_id:
          type: string
          example: answerId
          summary: Id for the answer to the question.
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - id
        - exam_id
        - action
        - answer_id (action = answer)
  #--------------------------------------------------------------------------------------------------

  # LOYALTY [level, milestone]
  level:
    summary: To log events related to updating user level in app.
    block: loyalty
    props:
      type: object
      properties:
        prev_level:
          type: int
          example: 65
          summary: previous/old level score of the user.
        new_level:
          type: int
          example: 100
          summary: new level score of the user.
        module_id:
          type: string
          example: moduleId
          summary: Id for the module if level update is related to e-learning.
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - prev_level
        - new_level
  milestone:
    summary: To log events related to updating user milestone in app.
    block: loyalty
    props:
      type: object
      properties:
        id:
          type: string
          example: milestoneId
          summary: id for the milestone.
        action:
          type: string
          example: achieved
          summary: action regarding user milestone.
          enum: [ achieved ]
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - id
        - action
  promo:
    summary: is to log the events associated of the promo lists and promo items and when they are clicked on.
    block: loyalty
    props:
      type: object
      properties:
        id:
          type: string
          example: promoId
          summary: id for the Promo.
        action:
          type: string
          example: apply
          summary: action regarding promo event, if the event is triggered for viewing promo or applying promo on the item.
          enum: [ view, apply ]
        title:
          type: string
          example: buy 3 and get 10% off
          summary: promotional title for the promo.
        type:
          type: string
          example: add_to_cart
          summary: type of the promo that if it is related to add the product in cart or for coupon.
          enum: [ add_to_cart, coupon ]
        items:
          type: itemTypeObject[]
          summary: list of items in the promo.
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - id
        - action
  #--------------------------------------------------------------------------------------------------

  # PAYMENT [deferred_payment]
  deferred_payment:
    summary: To log events related to payments in uses cases where Buy Now Pay Later is implemented.
    block: payment
    props:
      type: object
      properties:
        id:
          type: string
          example: paymentId
          summary: id for the payment.
        order_id:
          type: string
          example: orderId
          summary: id for the order payment is made for.
        action:
          type: string
          example: payment_processed
          summary: action regarding payment.
          enum: [ payment_processed ]
        type:
          type: string
          example: bank_transfer
          summary: method of payment being selected for the payment.
          enum: [ bank_transfer, cheque, cod, credit, pos, bank_card, other ]
        payment_amount:
          type: float
          example: 15
          summary: amount for which the payment is made.
        account_balance:
          type: float
          example: 130
          summary: current account balance for user after payment amount is added.
        currency:
          type: string
          example: USD
          summary: currency of the payment being made (ISO 4217).
        is_successful:
          type: boolean
          example: true
          summary: boolean to represent if the payment is successful or not.
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - id
        - action
        - order_id
        - type
        - account_balance
        - payment_amount
        - currency
  payment_method:
    summary: is to log events for payments. Which method of the payment is selected for the order.
    block: payment
    props:
      type: object
      properties:
        order_id:
          type: string
          example: orderId
          summary: id for the order payment is made for.
        type:
          type: string
          example: bank_transfer
          summary: method of payment being selected for the payment.
          enum: [ bank_transfer, cheque, cod, credit, pos, bank_card, other ]
        payment_amount:
          type: float
          example: 15
          summary: amount for which the payment is made.
        currency:
          type: string
          example: USD
          summary: currency of the payment being made (ISO 4217).
        meta:
          type: hashMap
          example: appName:causalfoundry
          summary: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
      required:
        - order_id
        - type
        - payment_amount
        - currency
#--------------------------------------------------------------------------------------------------
