When generating a return entry for a received prenote, moov-io/ach (v1.31.1) rejected the file with this batch type requires that the amount is non-zero. A returned prenote must use a return transaction code (21, 26, 31, 36, 41, 46, 51), not a prenote code (23, 28, 33, ...). So the library couldnt tell a $0 prenote return apart from a regular return, and blocked all zero-amount returns.