Skip to content

Commit 835751c

Browse files
authored
Merge pull request #1699 from moov-io/fix-issue-1697
fix: read C06 by length first
2 parents 14b0551 + 3445642 commit 835751c

File tree

2 files changed

+49
-6
lines changed

2 files changed

+49
-6
lines changed

addenda98.go

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -308,10 +308,12 @@ func (addenda98 *Addenda98) ParseCorrectedData() *CorrectedData {
308308
if v := first(17, data); v != "" {
309309
return &CorrectedData{AccountNumber: v}
310310
}
311+
311312
case "C02": // Incorrect Routing Number
312313
if v := first(9, data); v != "" {
313314
return &CorrectedData{RoutingNumber: v}
314315
}
316+
315317
case "C03": // Incorrect Routing Number and Incorrect DFI Account Number
316318
parts := strings.Fields(data)
317319
if len(parts) == 2 {
@@ -320,24 +322,40 @@ func (addenda98 *Addenda98) ParseCorrectedData() *CorrectedData {
320322
AccountNumber: parts[1],
321323
}
322324
}
325+
323326
case "C04": // Incorrect Individual Name
324327
if v := first(22, data); v != "" {
325328
return &CorrectedData{Name: v}
326329
}
330+
327331
case "C05": // Incorrect Transaction Code
328332
if n, err := strconv.Atoi(first(2, data)); err == nil {
329333
return &CorrectedData{TransactionCode: n}
330334
}
335+
331336
case "C06": // Incorrect DFI Account Number and Incorrect Transaction Code
332-
parts := strings.Fields(data)
333-
if len(parts) == 2 {
334-
if n, err := strconv.Atoi(parts[1]); err == nil {
335-
return &CorrectedData{
336-
AccountNumber: parts[0],
337-
TransactionCode: n,
337+
var out CorrectedData
338+
if utf8.RuneCountInString(data) > 17 {
339+
out.AccountNumber = first(17, data)
340+
341+
n, err := strconv.Atoi(strings.TrimSpace(data[17:]))
342+
if err == nil {
343+
out.TransactionCode = n
344+
return &out
345+
}
346+
} else {
347+
parts := strings.Fields(data)
348+
if len(parts) == 2 {
349+
out.AccountNumber = parts[0]
350+
351+
if n, err := strconv.Atoi(parts[1]); err == nil {
352+
out.TransactionCode = n
353+
return &out
338354
}
339355
}
340356
}
357+
return nil
358+
341359
case "C07": // Incorrect Routing Number, Incorrect DFI Account Number, and Incorrect Tranaction Code
342360
var cd CorrectedData
343361
if n := len(data); n > 9 {
@@ -355,6 +373,7 @@ func (addenda98 *Addenda98) ParseCorrectedData() *CorrectedData {
355373
} else {
356374
return nil
357375
}
376+
358377
case "C09": // Incorrect Individual Identification Number
359378
if v := first(22, data); v != "" {
360379
return &CorrectedData{Identification: v}

test/issues/issue1697_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package issues
2+
3+
import (
4+
"testing"
5+
6+
"github.com/moov-io/ach"
7+
8+
"github.com/stretchr/testify/require"
9+
)
10+
11+
func TestIssue1697(t *testing.T) {
12+
correction := ach.NewAddenda98()
13+
correction.ChangeCode = "C06"
14+
correction.CorrectedData = "123456789 111 22"
15+
16+
data := correction.ParseCorrectedData()
17+
require.NotNil(t, data)
18+
19+
require.Equal(t, "123456789 111", data.AccountNumber)
20+
require.Empty(t, data.RoutingNumber)
21+
require.Empty(t, data.Name)
22+
require.Equal(t, ach.CheckingCredit, data.TransactionCode)
23+
require.Empty(t, data.Identification)
24+
}

0 commit comments

Comments
 (0)