Skip to content

Latest commit

 

History

History
165 lines (114 loc) · 13.2 KB

README.md

File metadata and controls

165 lines (114 loc) · 13.2 KB

moov-io/ach

GoDoc Build Status Coverage Status Go Report Card Apache 2 licensed

Package github.com/moov-io/ach implements a file reader and writer written in Go along with a HTTP API for creating, parsing and validating Automated Clearing House (ACH) files. ACH is the primary method of electronic money movement throughout the United States.

If you're looking for a complete implementation of ACH origination (file creation), OFAC checks, micro-deposits, SFTP uploading, and other featues the moov-io/paygate project aims to be a full system for ACH transfers.

Docs: docs.moov.io | api docs

Project Status

Moov ACH is under active development and in production for multiple companies. Please star the project if you are interested in its progress. We've built an HTTP API for ACH file creation and validation. Currently we support generating and parsing all Standard Entry Class (SEC) codes. If you have layers above ACH to simplify tasks or found bugs we would appreciate an issue or pull request. Thanks!

Usage

The ACH project implements a Go library and HTTP server for creating and modifying ACH files. For a complete ACH origination service checkout moov-io/paygate.

Go library

github.com/moov-io/ach offers a Go based ACH file reader and writer. To get started checkout a specific example:

Supported Standard Entry Class (SEC) codes
SEC Code Description Example Read Write
ACK Acknowledgment Entry for CCD Credit ACK Read ACK Write
ADV Automated Accounting Advice Prenote Debit ADV Read ADV Write
ARC Accounts Receivable Entry Debit ARC Read ARC Write
ATX Acknowledgment Entry for CTX Credit ATX Read ATX Write
BOC Back Office Conversion Debit BOC Read BOC Write
CCD Corporate credit or debit Debit CCD Read CCD Write
CIE Customer-Initiated Entry Credit CIE Read CIE Write
COR Automated Notification of Change(NOC) NOC COR Read COR Write
CTX Corporate Trade Exchange Debit CTX Read CTX Write
DNE Death Notification Entry DNE DNE Read DNE Write
ENR Automatic Enrollment Entry ENR ENR Read ENR Write
IAT International ACH Transactions Credit IAT Read IAT Write
MTE Machine Transfer Entry Credit MTE Read MTE Write
POP Point of Purchase Debit POP Read POP Write
POS Point of Sale Debit POS Read POS Write
PPD Prearranged payment and deposits Debit Credit PPD Read PPD Write
RCK Represented Check Entries Debit RCK Read RCK Write
SHR Shared Network Entry Debit SHR Read SHR Write
TEL Telephone-Initiated Entry Debit TEL Read TEL Write
TRC Truncated Check Entry Debit TRC Read TRC Write
TRX Check Truncation Entries Exchange Debit TRX Read TRX Write
WEB Internet-initiated Entries Credit WEB Read WEB Write
XCK Destroyed Check Entry Debit XCK Read XCK Write
Segment Files
SEC Code Name Example Read Write
PPD Prearranged payment and deposits Debit Credit PPD Read PPD Write
IAT International ACH Transactions Debit Credit IAT Read IAT Write

HTTP API

github.com/moov-io/ach/server offers a HTTP and JSON API for creating and editing files. If you're using Go the ach.File type can be used, otherwise just send properly formatted JSON. We have an example JSON file, but each SEC type will generate different JSON.

Examples: Go | Ruby

Getting Started

Guides

Docker

We publish a public docker image moov/ach on Docker Hub with each tagged release of ACH. No configuration is required to serve on :8080 and metrics at :9090/metrics in Prometheus format.

$ docker run -p 8080:8080 -p 9090:9090 moov/ach:latest
ts=2019-06-20T23:58:44.4931106Z caller=main.go:75 startup="Starting ach server version v1.0.2"
ts=2019-06-20T23:58:44.5010238Z caller=main.go:135 transport=HTTP addr=:8080
ts=2019-06-20T23:58:44.5018409Z caller=main.go:125 admin="listening on :9090"

$ curl localhost:8080/files
{"files":[],"error":null}

From Source

This project uses Go Modules and thus requires Go 1.11+. You can download the source code and we offer tagged and released versions as well. We highly recommend you use a tagged release for production.

$ git@github.com:moov-io/ach.git

# Pull down into the Go Module cache
$ go get -u github.com/moov-io/ach

$ go doc github.com/moov-io/ach BatchHeader

Configuration

Environmental Variable Description Default
ACH_FILE_TTL Time to live (TTL) for *ach.File objects stored in the in-memory repository. 0 = No TTL / Never delete files (Example: 240m)
LOG_FORMAT Format for logging lines to be written as. Options: json, plain - Default: plain
HTTP_BIND_ADDRESS Address for paygate to bind its HTTP server on. This overrides the command-line flag -http.addr. Default: :8080
HTTP_ADMIN_BIND_ADDRESS Address for paygate to bind its admin HTTP server on. This overrides the command-line flag -admin.addr. Default: :9090
HTTPS_CERT_FILE Filepath containing a certificate (or intermediate chain) to be served by the HTTP server. Requires all traffic be over secure HTTP. Empty
HTTPS_KEY_FILE Filepath of a private key matching the leaf certificate from HTTPS_CERT_FILE. Empty

Note: By design ACH does not persist (save) any data about the files, batches or entry details created. The only storage occurs in memory of the process and upon restart ACH will have no files, batches, or data saved. Also, no in memory encryption of the data is performed.

Getting Help

If you have ACH specific questions NACHA (National Automated Clearing House Association) has their complete specification for all file formats and message types.

channel info
Project Documentation Our project documentation available online.
Google Group moov-users The Moov users Google group is for contributors other people contributing to the Moov project. You can join them without a google account by sending an email to moov-users+subscribe@googlegroups.com. After receiving the join-request message, you can simply reply to that to confirm the subscription.
Twitter @moov_io You can follow Moov.IO's Twitter feed to get updates on our project(s). You can also tweet us questions or just share blogs or stories.
GitHub Issue If you are able to reproduce a problem please open a GitHub Issue under the specific project that caused the error.
moov-io slack Join our slack channel to have an interactive discussion about the development of the project.

Supported and Tested Platforms

  • 64-bit Linux (Ubuntu, Debian), macOS, and Windows
  • Rasberry Pi

Note: 32-bit platforms have known issues and are not supported.

Contributing

Yes please! Please review our Contributing guide and Code of Conduct to get started! Checkout our issues for first time contributors for something to help out with.

Note: This project uses Go Modules, which requires Go 1.11 or higher, but we ship the vendor directory in our repository.

Releasing

To make a release of ach simply open a pull request with CHANGELOG.md and version.go updated with the next version number and details. You'll also need to push the tag (i.e. git push origin v1.0.0) to origin in order for CI to make the release.

Fuzzing

We currently run fuzzing over ACH in the form of a moov/achfuzz Docker image. You can read more or run the image and report crasher examples to security@moov.io. Thanks!

License

Apache License 2.0 See LICENSE for details.