com.increase.api.models.AchTransferCreateParams.kt Maven / Gradle / Ivy
// File generated from our OpenAPI spec by Stainless.
package com.increase.api.models
import com.fasterxml.jackson.annotation.JsonAnyGetter
import com.fasterxml.jackson.annotation.JsonAnySetter
import com.fasterxml.jackson.annotation.JsonCreator
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
import com.increase.api.core.Enum
import com.increase.api.core.ExcludeMissing
import com.increase.api.core.JsonField
import com.increase.api.core.JsonValue
import com.increase.api.core.NoAutoDetect
import com.increase.api.core.http.Headers
import com.increase.api.core.http.QueryParams
import com.increase.api.core.toImmutable
import com.increase.api.errors.IncreaseInvalidDataException
import com.increase.api.models.*
import java.time.LocalDate
import java.util.Objects
class AchTransferCreateParams
constructor(
private val accountId: String,
private val amount: Long,
private val statementDescriptor: String,
private val accountNumber: String?,
private val addenda: Addenda?,
private val companyDescriptiveDate: String?,
private val companyDiscretionaryData: String?,
private val companyEntryDescription: String?,
private val companyName: String?,
private val destinationAccountHolder: DestinationAccountHolder?,
private val externalAccountId: String?,
private val funding: Funding?,
private val individualId: String?,
private val individualName: String?,
private val preferredEffectiveDate: PreferredEffectiveDate?,
private val requireApproval: Boolean?,
private val routingNumber: String?,
private val standardEntryClassCode: StandardEntryClassCode?,
private val transactionTiming: TransactionTiming?,
private val additionalHeaders: Headers,
private val additionalQueryParams: QueryParams,
private val additionalBodyProperties: Map,
) {
fun accountId(): String = accountId
fun amount(): Long = amount
fun statementDescriptor(): String = statementDescriptor
fun accountNumber(): String? = accountNumber
fun addenda(): Addenda? = addenda
fun companyDescriptiveDate(): String? = companyDescriptiveDate
fun companyDiscretionaryData(): String? = companyDiscretionaryData
fun companyEntryDescription(): String? = companyEntryDescription
fun companyName(): String? = companyName
fun destinationAccountHolder(): DestinationAccountHolder? = destinationAccountHolder
fun externalAccountId(): String? = externalAccountId
fun funding(): Funding? = funding
fun individualId(): String? = individualId
fun individualName(): String? = individualName
fun preferredEffectiveDate(): PreferredEffectiveDate? = preferredEffectiveDate
fun requireApproval(): Boolean? = requireApproval
fun routingNumber(): String? = routingNumber
fun standardEntryClassCode(): StandardEntryClassCode? = standardEntryClassCode
fun transactionTiming(): TransactionTiming? = transactionTiming
internal fun getBody(): AchTransferCreateBody {
return AchTransferCreateBody(
accountId,
amount,
statementDescriptor,
accountNumber,
addenda,
companyDescriptiveDate,
companyDiscretionaryData,
companyEntryDescription,
companyName,
destinationAccountHolder,
externalAccountId,
funding,
individualId,
individualName,
preferredEffectiveDate,
requireApproval,
routingNumber,
standardEntryClassCode,
transactionTiming,
additionalBodyProperties,
)
}
internal fun getHeaders(): Headers = additionalHeaders
internal fun getQueryParams(): QueryParams = additionalQueryParams
@JsonDeserialize(builder = AchTransferCreateBody.Builder::class)
@NoAutoDetect
class AchTransferCreateBody
internal constructor(
private val accountId: String?,
private val amount: Long?,
private val statementDescriptor: String?,
private val accountNumber: String?,
private val addenda: Addenda?,
private val companyDescriptiveDate: String?,
private val companyDiscretionaryData: String?,
private val companyEntryDescription: String?,
private val companyName: String?,
private val destinationAccountHolder: DestinationAccountHolder?,
private val externalAccountId: String?,
private val funding: Funding?,
private val individualId: String?,
private val individualName: String?,
private val preferredEffectiveDate: PreferredEffectiveDate?,
private val requireApproval: Boolean?,
private val routingNumber: String?,
private val standardEntryClassCode: StandardEntryClassCode?,
private val transactionTiming: TransactionTiming?,
private val additionalProperties: Map,
) {
/** The Increase identifier for the account that will send the transfer. */
@JsonProperty("account_id") fun accountId(): String? = accountId
/**
* The transfer amount in USD cents. A positive amount originates a credit transfer pushing
* funds to the receiving account. A negative amount originates a debit transfer pulling
* funds from the receiving account.
*/
@JsonProperty("amount") fun amount(): Long? = amount
/**
* A description you choose to give the transfer. This will be saved with the transfer
* details, displayed in the dashboard, and returned by the API. If `individual_name` and
* `company_name` are not explicitly set by this API, the `statement_descriptor` will be
* sent in those fields to the receiving bank to help the customer recognize the transfer.
* You are highly encouraged to pass `individual_name` and `company_name` instead of relying
* on this fallback.
*/
@JsonProperty("statement_descriptor")
fun statementDescriptor(): String? = statementDescriptor
/** The account number for the destination account. */
@JsonProperty("account_number") fun accountNumber(): String? = accountNumber
/**
* Additional information that will be sent to the recipient. This is included in the
* transfer data sent to the receiving bank.
*/
@JsonProperty("addenda") fun addenda(): Addenda? = addenda
/**
* The description of the date of the transfer, usually in the format `YYMMDD`. This is
* included in the transfer data sent to the receiving bank.
*/
@JsonProperty("company_descriptive_date")
fun companyDescriptiveDate(): String? = companyDescriptiveDate
/**
* The data you choose to associate with the transfer. This is included in the transfer data
* sent to the receiving bank.
*/
@JsonProperty("company_discretionary_data")
fun companyDiscretionaryData(): String? = companyDiscretionaryData
/**
* A description of the transfer. This is included in the transfer data sent to the
* receiving bank.
*/
@JsonProperty("company_entry_description")
fun companyEntryDescription(): String? = companyEntryDescription
/**
* The name by which the recipient knows you. This is included in the transfer data sent to
* the receiving bank.
*/
@JsonProperty("company_name") fun companyName(): String? = companyName
/** The type of entity that owns the account to which the ACH Transfer is being sent. */
@JsonProperty("destination_account_holder")
fun destinationAccountHolder(): DestinationAccountHolder? = destinationAccountHolder
/**
* The ID of an External Account to initiate a transfer to. If this parameter is provided,
* `account_number`, `routing_number`, and `funding` must be absent.
*/
@JsonProperty("external_account_id") fun externalAccountId(): String? = externalAccountId
/** The type of the account to which the transfer will be sent. */
@JsonProperty("funding") fun funding(): Funding? = funding
/** Your identifier for the transfer recipient. */
@JsonProperty("individual_id") fun individualId(): String? = individualId
/**
* The name of the transfer recipient. This value is informational and not verified by the
* recipient's bank.
*/
@JsonProperty("individual_name") fun individualName(): String? = individualName
/**
* Configuration for how the effective date of the transfer will be set. This determines
* same-day vs future-dated settlement timing. If not set, defaults to a
* `settlement_schedule` of `same_day`. If set, exactly one of the child attributes must be
* set.
*/
@JsonProperty("preferred_effective_date")
fun preferredEffectiveDate(): PreferredEffectiveDate? = preferredEffectiveDate
/** Whether the transfer requires explicit approval via the dashboard or API. */
@JsonProperty("require_approval") fun requireApproval(): Boolean? = requireApproval
/**
* The American Bankers' Association (ABA) Routing Transit Number (RTN) for the destination
* account.
*/
@JsonProperty("routing_number") fun routingNumber(): String? = routingNumber
/** The Standard Entry Class (SEC) code to use for the transfer. */
@JsonProperty("standard_entry_class_code")
fun standardEntryClassCode(): StandardEntryClassCode? = standardEntryClassCode
/** The timing of the transaction. */
@JsonProperty("transaction_timing")
fun transactionTiming(): TransactionTiming? = transactionTiming
@JsonAnyGetter
@ExcludeMissing
fun _additionalProperties(): Map = additionalProperties
fun toBuilder() = Builder().from(this)
companion object {
fun builder() = Builder()
}
class Builder {
private var accountId: String? = null
private var amount: Long? = null
private var statementDescriptor: String? = null
private var accountNumber: String? = null
private var addenda: Addenda? = null
private var companyDescriptiveDate: String? = null
private var companyDiscretionaryData: String? = null
private var companyEntryDescription: String? = null
private var companyName: String? = null
private var destinationAccountHolder: DestinationAccountHolder? = null
private var externalAccountId: String? = null
private var funding: Funding? = null
private var individualId: String? = null
private var individualName: String? = null
private var preferredEffectiveDate: PreferredEffectiveDate? = null
private var requireApproval: Boolean? = null
private var routingNumber: String? = null
private var standardEntryClassCode: StandardEntryClassCode? = null
private var transactionTiming: TransactionTiming? = null
private var additionalProperties: MutableMap = mutableMapOf()
internal fun from(achTransferCreateBody: AchTransferCreateBody) = apply {
this.accountId = achTransferCreateBody.accountId
this.amount = achTransferCreateBody.amount
this.statementDescriptor = achTransferCreateBody.statementDescriptor
this.accountNumber = achTransferCreateBody.accountNumber
this.addenda = achTransferCreateBody.addenda
this.companyDescriptiveDate = achTransferCreateBody.companyDescriptiveDate
this.companyDiscretionaryData = achTransferCreateBody.companyDiscretionaryData
this.companyEntryDescription = achTransferCreateBody.companyEntryDescription
this.companyName = achTransferCreateBody.companyName
this.destinationAccountHolder = achTransferCreateBody.destinationAccountHolder
this.externalAccountId = achTransferCreateBody.externalAccountId
this.funding = achTransferCreateBody.funding
this.individualId = achTransferCreateBody.individualId
this.individualName = achTransferCreateBody.individualName
this.preferredEffectiveDate = achTransferCreateBody.preferredEffectiveDate
this.requireApproval = achTransferCreateBody.requireApproval
this.routingNumber = achTransferCreateBody.routingNumber
this.standardEntryClassCode = achTransferCreateBody.standardEntryClassCode
this.transactionTiming = achTransferCreateBody.transactionTiming
additionalProperties(achTransferCreateBody.additionalProperties)
}
/** The Increase identifier for the account that will send the transfer. */
@JsonProperty("account_id")
fun accountId(accountId: String) = apply { this.accountId = accountId }
/**
* The transfer amount in USD cents. A positive amount originates a credit transfer
* pushing funds to the receiving account. A negative amount originates a debit transfer
* pulling funds from the receiving account.
*/
@JsonProperty("amount") fun amount(amount: Long) = apply { this.amount = amount }
/**
* A description you choose to give the transfer. This will be saved with the transfer
* details, displayed in the dashboard, and returned by the API. If `individual_name`
* and `company_name` are not explicitly set by this API, the `statement_descriptor`
* will be sent in those fields to the receiving bank to help the customer recognize the
* transfer. You are highly encouraged to pass `individual_name` and `company_name`
* instead of relying on this fallback.
*/
@JsonProperty("statement_descriptor")
fun statementDescriptor(statementDescriptor: String) = apply {
this.statementDescriptor = statementDescriptor
}
/** The account number for the destination account. */
@JsonProperty("account_number")
fun accountNumber(accountNumber: String) = apply { this.accountNumber = accountNumber }
/**
* Additional information that will be sent to the recipient. This is included in the
* transfer data sent to the receiving bank.
*/
@JsonProperty("addenda")
fun addenda(addenda: Addenda) = apply { this.addenda = addenda }
/**
* The description of the date of the transfer, usually in the format `YYMMDD`. This is
* included in the transfer data sent to the receiving bank.
*/
@JsonProperty("company_descriptive_date")
fun companyDescriptiveDate(companyDescriptiveDate: String) = apply {
this.companyDescriptiveDate = companyDescriptiveDate
}
/**
* The data you choose to associate with the transfer. This is included in the transfer
* data sent to the receiving bank.
*/
@JsonProperty("company_discretionary_data")
fun companyDiscretionaryData(companyDiscretionaryData: String) = apply {
this.companyDiscretionaryData = companyDiscretionaryData
}
/**
* A description of the transfer. This is included in the transfer data sent to the
* receiving bank.
*/
@JsonProperty("company_entry_description")
fun companyEntryDescription(companyEntryDescription: String) = apply {
this.companyEntryDescription = companyEntryDescription
}
/**
* The name by which the recipient knows you. This is included in the transfer data sent
* to the receiving bank.
*/
@JsonProperty("company_name")
fun companyName(companyName: String) = apply { this.companyName = companyName }
/** The type of entity that owns the account to which the ACH Transfer is being sent. */
@JsonProperty("destination_account_holder")
fun destinationAccountHolder(destinationAccountHolder: DestinationAccountHolder) =
apply {
this.destinationAccountHolder = destinationAccountHolder
}
/**
* The ID of an External Account to initiate a transfer to. If this parameter is
* provided, `account_number`, `routing_number`, and `funding` must be absent.
*/
@JsonProperty("external_account_id")
fun externalAccountId(externalAccountId: String) = apply {
this.externalAccountId = externalAccountId
}
/** The type of the account to which the transfer will be sent. */
@JsonProperty("funding")
fun funding(funding: Funding) = apply { this.funding = funding }
/** Your identifier for the transfer recipient. */
@JsonProperty("individual_id")
fun individualId(individualId: String) = apply { this.individualId = individualId }
/**
* The name of the transfer recipient. This value is informational and not verified by
* the recipient's bank.
*/
@JsonProperty("individual_name")
fun individualName(individualName: String) = apply {
this.individualName = individualName
}
/**
* Configuration for how the effective date of the transfer will be set. This determines
* same-day vs future-dated settlement timing. If not set, defaults to a
* `settlement_schedule` of `same_day`. If set, exactly one of the child attributes must
* be set.
*/
@JsonProperty("preferred_effective_date")
fun preferredEffectiveDate(preferredEffectiveDate: PreferredEffectiveDate) = apply {
this.preferredEffectiveDate = preferredEffectiveDate
}
/** Whether the transfer requires explicit approval via the dashboard or API. */
@JsonProperty("require_approval")
fun requireApproval(requireApproval: Boolean) = apply {
this.requireApproval = requireApproval
}
/**
* The American Bankers' Association (ABA) Routing Transit Number (RTN) for the
* destination account.
*/
@JsonProperty("routing_number")
fun routingNumber(routingNumber: String) = apply { this.routingNumber = routingNumber }
/** The Standard Entry Class (SEC) code to use for the transfer. */
@JsonProperty("standard_entry_class_code")
fun standardEntryClassCode(standardEntryClassCode: StandardEntryClassCode) = apply {
this.standardEntryClassCode = standardEntryClassCode
}
/** The timing of the transaction. */
@JsonProperty("transaction_timing")
fun transactionTiming(transactionTiming: TransactionTiming) = apply {
this.transactionTiming = transactionTiming
}
fun additionalProperties(additionalProperties: Map) = apply {
this.additionalProperties.clear()
this.additionalProperties.putAll(additionalProperties)
}
@JsonAnySetter
fun putAdditionalProperty(key: String, value: JsonValue) = apply {
this.additionalProperties.put(key, value)
}
fun putAllAdditionalProperties(additionalProperties: Map) = apply {
this.additionalProperties.putAll(additionalProperties)
}
fun build(): AchTransferCreateBody =
AchTransferCreateBody(
checkNotNull(accountId) { "`accountId` is required but was not set" },
checkNotNull(amount) { "`amount` is required but was not set" },
checkNotNull(statementDescriptor) {
"`statementDescriptor` is required but was not set"
},
accountNumber,
addenda,
companyDescriptiveDate,
companyDiscretionaryData,
companyEntryDescription,
companyName,
destinationAccountHolder,
externalAccountId,
funding,
individualId,
individualName,
preferredEffectiveDate,
requireApproval,
routingNumber,
standardEntryClassCode,
transactionTiming,
additionalProperties.toImmutable(),
)
}
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return /* spotless:off */ other is AchTransferCreateBody && this.accountId == other.accountId && this.amount == other.amount && this.statementDescriptor == other.statementDescriptor && this.accountNumber == other.accountNumber && this.addenda == other.addenda && this.companyDescriptiveDate == other.companyDescriptiveDate && this.companyDiscretionaryData == other.companyDiscretionaryData && this.companyEntryDescription == other.companyEntryDescription && this.companyName == other.companyName && this.destinationAccountHolder == other.destinationAccountHolder && this.externalAccountId == other.externalAccountId && this.funding == other.funding && this.individualId == other.individualId && this.individualName == other.individualName && this.preferredEffectiveDate == other.preferredEffectiveDate && this.requireApproval == other.requireApproval && this.routingNumber == other.routingNumber && this.standardEntryClassCode == other.standardEntryClassCode && this.transactionTiming == other.transactionTiming && this.additionalProperties == other.additionalProperties /* spotless:on */
}
private var hashCode: Int = 0
override fun hashCode(): Int {
if (hashCode == 0) {
hashCode = /* spotless:off */ Objects.hash(accountId, amount, statementDescriptor, accountNumber, addenda, companyDescriptiveDate, companyDiscretionaryData, companyEntryDescription, companyName, destinationAccountHolder, externalAccountId, funding, individualId, individualName, preferredEffectiveDate, requireApproval, routingNumber, standardEntryClassCode, transactionTiming, additionalProperties) /* spotless:on */
}
return hashCode
}
override fun toString() =
"AchTransferCreateBody{accountId=$accountId, amount=$amount, statementDescriptor=$statementDescriptor, accountNumber=$accountNumber, addenda=$addenda, companyDescriptiveDate=$companyDescriptiveDate, companyDiscretionaryData=$companyDiscretionaryData, companyEntryDescription=$companyEntryDescription, companyName=$companyName, destinationAccountHolder=$destinationAccountHolder, externalAccountId=$externalAccountId, funding=$funding, individualId=$individualId, individualName=$individualName, preferredEffectiveDate=$preferredEffectiveDate, requireApproval=$requireApproval, routingNumber=$routingNumber, standardEntryClassCode=$standardEntryClassCode, transactionTiming=$transactionTiming, additionalProperties=$additionalProperties}"
}
fun _additionalHeaders(): Headers = additionalHeaders
fun _additionalQueryParams(): QueryParams = additionalQueryParams
fun _additionalBodyProperties(): Map = additionalBodyProperties
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return /* spotless:off */ other is AchTransferCreateParams && this.accountId == other.accountId && this.amount == other.amount && this.statementDescriptor == other.statementDescriptor && this.accountNumber == other.accountNumber && this.addenda == other.addenda && this.companyDescriptiveDate == other.companyDescriptiveDate && this.companyDiscretionaryData == other.companyDiscretionaryData && this.companyEntryDescription == other.companyEntryDescription && this.companyName == other.companyName && this.destinationAccountHolder == other.destinationAccountHolder && this.externalAccountId == other.externalAccountId && this.funding == other.funding && this.individualId == other.individualId && this.individualName == other.individualName && this.preferredEffectiveDate == other.preferredEffectiveDate && this.requireApproval == other.requireApproval && this.routingNumber == other.routingNumber && this.standardEntryClassCode == other.standardEntryClassCode && this.transactionTiming == other.transactionTiming && this.additionalHeaders == other.additionalHeaders && this.additionalQueryParams == other.additionalQueryParams && this.additionalBodyProperties == other.additionalBodyProperties /* spotless:on */
}
override fun hashCode(): Int {
return /* spotless:off */ Objects.hash(accountId, amount, statementDescriptor, accountNumber, addenda, companyDescriptiveDate, companyDiscretionaryData, companyEntryDescription, companyName, destinationAccountHolder, externalAccountId, funding, individualId, individualName, preferredEffectiveDate, requireApproval, routingNumber, standardEntryClassCode, transactionTiming, additionalHeaders, additionalQueryParams, additionalBodyProperties) /* spotless:on */
}
override fun toString() =
"AchTransferCreateParams{accountId=$accountId, amount=$amount, statementDescriptor=$statementDescriptor, accountNumber=$accountNumber, addenda=$addenda, companyDescriptiveDate=$companyDescriptiveDate, companyDiscretionaryData=$companyDiscretionaryData, companyEntryDescription=$companyEntryDescription, companyName=$companyName, destinationAccountHolder=$destinationAccountHolder, externalAccountId=$externalAccountId, funding=$funding, individualId=$individualId, individualName=$individualName, preferredEffectiveDate=$preferredEffectiveDate, requireApproval=$requireApproval, routingNumber=$routingNumber, standardEntryClassCode=$standardEntryClassCode, transactionTiming=$transactionTiming, additionalHeaders=$additionalHeaders, additionalQueryParams=$additionalQueryParams, additionalBodyProperties=$additionalBodyProperties}"
fun toBuilder() = Builder().from(this)
companion object {
fun builder() = Builder()
}
@NoAutoDetect
class Builder {
private var accountId: String? = null
private var amount: Long? = null
private var statementDescriptor: String? = null
private var accountNumber: String? = null
private var addenda: Addenda? = null
private var companyDescriptiveDate: String? = null
private var companyDiscretionaryData: String? = null
private var companyEntryDescription: String? = null
private var companyName: String? = null
private var destinationAccountHolder: DestinationAccountHolder? = null
private var externalAccountId: String? = null
private var funding: Funding? = null
private var individualId: String? = null
private var individualName: String? = null
private var preferredEffectiveDate: PreferredEffectiveDate? = null
private var requireApproval: Boolean? = null
private var routingNumber: String? = null
private var standardEntryClassCode: StandardEntryClassCode? = null
private var transactionTiming: TransactionTiming? = null
private var additionalHeaders: Headers.Builder = Headers.builder()
private var additionalQueryParams: QueryParams.Builder = QueryParams.builder()
private var additionalBodyProperties: MutableMap = mutableMapOf()
internal fun from(achTransferCreateParams: AchTransferCreateParams) = apply {
this.accountId = achTransferCreateParams.accountId
this.amount = achTransferCreateParams.amount
this.statementDescriptor = achTransferCreateParams.statementDescriptor
this.accountNumber = achTransferCreateParams.accountNumber
this.addenda = achTransferCreateParams.addenda
this.companyDescriptiveDate = achTransferCreateParams.companyDescriptiveDate
this.companyDiscretionaryData = achTransferCreateParams.companyDiscretionaryData
this.companyEntryDescription = achTransferCreateParams.companyEntryDescription
this.companyName = achTransferCreateParams.companyName
this.destinationAccountHolder = achTransferCreateParams.destinationAccountHolder
this.externalAccountId = achTransferCreateParams.externalAccountId
this.funding = achTransferCreateParams.funding
this.individualId = achTransferCreateParams.individualId
this.individualName = achTransferCreateParams.individualName
this.preferredEffectiveDate = achTransferCreateParams.preferredEffectiveDate
this.requireApproval = achTransferCreateParams.requireApproval
this.routingNumber = achTransferCreateParams.routingNumber
this.standardEntryClassCode = achTransferCreateParams.standardEntryClassCode
this.transactionTiming = achTransferCreateParams.transactionTiming
additionalHeaders(achTransferCreateParams.additionalHeaders)
additionalQueryParams(achTransferCreateParams.additionalQueryParams)
additionalBodyProperties(achTransferCreateParams.additionalBodyProperties)
}
/** The Increase identifier for the account that will send the transfer. */
fun accountId(accountId: String) = apply { this.accountId = accountId }
/**
* The transfer amount in USD cents. A positive amount originates a credit transfer pushing
* funds to the receiving account. A negative amount originates a debit transfer pulling
* funds from the receiving account.
*/
fun amount(amount: Long) = apply { this.amount = amount }
/**
* A description you choose to give the transfer. This will be saved with the transfer
* details, displayed in the dashboard, and returned by the API. If `individual_name` and
* `company_name` are not explicitly set by this API, the `statement_descriptor` will be
* sent in those fields to the receiving bank to help the customer recognize the transfer.
* You are highly encouraged to pass `individual_name` and `company_name` instead of relying
* on this fallback.
*/
fun statementDescriptor(statementDescriptor: String) = apply {
this.statementDescriptor = statementDescriptor
}
/** The account number for the destination account. */
fun accountNumber(accountNumber: String) = apply { this.accountNumber = accountNumber }
/**
* Additional information that will be sent to the recipient. This is included in the
* transfer data sent to the receiving bank.
*/
fun addenda(addenda: Addenda) = apply { this.addenda = addenda }
/**
* The description of the date of the transfer, usually in the format `YYMMDD`. This is
* included in the transfer data sent to the receiving bank.
*/
fun companyDescriptiveDate(companyDescriptiveDate: String) = apply {
this.companyDescriptiveDate = companyDescriptiveDate
}
/**
* The data you choose to associate with the transfer. This is included in the transfer data
* sent to the receiving bank.
*/
fun companyDiscretionaryData(companyDiscretionaryData: String) = apply {
this.companyDiscretionaryData = companyDiscretionaryData
}
/**
* A description of the transfer. This is included in the transfer data sent to the
* receiving bank.
*/
fun companyEntryDescription(companyEntryDescription: String) = apply {
this.companyEntryDescription = companyEntryDescription
}
/**
* The name by which the recipient knows you. This is included in the transfer data sent to
* the receiving bank.
*/
fun companyName(companyName: String) = apply { this.companyName = companyName }
/** The type of entity that owns the account to which the ACH Transfer is being sent. */
fun destinationAccountHolder(destinationAccountHolder: DestinationAccountHolder) = apply {
this.destinationAccountHolder = destinationAccountHolder
}
/**
* The ID of an External Account to initiate a transfer to. If this parameter is provided,
* `account_number`, `routing_number`, and `funding` must be absent.
*/
fun externalAccountId(externalAccountId: String) = apply {
this.externalAccountId = externalAccountId
}
/** The type of the account to which the transfer will be sent. */
fun funding(funding: Funding) = apply { this.funding = funding }
/** Your identifier for the transfer recipient. */
fun individualId(individualId: String) = apply { this.individualId = individualId }
/**
* The name of the transfer recipient. This value is informational and not verified by the
* recipient's bank.
*/
fun individualName(individualName: String) = apply { this.individualName = individualName }
/**
* Configuration for how the effective date of the transfer will be set. This determines
* same-day vs future-dated settlement timing. If not set, defaults to a
* `settlement_schedule` of `same_day`. If set, exactly one of the child attributes must be
* set.
*/
fun preferredEffectiveDate(preferredEffectiveDate: PreferredEffectiveDate) = apply {
this.preferredEffectiveDate = preferredEffectiveDate
}
/** Whether the transfer requires explicit approval via the dashboard or API. */
fun requireApproval(requireApproval: Boolean) = apply {
this.requireApproval = requireApproval
}
/**
* The American Bankers' Association (ABA) Routing Transit Number (RTN) for the destination
* account.
*/
fun routingNumber(routingNumber: String) = apply { this.routingNumber = routingNumber }
/** The Standard Entry Class (SEC) code to use for the transfer. */
fun standardEntryClassCode(standardEntryClassCode: StandardEntryClassCode) = apply {
this.standardEntryClassCode = standardEntryClassCode
}
/** The timing of the transaction. */
fun transactionTiming(transactionTiming: TransactionTiming) = apply {
this.transactionTiming = transactionTiming
}
fun additionalHeaders(additionalHeaders: Headers) = apply {
this.additionalHeaders.clear()
putAllAdditionalHeaders(additionalHeaders)
}
fun additionalHeaders(additionalHeaders: Map>) = apply {
this.additionalHeaders.clear()
putAllAdditionalHeaders(additionalHeaders)
}
fun putAdditionalHeader(name: String, value: String) = apply {
additionalHeaders.put(name, value)
}
fun putAdditionalHeaders(name: String, values: Iterable) = apply {
additionalHeaders.put(name, values)
}
fun putAllAdditionalHeaders(additionalHeaders: Headers) = apply {
this.additionalHeaders.putAll(additionalHeaders)
}
fun putAllAdditionalHeaders(additionalHeaders: Map>) = apply {
this.additionalHeaders.putAll(additionalHeaders)
}
fun replaceAdditionalHeaders(name: String, value: String) = apply {
additionalHeaders.replace(name, value)
}
fun replaceAdditionalHeaders(name: String, values: Iterable) = apply {
additionalHeaders.replace(name, values)
}
fun replaceAllAdditionalHeaders(additionalHeaders: Headers) = apply {
this.additionalHeaders.replaceAll(additionalHeaders)
}
fun replaceAllAdditionalHeaders(additionalHeaders: Map>) = apply {
this.additionalHeaders.replaceAll(additionalHeaders)
}
fun removeAdditionalHeaders(name: String) = apply { additionalHeaders.remove(name) }
fun removeAllAdditionalHeaders(names: Set) = apply {
additionalHeaders.removeAll(names)
}
fun additionalQueryParams(additionalQueryParams: QueryParams) = apply {
this.additionalQueryParams.clear()
putAllAdditionalQueryParams(additionalQueryParams)
}
fun additionalQueryParams(additionalQueryParams: Map>) = apply {
this.additionalQueryParams.clear()
putAllAdditionalQueryParams(additionalQueryParams)
}
fun putAdditionalQueryParam(key: String, value: String) = apply {
additionalQueryParams.put(key, value)
}
fun putAdditionalQueryParams(key: String, values: Iterable) = apply {
additionalQueryParams.put(key, values)
}
fun putAllAdditionalQueryParams(additionalQueryParams: QueryParams) = apply {
this.additionalQueryParams.putAll(additionalQueryParams)
}
fun putAllAdditionalQueryParams(additionalQueryParams: Map>) =
apply {
this.additionalQueryParams.putAll(additionalQueryParams)
}
fun replaceAdditionalQueryParams(key: String, value: String) = apply {
additionalQueryParams.replace(key, value)
}
fun replaceAdditionalQueryParams(key: String, values: Iterable) = apply {
additionalQueryParams.replace(key, values)
}
fun replaceAllAdditionalQueryParams(additionalQueryParams: QueryParams) = apply {
this.additionalQueryParams.replaceAll(additionalQueryParams)
}
fun replaceAllAdditionalQueryParams(additionalQueryParams: Map>) =
apply {
this.additionalQueryParams.replaceAll(additionalQueryParams)
}
fun removeAdditionalQueryParams(key: String) = apply { additionalQueryParams.remove(key) }
fun removeAllAdditionalQueryParams(keys: Set) = apply {
additionalQueryParams.removeAll(keys)
}
fun additionalBodyProperties(additionalBodyProperties: Map) = apply {
this.additionalBodyProperties.clear()
putAllAdditionalBodyProperties(additionalBodyProperties)
}
fun putAdditionalBodyProperty(key: String, value: JsonValue) = apply {
additionalBodyProperties.put(key, value)
}
fun putAllAdditionalBodyProperties(additionalBodyProperties: Map) =
apply {
this.additionalBodyProperties.putAll(additionalBodyProperties)
}
fun removeAdditionalBodyProperty(key: String) = apply {
additionalBodyProperties.remove(key)
}
fun removeAllAdditionalBodyProperties(keys: Set) = apply {
keys.forEach(::removeAdditionalBodyProperty)
}
fun build(): AchTransferCreateParams =
AchTransferCreateParams(
checkNotNull(accountId) { "`accountId` is required but was not set" },
checkNotNull(amount) { "`amount` is required but was not set" },
checkNotNull(statementDescriptor) {
"`statementDescriptor` is required but was not set"
},
accountNumber,
addenda,
companyDescriptiveDate,
companyDiscretionaryData,
companyEntryDescription,
companyName,
destinationAccountHolder,
externalAccountId,
funding,
individualId,
individualName,
preferredEffectiveDate,
requireApproval,
routingNumber,
standardEntryClassCode,
transactionTiming,
additionalHeaders.build(),
additionalQueryParams.build(),
additionalBodyProperties.toImmutable(),
)
}
/**
* Additional information that will be sent to the recipient. This is included in the transfer
* data sent to the receiving bank.
*/
@JsonDeserialize(builder = Addenda.Builder::class)
@NoAutoDetect
class Addenda
private constructor(
private val category: Category?,
private val freeform: Freeform?,
private val paymentOrderRemittanceAdvice: PaymentOrderRemittanceAdvice?,
private val additionalProperties: Map,
) {
/** The type of addenda to pass with the transfer. */
@JsonProperty("category") fun category(): Category? = category
/** Unstructured `payment_related_information` passed through with the transfer. */
@JsonProperty("freeform") fun freeform(): Freeform? = freeform
/**
* Structured ASC X12 820 remittance advice records. Please reach out to
* [[email protected]](mailto:[email protected]) for more information.
*/
@JsonProperty("payment_order_remittance_advice")
fun paymentOrderRemittanceAdvice(): PaymentOrderRemittanceAdvice? =
paymentOrderRemittanceAdvice
@JsonAnyGetter
@ExcludeMissing
fun _additionalProperties(): Map = additionalProperties
fun toBuilder() = Builder().from(this)
companion object {
fun builder() = Builder()
}
class Builder {
private var category: Category? = null
private var freeform: Freeform? = null
private var paymentOrderRemittanceAdvice: PaymentOrderRemittanceAdvice? = null
private var additionalProperties: MutableMap = mutableMapOf()
internal fun from(addenda: Addenda) = apply {
this.category = addenda.category
this.freeform = addenda.freeform
this.paymentOrderRemittanceAdvice = addenda.paymentOrderRemittanceAdvice
additionalProperties(addenda.additionalProperties)
}
/** The type of addenda to pass with the transfer. */
@JsonProperty("category")
fun category(category: Category) = apply { this.category = category }
/** Unstructured `payment_related_information` passed through with the transfer. */
@JsonProperty("freeform")
fun freeform(freeform: Freeform) = apply { this.freeform = freeform }
/**
* Structured ASC X12 820 remittance advice records. Please reach out to
* [[email protected]](mailto:[email protected]) for more information.
*/
@JsonProperty("payment_order_remittance_advice")
fun paymentOrderRemittanceAdvice(
paymentOrderRemittanceAdvice: PaymentOrderRemittanceAdvice
) = apply { this.paymentOrderRemittanceAdvice = paymentOrderRemittanceAdvice }
fun additionalProperties(additionalProperties: Map) = apply {
this.additionalProperties.clear()
this.additionalProperties.putAll(additionalProperties)
}
@JsonAnySetter
fun putAdditionalProperty(key: String, value: JsonValue) = apply {
this.additionalProperties.put(key, value)
}
fun putAllAdditionalProperties(additionalProperties: Map) = apply {
this.additionalProperties.putAll(additionalProperties)
}
fun build(): Addenda =
Addenda(
checkNotNull(category) { "`category` is required but was not set" },
freeform,
paymentOrderRemittanceAdvice,
additionalProperties.toImmutable(),
)
}
class Category
@JsonCreator
private constructor(
private val value: JsonField,
) : Enum {
@com.fasterxml.jackson.annotation.JsonValue fun _value(): JsonField = value
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return /* spotless:off */ other is Category && this.value == other.value /* spotless:on */
}
override fun hashCode() = value.hashCode()
override fun toString() = value.toString()
companion object {
val FREEFORM = Category(JsonField.of("freeform"))
val PAYMENT_ORDER_REMITTANCE_ADVICE =
Category(JsonField.of("payment_order_remittance_advice"))
fun of(value: String) = Category(JsonField.of(value))
}
enum class Known {
FREEFORM,
PAYMENT_ORDER_REMITTANCE_ADVICE,
}
enum class Value {
FREEFORM,
PAYMENT_ORDER_REMITTANCE_ADVICE,
_UNKNOWN,
}
fun value(): Value =
when (this) {
FREEFORM -> Value.FREEFORM
PAYMENT_ORDER_REMITTANCE_ADVICE -> Value.PAYMENT_ORDER_REMITTANCE_ADVICE
else -> Value._UNKNOWN
}
fun known(): Known =
when (this) {
FREEFORM -> Known.FREEFORM
PAYMENT_ORDER_REMITTANCE_ADVICE -> Known.PAYMENT_ORDER_REMITTANCE_ADVICE
else -> throw IncreaseInvalidDataException("Unknown Category: $value")
}
fun asString(): String = _value().asStringOrThrow()
}
/** Unstructured `payment_related_information` passed through with the transfer. */
@JsonDeserialize(builder = Freeform.Builder::class)
@NoAutoDetect
class Freeform
private constructor(
private val entries: List?,
private val additionalProperties: Map,
) {
/**
* Each entry represents an addendum sent with the transfer. Please reach out to
* [[email protected]](mailto:[email protected]) to send more than one addendum.
*/
@JsonProperty("entries") fun entries(): List? = entries
@JsonAnyGetter
@ExcludeMissing
fun _additionalProperties(): Map = additionalProperties
fun toBuilder() = Builder().from(this)
companion object {
fun builder() = Builder()
}
class Builder {
private var entries: List? = null
private var additionalProperties: MutableMap = mutableMapOf()
internal fun from(freeform: Freeform) = apply {
this.entries = freeform.entries
additionalProperties(freeform.additionalProperties)
}
/**
* Each entry represents an addendum sent with the transfer. Please reach out to
* [[email protected]](mailto:[email protected]) to send more than one
* addendum.
*/
@JsonProperty("entries")
fun entries(entries: List) = apply { this.entries = entries }
fun additionalProperties(additionalProperties: Map) = apply {
this.additionalProperties.clear()
this.additionalProperties.putAll(additionalProperties)
}
@JsonAnySetter
fun putAdditionalProperty(key: String, value: JsonValue) = apply {
this.additionalProperties.put(key, value)
}
fun putAllAdditionalProperties(additionalProperties: Map) =
apply {
this.additionalProperties.putAll(additionalProperties)
}
fun build(): Freeform =
Freeform(
checkNotNull(entries) { "`entries` is required but was not set" }
.toImmutable(),
additionalProperties.toImmutable()
)
}
@JsonDeserialize(builder = Entry.Builder::class)
@NoAutoDetect
class Entry
private constructor(
private val paymentRelatedInformation: String?,
private val additionalProperties: Map,
) {
/** The payment related information passed in the addendum. */
@JsonProperty("payment_related_information")
fun paymentRelatedInformation(): String? = paymentRelatedInformation
@JsonAnyGetter
@ExcludeMissing
fun _additionalProperties(): Map = additionalProperties
fun toBuilder() = Builder().from(this)
companion object {
fun builder() = Builder()
}
class Builder {
private var paymentRelatedInformation: String? = null
private var additionalProperties: MutableMap = mutableMapOf()
internal fun from(entry: Entry) = apply {
this.paymentRelatedInformation = entry.paymentRelatedInformation
additionalProperties(entry.additionalProperties)
}
/** The payment related information passed in the addendum. */
@JsonProperty("payment_related_information")
fun paymentRelatedInformation(paymentRelatedInformation: String) = apply {
this.paymentRelatedInformation = paymentRelatedInformation
}
fun additionalProperties(additionalProperties: Map) = apply {
this.additionalProperties.clear()
this.additionalProperties.putAll(additionalProperties)
}
@JsonAnySetter
fun putAdditionalProperty(key: String, value: JsonValue) = apply {
this.additionalProperties.put(key, value)
}
fun putAllAdditionalProperties(additionalProperties: Map) =
apply {
this.additionalProperties.putAll(additionalProperties)
}
fun build(): Entry =
Entry(
checkNotNull(paymentRelatedInformation) {
"`paymentRelatedInformation` is required but was not set"
},
additionalProperties.toImmutable()
)
}
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return /* spotless:off */ other is Entry && this.paymentRelatedInformation == other.paymentRelatedInformation && this.additionalProperties == other.additionalProperties /* spotless:on */
}
private var hashCode: Int = 0
override fun hashCode(): Int {
if (hashCode == 0) {
hashCode = /* spotless:off */ Objects.hash(paymentRelatedInformation, additionalProperties) /* spotless:on */
}
return hashCode
}
override fun toString() =
"Entry{paymentRelatedInformation=$paymentRelatedInformation, additionalProperties=$additionalProperties}"
}
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return /* spotless:off */ other is Freeform && this.entries == other.entries && this.additionalProperties == other.additionalProperties /* spotless:on */
}
private var hashCode: Int = 0
override fun hashCode(): Int {
if (hashCode == 0) {
hashCode = /* spotless:off */ Objects.hash(entries, additionalProperties) /* spotless:on */
}
return hashCode
}
override fun toString() =
"Freeform{entries=$entries, additionalProperties=$additionalProperties}"
}
/**
* Structured ASC X12 820 remittance advice records. Please reach out to
* [[email protected]](mailto:[email protected]) for more information.
*/
@JsonDeserialize(builder = PaymentOrderRemittanceAdvice.Builder::class)
@NoAutoDetect
class PaymentOrderRemittanceAdvice
private constructor(
private val invoices: List?,
private val additionalProperties: Map,
) {
/** ASC X12 RMR records for this specific transfer. */
@JsonProperty("invoices") fun invoices(): List? = invoices
@JsonAnyGetter
@ExcludeMissing
fun _additionalProperties(): Map = additionalProperties
fun toBuilder() = Builder().from(this)
companion object {
fun builder() = Builder()
}
class Builder {
private var invoices: List? = null
private var additionalProperties: MutableMap = mutableMapOf()
internal fun from(paymentOrderRemittanceAdvice: PaymentOrderRemittanceAdvice) =
apply {
this.invoices = paymentOrderRemittanceAdvice.invoices
additionalProperties(paymentOrderRemittanceAdvice.additionalProperties)
}
/** ASC X12 RMR records for this specific transfer. */
@JsonProperty("invoices")
fun invoices(invoices: List) = apply { this.invoices = invoices }
fun additionalProperties(additionalProperties: Map) = apply {
this.additionalProperties.clear()
this.additionalProperties.putAll(additionalProperties)
}
@JsonAnySetter
fun putAdditionalProperty(key: String, value: JsonValue) = apply {
this.additionalProperties.put(key, value)
}
fun putAllAdditionalProperties(additionalProperties: Map) =
apply {
this.additionalProperties.putAll(additionalProperties)
}
fun build(): PaymentOrderRemittanceAdvice =
PaymentOrderRemittanceAdvice(
checkNotNull(invoices) { "`invoices` is required but was not set" }
.toImmutable(),
additionalProperties.toImmutable()
)
}
@JsonDeserialize(builder = Invoice.Builder::class)
@NoAutoDetect
class Invoice
private constructor(
private val invoiceNumber: String?,
private val paidAmount: Long?,
private val additionalProperties: Map,
) {
/**
* The invoice number for this reference, determined in advance with the receiver.
*/
@JsonProperty("invoice_number") fun invoiceNumber(): String? = invoiceNumber
/**
* The amount that was paid for this invoice in the minor unit of its currency. For
* dollars, for example, this is cents.
*/
@JsonProperty("paid_amount") fun paidAmount(): Long? = paidAmount
@JsonAnyGetter
@ExcludeMissing
fun _additionalProperties(): Map = additionalProperties
fun toBuilder() = Builder().from(this)
companion object {
fun builder() = Builder()
}
class Builder {
private var invoiceNumber: String? = null
private var paidAmount: Long? = null
private var additionalProperties: MutableMap = mutableMapOf()
internal fun from(invoice: Invoice) = apply {
this.invoiceNumber = invoice.invoiceNumber
this.paidAmount = invoice.paidAmount
additionalProperties(invoice.additionalProperties)
}
/**
* The invoice number for this reference, determined in advance with the
* receiver.
*/
@JsonProperty("invoice_number")
fun invoiceNumber(invoiceNumber: String) = apply {
this.invoiceNumber = invoiceNumber
}
/**
* The amount that was paid for this invoice in the minor unit of its currency.
* For dollars, for example, this is cents.
*/
@JsonProperty("paid_amount")
fun paidAmount(paidAmount: Long) = apply { this.paidAmount = paidAmount }
fun additionalProperties(additionalProperties: Map) = apply {
this.additionalProperties.clear()
this.additionalProperties.putAll(additionalProperties)
}
@JsonAnySetter
fun putAdditionalProperty(key: String, value: JsonValue) = apply {
this.additionalProperties.put(key, value)
}
fun putAllAdditionalProperties(additionalProperties: Map) =
apply {
this.additionalProperties.putAll(additionalProperties)
}
fun build(): Invoice =
Invoice(
checkNotNull(invoiceNumber) {
"`invoiceNumber` is required but was not set"
},
checkNotNull(paidAmount) { "`paidAmount` is required but was not set" },
additionalProperties.toImmutable(),
)
}
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return /* spotless:off */ other is Invoice && this.invoiceNumber == other.invoiceNumber && this.paidAmount == other.paidAmount && this.additionalProperties == other.additionalProperties /* spotless:on */
}
private var hashCode: Int = 0
override fun hashCode(): Int {
if (hashCode == 0) {
hashCode = /* spotless:off */ Objects.hash(invoiceNumber, paidAmount, additionalProperties) /* spotless:on */
}
return hashCode
}
override fun toString() =
"Invoice{invoiceNumber=$invoiceNumber, paidAmount=$paidAmount, additionalProperties=$additionalProperties}"
}
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return /* spotless:off */ other is PaymentOrderRemittanceAdvice && this.invoices == other.invoices && this.additionalProperties == other.additionalProperties /* spotless:on */
}
private var hashCode: Int = 0
override fun hashCode(): Int {
if (hashCode == 0) {
hashCode = /* spotless:off */ Objects.hash(invoices, additionalProperties) /* spotless:on */
}
return hashCode
}
override fun toString() =
"PaymentOrderRemittanceAdvice{invoices=$invoices, additionalProperties=$additionalProperties}"
}
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return /* spotless:off */ other is Addenda && this.category == other.category && this.freeform == other.freeform && this.paymentOrderRemittanceAdvice == other.paymentOrderRemittanceAdvice && this.additionalProperties == other.additionalProperties /* spotless:on */
}
private var hashCode: Int = 0
override fun hashCode(): Int {
if (hashCode == 0) {
hashCode = /* spotless:off */ Objects.hash(category, freeform, paymentOrderRemittanceAdvice, additionalProperties) /* spotless:on */
}
return hashCode
}
override fun toString() =
"Addenda{category=$category, freeform=$freeform, paymentOrderRemittanceAdvice=$paymentOrderRemittanceAdvice, additionalProperties=$additionalProperties}"
}
class DestinationAccountHolder
@JsonCreator
private constructor(
private val value: JsonField,
) : Enum {
@com.fasterxml.jackson.annotation.JsonValue fun _value(): JsonField = value
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return /* spotless:off */ other is DestinationAccountHolder && this.value == other.value /* spotless:on */
}
override fun hashCode() = value.hashCode()
override fun toString() = value.toString()
companion object {
val BUSINESS = DestinationAccountHolder(JsonField.of("business"))
val INDIVIDUAL = DestinationAccountHolder(JsonField.of("individual"))
val UNKNOWN = DestinationAccountHolder(JsonField.of("unknown"))
fun of(value: String) = DestinationAccountHolder(JsonField.of(value))
}
enum class Known {
BUSINESS,
INDIVIDUAL,
UNKNOWN,
}
enum class Value {
BUSINESS,
INDIVIDUAL,
UNKNOWN,
_UNKNOWN,
}
fun value(): Value =
when (this) {
BUSINESS -> Value.BUSINESS
INDIVIDUAL -> Value.INDIVIDUAL
UNKNOWN -> Value.UNKNOWN
else -> Value._UNKNOWN
}
fun known(): Known =
when (this) {
BUSINESS -> Known.BUSINESS
INDIVIDUAL -> Known.INDIVIDUAL
UNKNOWN -> Known.UNKNOWN
else ->
throw IncreaseInvalidDataException("Unknown DestinationAccountHolder: $value")
}
fun asString(): String = _value().asStringOrThrow()
}
class Funding
@JsonCreator
private constructor(
private val value: JsonField,
) : Enum {
@com.fasterxml.jackson.annotation.JsonValue fun _value(): JsonField = value
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return /* spotless:off */ other is Funding && this.value == other.value /* spotless:on */
}
override fun hashCode() = value.hashCode()
override fun toString() = value.toString()
companion object {
val CHECKING = Funding(JsonField.of("checking"))
val SAVINGS = Funding(JsonField.of("savings"))
fun of(value: String) = Funding(JsonField.of(value))
}
enum class Known {
CHECKING,
SAVINGS,
}
enum class Value {
CHECKING,
SAVINGS,
_UNKNOWN,
}
fun value(): Value =
when (this) {
CHECKING -> Value.CHECKING
SAVINGS -> Value.SAVINGS
else -> Value._UNKNOWN
}
fun known(): Known =
when (this) {
CHECKING -> Known.CHECKING
SAVINGS -> Known.SAVINGS
else -> throw IncreaseInvalidDataException("Unknown Funding: $value")
}
fun asString(): String = _value().asStringOrThrow()
}
/**
* Configuration for how the effective date of the transfer will be set. This determines
* same-day vs future-dated settlement timing. If not set, defaults to a `settlement_schedule`
* of `same_day`. If set, exactly one of the child attributes must be set.
*/
@JsonDeserialize(builder = PreferredEffectiveDate.Builder::class)
@NoAutoDetect
class PreferredEffectiveDate
private constructor(
private val date: LocalDate?,
private val settlementSchedule: SettlementSchedule?,
private val additionalProperties: Map,
) {
/**
* A specific date in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format to use as
* the effective date when submitting this transfer.
*/
@JsonProperty("date") fun date(): LocalDate? = date
/** A schedule by which Increase will choose an effective date for the transfer. */
@JsonProperty("settlement_schedule")
fun settlementSchedule(): SettlementSchedule? = settlementSchedule
@JsonAnyGetter
@ExcludeMissing
fun _additionalProperties(): Map = additionalProperties
fun toBuilder() = Builder().from(this)
companion object {
fun builder() = Builder()
}
class Builder {
private var date: LocalDate? = null
private var settlementSchedule: SettlementSchedule? = null
private var additionalProperties: MutableMap = mutableMapOf()
internal fun from(preferredEffectiveDate: PreferredEffectiveDate) = apply {
this.date = preferredEffectiveDate.date
this.settlementSchedule = preferredEffectiveDate.settlementSchedule
additionalProperties(preferredEffectiveDate.additionalProperties)
}
/**
* A specific date in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format to use
* as the effective date when submitting this transfer.
*/
@JsonProperty("date") fun date(date: LocalDate) = apply { this.date = date }
/** A schedule by which Increase will choose an effective date for the transfer. */
@JsonProperty("settlement_schedule")
fun settlementSchedule(settlementSchedule: SettlementSchedule) = apply {
this.settlementSchedule = settlementSchedule
}
fun additionalProperties(additionalProperties: Map) = apply {
this.additionalProperties.clear()
this.additionalProperties.putAll(additionalProperties)
}
@JsonAnySetter
fun putAdditionalProperty(key: String, value: JsonValue) = apply {
this.additionalProperties.put(key, value)
}
fun putAllAdditionalProperties(additionalProperties: Map) = apply {
this.additionalProperties.putAll(additionalProperties)
}
fun build(): PreferredEffectiveDate =
PreferredEffectiveDate(
date,
settlementSchedule,
additionalProperties.toImmutable(),
)
}
class SettlementSchedule
@JsonCreator
private constructor(
private val value: JsonField,
) : Enum {
@com.fasterxml.jackson.annotation.JsonValue fun _value(): JsonField = value
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return /* spotless:off */ other is SettlementSchedule && this.value == other.value /* spotless:on */
}
override fun hashCode() = value.hashCode()
override fun toString() = value.toString()
companion object {
val SAME_DAY = SettlementSchedule(JsonField.of("same_day"))
val FUTURE_DATED = SettlementSchedule(JsonField.of("future_dated"))
fun of(value: String) = SettlementSchedule(JsonField.of(value))
}
enum class Known {
SAME_DAY,
FUTURE_DATED,
}
enum class Value {
SAME_DAY,
FUTURE_DATED,
_UNKNOWN,
}
fun value(): Value =
when (this) {
SAME_DAY -> Value.SAME_DAY
FUTURE_DATED -> Value.FUTURE_DATED
else -> Value._UNKNOWN
}
fun known(): Known =
when (this) {
SAME_DAY -> Known.SAME_DAY
FUTURE_DATED -> Known.FUTURE_DATED
else -> throw IncreaseInvalidDataException("Unknown SettlementSchedule: $value")
}
fun asString(): String = _value().asStringOrThrow()
}
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return /* spotless:off */ other is PreferredEffectiveDate && this.date == other.date && this.settlementSchedule == other.settlementSchedule && this.additionalProperties == other.additionalProperties /* spotless:on */
}
private var hashCode: Int = 0
override fun hashCode(): Int {
if (hashCode == 0) {
hashCode = /* spotless:off */ Objects.hash(date, settlementSchedule, additionalProperties) /* spotless:on */
}
return hashCode
}
override fun toString() =
"PreferredEffectiveDate{date=$date, settlementSchedule=$settlementSchedule, additionalProperties=$additionalProperties}"
}
class StandardEntryClassCode
@JsonCreator
private constructor(
private val value: JsonField,
) : Enum {
@com.fasterxml.jackson.annotation.JsonValue fun _value(): JsonField = value
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return /* spotless:off */ other is StandardEntryClassCode && this.value == other.value /* spotless:on */
}
override fun hashCode() = value.hashCode()
override fun toString() = value.toString()
companion object {
val CORPORATE_CREDIT_OR_DEBIT =
StandardEntryClassCode(JsonField.of("corporate_credit_or_debit"))
val CORPORATE_TRADE_EXCHANGE =
StandardEntryClassCode(JsonField.of("corporate_trade_exchange"))
val PREARRANGED_PAYMENTS_AND_DEPOSIT =
StandardEntryClassCode(JsonField.of("prearranged_payments_and_deposit"))
val INTERNET_INITIATED = StandardEntryClassCode(JsonField.of("internet_initiated"))
fun of(value: String) = StandardEntryClassCode(JsonField.of(value))
}
enum class Known {
CORPORATE_CREDIT_OR_DEBIT,
CORPORATE_TRADE_EXCHANGE,
PREARRANGED_PAYMENTS_AND_DEPOSIT,
INTERNET_INITIATED,
}
enum class Value {
CORPORATE_CREDIT_OR_DEBIT,
CORPORATE_TRADE_EXCHANGE,
PREARRANGED_PAYMENTS_AND_DEPOSIT,
INTERNET_INITIATED,
_UNKNOWN,
}
fun value(): Value =
when (this) {
CORPORATE_CREDIT_OR_DEBIT -> Value.CORPORATE_CREDIT_OR_DEBIT
CORPORATE_TRADE_EXCHANGE -> Value.CORPORATE_TRADE_EXCHANGE
PREARRANGED_PAYMENTS_AND_DEPOSIT -> Value.PREARRANGED_PAYMENTS_AND_DEPOSIT
INTERNET_INITIATED -> Value.INTERNET_INITIATED
else -> Value._UNKNOWN
}
fun known(): Known =
when (this) {
CORPORATE_CREDIT_OR_DEBIT -> Known.CORPORATE_CREDIT_OR_DEBIT
CORPORATE_TRADE_EXCHANGE -> Known.CORPORATE_TRADE_EXCHANGE
PREARRANGED_PAYMENTS_AND_DEPOSIT -> Known.PREARRANGED_PAYMENTS_AND_DEPOSIT
INTERNET_INITIATED -> Known.INTERNET_INITIATED
else -> throw IncreaseInvalidDataException("Unknown StandardEntryClassCode: $value")
}
fun asString(): String = _value().asStringOrThrow()
}
class TransactionTiming
@JsonCreator
private constructor(
private val value: JsonField,
) : Enum {
@com.fasterxml.jackson.annotation.JsonValue fun _value(): JsonField = value
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
return /* spotless:off */ other is TransactionTiming && this.value == other.value /* spotless:on */
}
override fun hashCode() = value.hashCode()
override fun toString() = value.toString()
companion object {
val SYNCHRONOUS = TransactionTiming(JsonField.of("synchronous"))
val ASYNCHRONOUS = TransactionTiming(JsonField.of("asynchronous"))
fun of(value: String) = TransactionTiming(JsonField.of(value))
}
enum class Known {
SYNCHRONOUS,
ASYNCHRONOUS,
}
enum class Value {
SYNCHRONOUS,
ASYNCHRONOUS,
_UNKNOWN,
}
fun value(): Value =
when (this) {
SYNCHRONOUS -> Value.SYNCHRONOUS
ASYNCHRONOUS -> Value.ASYNCHRONOUS
else -> Value._UNKNOWN
}
fun known(): Known =
when (this) {
SYNCHRONOUS -> Known.SYNCHRONOUS
ASYNCHRONOUS -> Known.ASYNCHRONOUS
else -> throw IncreaseInvalidDataException("Unknown TransactionTiming: $value")
}
fun asString(): String = _value().asStringOrThrow()
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy