diff options
author | Ivan Kohler <ivan@freeside.biz> | 2013-01-20 01:38:28 -0800 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2013-01-20 01:38:28 -0800 |
commit | 4918b795f15330720ac379fde8d99855ece06c17 (patch) | |
tree | 0d15034804ed62eebcb6ecebc8a0c767ea003182 /FS/FS/pay_batch | |
parent | 1df8ca6e580bffa11c412b8ae59cd98028ed6470 (diff) |
NACHA batching, RT#20443
Diffstat (limited to 'FS/FS/pay_batch')
-rw-r--r-- | FS/FS/pay_batch/nacha.pm | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/FS/FS/pay_batch/nacha.pm b/FS/FS/pay_batch/nacha.pm index 999cd9eb9..17c175daf 100644 --- a/FS/FS/pay_batch/nacha.pm +++ b/FS/FS/pay_batch/nacha.pm @@ -1,13 +1,15 @@ package FS::pay_batch::nacha; use strict; -use vars qw( %import_info %export_info $name $conf ); +use vars qw( %import_info %export_info $name $conf $entry_hash $DEBUG ); use Date::Format; #use Time::Local 'timelocal'; #use FS::Conf; $name = 'NACHA'; +$DEBUG = 1; + %import_info = ( #XXX stub finish me 'filetype' => 'CSV', @@ -57,6 +59,10 @@ $name = 'NACHA'; #though they would probably want them numbered per company my $batchnum = substr( ('0'x7). $pay_batch->batchnum, -7); + $entry_hash = 0; + + warn "building File & Batch Header Records\n" if $DEBUG; + ## # File Header Record ## @@ -113,19 +119,28 @@ $name = 'NACHA'; my ($account, $aba) = split('@', $cust_pay_batch->payinfo); + # "Total of all positions 4-11 on each 6 record" + $entry_hash += substr($aba,0,8); + my $cust_main = $cust_pay_batch->cust_main; my $cust_identifier = substr($cust_main->display_custnum. (' 'x15), 0, 15); + #XXX paytype should actually be in the batch, but this will do for now + #27 checking debit, 37 savings debit + my $transaction_code = ( $cust_main->paytype =~ /savings/i ? '37' : '27' ); + my $cust_name = substr($cust_main->name. (' 'x22), 0, 22); #non-PPD transactions? future + warn "building PPD Record\n" if $DEBUG; + ### # PPD Entry Detail Record ### '6'. #Record Type Code - '27'. #27 checking debit, 37 savings debit XXX + $transaction_code. #Transaction Code $aba. #Receiving DFI Identification, check digit substr($account.(' 'x17), 0, 17). #DFI Account number (Left justify) sprintf('%010d', $cust_pay_batch->amount * 100). #Amount @@ -140,6 +155,9 @@ $name = 'NACHA'; 'footer' => sub { my( $pay_batch, $batchcount, $batchtotal ) = @_; + #Only use the final 10 positions in the entry + $entry_hash = substr( '00'.$entry_hash, -10); + $conf->config('batchconfig-nacha-destination') =~ /^\s*(\d{9})\s*$/ or die 'illegal NACHA Destination'; my $dest = $1; @@ -150,6 +168,8 @@ $name = 'NACHA'; my $batchnum = substr( ('0'x7). $pay_batch->batchnum, -7); + warn "building Batch and File Control Records\n" if $DEBUG; + ### # Batch Control Record ### @@ -158,7 +178,7 @@ $name = 'NACHA'; '225'. #Service Class Code (220 credits only, # 200 mixed debits&credits) sprintf('%06d', $batchcount). #Entry / Addenda Count - '1234567890'. #XXX "Entry Hash" Total of all positions 4-11 on each 6 record. Only use the final 10 positions in the entry + $entry_hash. sprintf('%012d', $batchtotal * 100). #Debit total '000000000000'. #Credit total $origin. #Company Identification (Immediate Origin) @@ -175,7 +195,7 @@ $name = 'NACHA'; '000001'. #Batch Counter (# of batch header recs) sprintf('%06d', $batchcount + 4). #num of physical blocks on the file..? sprintf('%08d', $batchcount). #total # of entry detail and addenda - '1234567890'. #XXX "Entry Hash" Total of all positions 4-11 on each 6 record. Only use the final 10 positions in the entry + $entry_hash. sprintf('%012d', $batchtotal * 100). #Debit total '000000000000'. #Credit total ( ' 'x39 ) #Reserved / blank |