Documentation ¶
Overview ¶
Example (AckRead) ¶
Example_ackRead reads a ACK file
f, err := os.Open(filepath.Join("testdata", "ack-read.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } if err := achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Credit Total Amount: %v", strconv.Itoa(achFile.Control.TotalCreditEntryDollarAmountInFile)+"\n") fmt.Printf("Batch Credit Total Amount: %v", strconv.Itoa(achFile.Batches[0].GetEntries()[0].Amount)+"\n") fmt.Printf("SEC Code: %v", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Original Trace Number: %v", achFile.Batches[0].GetEntries()[0].OriginalTraceNumberField())
Output: Credit Total Amount: 0 Batch Credit Total Amount: 0 SEC Code: ACK Original Trace Number: 031300010000001
Example (AckWrite) ¶
Example_ackWrite writes an ACK File
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.CreditsOnly bh.CompanyName = "Name on Account" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.ACK bh.CompanyEntryDescription = "Vndr Pay" // need EffectiveEntryDate to be fixed so it can match output bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "23138010" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingZeroDollarRemittanceCredit entry.SetRDFI("031300012") entry.DFIAccountNumber = "744-5678-99" entry.Amount = 0 entry.SetOriginalTraceNumber("031300010000001") entry.SetReceivingCompany("Best. #1") entry.SetTraceNumber(bh.ODFIIdentification, 1) entryOne := ach.NewEntryDetail() // Fee Entry entryOne.TransactionCode = ach.CheckingZeroDollarRemittanceCredit entryOne.SetRDFI("031300012") entryOne.DFIAccountNumber = "744-5678-99" entryOne.Amount = 0 entryOne.SetOriginalTraceNumber("031300010000002") entryOne.SetReceivingCompany("Best. #1") entryOne.SetTraceNumber(bh.ODFIIdentification, 2) // build the batch batch := ach.NewBatchACK(bh) batch.AddEntry(entry) batch.AddEntry(entryOne) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[1].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5220Name on Account 231380104 ACKVndr Pay 190816 1231380100000001 624031300012744-5678-99 0000000000031300010000001Best. #1 0231380100000001 624031300012744-5678-99 0000000000031300010000002Best. #1 0231380100000002 82200000020006260002000000000000000000000000231380104 231380100000001 9000001000001000000020006260002000000000000000000000000
Example (AdvRead) ¶
f, err := os.Open(filepath.Join("testdata", "adv-read.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Credit Total Amount:%s", strconv.Itoa(achFile.ADVControl.TotalCreditEntryDollarAmountInFile)+"\n") fmt.Printf("Debit Total Amount:%s", strconv.Itoa(achFile.ADVControl.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("OriginatorStatusCode:%s", strconv.Itoa(achFile.Batches[0].GetHeader().OriginatorStatusCode)+"\n") fmt.Printf("Batch Credit Total Amount:%s", strconv.Itoa(achFile.Batches[0].GetADVControl().TotalCreditEntryDollarAmount)+"\n") fmt.Printf("Batch Debit Total Amount:%s", strconv.Itoa(achFile.Batches[0].GetADVControl().TotalDebitEntryDollarAmount)+"\n") fmt.Printf("SEC Code:%s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Entry Amount:%s", strconv.Itoa(achFile.Batches[0].GetADVEntries()[0].Amount)+"\n") fmt.Printf("Sequence Number:%s", strconv.Itoa(achFile.Batches[0].GetADVEntries()[0].SequenceNumber)+"\n") fmt.Printf("EntryOne Amount:%s", strconv.Itoa(achFile.Batches[0].GetADVEntries()[1].Amount)+"\n") fmt.Printf("EntryOne Sequence Number:%s", strconv.Itoa(achFile.Batches[0].GetADVEntries()[1].SequenceNumber)+"\n")
Output: Credit Total Amount:50000 Debit Total Amount:250000 OriginatorStatusCode:0 Batch Credit Total Amount:50000 Batch Debit Total Amount:250000 SEC Code:ADV Entry Amount:50000 Sequence Number:1 EntryOne Amount:250000 EntryOne Sequence Number:2
Example (AdvWrite) ¶
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.AutomatedAccountingAdvices bh.CompanyName = "Company Name, Inc" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.ADV bh.CompanyEntryDescription = "Accounting" bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "121042882" bh.OriginatorStatusCode = 0 entry := ach.NewADVEntryDetail() entry.TransactionCode = ach.CreditForDebitsOriginated // entry.SetRDFI("231380104") entry.DFIAccountNumber = "744-5678-99" entry.Amount = 50000 entry.AdviceRoutingNumber = "121042882" entry.FileIdentification = "11131" entry.ACHOperatorData = "" entry.IndividualName = "Name" entry.DiscretionaryData = "" entry.AddendaRecordIndicator = 0 entry.ACHOperatorRoutingNumber = "01100001" entry.JulianDay = 50 entry.SequenceNumber = 1 entryOne := ach.NewADVEntryDetail() entryOne.TransactionCode = ach.DebitForCreditsOriginated // entryOne.SetRDFI("231380104") entryOne.DFIAccountNumber = "744-5678-99" entryOne.Amount = 250000 entryOne.AdviceRoutingNumber = "121042882" entryOne.FileIdentification = "11139" entryOne.ACHOperatorData = "" entryOne.IndividualName = "Name" entryOne.DiscretionaryData = "" entryOne.AddendaRecordIndicator = 0 entryOne.ACHOperatorRoutingNumber = "01100001" entryOne.JulianDay = 50 entryOne.SequenceNumber = 2 // build the batch batch := ach.NewBatchADV(bh) batch.AddADVEntry(entry) batch.AddADVEntry(entryOne) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetADVEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetADVEntries()[1].String()+"\n") fmt.Printf("%s", file.Batches[0].GetADVControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5280Company Name, In 231380104 ADVAccounting 190816 0121042880000001 681231380104744-5678-99 00000005000012104288211131 Name 0011000010500001 682231380104744-5678-99 00000025000012104288211139 Name 0011000010500002 828000000200462760200000000000000025000000000000000000050000Company Name, Inc 121042880000001 9000000000000000000000000000000000000000000000000000000
Example (ArcReadDebit) ¶
f, err := os.Open(filepath.Join("testdata", "arc-debit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Amount Debit: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Check Serial Number: %s", achFile.Batches[0].GetEntries()[0].IdentificationNumber+"\n")
Output: Total Amount Debit: 250000 SEC Code: ARC Check Serial Number: 123879654
Example (ArcWriteDebit) ¶
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.DebitsOnly bh.CompanyName = "Payee Name" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.ARC bh.CompanyEntryDescription = "ACH ARC" bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "121042882" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingDebit entry.SetRDFI("231380104") entry.DFIAccountNumber = "12345678" entry.Amount = 250000 entry.SetCheckSerialNumber("123879654") entry.SetReceivingCompany("ABC Company") entry.SetTraceNumber(bh.ODFIIdentification, 1) // build the batch batch := ach.NewBatchARC(bh) batch.AddEntry(entry) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5225Payee Name 231380104 ARCACH ARC 190816 1121042880000001 62723138010412345678 0000250000123879654 ABC Company 0121042880000001 82250000010023138010000000250000000000000000231380104 121042880000001 9000001000001000000010023138010000000250000000000000000
Example (AtxRead) ¶
f, err := os.Open(filepath.Join("testdata", "atx-read.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Amount Debit: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("Total Amount Credit: %s", strconv.Itoa(achFile.Control.TotalCreditEntryDollarAmountInFile)+"\n") fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Total Amount: %s", strconv.Itoa(achFile.Batches[0].GetEntries()[0].Amount)+"\n") fmt.Printf("Original Trace Number: %s", achFile.Batches[0].GetEntries()[0].OriginalTraceNumberField()+"\n") fmt.Printf("Addenda1: %s", achFile.Batches[0].GetEntries()[0].Addenda05[0].String()+"\n") fmt.Printf("Addenda2: %s", achFile.Batches[0].GetEntries()[0].Addenda05[1].String()+"\n") fmt.Printf("Total Amount: %s", strconv.Itoa(achFile.Batches[0].GetEntries()[1].Amount)+"\n") fmt.Printf("Original Trace Number: %s", achFile.Batches[0].GetEntries()[1].OriginalTraceNumberField()+"\n") fmt.Printf("Addenda1: %s", achFile.Batches[0].GetEntries()[1].Addenda05[0].String()+"\n") fmt.Printf("Addenda2: %s", achFile.Batches[0].GetEntries()[1].Addenda05[1].String()+"\n")
Output: Total Amount Debit: 0 Total Amount Credit: 0 SEC Code: ATX Total Amount: 0 Original Trace Number: 031300010000001 Addenda1: 705Credit account 1 for service 00010000001 Addenda2: 705Credit account 2 for service 00020000001 Total Amount: 0 Original Trace Number: 031300010000002 Addenda1: 705Credit account 1 for leadership 00010000002 Addenda2: 705Credit account 2 for leadership 00020000002
Example (AtxWrite) ¶
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.CreditsOnly bh.CompanyName = "Name on Account" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.ATX bh.CompanyEntryDescription = "Vndr Pay" bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "23138010" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingZeroDollarRemittanceCredit entry.SetRDFI("031300012") entry.DFIAccountNumber = "744-5678-99" entry.Amount = 0 entry.SetOriginalTraceNumber("031300010000001") entry.SetCATXAddendaRecords(2) entry.SetCATXReceivingCompany("Receiver Company") entry.SetTraceNumber(bh.ODFIIdentification, 1) entry.DiscretionaryData = "01" entry.AddendaRecordIndicator = 1 entryOne := ach.NewEntryDetail() // Fee Entry entryOne.TransactionCode = ach.CheckingZeroDollarRemittanceCredit entryOne.SetRDFI("031300012") entryOne.DFIAccountNumber = "744-5678-99" entryOne.Amount = 0 entryOne.SetOriginalTraceNumber("031300010000002") entryOne.SetCATXAddendaRecords(2) entryOne.SetCATXReceivingCompany("Receiver Company") entryOne.SetTraceNumber(bh.ODFIIdentification, 2) entryOne.DiscretionaryData = "01" entryOne.AddendaRecordIndicator = 1 entryAd1 := ach.NewAddenda05() entryAd1.PaymentRelatedInformation = "Credit account 1 for service" entryAd1.SequenceNumber = 1 entryAd1.EntryDetailSequenceNumber = 0000001 entryAd2 := ach.NewAddenda05() entryAd2.PaymentRelatedInformation = "Credit account 2 for service" entryAd2.SequenceNumber = 2 entryAd2.EntryDetailSequenceNumber = 0000001 entryOneAd1 := ach.NewAddenda05() entryOneAd1.PaymentRelatedInformation = "Credit account 1 for leadership" entryOneAd1.SequenceNumber = 1 entryOneAd1.EntryDetailSequenceNumber = 0000002 entryOneAd2 := ach.NewAddenda05() entryOneAd2.PaymentRelatedInformation = "Credit account 2 for leadership" entryOneAd2.SequenceNumber = 2 entryOneAd2.EntryDetailSequenceNumber = 0000002 // build the batch batch := ach.NewBatchATX(bh) batch.AddEntry(entry) batch.GetEntries()[0].AddAddenda05(entryAd1) batch.GetEntries()[0].AddAddenda05(entryAd2) batch.AddEntry(entryOne) batch.GetEntries()[1].AddAddenda05(entryOneAd1) batch.GetEntries()[1].AddAddenda05(entryOneAd2) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].Addenda05[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[1].String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[1].Addenda05[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5220Name on Account 231380104 ATXVndr Pay 190816 1231380100000001 624031300012744-5678-99 00000000000313000100000010002Receiver Company 011231380100000001 705Credit account 1 for service 00010000001 624031300012744-5678-99 00000000000313000100000020002Receiver Company 011231380100000002 705Credit account 1 for leadership 00010000002 82200000060006260002000000000000000000000000231380104 231380100000001 9000001000001000000060006260002000000000000000000000000
Example (BocReadDebit) ¶
f, err := os.Open(filepath.Join("testdata", "boc-debit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Amount Debit: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Check Serial Number: %s", achFile.Batches[0].GetEntries()[0].IdentificationNumber+"\n")
Output: Total Amount Debit: 250000 SEC Code: BOC Check Serial Number: 123879654
Example (BocWriteDebit) ¶
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.DebitsOnly bh.CompanyName = "Payee Name" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.BOC bh.CompanyEntryDescription = "ACH BOC" bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "121042882" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingDebit entry.SetRDFI("231380104") entry.DFIAccountNumber = "12345678" entry.Amount = 250000 entry.SetCheckSerialNumber("123879654") entry.SetReceivingCompany("ABC Company") entry.SetTraceNumber(bh.ODFIIdentification, 1) // build the batch batch := ach.NewBatchBOC(bh) batch.AddEntry(entry) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5225Payee Name 231380104 BOCACH BOC 190816 1121042880000001 62723138010412345678 0000250000123879654 ABC Company 0121042880000001 82250000010023138010000000250000000000000000231380104 121042880000001 9000001000001000000010023138010000000250000000000000000
Example (CcdReadDebit) ¶
f, err := os.Open(filepath.Join("testdata", "ccd-debit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Amount Debit: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("Total Amount Credit: %s", strconv.Itoa(achFile.Control.TotalCreditEntryDollarAmountInFile)+"\n") fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("CCD Entry Identification Number: %s", achFile.Batches[0].GetEntries()[0].IdentificationNumber+"\n") fmt.Printf("CCD Entry Receiving Company: %s", achFile.Batches[0].GetEntries()[0].IndividualName+"\n") fmt.Printf("CCD Entry Trace Number: %s", achFile.Batches[0].GetEntries()[0].TraceNumberField()+"\n") fmt.Printf("CCD Fee Identification Number: %s", achFile.Batches[0].GetEntries()[1].IdentificationNumber+"\n") fmt.Printf("CCD Fee Receiving Company: %s", achFile.Batches[0].GetEntries()[1].IndividualName+"\n") fmt.Printf("CCD Fee Trace Number: %s", achFile.Batches[0].GetEntries()[1].TraceNumberField()+"\n")
Output: Total Amount Debit: 500125 Total Amount Credit: 0 SEC Code: CCD CCD Entry Identification Number: location1234567 CCD Entry Receiving Company: Best Co. #123456789012 CCD Entry Trace Number: 031300010000001 CCD Fee Identification Number: Fee123456789012 CCD Fee Receiving Company: Best Co. #123456789012 CCD Fee Trace Number: 031300010000002
Example (CcdWriteDebit) ¶
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.DebitsOnly bh.CompanyName = "Name on Account" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.CCD bh.CompanyEntryDescription = "Vndr Pay" bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "031300012" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingDebit entry.SetRDFI("231380104") entry.DFIAccountNumber = "744-5678-99" entry.Amount = 500000 entry.IdentificationNumber = "location #1234" entry.SetReceivingCompany("Best Co. #1") entry.SetTraceNumber(bh.ODFIIdentification, 1) entry.DiscretionaryData = "S" entryOne := ach.NewEntryDetail() entryOne.TransactionCode = ach.CheckingDebit entryOne.SetRDFI("231380104") entryOne.DFIAccountNumber = "744-5678-99" entryOne.Amount = 125 entryOne.IdentificationNumber = "Fee #1" entryOne.SetReceivingCompany("Best Co. #1") entryOne.SetTraceNumber(bh.ODFIIdentification, 2) entryOne.DiscretionaryData = "S" // build the batch batch := ach.NewBatchCCD(bh) batch.AddEntry(entry) batch.AddEntry(entryOne) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[1].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5225Name on Account 231380104 CCDVndr Pay 190816 1031300010000001 627231380104744-5678-99 0000500000location #1234 Best Co. #1 S 0031300010000001 627231380104744-5678-99 0000000125Fee #1 Best Co. #1 S 0031300010000002 82250000020046276020000000500125000000000000231380104 031300010000001 9000001000001000000020046276020000000500125000000000000
Example (CorReadCredit) ¶
Example_corReadCredit reads a COR file
f, err := os.Open(filepath.Join("testdata", "cor-read.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Amount Debit: %v", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("Total Amount Credit: %v", strconv.Itoa(achFile.Control.TotalCreditEntryDollarAmountInFile)+"\n") fmt.Printf("SEC Code: %v", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Entry Detail: %v", achFile.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("Addenda98: %v", achFile.Batches[0].GetEntries()[0].Addenda98.String()+"\n")
Output: Total Amount Debit: 0 Total Amount Credit: 0 SEC Code: COR Entry Detail: 621231380104744-5678-99 0000000000location #23 Best Co. #23 1121042880000001 Addenda98: 798C01121042880000001 121042881918171614 091012980000088
Example (CorWriteCredit) ¶
Example_corWriteCredit writes a COR file
// Example transfer to write a COR File fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.CreditsOnly bh.StandardEntryClassCode = ach.COR bh.CompanyName = "Your Company, inc" bh.CompanyIdentification = "121042882" bh.CompanyEntryDescription = "Vendor Pay" bh.ODFIIdentification = "121042882" // Originating Routing Number entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingReturnNOCCredit entry.SetRDFI("231380104") entry.DFIAccountNumber = "744-5678-99" entry.Amount = 0 entry.IdentificationNumber = "location #23" entry.SetReceivingCompany("Best Co. #23") entry.SetTraceNumber(bh.ODFIIdentification, 1) entry.AddendaRecordIndicator = 1 addenda98 := ach.NewAddenda98() addenda98.ChangeCode = "C01" addenda98.OriginalTrace = "121042880000001" addenda98.OriginalDFI = "121042882" addenda98.CorrectedData = "1918171614" addenda98.TraceNumber = "91012980000088" entry.Addenda98 = addenda98 entry.Category = ach.CategoryNOC // build the batch batch := ach.NewBatchCOR(bh) batch.AddEntry(entry) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].Addenda98.String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5220Your Company, in 121042882 CORVendor Pay 000000 1121042880000001 621231380104744-5678-99 0000000000location #23 Best Co. #23 1121042880000001 798C01121042880000001 121042881918171614 091012980000088 82200000020023138010000000000000000000000000121042882 121042880000001 9000001000001000000020023138010000000000000000000000000
Example (CtxReadDebit) ¶
f, err := os.Open(filepath.Join("testdata", "ctx-debit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Amount Debit: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("Total Amount Credit: %s", strconv.Itoa(achFile.Control.TotalCreditEntryDollarAmountInFile)+"\n") fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Addenda1: %s", achFile.Batches[0].GetEntries()[0].Addenda05[0].String()+"\n") fmt.Printf("Addenda2: %s", achFile.Batches[0].GetEntries()[0].Addenda05[1].String()+"\n")
Output: Total Amount Debit: 100000000 Total Amount Credit: 0 SEC Code: CTX Addenda1: 705Debit First Account 00010000001 Addenda2: 705Debit Second Account 00020000001
Example (CtxWriteDebit) ¶
Example_ctxWriteDebit writes a CTX debit file
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.DebitsOnly bh.CompanyName = "Name on Account" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.CTX bh.CompanyEntryDescription = "ACH CTX" bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "121042882" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingDebit entry.SetRDFI("231380104") entry.DFIAccountNumber = "12345678" entry.Amount = 100000000 entry.IdentificationNumber = "45689033" entry.SetCATXAddendaRecords(2) entry.SetCATXReceivingCompany("Receiver Company") entry.SetTraceNumber(bh.ODFIIdentification, 1) entry.DiscretionaryData = "01" addenda1 := ach.NewAddenda05() addenda1.PaymentRelatedInformation = "Debit First Account" addenda1.SequenceNumber = 1 addenda1.EntryDetailSequenceNumber = 0000001 addenda2 := ach.NewAddenda05() addenda2.PaymentRelatedInformation = "Debit Second Account" addenda2.SequenceNumber = 2 addenda2.EntryDetailSequenceNumber = 0000001 // build the batch batch := ach.NewBatchCTX(bh) batch.AddEntry(entry) batch.Entries[0].AddendaRecordIndicator = 1 batch.GetEntries()[0].AddAddenda05(addenda1) batch.GetEntries()[0].AddAddenda05(addenda2) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].Addenda05[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].Addenda05[1].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5225Name on Account 231380104 CTXACH CTX 190816 1121042880000001 62723138010412345678 010000000045689033 0002Receiver Company 011121042880000001 705Debit First Account 00010000001 705Debit Second Account 00020000001 82250000030023138010000100000000000000000000231380104 121042880000001 9000001000001000000030023138010000100000000000000000000
Example (DneRead) ¶
Example_dneRead reads a DNR file
f, err := os.Open(filepath.Join("testdata", "dne-read.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { panic(fmt.Sprintf("Issue reading file: %+v \n", err)) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Amount: %s", strconv.Itoa(achFile.Batches[0].GetEntries()[0].Amount)+"\n") fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Payment Related Information: %s", achFile.Batches[0].GetEntries()[0].Addenda05[0].String()+"\n")
Output: Total Amount: 0 SEC Code: DNE Payment Related Information: 705DATE OF DEATH*010218*CUSTOMERSSN*#########*AMOUNT*$$$$.cc\ 00010000001
Example (DneWrite) ¶
Example_dneWrite writes a DNR file
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.CreditsOnly bh.CompanyName = "Name on Account" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.DNE bh.CompanyEntryDescription = "Death" bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "23138010" bh.OriginatorStatusCode = 2 entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingReturnNOCCredit entry.SetRDFI("031300012") entry.DFIAccountNumber = "744-5678-99" entry.Amount = 0 entry.SetOriginalTraceNumber("031300010000001") entry.SetReceivingCompany("Best. #1") entry.SetTraceNumber(bh.ODFIIdentification, 1) addenda := ach.NewAddenda05() addenda.PaymentRelatedInformation = ` DATE OF DEATH*010218*CUSTOMERSSN*#########*AMOUNT*$$$$.cc\` entry.AddAddenda05(addenda) entry.AddendaRecordIndicator = 1 // build the batch batch := ach.NewBatchDNE(bh) batch.AddEntry(entry) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].Addenda05[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5220Name on Account 231380104 DNEDeath 190816 2231380100000001 621031300012744-5678-99 0000000000031300010000001Best. #1 1231380100000001 705 DATE OF DEATH*010218*CUSTOMERSSN*#########*AMOUNT*$$$$.cc\ 00010000001 82200000020003130001000000000000000000000000231380104 231380100000001 9000001000001000000020003130001000000000000000000000000
Example (EnrRead) ¶
Example_enrRead reads a ENR file
f, err := os.Open(filepath.Join("testdata", "enr-read.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { panic(fmt.Sprintf("Issue reading file: %+v \n", err)) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Amount: %s", strconv.Itoa(achFile.Batches[0].GetEntries()[0].Amount)+"\n") fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Payment Related Information: %s", achFile.Batches[0].GetEntries()[0].Addenda05[0].String()+"\n")
Output: Total Amount: 0 SEC Code: ENR Payment Related Information: 70522*12200004*3*123987654321*777777777*DOE*JOHN*1\ 00010000001
Example (EnrWrite) ¶
Example_enrWrite writes and ENR file
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.DebitsOnly bh.CompanyName = "Name on Account" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.ENR bh.CompanyEntryDescription = "AUTOENROLL" bh.ODFIIdentification = "23138010" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingDebit entry.SetRDFI("031300012") entry.DFIAccountNumber = "744-5678-99" entry.Amount = 0 entry.SetOriginalTraceNumber("031300010000001") entry.SetReceivingCompany("Best. #1") entry.SetTraceNumber(bh.ODFIIdentification, 1) addenda05 := ach.NewAddenda05() addenda05.PaymentRelatedInformation = `22*12200004*3*123987654321*777777777*DOE*JOHN*1\` // From NACHA 2013 Official Rules entry.AddAddenda05(addenda05) entry.AddendaRecordIndicator = 1 // build the batch batch := ach.NewBatchENR(bh) batch.AddEntry(entry) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].Addenda05[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5225Name on Account 231380104 ENRAUTOENROLL 1231380100000001 627031300012744-5678-99 0000000000031300010000001Best. #1 1231380100000001 70522*12200004*3*123987654321*777777777*DOE*JOHN*1\ 00010000001 82250000020003130001000000000000000000000000231380104 231380100000001 9000001000001000000020003130001000000000000000000000000
Example (IatReadMixedCreditDebit) ¶
Example_iatReadMixedCreditDebit reads a ACK file
f, err := os.Open(filepath.Join("testdata", "iat-mixedCreditDebit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } if err := achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("SEC Code: %s", achFile.IATBatches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Debit Entry: %s", achFile.IATBatches[0].Entries[0].String()+"\n") fmt.Printf("Addenda10: %s", achFile.IATBatches[0].Entries[0].Addenda10.String()+"\n") fmt.Printf("Addenda11: %s", achFile.IATBatches[0].Entries[0].Addenda11.String()+"\n") fmt.Printf("Addenda12: %s", achFile.IATBatches[0].Entries[0].Addenda12.String()+"\n") fmt.Printf("Addenda13: %s", achFile.IATBatches[0].Entries[0].Addenda13.String()+"\n") fmt.Printf("Addenda14: %s", achFile.IATBatches[0].Entries[0].Addenda14.String()+"\n") fmt.Printf("Addenda15: %s", achFile.IATBatches[0].Entries[0].Addenda15.String()+"\n") fmt.Printf("Addenda16: %s", achFile.IATBatches[0].Entries[0].Addenda16.String()+"\n") fmt.Printf("Addenda17: %s", achFile.IATBatches[0].Entries[0].Addenda17[0].String()+"\n") fmt.Printf("Addenda18: %s", achFile.IATBatches[0].Entries[0].Addenda18[0].String()+"\n") fmt.Printf("Total File Debit Amount: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("Credit Entry: %s", achFile.IATBatches[0].Entries[1].String()+"\n") fmt.Printf("Addenda10: %s", achFile.IATBatches[0].Entries[1].Addenda10.String()+"\n") fmt.Printf("Addenda11: %s", achFile.IATBatches[0].Entries[1].Addenda11.String()+"\n") fmt.Printf("Addenda12: %s", achFile.IATBatches[0].Entries[1].Addenda12.String()+"\n") fmt.Printf("Addenda13: %s", achFile.IATBatches[0].Entries[1].Addenda13.String()+"\n") fmt.Printf("Addenda14: %s", achFile.IATBatches[0].Entries[1].Addenda14.String()+"\n") fmt.Printf("Addenda15: %s", achFile.IATBatches[0].Entries[1].Addenda15.String()+"\n") fmt.Printf("Addenda16: %s", achFile.IATBatches[0].Entries[1].Addenda16.String()+"\n") fmt.Printf("Addenda17: %s", achFile.IATBatches[0].Entries[1].Addenda17[0].String()+"\n") fmt.Printf("Addenda18: %s", achFile.IATBatches[0].Entries[1].Addenda18[0].String()+"\n") fmt.Printf("Total File Credit Amount: %s", strconv.Itoa(achFile.Control.TotalCreditEntryDollarAmountInFile)+"\n")
Output: SEC Code: IAT Debit Entry: 6271210428820007 0000100000123456789 1231380100000001 Addenda10: 710ANN000000000000100000928383-23938 BEK Enterprises 0000001 Addenda11: 711BEK Solutions 15 West Place Street 0000001 Addenda12: 712JacobsTown*PA\ US*19305\ 0000001 Addenda13: 713Wells Fargo 01231380104 US 0000001 Addenda14: 714Citadel Bank 01121042882 CA 0000001 Addenda15: 7159874654932139872121 Front Street 0000001 Addenda16: 716LetterTown*AB\ CA*80014\ 0000001 Addenda17: 717This is an international payment 00010000001 Addenda18: 718Bank of France 01456456456987987 FR 00010000001 Total File Debit Amount: 100000 Credit Entry: 6221210428820007 0000100000123456789 1231380100000002 Addenda10: 710ANN000000000000100000928383-23938 ADCAF Enterprises 0000002 Addenda11: 711ADCAF Solutions 15 West Place Street 0000002 Addenda12: 712JacobsTown*PA\ US*19305\ 0000002 Addenda13: 713Wells Fargo 01231380104 US 0000002 Addenda14: 714Citadel Bank 01121042882 CA 0000002 Addenda15: 71598746549321398718 Fifth Street 0000002 Addenda16: 716LetterTown*AB\ CA*80014\ 0000002 Addenda17: 717This is an international payment 00010000002 Addenda18: 718Bank of France 01456456456987987 FR 00010000002 Total File Credit Amount: 100000
Example (IatWriteMixedCreditDebit) ¶
Example_iatWriteMixedCreditDebit writes a IAT mixed debit and credit file
fh := mockFileHeader() bh := ach.NewIATBatchHeader() bh.ServiceClassCode = ach.MixedDebitsAndCredits bh.ForeignExchangeIndicator = "FF" bh.ForeignExchangeReferenceIndicator = 3 bh.ISODestinationCountryCode = "US" bh.OriginatorIdentification = "123456789" bh.StandardEntryClassCode = ach.IAT bh.CompanyEntryDescription = "TRADEPAYMT" bh.ISOOriginatingCurrencyCode = "CAD" bh.ISODestinationCurrencyCode = "USD" bh.ODFIIdentification = "23138010" bh.EffectiveEntryDate = "190816" entry := ach.NewIATEntryDetail() entry.TransactionCode = ach.CheckingDebit entry.SetRDFI("121042882") entry.AddendaRecords = 007 entry.DFIAccountNumber = "123456789" entry.Amount = 100000 // 1000.00 entry.SetTraceNumber("23138010", 1) entry.Category = ach.CategoryForward addenda10 := ach.NewAddenda10() addenda10.TransactionTypeCode = "ANN" addenda10.ForeignPaymentAmount = 100000 addenda10.ForeignTraceNumber = "928383-23938" addenda10.Name = "BEK Enterprises" addenda10.EntryDetailSequenceNumber = 00000001 entry.Addenda10 = addenda10 addenda11 := ach.NewAddenda11() addenda11.OriginatorName = "BEK Solutions" addenda11.OriginatorStreetAddress = "15 West Place Street" addenda11.EntryDetailSequenceNumber = 00000001 entry.Addenda11 = addenda11 addenda12 := ach.NewAddenda12() addenda12.OriginatorCityStateProvince = "JacobsTown*PA\\" addenda12.OriginatorCountryPostalCode = "US*19305\\" addenda12.EntryDetailSequenceNumber = 00000001 entry.Addenda12 = addenda12 addenda13 := ach.NewAddenda13() addenda13.ODFIName = "Wells Fargo" addenda13.ODFIIDNumberQualifier = "01" addenda13.ODFIIdentification = "231380104" addenda13.ODFIBranchCountryCode = "US" addenda13.EntryDetailSequenceNumber = 00000001 entry.Addenda13 = addenda13 addenda14 := ach.NewAddenda14() addenda14.RDFIName = "Citadel Bank" addenda14.RDFIIDNumberQualifier = "01" addenda14.RDFIIdentification = "121042882" addenda14.RDFIBranchCountryCode = "CA" addenda14.EntryDetailSequenceNumber = 00000001 entry.Addenda14 = addenda14 addenda15 := ach.NewAddenda15() addenda15.ReceiverIDNumber = "987465493213987" addenda15.ReceiverStreetAddress = "2121 Front Street" addenda15.EntryDetailSequenceNumber = 00000001 entry.Addenda15 = addenda15 addenda16 := ach.NewAddenda16() addenda16.ReceiverCityStateProvince = "LetterTown*AB\\" addenda16.ReceiverCountryPostalCode = "CA*80014\\" addenda16.EntryDetailSequenceNumber = 00000001 entry.Addenda16 = addenda16 addenda17 := ach.NewAddenda17() addenda17.PaymentRelatedInformation = "This is an international payment" addenda17.SequenceNumber = 1 addenda17.EntryDetailSequenceNumber = 0000001 entry.AddAddenda17(addenda17) addenda18 := ach.NewAddenda18() addenda18.ForeignCorrespondentBankName = "Bank of France" addenda18.ForeignCorrespondentBankIDNumberQualifier = "01" addenda18.ForeignCorrespondentBankIDNumber = "456456456987987" addenda18.ForeignCorrespondentBankBranchCountryCode = "FR" addenda18.SequenceNumber = 3 addenda18.EntryDetailSequenceNumber = 0000001 entry.AddAddenda18(addenda18) entryTwo := ach.NewIATEntryDetail() entryTwo.TransactionCode = ach.CheckingCredit entryTwo.SetRDFI("121042882") entryTwo.AddendaRecords = 007 entryTwo.DFIAccountNumber = "123456789" entryTwo.Amount = 100000 // 1000.00 entryTwo.SetTraceNumber("23138010", 2) entryTwo.Category = ach.CategoryForward //addenda addenda10Two := ach.NewAddenda10() addenda10Two.TransactionTypeCode = "ANN" addenda10Two.ForeignPaymentAmount = 100000 addenda10Two.ForeignTraceNumber = "928383-23938" addenda10Two.Name = "ADCAF Enterprises" addenda10Two.EntryDetailSequenceNumber = 00000002 entryTwo.Addenda10 = addenda10Two addenda11Two := ach.NewAddenda11() addenda11Two.OriginatorName = "ADCAF Solutions" addenda11Two.OriginatorStreetAddress = "15 West Place Street" addenda11Two.EntryDetailSequenceNumber = 00000002 entryTwo.Addenda11 = addenda11Two addenda12Two := ach.NewAddenda12() addenda12Two.OriginatorCityStateProvince = "JacobsTown*PA\\" addenda12Two.OriginatorCountryPostalCode = "US*19305\\" addenda12Two.EntryDetailSequenceNumber = 00000002 entryTwo.Addenda12 = addenda12Two addenda13Two := ach.NewAddenda13() addenda13Two.ODFIName = "Wells Fargo" addenda13Two.ODFIIDNumberQualifier = "01" addenda13Two.ODFIIdentification = "231380104" addenda13Two.ODFIBranchCountryCode = "US" addenda13Two.EntryDetailSequenceNumber = 00000002 entryTwo.Addenda13 = addenda13Two addenda14Two := ach.NewAddenda14() addenda14Two.RDFIName = "Citadel Bank" addenda14Two.RDFIIDNumberQualifier = "01" addenda14Two.RDFIIdentification = "121042882" addenda14Two.RDFIBranchCountryCode = "CA" addenda14Two.EntryDetailSequenceNumber = 00000002 entryTwo.Addenda14 = addenda14Two addenda15Two := ach.NewAddenda15() addenda15Two.ReceiverIDNumber = "987465493213987" addenda15Two.ReceiverStreetAddress = "18 Fifth Street" addenda15Two.EntryDetailSequenceNumber = 00000002 entryTwo.Addenda15 = addenda15Two addenda16Two := ach.NewAddenda16() addenda16Two.ReceiverCityStateProvince = "LetterTown*AB\\" addenda16Two.ReceiverCountryPostalCode = "CA*80014\\" addenda16Two.EntryDetailSequenceNumber = 00000002 entryTwo.Addenda16 = addenda16Two addenda17Two := ach.NewAddenda17() addenda17Two.PaymentRelatedInformation = "This is an international payment" addenda17Two.SequenceNumber = 1 addenda17Two.EntryDetailSequenceNumber = 0000002 entryTwo.AddAddenda17(addenda17Two) addenda18Two := ach.NewAddenda18() addenda18Two.ForeignCorrespondentBankName = "Bank of France" addenda18Two.ForeignCorrespondentBankIDNumberQualifier = "01" addenda18Two.ForeignCorrespondentBankIDNumber = "456456456987987" addenda18Two.ForeignCorrespondentBankBranchCountryCode = "FR" addenda18Two.SequenceNumber = 3 addenda18Two.EntryDetailSequenceNumber = 0000002 entryTwo.AddAddenda18(addenda18Two) // build the batch batch := ach.NewIATBatch(bh) batch.AddEntry(entry) batch.AddEntry(entryTwo) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file achFile := ach.NewFile() achFile.SetHeader(fh) achFile.AddIATBatch(batch) if err := achFile.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("SEC Code: %s", achFile.IATBatches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Debit Entry: %s", achFile.IATBatches[0].Entries[0].String()+"\n") fmt.Printf("Addenda10: %s", achFile.IATBatches[0].Entries[0].Addenda10.String()+"\n") fmt.Printf("Addenda11: %s", achFile.IATBatches[0].Entries[0].Addenda11.String()+"\n") fmt.Printf("Addenda12: %s", achFile.IATBatches[0].Entries[0].Addenda12.String()+"\n") fmt.Printf("Addenda13: %s", achFile.IATBatches[0].Entries[0].Addenda13.String()+"\n") fmt.Printf("Addenda14: %s", achFile.IATBatches[0].Entries[0].Addenda14.String()+"\n") fmt.Printf("Addenda15: %s", achFile.IATBatches[0].Entries[0].Addenda15.String()+"\n") fmt.Printf("Addenda16: %s", achFile.IATBatches[0].Entries[0].Addenda16.String()+"\n") fmt.Printf("Addenda17: %s", achFile.IATBatches[0].Entries[0].Addenda17[0].String()+"\n") fmt.Printf("Addenda18: %s", achFile.IATBatches[0].Entries[0].Addenda18[0].String()+"\n") fmt.Printf("Total File Debit Amount: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("Credit Entry: %s", achFile.IATBatches[0].Entries[1].String()+"\n") fmt.Printf("Addenda10: %s", achFile.IATBatches[0].Entries[1].Addenda10.String()+"\n") fmt.Printf("Addenda11: %s", achFile.IATBatches[0].Entries[1].Addenda11.String()+"\n") fmt.Printf("Addenda12: %s", achFile.IATBatches[0].Entries[1].Addenda12.String()+"\n") fmt.Printf("Addenda13: %s", achFile.IATBatches[0].Entries[1].Addenda13.String()+"\n") fmt.Printf("Addenda14: %s", achFile.IATBatches[0].Entries[1].Addenda14.String()+"\n") fmt.Printf("Addenda15: %s", achFile.IATBatches[0].Entries[1].Addenda15.String()+"\n") fmt.Printf("Addenda16: %s", achFile.IATBatches[0].Entries[1].Addenda16.String()+"\n") fmt.Printf("Addenda17: %s", achFile.IATBatches[0].Entries[1].Addenda17[0].String()+"\n") fmt.Printf("Addenda18: %s", achFile.IATBatches[0].Entries[1].Addenda18[0].String()+"\n") fmt.Printf("Total File Credit Amount: %s", strconv.Itoa(achFile.Control.TotalCreditEntryDollarAmountInFile)+"\n")
Output: SEC Code: IAT Debit Entry: 6271210428820007 0000100000123456789 1231380100000001 Addenda10: 710ANN000000000000100000928383-23938 BEK Enterprises 0000001 Addenda11: 711BEK Solutions 15 West Place Street 0000001 Addenda12: 712JacobsTown*PA\ US*19305\ 0000001 Addenda13: 713Wells Fargo 01231380104 US 0000001 Addenda14: 714Citadel Bank 01121042882 CA 0000001 Addenda15: 7159874654932139872121 Front Street 0000001 Addenda16: 716LetterTown*AB\ CA*80014\ 0000001 Addenda17: 717This is an international payment 00010000001 Addenda18: 718Bank of France 01456456456987987 FR 00010000001 Total File Debit Amount: 100000 Credit Entry: 6221210428820007 0000100000123456789 1231380100000002 Addenda10: 710ANN000000000000100000928383-23938 ADCAF Enterprises 0000002 Addenda11: 711ADCAF Solutions 15 West Place Street 0000002 Addenda12: 712JacobsTown*PA\ US*19305\ 0000002 Addenda13: 713Wells Fargo 01231380104 US 0000002 Addenda14: 714Citadel Bank 01121042882 CA 0000002 Addenda15: 71598746549321398718 Fifth Street 0000002 Addenda16: 716LetterTown*AB\ CA*80014\ 0000002 Addenda17: 717This is an international payment 00010000002 Addenda18: 718Bank of France 01456456456987987 FR 00010000002 Total File Credit Amount: 100000
Example (MteReadDebit) ¶
f, err := os.Open(filepath.Join("testdata", "mte-read.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { panic(fmt.Sprintf("Issue reading file: %+v \n", err)) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Amount: %s", strconv.Itoa(achFile.Batches[0].GetEntries()[0].Amount)+"\n") fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Addenda02: %s", achFile.Batches[0].GetEntries()[0].Addenda02.String()+"\n")
Output: Total Amount: 10000 SEC Code: MTE Addenda02: 702 2005091234561224 321 East Market Street ANYTOWN VA231380100000001
Example (MteWriteDebit) ¶
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.DebitsOnly bh.CompanyName = "Merchant with ATM" // Merchant with the ATM bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.MTE bh.CompanyEntryDescription = "CASH WITHDRAW" bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "23138010" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingDebit entry.SetRDFI("031300012") entry.DFIAccountNumber = "744-5678-99" entry.Amount = 10000 entry.SetOriginalTraceNumber("031300010000001") entry.SetReceivingCompany("JANE DOE") entry.SetTraceNumber(bh.ODFIIdentification, 1) addenda02 := ach.NewAddenda02() addenda02.TerminalIdentificationCode = "200509" addenda02.TerminalLocation = "321 East Market Street" addenda02.TerminalCity = "ANYTOWN" addenda02.TerminalState = "VA" addenda02.TransactionSerialNumber = "123456" addenda02.TransactionDate = "1224" addenda02.TraceNumber = entry.TraceNumber entry.Addenda02 = addenda02 entry.AddendaRecordIndicator = 1 // build the batch batch := ach.NewBatchMTE(bh) batch.AddEntry(entry) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5225Merchant with AT 231380104 MTECASH WITHD 190816 1231380100000001 627031300012744-5678-99 0000010000031300010000001JANE DOE 1231380100000001 82250000020003130001000000010000000000000000231380104 231380100000001 9000001000001000000020003130001000000010000000000000000
Example (PopReadDebit) ¶
f, err := os.Open(filepath.Join("testdata", "pop-debit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Amount Debit: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("POP Check Serial Number: %s", achFile.Batches[0].GetEntries()[0].IdentificationNumber[0:9]+"\n") fmt.Printf("POP Terminal City: %s", achFile.Batches[0].GetEntries()[0].IdentificationNumber[9:13]+"\n") fmt.Printf("POP Terminal State: %s", achFile.Batches[0].GetEntries()[0].IdentificationNumber[13:15]+"\n")
Output: Total Amount Debit: 250500 SEC Code: POP POP Check Serial Number: 123456789 POP Terminal City: PHIL POP Terminal State: PA
Example (PopWriteDebit) ¶
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.DebitsOnly bh.CompanyName = "Originator" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.POP bh.CompanyEntryDescription = "ACH POP" bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "121042882" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingDebit entry.SetRDFI("231380104") entry.DFIAccountNumber = "12345678" entry.Amount = 250500 entry.SetTraceNumber(bh.ODFIIdentification, 1) entry.IndividualName = "Wade Arnold" entry.SetPOPCheckSerialNumber("123456") entry.SetPOPTerminalCity("PHIL") entry.SetPOPTerminalState("PA") // build the batch batch := ach.NewBatchPOP(bh) batch.AddEntry(entry) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5225Originator 231380104 POPACH POP 190816 1121042880000001 62723138010412345678 0000250500123456 PHILPAWade Arnold 0121042880000001 82250000010023138010000000250500000000000000231380104 121042880000001 9000001000001000000010023138010000000250500000000000000
Example (PosReadDebit) ¶
f, err := os.Open(filepath.Join("testdata", "pos-debit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Amount Debit: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("POS Card Transaction Type: %s", achFile.Batches[0].GetEntries()[0].DiscretionaryData+"\n") fmt.Printf("POS Trace Number: %s", achFile.Batches[0].GetEntries()[0].TraceNumber+"\n")
Output: Total Amount Debit: 100000000 SEC Code: POS POS Card Transaction Type: 01 POS Trace Number: 121042880000001
Example (PosWriteDebit) ¶
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.DebitsOnly bh.CompanyName = "Name on Account" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.POS bh.CompanyEntryDescription = "Sale" bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "121042882" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingDebit entry.SetRDFI("231380104") entry.DFIAccountNumber = "12345678" entry.Amount = 100000000 entry.SetTraceNumber(bh.ODFIIdentification, 1) entry.IndividualName = "Receiver Account Name" entry.DiscretionaryData = "01" entry.AddendaRecordIndicator = 1 addenda02 := ach.NewAddenda02() addenda02.ReferenceInformationOne = "REFONEA" addenda02.ReferenceInformationTwo = "REF" addenda02.TerminalIdentificationCode = "TERM02" addenda02.TransactionSerialNumber = "100049" addenda02.TransactionDate = "0614" addenda02.AuthorizationCodeOrExpireDate = "123456" addenda02.TerminalLocation = "Target Store 0049" addenda02.TerminalCity = "PHILADELPHIA" addenda02.TerminalState = "PA" addenda02.TraceNumber = "121042880000001" // build the batch batch := ach.NewBatchPOS(bh) batch.AddEntry(entry) batch.GetEntries()[0].Addenda02 = addenda02 if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].Addenda02.String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5225Name on Account 231380104 POSSale 190816 1121042880000001 62723138010412345678 0100000000 Receiver Account Name 011121042880000001 702REFONEAREFTERM021000490614123456Target Store 0049 PHILADELPHIA PA121042880000001 82250000020023138010000100000000000000000000231380104 121042880000001 9000001000001000000020023138010000100000000000000000000
Example (PpdReadCredit) ¶
Example_ppdReadCredit reads a PPD credit file
f, err := os.Open(filepath.Join("testdata", "ppd-credit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Total File Debit Amount: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("Total File Credit Amount: %s", strconv.Itoa(achFile.Control.TotalCreditEntryDollarAmountInFile)+"\n")
Output: SEC Code: PPD Total File Debit Amount: 0 Total File Credit Amount: 100000000
Example (PpdReadDebit) ¶
Example_ppdReadDebit reads a PPD debit file
f, err := os.Open(filepath.Join("testdata", "ppd-debit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Total File Debit Amount: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("Total File Credit Amount: %s", strconv.Itoa(achFile.Control.TotalCreditEntryDollarAmountInFile)+"\n")
Output: SEC Code: PPD Total File Debit Amount: 200000000 Total File Credit Amount: 0
Example (PpdReadSegmentFile) ¶
// open a file for reading. Any io.Reader Can be used fCredit, err := os.Open(filepath.Join("testdata", "segmentFile-ppd-credit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(fCredit) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } // open a file for reading. Any io.Reader Can be used fDebit, err := os.Open(filepath.Join("testdata", "segmentFile-ppd-debit.ach")) if err != nil { log.Fatal(err) } rDebit := ach.NewReader(fDebit) achFileDebit, err := rDebit.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFileDebit.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if achFileDebit.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Credit Amount: %s", strconv.Itoa(achFile.Control.TotalCreditEntryDollarAmountInFile)+"\n") fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Total Debit Amount: %s", strconv.Itoa(achFileDebit.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("SEC Code: %s", achFileDebit.Batches[0].GetHeader().StandardEntryClassCode+"\n")
Output: Total Credit Amount: 200000000 SEC Code: PPD Total Debit Amount: 200000000 SEC Code: PPD
Example (PpdWriteCredit) ¶
Example_ppdWriteCredit writes a PPD credit file
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.CreditsOnly bh.CompanyName = "Name on Account" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.PPD bh.CompanyEntryDescription = "REG.SALARY" // need EffectiveEntryDate to be fixed so it can match output bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "121042882" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingCredit entry.SetRDFI("231380104") entry.DFIAccountNumber = "987654321" entry.Amount = 100000000 entry.SetTraceNumber(bh.ODFIIdentification, 2) entry.IndividualName = "Credit Account 1" // build the batch batch := ach.NewBatchPPD(bh) batch.AddEntry(entry) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5220Name on Account 231380104 PPDREG.SALARY 190816 1121042880000001 622231380104987654321 0100000000 Credit Account 1 0121042880000002 82200000010023138010000000000000000100000000231380104 121042880000001 9000001000001000000010023138010000000000000000100000000
Example (PpdWriteDebit) ¶
// Example_ppdWriteDebit writes a PPD debit file
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.DebitsOnly bh.CompanyName = "Name on Account" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.PPD bh.CompanyEntryDescription = "REG.SALARY" // need EffectiveEntryDate to be fixed so it can match output bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "121042882" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingDebit entry.SetRDFI("231380104") // Receivers bank transit routing number entry.DFIAccountNumber = "123456789" // Receivers bank account number entry.Amount = 200000000 // Amount of transaction with no decimal. One dollar and eleven cents = 111 entry.SetTraceNumber(bh.ODFIIdentification, 1) entry.IndividualName = "Debit Account" // Identifies the receiver of the transaction // build the batch batch := ach.NewBatchPPD(bh) batch.AddEntry(entry) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5225Name on Account 231380104 PPDREG.SALARY 190816 1121042880000001 627231380104123456789 0200000000 Debit Account 0121042880000001 82250000010023138010000200000000000000000000231380104 121042880000001 9000001000001000000010023138010000200000000000000000000
Example (PpdWriteSegmentFile) ¶
// open a file for reading. Any io.Reader Can be used f, err := os.Open(filepath.Join("testdata", "ppd-mixedDebitCredit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } sfc := ach.NewSegmentFileConfiguration() creditFile, debitFile, err := achFile.SegmentFile(sfc) if err != nil { fmt.Printf("Could not segment the file: %v", err) } fmt.Printf("%s", creditFile.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", debitFile.Batches[0].GetEntries()[0].String()+"\n")
Output: 622231380104987654321 0100000000 Credit Account 1 0121042880000001 627231380104123456789 0200000000 Debit Account 0121042880000001
Example (RckReadDebit) ¶
// open a file for reading. Any io.Reader Can be used f, err := os.Open(filepath.Join("testdata", "rck-debit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Amount Debit: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Check Serial Number: %s", achFile.Batches[0].GetEntries()[0].IdentificationNumber+"\n")
Output: Total Amount Debit: 2400 SEC Code: RCK Check Serial Number: 123123123
Example (RckWriteDebit) ¶
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.DebitsOnly bh.CompanyName = "Name on Account" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.RCK bh.CompanyEntryDescription = "REDEPCHECK" bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "121042882" // Identifies the receivers account information // can be multiple entry's per batch entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingDebit entry.SetRDFI("231380104") entry.DFIAccountNumber = "12345678" entry.Amount = 2400 entry.SetTraceNumber(bh.ODFIIdentification, 1) entry.IndividualName = "Wade Arnold" entry.SetCheckSerialNumber("123123123") // build the batch batch := ach.NewBatchRCK(bh) batch.AddEntry(entry) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5225Name on Account 231380104 RCKREDEPCHECK 190816 1121042880000001 62723138010412345678 0000002400123123123 Wade Arnold 0121042880000001 82250000010023138010000000002400000000000000231380104 121042880000001 9000001000001000000010023138010000000002400000000000000
Example (ServerFileCreate) ¶
repo := server.NewRepositoryInMemory(24*time.Hour, nil) service := server.NewService(repo) logger := log.NewLogfmtLogger(os.Stderr) handler := server.MakeHTTPHandler(service, repo, logger) // Spin up a local HTTP server server := httptest.NewServer(handler) defer server.Close() // Read an Example ach.File in text/plain format file, err := os.Open(filepath.Join("testdata", "ppd-credit.ach")) if err != nil { lg.Fatal(err) } // Make our request req, err := http.NewRequest("POST", server.URL+"/files/create", file) if err != nil { lg.Fatal(err) } req.Header.Set("Content-Type", "text/plain") resp, err := server.Client().Do(req) if err != nil { lg.Fatal(err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { lg.Fatalf("got %d HTTP status code", resp.StatusCode) } fmt.Printf("%s", strconv.Itoa(resp.StatusCode)+"\n")
Output: 200
Example (ServerFileCreateJSON) ¶
repo := server.NewRepositoryInMemory(24*time.Hour, nil) service := server.NewService(repo) logger := log.NewLogfmtLogger(os.Stderr) handler := server.MakeHTTPHandler(service, repo, logger) // Spin up a local HTTP server server := httptest.NewServer(handler) defer server.Close() // Read an Example ach.File in JSON format file, err := os.Open(filepath.Join("testdata", "ppd-valid.json")) if err != nil { lg.Fatal(err) } // Make our request req, err := http.NewRequest("POST", server.URL+"/files/create", file) if err != nil { lg.Fatal(err) } req.Header.Set("Content-Type", "application/json") resp, err := server.Client().Do(req) if err != nil { lg.Fatal(err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { lg.Fatalf("got %d HTTP status code", resp.StatusCode) } fmt.Printf("%s", strconv.Itoa(resp.StatusCode)+"\n")
Output: 200
Example (ShrReadDebit) ¶
f, err := os.Open(filepath.Join("testdata", "shr-debit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Amount Debit: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("SHR Card Expiration Date: %s", achFile.Batches[0].GetEntries()[0].IdentificationNumber[0:4]+"\n") fmt.Printf("SHR Document Reference Number: %s", achFile.Batches[0].GetEntries()[0].IdentificationNumber[4:15]+"\n") fmt.Printf("SHR Individual Card Account Number: %s", achFile.Batches[0].GetEntries()[0].IndividualName)
Output: Total Amount Debit: 100000000 SEC Code: SHR SHR Card Expiration Date: 0722 SHR Document Reference Number: 12345678910 SHR Individual Card Account Number: 0001234567891123456789
Example (ShrWrite) ¶
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.DebitsOnly bh.CompanyName = "Name on Account" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.SHR bh.CompanyEntryDescription = "Payment" bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "121042882" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingDebit entry.SetRDFI("231380104") entry.DFIAccountNumber = "12345678" entry.Amount = 100000000 entry.SetTraceNumber(bh.ODFIIdentification, 1) entry.SetSHRCardExpirationDate("0722") entry.SetSHRDocumentReferenceNumber("12345678910") entry.SetSHRIndividualCardAccountNumber("1234567891123456789") entry.DiscretionaryData = "01" entry.AddendaRecordIndicator = 1 addenda02 := ach.NewAddenda02() addenda02.ReferenceInformationOne = "REFONEA" addenda02.ReferenceInformationTwo = "REF" addenda02.TerminalIdentificationCode = "TERM02" addenda02.TransactionSerialNumber = "100049" addenda02.TransactionDate = "0614" addenda02.AuthorizationCodeOrExpireDate = "123456" addenda02.TerminalLocation = "Target Store 0049" addenda02.TerminalCity = "PHILADELPHIA" addenda02.TerminalState = "PA" addenda02.TraceNumber = "121042880000001" // build the batch batch := ach.NewBatchSHR(bh) batch.AddEntry(entry) batch.GetEntries()[0].Addenda02 = addenda02 if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].Addenda02.String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5225Name on Account 231380104 SHRPayment 190816 1121042880000001 62723138010412345678 01000000000722123456789100001234567891123456789011121042880000001 702REFONEAREFTERM021000490614123456Target Store 0049 PHILADELPHIA PA121042880000001 82250000020023138010000100000000000000000000231380104 121042880000001 9000001000001000000020023138010000100000000000000000000
Example (TelReadDebit) ¶
f, err := os.Open(filepath.Join("testdata", "tel-debit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Amount Debit: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n")
Output: Total Amount Debit: 50000 SEC Code: TEL
Example (TelWriteDebit) ¶
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.DebitsOnly bh.CompanyName = "Name on Account" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.TEL bh.CompanyEntryDescription = "Payment" bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "121042882" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingDebit entry.SetRDFI("231380104") entry.DFIAccountNumber = "12345678" entry.Amount = 50000 entry.SetTraceNumber(bh.ODFIIdentification, 1) entry.IndividualName = "Receiver Account Name" // build the batch batch := ach.NewBatchTEL(bh) batch.AddEntry(entry) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5225Name on Account 231380104 TELPayment 190816 1121042880000001 62723138010412345678 0000050000 Receiver Account Name 0121042880000001 82250000010023138010000000050000000000000000231380104 121042880000001 9000001000001000000010023138010000000050000000000000000
Example (TrcReadDebit) ¶
f, err := os.Open(filepath.Join("testdata", "trc-debit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Amount Debit: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Check Serial Number: %s", achFile.Batches[0].GetEntries()[0].IdentificationNumber+"\n") fmt.Printf("Process Control Field: %s", achFile.Batches[0].GetEntries()[0].IndividualName[0:6]+"\n") fmt.Printf("Item Research Number: %s", achFile.Batches[0].GetEntries()[0].IndividualName[6:22]+"\n") fmt.Printf("Item Type Indicator: %s", achFile.Batches[0].GetEntries()[0].DiscretionaryData+"\n")
Output: Total Amount Debit: 250000 SEC Code: TRC Check Serial Number: 123456789012345 Process Control Field: CHECK1 Item Research Number: 1234567890123456 Item Type Indicator: 01
Example (TrcWriteDebit) ¶
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.DebitsOnly bh.CompanyName = "Payee Name" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.TRC bh.CompanyEntryDescription = "ACH TRC" bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "121042882" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingDebit entry.SetRDFI("231380104") entry.DFIAccountNumber = "12345678" entry.Amount = 250000 entry.SetCheckSerialNumber("123456789012345") entry.SetProcessControlField("CHECK1") entry.SetItemResearchNumber("1234567890123456") entry.SetItemTypeIndicator("01") entry.SetTraceNumber(bh.ODFIIdentification, 1) // build the batch batch := ach.NewBatchTRC(bh) batch.AddEntry(entry) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5225Payee Name 231380104 TRCACH TRC 190816 1121042880000001 62723138010412345678 0000250000123456789012345CHECK11234567890123456010121042880000001 82250000010023138010000000250000000000000000231380104 121042880000001 9000001000001000000010023138010000000250000000000000000
Example (TrxReadDebit) ¶
f, err := os.Open(filepath.Join("testdata", "trx-debit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Amount Debit: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("Total Amount Credit: %s", strconv.Itoa(achFile.Control.TotalCreditEntryDollarAmountInFile)+"\n") fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Item Type Indicator: %s", achFile.Batches[0].GetEntries()[0].ItemTypeIndicator()+"\n") fmt.Printf("Addenda1: %s", achFile.Batches[0].GetEntries()[0].Addenda05[0].String()+"\n") fmt.Printf("Addenda2: %s", achFile.Batches[0].GetEntries()[0].Addenda05[1].String()+"\n")
Output: Total Amount Debit: 250000 Total Amount Credit: 0 SEC Code: TRX Item Type Indicator: 01 Addenda1: 705Debit First Account 00010000001 Addenda2: 705Debit Second Account 00020000001
Example (TrxWriteDebit) ¶
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.DebitsOnly bh.CompanyName = "Name on Account" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.TRX bh.CompanyEntryDescription = "ACH TRX" bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "121042882" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingDebit entry.SetRDFI("231380104") entry.DFIAccountNumber = "12345678" entry.Amount = 250000 entry.IdentificationNumber = "45689033" entry.SetCATXAddendaRecords(2) entry.SetCATXReceivingCompany("Receiver Company") entry.SetTraceNumber(bh.ODFIIdentification, 1) entry.SetItemTypeIndicator("01") addenda1 := ach.NewAddenda05() addenda1.PaymentRelatedInformation = "Debit First Account" addenda1.SequenceNumber = 1 addenda1.EntryDetailSequenceNumber = 0000001 addenda2 := ach.NewAddenda05() addenda2.PaymentRelatedInformation = "Debit Second Account" addenda2.SequenceNumber = 2 addenda2.EntryDetailSequenceNumber = 0000001 // build the batch batch := ach.NewBatchTRX(bh) batch.AddEntry(entry) batch.Entries[0].AddendaRecordIndicator = 1 batch.GetEntries()[0].AddAddenda05(addenda1) batch.GetEntries()[0].AddAddenda05(addenda2) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].Addenda05[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].Addenda05[1].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5225Name on Account 231380104 TRXACH TRX 190816 1121042880000001 62723138010412345678 000025000045689033 0002Receiver Company 011121042880000001 705Debit First Account 00010000001 705Debit Second Account 00020000001 82250000030023138010000000250000000000000000231380104 121042880000001 9000001000001000000030023138010000000250000000000000000
Example (WebReadCredit) ¶
Example_webReadCredit reads a WEB credit file
// open a file for reading. Any io.Reader Can be used f, err := os.Open(filepath.Join("testdata", "web-credit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Total File Debit Amount: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("Total File Credit Amount: %s", strconv.Itoa(achFile.Control.TotalCreditEntryDollarAmountInFile)+"\n")
Output: SEC Code: WEB Total File Debit Amount: 0 Total File Credit Amount: 10000
Example (WebWriteCredit) ¶
Example_webWriteCredit writes a WEB credit file
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.CreditsOnly bh.CompanyName = "Name on Account" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.WEB bh.CompanyEntryDescription = "Subscribe" // need EffectiveEntryDate to be fixed so it can match output bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "121042882" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingCredit entry.SetRDFI("231380104") entry.DFIAccountNumber = "12345678" entry.Amount = 10000 entry.IndividualName = "John Doe" entry.SetTraceNumber(bh.ODFIIdentification, 1) entry.IdentificationNumber = "#789654" entry.DiscretionaryData = "S" entry.Category = ach.CategoryForward entry.AddendaRecordIndicator = 1 addenda1 := ach.NewAddenda05() addenda1.PaymentRelatedInformation = "PAY-GATE payment\\" entry.AddAddenda05(addenda1) // build the batch batch := ach.NewBatchWEB(bh) batch.AddEntry(entry) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].Addenda05[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5220Name on Account 231380104 WEBSubscribe 190816 1121042880000001 62223138010412345678 0000010000#789654 John Doe S 1121042880000001 705PAY-GATE payment\ 00010000001 82200000020023138010000000000000000000010000231380104 121042880000001 9000001000001000000020023138010000000000000000000010000
Example (XckReadDebit) ¶
f, err := os.Open(filepath.Join("testdata", "xck-debit.ach")) if err != nil { log.Fatal(err) } r := ach.NewReader(f) achFile, err := r.Read() if err != nil { fmt.Printf("Issue reading file: %+v \n", err) } // ensure we have a validated file structure if achFile.Validate(); err != nil { fmt.Printf("Could not validate entire read file: %v", err) } // If you trust the file but it's formatting is off building will probably resolve the malformed file. if err := achFile.Create(); err != nil { fmt.Printf("Could not create file with read properties: %v", err) } fmt.Printf("Total Amount Debit: %s", strconv.Itoa(achFile.Control.TotalDebitEntryDollarAmountInFile)+"\n") fmt.Printf("SEC Code: %s", achFile.Batches[0].GetHeader().StandardEntryClassCode+"\n") fmt.Printf("Check Serial Number: %s", achFile.Batches[0].GetEntries()[0].IdentificationNumber+"\n") fmt.Printf("Process Control Field: %s", achFile.Batches[0].GetEntries()[0].IndividualName[0:6]+"\n") fmt.Printf("Item Research Number: %s", achFile.Batches[0].GetEntries()[0].IndividualName[6:22]+"\n")
Output: Total Amount Debit: 250000 SEC Code: XCK Check Serial Number: 123456789012345 Process Control Field: CHECK1 Item Research Number: 1234567890123456
Example (XckWriteDebit) ¶
fh := mockFileHeader() bh := ach.NewBatchHeader() bh.ServiceClassCode = ach.DebitsOnly bh.CompanyName = "Payee Name" bh.CompanyIdentification = fh.ImmediateOrigin bh.StandardEntryClassCode = ach.XCK bh.CompanyEntryDescription = "ACH XCK" bh.EffectiveEntryDate = "190816" bh.ODFIIdentification = "121042882" entry := ach.NewEntryDetail() entry.TransactionCode = ach.CheckingDebit entry.SetRDFI("231380104") entry.DFIAccountNumber = "12345678" entry.Amount = 250000 entry.SetCheckSerialNumber("123456789012345") entry.SetProcessControlField("CHECK1") entry.SetItemResearchNumber("1234567890123456") entry.SetTraceNumber(bh.ODFIIdentification, 1) // build the batch batch := ach.NewBatchXCK(bh) batch.AddEntry(entry) if err := batch.Create(); err != nil { log.Fatalf("Unexpected error building batch: %s\n", err) } // build the file file := ach.NewFile() file.SetHeader(fh) file.AddBatch(batch) if err := file.Create(); err != nil { log.Fatalf("Unexpected error building file: %s\n", err) } fmt.Printf("%s", file.Header.String()+"\n") fmt.Printf("%s", file.Batches[0].GetHeader().String()+"\n") fmt.Printf("%s", file.Batches[0].GetEntries()[0].String()+"\n") fmt.Printf("%s", file.Batches[0].GetControl().String()+"\n") fmt.Printf("%s", file.Control.String()+"\n")
Output: 101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678 5225Payee Name 231380104 XCKACH XCK 190816 1121042880000001 62723138010412345678 0000250000123456789012345CHECK11234567890123456 0121042880000001 82250000010023138010000000250000000000000000231380104 121042880000001 9000001000001000000010023138010000000250000000000000000