Class: DCAS::AchReturn

Inherits:
Response show all
Defined in:
lib/dcas/ach_return.rb

Constant Summary collapse

DESCRIPTIONS =
{
  'C01' => 'Incorrect DFI account number',
  'C02' => 'Incorrect T/R number',
  'C03' => 'Incorrect T/R number and incorrect DFI account number',
  'C04' => 'Incorrect indvidual name/receiving company name',
  'C05' => 'Incorrect transaction codes',
  'C06' => 'Incorrect DFI account number and incorrect transaction code',
  'C07' => 'Incorrect T/R number, incorrect DFI number and incorrect transaction code',
  'C08' => 'Reserved',
  'C09' => 'Incorrect individual identification number',
  'C10' => 'Incorrect company name',
  'C11' => 'Incorrect',
  'C12' => 'Incorrect company name and company identification',
  'C13' => 'Addenda format error',
  'C61' => 'Misrouted notification change',
  'C62' => 'Incorrect trace number',
  'C63' => 'Incorrect company identification number',
  'C64' => 'Incorrect individual identification number/identification number',
  'C65' => 'Incorrectly formatted corrected data',
  'C66' => 'Incorrect discretionary data',
  'C67' => 'Routing number not from original entry detail record',
  'C68' => 'DFI account number not from original entry detail record',
  'C69' => 'Incorrect transaction code',
  'R01' => 'Insufficient funds',
  'R02' => 'Account closed',
  'R03' => 'No account/Unable to locate account',
  'R04' => 'Invalid account number',
  'R05' => 'Reserved',
  'R06' => 'Returned per Originating DFIs request',
  'R07' => 'Authorization revoked by customer',
  'R08' => 'Payment stopped',
  'R09' => 'Uncollected Funds',
  'R10' => 'Customer advises not authorized',
  'R11' => 'Check truncation entry return',
  'R12' => 'Branch sold to another DFI',
  'R13' => 'Receiving DFI not qualified to participate',
  'R14' => 'Account-holder deceased',
  'R15' => 'Beneficiary deceased',
  'R16' => 'Account frozen',
  'R17' => 'File record edit criteria',
  'R18' => 'Improper effective entry date',
  'R19' => 'Amount field error',
  'R20' => 'Non-transaction account',
  'R21' => 'Invalid company identification',
  'R22' => 'Invalid individual ID number',
  'R23' => 'Credit entry refused by receiver',
  'R24' => 'Duplicate entry',
  'R25' => 'Addenda error',
  'R26' => 'Mandatory field error',
  'R27' => 'Trace number error',
  'R28' => 'Transit/Routing check digit error',
  'R29' => 'Corporate customer advises not authorized',
  'R30' => 'Receiving DFI not participant in check truncation program',
  'R31' => 'Permissible return entry',
  'R32' => 'RDFI - non-settlement',
  'R33' => 'Return for XCK',
  'R34' => 'Limited participation DFI',
  '900' => 'Edit Reject',
  '901' => 'Non-Sufficient Funds',
  '902' => 'Cannot Trace',
  '903' => 'Payment Stopped/Recalled',
  '904' => 'Post/Stale Dated',
  '905' => 'Account Closed',
  '906' => 'Account Transferred',
  '907' => 'No Checquing Privileges',
  '908' => 'Funds Not Cleared',
  '910' => 'Payer/Payee Deceased',
  '911' => 'Account Frozen',
  '912' => 'Invalid/Incorrect Account Number',
  '914' => 'Incorrect Payer/Payee Name',
  '915' => 'Refused By Payer/Payee',
  '990' => 'Institution In Default',
  '998' => 'No Agreement For Returns'
}
ACH_RET_CODES =
{
  'A' => 'G',
  'C' => 'I',
  'R' => 'D',
  '9' => 'D'
}

Constants inherited from Response

Response::CC_RET_CODES

Instance Attribute Summary

Attributes inherited from Response

#account_number, #ach_submitted, #check_number, #client_id, #description, #information, #status

Instance Method Summary collapse

Methods inherited from Response

#attributes, #attributes=, each_response_in, #invalid?, responses_in

Constructor Details

#initialize(batch_id, attrs = {}) ⇒ AchReturn

Returns a new instance of AchReturn.



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/dcas/ach_return.rb', line 84

def initialize(batch_id,attrs={})
  new_attrs = {}
  nattrs = attrs.dup
  if nattrs.is_a?(Hash) # Is xml-hash
    nattrs.stringify_keys!
    # status, order_number, transacted_at, transaction_id, description
    new_attrs = nattrs
  elsif nattrs.respond_to?('[]') # Is csv row
    # GotoBilling: MerchantID,FirstName,LastName,CustomerID,Amount,SentDate,SettleDate,TransactionID,TransactionType,Status,Description
    # DCAS:        RT,BankABA,AccountNumber,CheckNumber,Amount,ReturnCode,Description,CustTraceCode
    # ret could be 0 (denied), 1 (approved), 2 (call for authorization), or 99 (error)
    status = ACH_RET_CODES[nattrs[5][0..0]]
    new_attrs = {
      :account_number => nattrs[2],
      :check_number => nattrs[3],
      :client_id    => nattrs[7] ? nattrs[7][4..-1] : nil
    }
    if status == 'I'
      new_attrs[:information] = "#{DESCRIPTIONS[nattrs[5]]} (#{nattrs[6]})"
    else
      new_attrs[:status]      = status
      new_attrs[:description] = "#{DESCRIPTIONS[nattrs[5]]} (#{nattrs[6]})"
    end
  end
  self.attributes = new_attrs
  self.batch_id = batch_id
end

Instance Method Details

#record_to_transaction!Object



118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/dcas/ach_return.rb', line 118

def record_to_transaction!
  return unless transaction.status != status && transaction.description != description

  transaction.transaction_id = 0 if transaction.transaction_id.to_i != 0 && transaction.status == 'G' && status == 'D' # Was accepted, now declined.

  if status == 'I'
    transaction.information = information
  else
    transaction.description = description
  end
  transaction.status = status
  transaction. =  if 
  transaction.save
end

#transactionObject



112
113
114
115
116
# File 'lib/dcas/ach_return.rb', line 112

def transaction
  @transaction ||= GotoTransaction.find_by_batch_id_and_client_id(self.batch_id, self.client_id)
  @transaction ||= GotoTransaction.(self.batch_id, self., self.check_number)
  @transaction
end