Skip to content

Commit e2fc925

Browse files
committed
fix: allow EntryDetailSequenceNumber to be zero (or greater)
Fixes: #1595
1 parent fc5b276 commit e2fc925

22 files changed

+46
-20
lines changed

addenda05.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ func (addenda05 *Addenda05) fieldInclusion() error {
163163
if addenda05.SequenceNumber == 0 {
164164
return fieldError("SequenceNumber", ErrConstructor, addenda05.SequenceNumberField())
165165
}
166-
if addenda05.EntryDetailSequenceNumber == 0 {
166+
if addenda05.EntryDetailSequenceNumber < 0 {
167167
return fieldError("EntryDetailSequenceNumber", ErrConstructor, addenda05.EntryDetailSequenceNumberField())
168168
}
169169
return nil

addenda05_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ func BenchmarkAddenda05String(b *testing.B) {
117117

118118
func TestAddenda05FieldInclusion(t *testing.T) {
119119
addenda05 := mockAddenda05()
120-
addenda05.EntryDetailSequenceNumber = 0
120+
addenda05.EntryDetailSequenceNumber = -1
121121
err := addenda05.Validate()
122122
if !base.Match(err, ErrConstructor) {
123123
t.Errorf("%T: %s", err, err)

addenda10.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ func (addenda10 *Addenda10) fieldInclusion() error {
205205
if addenda10.Name == "" {
206206
return fieldError("Name", ErrConstructor, addenda10.Name)
207207
}
208-
if addenda10.EntryDetailSequenceNumber == 0 {
208+
if addenda10.EntryDetailSequenceNumber < 0 {
209209
return fieldError("EntryDetailSequenceNumber", ErrConstructor, addenda10.EntryDetailSequenceNumberField())
210210
}
211211
return nil

addenda10_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ func BenchmarkAddenda10FieldInclusionName(b *testing.B) {
308308
// testAddenda10FieldInclusionEntryDetailSequenceNumber validates EntryDetailSequenceNumber fieldInclusion
309309
func testAddenda10FieldInclusionEntryDetailSequenceNumber(t testing.TB) {
310310
addenda10 := mockAddenda10()
311-
addenda10.EntryDetailSequenceNumber = 0
311+
addenda10.EntryDetailSequenceNumber = -1
312312
err := addenda10.Validate()
313313
if !base.Match(err, ErrConstructor) {
314314
t.Errorf("%T: %s", err, err)

addenda11.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ func (addenda11 *Addenda11) fieldInclusion() error {
179179
if addenda11.OriginatorStreetAddress == "" {
180180
return fieldError("OriginatorStreetAddress", ErrConstructor, addenda11.OriginatorStreetAddress)
181181
}
182-
if addenda11.EntryDetailSequenceNumber == 0 {
182+
if addenda11.EntryDetailSequenceNumber < 0 {
183183
return fieldError("EntryDetailSequenceNumber", ErrConstructor, addenda11.EntryDetailSequenceNumberField())
184184
}
185185
return nil

addenda11_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ func BenchmarkAddenda11FieldInclusionOriginatorStreetAddress(b *testing.B) {
252252
// testAddenda11FieldInclusionEntryDetailSequenceNumber validates EntryDetailSequenceNumber fieldInclusion
253253
func testAddenda11FieldInclusionEntryDetailSequenceNumber(t testing.TB) {
254254
addenda11 := mockAddenda11()
255-
addenda11.EntryDetailSequenceNumber = 0
255+
addenda11.EntryDetailSequenceNumber = -1
256256
err := addenda11.Validate()
257257
if !base.Match(err, ErrConstructor) {
258258
t.Errorf("%T: %s", err, err)

addenda12.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ func (addenda12 *Addenda12) fieldInclusion() error {
185185
if addenda12.OriginatorCountryPostalCode == "" {
186186
return fieldError("OriginatorCountryPostalCode", ErrConstructor, addenda12.OriginatorCountryPostalCode)
187187
}
188-
if addenda12.EntryDetailSequenceNumber == 0 {
188+
if addenda12.EntryDetailSequenceNumber < 0 {
189189
return fieldError("EntryDetailSequenceNumber", ErrConstructor, addenda12.EntryDetailSequenceNumberField())
190190
}
191191
return nil

addenda12_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ func BenchmarkAddenda12FieldInclusionOriginatorCountryPostalCode(b *testing.B) {
252252
// testAddenda12FieldInclusionEntryDetailSequenceNumber validates EntryDetailSequenceNumber fieldInclusion
253253
func testAddenda12FieldInclusionEntryDetailSequenceNumber(t testing.TB) {
254254
addenda12 := mockAddenda12()
255-
addenda12.EntryDetailSequenceNumber = 0
255+
addenda12.EntryDetailSequenceNumber = -1
256256
err := addenda12.Validate()
257257
if !base.Match(err, ErrConstructor) {
258258
t.Errorf("%T: %s", err, err)

addenda13.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ func (addenda13 *Addenda13) fieldInclusion() error {
221221
if addenda13.ODFIBranchCountryCode == "" {
222222
return fieldError("ODFIBranchCountryCode", ErrConstructor, addenda13.ODFIBranchCountryCode)
223223
}
224-
if addenda13.EntryDetailSequenceNumber == 0 {
224+
if addenda13.EntryDetailSequenceNumber < 0 {
225225
return fieldError("EntryDetailSequenceNumber", ErrConstructor, addenda13.EntryDetailSequenceNumberField())
226226
}
227227
return nil

addenda13_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ func BenchmarkAddenda13FieldInclusionODFIBranchCountryCode(b *testing.B) {
352352
// testAddenda13FieldInclusionEntryDetailSequenceNumber validates EntryDetailSequenceNumber fieldInclusion
353353
func testAddenda13FieldInclusionEntryDetailSequenceNumber(t testing.TB) {
354354
addenda13 := mockAddenda13()
355-
addenda13.EntryDetailSequenceNumber = 0
355+
addenda13.EntryDetailSequenceNumber = -1
356356
err := addenda13.Validate()
357357
if !base.Match(err, ErrConstructor) {
358358
t.Errorf("%T: %s", err, err)

addenda14.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ func (addenda14 *Addenda14) fieldInclusion() error {
216216
if addenda14.RDFIBranchCountryCode == "" {
217217
return fieldError("RDFIBranchCountryCode", ErrConstructor, addenda14.RDFIBranchCountryCode)
218218
}
219-
if addenda14.EntryDetailSequenceNumber == 0 {
219+
if addenda14.EntryDetailSequenceNumber < 0 {
220220
return fieldError("EntryDetailSequenceNumber", ErrConstructor, addenda14.EntryDetailSequenceNumberField())
221221
}
222222
return nil

addenda14_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ func BenchmarkAddenda14FieldInclusionRDFIBranchCountryCode(b *testing.B) {
337337
// testAddenda14FieldInclusionEntryDetailSequenceNumber validates EntryDetailSequenceNumber fieldInclusion
338338
func testAddenda14FieldInclusionEntryDetailSequenceNumber(t testing.TB) {
339339
addenda14 := mockAddenda14()
340-
addenda14.EntryDetailSequenceNumber = 0
340+
addenda14.EntryDetailSequenceNumber = -1
341341
err := addenda14.Validate()
342342
if !base.Match(err, ErrConstructor) {
343343
t.Errorf("%T: %s", err, err)

addenda15.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ func (addenda15 *Addenda15) fieldInclusion() error {
177177
if addenda15.ReceiverStreetAddress == "" {
178178
return fieldError("ReceiverStreetAddress", ErrConstructor, addenda15.ReceiverStreetAddress)
179179
}
180-
if addenda15.EntryDetailSequenceNumber == 0 {
180+
if addenda15.EntryDetailSequenceNumber < 0 {
181181
return fieldError("EntryDetailSequenceNumber", ErrConstructor, addenda15.EntryDetailSequenceNumberField())
182182
}
183183
return nil

addenda15_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ func BenchmarkAddenda15FieldInclusionReceiverStreetAddress(b *testing.B) {
214214
// testAddenda15FieldInclusionEntryDetailSequenceNumber validates EntryDetailSequenceNumber fieldInclusion
215215
func testAddenda15FieldInclusionEntryDetailSequenceNumber(t testing.TB) {
216216
addenda15 := mockAddenda15()
217-
addenda15.EntryDetailSequenceNumber = 0
217+
addenda15.EntryDetailSequenceNumber = -1
218218
err := addenda15.Validate()
219219
if !base.Match(err, ErrConstructor) {
220220
t.Errorf("%T: %s", err, err)

addenda16.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ func (addenda16 *Addenda16) fieldInclusion() error {
183183
if addenda16.ReceiverCountryPostalCode == "" {
184184
return fieldError("ReceiverCountryPostalCode", ErrConstructor, addenda16.ReceiverCountryPostalCode)
185185
}
186-
if addenda16.EntryDetailSequenceNumber == 0 {
186+
if addenda16.EntryDetailSequenceNumber < 0 {
187187
return fieldError("EntryDetailSequenceNumber", ErrConstructor, addenda16.EntryDetailSequenceNumberField())
188188
}
189189
return nil

addenda16_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ func BenchmarkAddenda16FieldInclusionReceiverCountryPostalCode(b *testing.B) {
237237
// testAddenda16FieldInclusionEntryDetailSequenceNumber validates EntryDetailSequenceNumber fieldInclusion
238238
func testAddenda16FieldInclusionEntryDetailSequenceNumber(t testing.TB) {
239239
addenda16 := mockAddenda16()
240-
addenda16.EntryDetailSequenceNumber = 0
240+
addenda16.EntryDetailSequenceNumber = -1
241241
err := addenda16.Validate()
242242
if !base.Match(err, ErrConstructor) {
243243
t.Errorf("%T: %s", err, err)

addenda17.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ func (addenda17 *Addenda17) fieldInclusion() error {
164164
if addenda17.SequenceNumber == 0 {
165165
return fieldError("SequenceNumber", ErrConstructor, addenda17.SequenceNumberField())
166166
}
167-
if addenda17.EntryDetailSequenceNumber == 0 {
167+
if addenda17.EntryDetailSequenceNumber < 0 {
168168
return fieldError("EntryDetailSequenceNumber", ErrConstructor, addenda17.EntryDetailSequenceNumberField())
169169
}
170170
return nil

addenda17_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ func TestAddenda17FieldInclusionTypeCode(t *testing.T) {
120120

121121
func TestAddenda17FieldInclusion(t *testing.T) {
122122
addenda17 := mockAddenda17()
123-
addenda17.EntryDetailSequenceNumber = 0
123+
addenda17.EntryDetailSequenceNumber = -1
124124
err := addenda17.Validate()
125125
if !base.Match(err, ErrConstructor) {
126126
t.Errorf("%T: %s", err, err)

addenda18.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ func (addenda18 *Addenda18) fieldInclusion() error {
219219
if addenda18.SequenceNumber == 0 {
220220
return fieldError("SequenceNumber", ErrConstructor, addenda18.SequenceNumberField())
221221
}
222-
if addenda18.EntryDetailSequenceNumber == 0 {
222+
if addenda18.EntryDetailSequenceNumber < 0 {
223223
return fieldError("EntryDetailSequenceNumber", ErrConstructor, addenda18.EntryDetailSequenceNumberField())
224224
}
225225
return nil

addenda18_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ func TestAddenda18FieldInclusionTypeCode(t *testing.T) {
187187

188188
func TestAddenda18FieldInclusion(t *testing.T) {
189189
addenda18 := mockAddenda18()
190-
addenda18.EntryDetailSequenceNumber = 0
190+
addenda18.EntryDetailSequenceNumber = -1
191191
err := addenda18.Validate()
192192
if !base.Match(err, ErrConstructor) {
193193
t.Errorf("%T: %s", err, err)

test/issues/issue1595_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package issues
2+
3+
import (
4+
"path/filepath"
5+
"testing"
6+
7+
"github.com/moov-io/ach"
8+
9+
"github.com/stretchr/testify/require"
10+
)
11+
12+
func TestIssue1595(t *testing.T) {
13+
file, err := ach.ReadFile(filepath.Join("testdata", "issue1595.ach"))
14+
require.NoError(t, err)
15+
require.NoError(t, file.Validate())
16+
}

test/issues/testdata/issue1595.ach

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
101 03130001202313801041908161055A094101Federal Reserve Bank My Bank Name 12345678
2+
5220Name on Account 231380104 WEBSubscribe 190816 1121042880000001
3+
62223138010412345678 0000010000#789654 John Doe S 1121042880000000
4+
705PAY-GATE payment\ 00010000000
5+
82200000020023138010000000000000000000010000231380104 121042880000001
6+
9000001000001000000020023138010000000000000000000010000
7+
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
8+
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
9+
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
10+
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999

0 commit comments

Comments
 (0)