docs: function () {
  
          const paramsConstraints = {
              productName: function (value) {
  
                  if (validate.isEmpty(value)) {
                      return {
                          presence: {
                              message: 'is required'
                          }
                      };
                  }
                  if (!(/\S/).test(value)) {
                      return {
                          format: 'must not contain invalid productName - eg. Space'
                      };
                  }
  
                  return null;
              },
  
              provider: function (value) {
  
                  if (validate.isEmpty(value)) {
                      return {
                          presence: {
                              message: 'is required'
                          }
                      };
                  }
                  if (value) {
                      switch (value) {
                          case _self.PROVIDER.ATHENA:
                          case _self.PROVIDER.MPESA:
                              break;
                          default:
                              return {
                                  format: 'provider has to be one of payments.PROVIDER.*'
                              }
                      }
                  }
  
                  return null;
              },
  
              transferType: function (value) {
  
                  if (validate.isEmpty(value)) {
                      return {
                          presence: {
                              message: 'is required'
                          }
                      };
                  }
                  if (value) {
                      switch (value) {
                          case _self.TRANSFER_TYPE.BUY_GOODS:
                          case _self.TRANSFER_TYPE.PAYBILL:
                          case _self.TRANSFER_TYPE.DISBURSE_FUNDS:
                          case _self.TRANSFER_TYPE.B2B_TRANSFER:
                              break;
                          default:
                              return {
                                  format: 'transferType has to be one of payments.TRANSFER_TYPE.*'
                              }
                      }
                  }
  
                  return null;
              },
  
              currencyCode: function (value) {
  
                  if (validate.isEmpty(value)) {
                      return {
                          presence: {
                              message: 'is required'
                          }
                      };
                  }
  
                  return null;
              },
  
              amount: function (value) {
  
                  if (validate.isEmpty(value)) {
                      return {
                          presence: {
                              message: 'is required'
                          }
                      };
                  }
                  if (!validate.isNumber(value)) {
                      return {
                          format: 'must not contain invalid amount. Must be a number.'
                      };
                  }
  
                  return null;
              },
  
              destinationAccount: function (value) {
  
                  if (validate.isEmpty(value)) {
                      return {
                          presence: {
                              message: 'is required'
                          }
                      };
                  }
  
                  return null;
              },
  
              destinationChannel: function (value) {
  
                  if (validate.isEmpty(value)) {
                      return {
                          presence: {
                              message: 'is required'
                          }
                      };
                  }
  
                  return null;
              },
  
              metadata: function (value) {
                  if (value && !validate.isObject(value)) {
                      return {
                          format: 'metadata need to be a string map; i.e. {"key":"value", "otherKey":"otherValue"}'
                      };
                  }
                  return null;
              },
  
          };
  
          const error = validate(options, paramsConstraints);
  
          const makeErrorMessage = function (error) {
              let msg = "";
              for (let k in error) {
                  msg += error[k] + "; ";
              }
              validationError = new Error(msg);
          }
  
          if (error) {
              makeErrorMessage(error);
          }
  
      }