(function(root, factory) {
  if (typeof define === 'function' && define.amd) {
    // AMD. Register as an anonymous module.
    define(['ApiClient'], factory);
  } else if (typeof module === 'object' && module.exports) {
    // CommonJS-like environments that support module.exports, like Node.
    module.exports = factory(require('../ApiClient'));
  } else {
    // Browser globals (root is window)
    if (!root.OrbipayPaymentsapiClient) {
      root.OrbipayPaymentsapiClient = {};
    }
    root.OrbipayPaymentsapiClient.ResourceAuditVo = factory(root.OrbipayPaymentsapiClient.ApiClient);
  }
}(this, function(ApiClient) {
  'use strict';




  /**
   * The ResourceAuditVo model module.
   * @module models/ResourceAuditVo
   */

  /**
   * <h3 style="color:red"> This class subject to change without prior notice, Please dont use this class directly. </h3>

   * Constructs a new <code>ResourceAuditVo</code>.
   * @alias module:models/ResourceAuditVo
   * @class
   */
  var exports = function() {
    var _this = this;





  };

  /**
   * Constructs a <code>ResourceAuditVo</code> from a plain JavaScript object, optionally creating a new instance.
   * Copies all relevant properties from <code>data</code> to <code>obj</code> if supplied or a new instance if not.
   * @param {Object} data The plain JavaScript object bearing properties of interest.
   * @param {module:models/ResourceAuditVo} obj Optional instance to populate.
   * @return {module:models/ResourceAuditVo} The populated <code>ResourceAuditVo</code> instance.
   */
  exports.constructFromObject = function(data, obj) {
    if (data) {
      obj = obj || new exports();

      if (data.hasOwnProperty('channel')) {
        obj['channel'] = ApiClient.convertToType(data['channel'], 'String');
      }
      if (data.hasOwnProperty('requestor_type')) {
        obj['requestor_type'] = ApiClient.convertToType(data['requestor_type'], 'String');
      }
      if (data.hasOwnProperty('requestor')) {
        obj['requestor'] = ApiClient.convertToType(data['requestor'], 'String');
      }
      if (data.hasOwnProperty('timestamp')) {
        obj['timestamp'] = ApiClient.convertToType(data['timestamp'], 'String');
      }
    }
    return obj;
  };

  /**
   * The channel through which the API is invoked. Please contact <a href = \"mailto: support@billerpayments.com\">support@billerpayments.com</a> to configure channels.
   * @member {String} channel
   */
  exports.prototype['channel'] = undefined;
  /**
   * If an API is being requested from an application that is being used directly by a customer, like the customer portal and IVR, the requestor_type should be set to \"customer\".</br> If an API is being requested from an application that is being used by third party agents/brokers servicing a customer on behalf of a biller/client, then the requestor_type should be set to \"external_user\". It should be noted that these users would not have logins for the EBPP Portal or Payment Center.
   * @member {module:models/ResourceAuditVo.RequestorTypeEnum} requestor_type
   */
  exports.prototype['requestor_type'] = undefined;
  /**
   * The identifier for the requestor of the API, in EBPP. The value to be passed in the requestor field would depend on the requestor_type.</br> If the requestor_type is \"customer\", the requestor should be the EBPP generated customer id. In the case of self registration, where there is no EBPP generated customer id yet, the requestor should be set to 'guest'.</br> If the requestor_type is \"external_user\", the requestor can be any unique identifier that the client may have for the external agent. If the requestor_type is <b>system</b>, requestor is optional. 
   * @member {String} requestor
   */
  exports.prototype['requestor'] = undefined;
  /**
   * The UTC timestamp, in ISO8601 format, for the moment when the resource got created or modified in EBPP. For e.g., 2019-08-13T09:21:34.359+0000
   * @member {String} timestamp
   */
  exports.prototype['timestamp'] = undefined;


  /**
   * Allowed values for the <code>requestor_type</code> property.
   * @enum {String}
   * @readonly
   */
  exports.RequestorTypeEnum = {
    /**
     * value: "customer"
     * @const
     */
    "customer": "customer",
    /**
     * value: "external_user"
     * @const
     */
    "external_user": "external_user",
    /**
     * value: "client_agent"
     * @const
     */
    "client_agent": "client_agent",
    /**
     * value: "system"
     * @const
     */
    "system": "system"  };


  return exports;
}));